基于apm飞控技术的定点投送飞行器毕业论文(编辑修改稿)内容摘要:

信号原理简介 本 设计 采用的遥控器是天地飞 6通道遥控器,由于本课题研究四旋翼飞行器,只需要其中 4个通道即可完成姿态控制。 该遥控器接收机的输出为 PPM输出,如图 42所示为 PPM(脉冲位置调制 )的原理图。 每 个通道的高电平持续时间即对应该通道摇杆的位置,从而起到控制输入的作用。 其 PPM周期为 20ms,高电平电压为 +5V,高电平持续时间为 1ms 至 2ms。 PPM 信号解码流程图如 图42 所示。 这里使用 AVR 单片机具有的引脚电平变化中断来实现 PPM 高电平时间的读取不仅节省 CPU 时间而且还精确。 PPM 解码程序设计与关键程序段说明 传感器接收机能够提供 6路 PPM信号。 而本设计只需要其中 4路,即四个通道。 本设计采用“引脚电平变化中断 ”来实现 PPM解码。 观察 PPM原理图可发现引脚电平只有 2种变化方式,分别是从 高到低和从低到高。 引脚电平从高到低对应高电平结束,从低到高意味着高电平开始。 所以每次进入中断后读取引脚状态,对前后两次进入中断时的引脚状态进行异或运算就能确定是哪个引脚触发了 PCINT中断。 利用 Arduino IDE自带的 micros()函数记录两次进入 PCINT中断的时间。 如此便可以获得 PPM某通道高电平时间。 PPM 信号解码流程图如图 42所示。 这里使用 AVR 单片机带有的引脚电平变化中断来实现 PPM高电平时间的读取不仅节省 CPU 时间而且还精确。 开 始进 入 P C I N T中 断记 录 此 刻 时间 T 1 确 定 是引 脚 x 上 电平 发 生 变 化T 2 = T 1p p m l n V a l u e [ x ]= T 1 T 2结 束由 高 变 低否是 图 42 PPM 解码流程图 PPM通道 1解码代码如下: ISR(PCINT2_vect){ static uint8_t pindlast。 uint8_t chan,pindnow。 uint16_t time。 static uint16_t last[4],now[4]。 time = micros()。 //获得此刻时间 pindnow = PIND。 chan = pindlast^pindnow。 //确定 PCINT中断发生在哪个引脚 if(chanamp。 (12)){ //通道 1 now[0] = time。 if(pindnowamp。 (12))last[0] = now[0]。 else{ppmInValue[0] = now[0] last[0]。 } //将此刻时间点与上次 PCINT时间相减 }//从而获得高电平持续时间 执行模块 电机驱动原理 本设计中,利用电子调速器驱动电机。 电子调速器的油门是线性的,意味着给电子调速器输入的 PWM波形的高电平时间正比于电机的转动力矩 M。 飞行器在空中平衡时有 21wkfM 风  ( 41) 其中 为螺旋桨角速度。 而查阅空气动力学知识可知螺旋桨升力 升与 有如下关系 22wkF升  ( 42) 由此可见  升FM ( 43) 又有 PWM高电平时间正比与电机转动力矩 M,如此一来,我们则可以通过控制 PWM波形的高电平时间来线性的控制机体获得的升力。 由此,飞行控制系统输出的 PWM信号输出与飞行器获得升力呈线性,给使用 PID算法在一定条件下控制飞行器带来了可能 [10]。 此外,本文使用的中特维电调其识别高电平阈值在 2V 至 5V 之间,高电平持续时间在1ms至 2ms之间 ,1ms和 2ms长的高电平信号分别对应无刷电机的停止转动和最高转速。 PWM周期可在 2ms 至 20ms 之前变化 ,对应 500Hz 至 50Hz的无刷电机转速更新频率。 飞行器要求具有很高的实时响应速度 ,因此要求无刷电器驱动器具有很高的转速更新频率 ,考虑到硬件平台所用晶振 16MHz 和 Timer/Counter0 和 Timer/Counter1 分频器的可设置值, PWM周期取约,即具有约 244Hz 的转速更新频率 [11]。 电机驱动模块程序框图 开 始获 得 此 时 油 门对 应 的 电 机 转速 p w m _ b a s e获 得 此 时 油门 增 量p w m _ e r r [ 0 ]获 得 此 时 油门 增 量p w m _ e r r [ 1 ]获 得 此 时 油门 增 量p w m _ e r r [ 2 ]获 得 此 时 油门 增 量p w m _ e r r [ 3 ]获 得 此 时 油门 增 量p w m _ b a s e +p w m _ e r r [ 0 ]获 得 此 时 油门 增 量p w m _ b a s e +p w m _ e r r [ 1 ]获 得 此 时 油门 增 量p w m _ b a s e +p w m _ e r r [ 2 ]获 得 此 时 油门 增 量p w m _ b a s e +p w m _ e r r [ 3 ]结 束 图 43 电机驱动程序框图 电机驱动输出模块的功能就是利用 AVR 的 Timer/Counter1 和 Timer/Counter2 输出定周期可调占空比的 PWM波形。 依据电子调速器对 PWM 波形的周期要求,需要输出周期在 500HZ以内的 PWM 波形。 由于单片机采用 16MHZ 晶振,所以在预分频的设置上只能 选择 256 分频才能满足电子调速器对周期的要求, 256 分频的结果是获得的 PWM 波频率为 244HZ。 而在调节 PWM 高电平时间的时候,只需分别向 OCR1A、 OCR1B、 OCR2A、 OCR1B 内写入相应数据即可从对应的 PWM 输出端口获得不同高电平时间的 244HZPWM 波。 输出高电平时间 (单位: s)的计算公式如下所示(以 OCR1A为例)。 //**************** //PWM初始化模块 //**************** voidpwm_init(void){ //***************8bit T/C2 初始化 *******************/ TCCR2A = (1COM2A1) | (1COM2B1) | (1WGM21) | (1WGM20)。 //设置为快速 PWM TCCR2B = (1CS22) | (1CS21)。 //256 prescaleing //***************16bit T/C1初始化 *******************/ TCCR1A = (1COM1A1) | (1COM1B1) | (1WGM10)。 //设置为快速 PWM TCCR1B = (1WGM12) | (1CS11)。 //256 prescaleing } //**************** //电机 1的 PWM输出 //**************** voidpwm_out(uint16_t pwm_base){ static uint16_t chan3。 if(pwm_base!=chan3) {OCR1A = (pwm_base+pwm_erro[0] 1024)*+63。 } //重设 OCR1A改变 PWM占空比 chan3 = pwm_base。 } 传感器模块 与传感器的 IIC 通信时序 此模块的作用是获取 MPU6050 中加速度传感器和陀螺仪的实时数据,核心就是使用AVR 单片机自带的硬件 IIC 模块和外部模块通信。 查询 Atmega328p 单片机的 datasheet 和MPU6050 的 datasheet,可以轻松的得到进行 IIC 操作时应该遵循的时序。 读取 MPU6050 数据的时序图如 下 图所示: 图 44 读取 MPU6050 图 45 写 MPU6050 由图知 ,在读写 MPU6050 的时候单片机需要在 Master Transmitter Mode 和 Master Receiver Mode 之间切换,在此不再赘述。 传感器数据采集模块关键程序段说明 该模块的主要作用是通过 IIC总线协议读取 MPU6050传感器模块获得的加速度和陀螺仪原始数据,故只要按着上述读写时序一步步完成即可。 但传感器数据为 16位,而 IIC总线每个数据帧只能读 8位数据。 MPU6050通过 IIC先发送寄存器高 8位数据,再发送低 8位,如此一来,就需要利用位移语句,将首先接收到的 8位数据缓存 ,再左移 8位,再和后发送的低 8位数据做位与运算,使得他们融合为一个 16位数据。 要注意这里的 16位数据是有符号的。 两 8位融合成 16位数据程序段如下: if(reg==0x3B){ RAW_ACC_X = ((rawADC[0]8)|(rawADC[1]))。 RAW_ACC_Y = ((rawADC[2]8)|(rawADC[3]))。 RAW_ACC_Z = ((rawADC[4]8)|(rawADC[5]))。 }else{ RAW_GYRO_X = ((rawADC[0]8)|(rawADC[1]))。 RAW_GYRO_Y = ((rawADC[2]8)|(rawADC[3]))。 RAW_GYRO_Z = ((rawADC[4]8)|(rawADC[5]))。 } 姿态解算模块 姿态解算原理 姿态解算模块的主要功能有两个,一个是对传感器获得的加速度计和陀螺仪数据进行处理获得各自所计算出来的飞行器此时的欧拉角,第二个是通过传感器数据融合计算,得到飞行器此刻的姿态角准确值。 利用加速度计数据计算欧拉角使用的是三角函数方法。 其原理如下图 46 所示 图 46 加速度传感器倾斜检测示意图 利用三轴加速度计进行倾斜检测的一种方法是基于一个参照点分别确定加速度计各个轴的角度。 参照点取器件的典型取向 ,其中 X轴和 Y 轴位于水平面内 (0g场 ),Z 轴与水平线垂直 (1g场 )。 如图 所示 ,其中 为水平线与加速度计 X 轴的夹角 , 为水平线与加速度计 Y轴的夹角看 , 为重力矢量与 Z轴的夹角。 在 X 轴和 Y轴的起点 0g处以及 Z轴上 1g处 ,计算得到的所有角度均为 0 度。 由基本三角函数可知 ,可利用下列公式计算倾斜角度 [12]。 但是飞行器时刻是运动的 ,加速度计测得的数据中就不 可避免的含有运动加速度 ,因此只利用加速度计求出旳飞行器姿态具有较大的误差 ,所以就需要一定的算法来估计加速度计的误差 ,实时修正飞行器的姿态 [13]。 陀螺仪测量的是集体绕着某轴转动的角速度,由于原理较为复杂,这里不加叙述。 滤波的方法有很多,商业四轴飞行器为了保证稳定性一般都使用复杂的卡尔曼滤波。 但是卡尔曼滤波运算复杂,加长程序循环时间,会造成诸如陀螺仪积分漂移增加等情况,故本文采用互补滤波方式进行滤波。 互补滤波计算简单,设计方便,可以很好的实现数据的融合。 互补滤波器是一种频域特性滤波器 ,经常用来融合 由不同传感器测量得到的具有相似物理意义的数据 ,摒弃每个数据的缺点从而估算出准确的参数。 严格意义上讲 ,互补滤波器包含两种或两种以上的频率特性互补的传递函数。 例如常见的两输入系统 ,两个输入量的物理意义相同 ,但是某个输入量也含高频噪声 ,需要加低通滤波器以滤除噪声。 另外一个输入量包含低频噪声干扰 ,因此需要高频滤波器除去低频噪声。 低通滤波器与高通滤波器频率特性互补 ,所以最终的输出是滤除噪声的准确的数据 [14]。 陀螺仪响应速度快 ,但是会受到零点随温度漂移产生低频干扰;加速度传感器用来测量重力加速度矢量 ,响应速度也非 常高 ,但是会因为微小扰动产生高频噪音干扰;数字罗盘测量当地地磁场矢量 ,数据测量比较准确 ,但响应速度较慢,也会受电机电磁场的高频干扰而陀螺仪的数字积分又不可避免的带来积分漂移问题,由此可知,三种传感器测量相同的量在频域内特性互补 ,滤波算法实现两个信号的融合是很合适的 [15]。 互补滤波主要是对加速度传感器数据进行低通滤波以削去高频分量,一般而言高平分量即为加速度传感器的扰动量;对陀螺仪进行高通滤波,滤去低频分量,低频分量意味着信号中频率较低周期较长的部分,这样一来便可滤去加速度陀螺仪积分漂移产生的 误差,在完成滤波之后,就能获得四轴飞行器的较为准确的姿态角。 姿态解算模块关键程序段说明 姿态解算模块的作用就是实时获得飞行器准确的飞行姿态,由此这个模块里最关键的程序段就是互补滤波算法了。 互补滤波器已在前文中完成了设计,但可以从前文中发现,微分时间 dt的大小严重影响该滤波器的性能,所以要严格控制 dt大小不变。 dt是每两次采样的时间间隔,通过如下程序段控制 dt为 STD_LOOP_TIME不变。 Time1 = time2。 // 上一次采样时刻 (ms) time2 = millis()。 // 当前时刻 (ms。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。