原文链接
LARIX 代码部分
四旋翼的整个代码是在DAVE写的,DAVE是一个基于Eclipse的IDE,它包含一个标准C编码环境和一些预定义的文件。
LARIX板是四旋翼的主要部分。它收集输入数据,如从RC收到指定的姿态数据以及从IMU收到的实际姿态数据,然后通过数字控制器处理这些数据,再输出BLDC电机需要的PWM信 给PINUS板子。
这个函数代表yaw的控制器。
CreatePulseWidth(…)
这个函数计算4个电机的PWM信 ,基于3个控制器的输出,参考控制器输出。
RC-接收器
RC接收器放置在四旋翼机臂下,把RC接收到的数据通过串口传给飞控板。串口配置如下:
* 波特率=115200
* 8bits数据位
* 1bit停止位
* 1bit奇偶校验位
接收到的数据帧包含16个字节,格式如下:
关于这部分代码,在RCReceive.c 和 RCReceive.h中。
mergeBytes(…)
这个函数把2字节合成一个int,用来把数据帧存到一个变量里面。
map(…)
这个函数把x从[in_min … in_max]范围映射到[out_min … out_max]。
RC_RECEIVE_ISR()
这个函数在FIFO缓冲区溢出时调用。首先检查RC数据帧里面的常数字节,然后从里面抽取需要的数据字节,调用上面两个函数,合并、映射,写入到全局变量中。
BT_RECEIVE_ISR()
这个函数和上面那个很像,但是数据是从蓝牙模块而不是RC。根据flightmode的值,使用Android应用来控制的这个中断函数或者使用RC来控制的上面那个中断函数,会被调用。
WatchRC(…)
这个函数是看门狗定时器函数,检查RC数据是否过期了。所以RCCount的值会被周期性地检查。如果自上一次调用之后,这个值一直没有变化,RCTimeOut就置1了。
WatchRC_Init()
这个函数通过创建一个定时器来激活看门狗定时器,每100ms会调用一次WatchRC()。
GetRCData(…)
这个函数在主函数中调用,用来访问RC的值。信 通过SCALE_POWER, SCALE_ROLL, SCALE_PITCH, SCALE_YAW四个常数进行缩放,用来定义遥控杆和指定角度之间的相对关系。
Sensor MPU-9150
MPU-9150通过I2C协议传输数据。
它自带一个数字动作处理器,用来处理原始测量数据,并把姿态角,以四元数的形式,存于缓冲区。
为了访问这个单元,需要在初始化芯片的时候写入某些寄存器。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!