BUTTERFLY的硬件讲解1.整体的框架讲解图1,Butterfly的整体原理框图图2,整体的原理图图3,飞控核心的框图通过上图,我们可以看到,启天科技的BUTTERFLY四轴的硬件部分主要包括5个部分:由Cotex-M3构成的核心控制器,IMU单元,电机驱动,蓝牙2.4G无线通讯部分和电源模块。
硬件的工作原理为:由核心处理器检测IMU的状态,从而得到BUTTERFLY四轴的加速度和角速度,从而结算出四轴的姿态角度(包括俯仰角,横滚角和偏航角)。
然后利用无线通讯模块得到遥控传输的信号,也就是我们控制的变量(即油门,偏航,左右,前后),最后通过PID控制算法得到我们需要加到四个电机的PWM的值(从0%-100%)。
我们控制电机驱动部分来驱动电机,从而让BUTTERFLY四轴在空中完成一系列的任务。
这系列的功能的实现都是需要电源部分的供电来提供能量的,它就是我们飞控系统的“心脏”,而核心控制器就是“大脑”,从而电机也就是我们的“四肢”,IMU也就是我们的“感官”图4,与实物对应的原理框图2. 核心控制器的设计和原理核心控制器的功能包括传感器数据的采集、对数据的融合、滤波处理、姿态解算、PID 算法的实现、PWM输出等。
由于四旋翼要求姿态解算和更新必须足够快速,以跟上空中四旋翼姿态的迅速变化,而且程序中也有大量的计算,所以对单片机的处理性能要求较高。
传统的8位单片机已经不能满足控制需求。
经过多方选择和对比,本文最终选择了32位微控制器STM32F103c8T6单片机,该单片机属于STM32家族,基于ARM内核Coterx-M3,使用8M晶振,经过内部倍频电路,主频最高可以达到72MHz,拥有64KB的Flash存储容量,4个通用定时器和2个高级定时器,可以进行PWM输入捕获和PWM输出,2个I2C接口和3个SPI接口,用于接收传感器数据。
工作电压为3.3V,能耗很低。
如图:图5 STM32主控芯片具体的描述如下图所示:图6,核心控制的功能介绍利用Altium Designer软件画出的原理图如图:图7 STM32原理图图中,SCL和SDA是连接传感器IIC通信接口的引脚,PWM1-4连接的是电调的信号输入,就是电机控制信号的输出引脚,从图中可以看到,原理图中的每个引脚并不需要和其他外设的引脚连接在一起,而是可以用相同的符号表示连接。
这样就使得原理图简单清晰,避免了繁复的走线带来的混乱。
左侧的最上面是晶振部分,它是系统工作的节拍,它的精度和可靠性决定了系统的节拍的精准和稳定。
连接晶振的两个电容是提高晶振震荡的波形的稳定度而设置的。
我们采用了经验值22pF(这在stm32f103的开发官方参考手册中可以找到依据)。
左面的第二部分是BOOT1和BOOT0部分,它决定了系统上电初始化后的工作模式和状态,根据我们的需要,我们采用了BOOT0和BOOT1都接地的措施。
左面最下面是系统复位电路,它可以给系统提供一个延迟,在电源稳定之后再让系统彻底启动工作。
右下的6个电容(C7-C12)是核心控制器的滤波电容。
为了使系统可靠稳定的工作,我们在核心处理器的每一个VDD引脚的最近的地方放置了一个陶瓷的0.1uF电容,来去除高频的毛刺。
由于stm32f103c8t6的VDD3引脚与核心控制器的电源的主要部分相连(这与芯片的内部结构有关,我们是根据stm32f103c8t6的官方说明而这么摆放的)。
VDDA与系统的ADD电源有关,由于我们不需要12位精度的AD,8位就足够,因此我们将VDDA与VDD直接相连,并且在VDDA的引脚旁边放置了1uF的钽电容来提高足够的电源稳定性。
2. 电源模块的设计和原理电源是整个系统的“心脏”,不好的电源设计有可能让整个系统工作不稳定,甚至难以工作。
我使用过某品牌的H型四轴,这款四轴存在着上电后推油门丢失遥控信号的问题。
也就是说:当四轴的桨没有转动时,四轴的遥控信号的传输是正常的,但是当让桨转起来时,遥控信号出现了丢失。
我们发现最后的原因是:它在2.4G无线模块的下方的PCB上布置了一条驱动电机的电源线,就是这根电源线产生的干扰造成了遥控信号的丢失(或者时断时续),我将这根线断开之后,这个问题也就迎刃而解了。
我们的电源部分采用了三块芯片,这样的设计就是为了给系统提供一个稳定而又强壮的“心脏”。
而其他品牌的四轴大多采用一块或者两块芯片。
比如某品牌的H型四轴就是只用了一块6206来给整个系统供电。
我们的电源部分的设计是改进了国外和国内的两家成熟设计的方案而设计的。
实验表明:这种设计很可能是最合理的,最稳定的。
整体的原理图如下图所示:图8 电源的原理图可以看出我们的电源部分采用了LM27313,MIC5205,XC6206这三块电源构造而成。
可以看出由L1,C4,C5构成的∏(pai)型滤波器(还有四个10uF电容放置在了电机附近)可以滤除由于电机的驱动而带来的高频大幅度毛刺。
这个效果是很明显的。
最后我们采用了LM27313来构成BOST开关升压电路。
这种设计不仅提高了电源转换效率,而且可以在电池供电低于3V(高于2.7V)时为系统提供稳定的5V电源。
如果直接采用6206降压得到3.3V 的话,当电池电压低于3.5V时就会停止工作,但是此时很可能是电机驱动导致的电压的波动导致在某一时刻低于了3.5V,这样就会出现电池的储能利用不足的问题。
因此我们才用LM27313升压得到5V,然后再降压得到3.3V的设计有着很大的优势。
在降压得到3.3V部分,我们采用了MIC5205和XC6206这两快LDO得到。
有的读者就会问了我们只需5V转3.3V,只需要一块LDO就足够了,为什么要采用两块呢?这样不浪费吗?其实我们不是浪费,是为了系统供电的更加稳定,或者说是为了系统的最优化运行。
首先我举一个我在调试中遇到的一个实际的问题:我在调试MS5611时,我采用的是开关电源的供电(是由LM2596构建的)。
结果从读到的数值转化得到的高度竟然跳变150cm左右。
这让我很是头疼,这和芯片上说的10cm大相径庭啊(实际大家反馈的最好只能做到30cm 左右)。
我最后考虑到可能是电源的问题,我换了一块LM1117(它的PSRR(电源抑制比)一般,但输出纹波比LM2596小了近乎两个数量级)。
重新换了芯片之后,我发现,读取到的高度的跳变终于稳定到了40cm左右。
这让我明白一个道理,IMU的供电必须精确,必须优良。
读完这个案例,大家应该明白,为啥我要采用价格比LM1117贵20倍还要多的MIC5205了吧。
对,我们这样给IMU单元单独的供电就是为了得到优质精确的3.3V电源。
下面我们看一下MIC5205的特点:图9,MIC5205的特点从上图可以看到MIC5205有着超低的噪声,高输出精确度,超低的温漂等等,这就是IMU所需要的啊。
下面,我们再看一下MIC5205的PSRR图:图10 MIC5205的噪声特性我们可以看出它的电源抑制比,在10KHz以内都保持在-85。
这样的抗噪能力不知道要比LM1117强多少。
下面再附上一张MIC5205的噪声特性:图11 MIC5205的噪声特性3. IMU的设计和原理在10轴传感器部分,我们采用的是MPU6050,MS5611,HMC5833这三块传感器。
MPU6050是6轴传感器包括三轴的加速度,三轴的陀螺仪。
HMC5883是磁阻传感器(也就是磁罗盘),它可以检测到3轴的磁场的大小,从而推出磁角。
MS5611是气压计,它能够测得四轴的所处位置的大气压,从而得到四轴的角度。
整体的原理图如下图所示:图12 十轴的整体原理图其中,三轴陀螺仪测量Roll、Pitch、Yaw三个轴的姿态角速度,经过积分,可以得到姿态角度,同时三个姿态角速度也用于串级PID控制器中的内环速度反馈;三轴加速度计输出重力加速度和四旋翼本身加速度沿着Roll、Pitch、Yaw三个轴的分量,经过计算可以得到Roll、Pitch、Yaw三个姿态角;三轴磁力计测量地磁场在Roll、Pitch、Yaw三个轴的分量,经过计算也可以得到三个姿态角。
因为MEMS传感器的精度比较低,所以程序中要对三个传感器的数据进行融合,才能得到准确的姿态角。
气压计用于测量四旋翼的高度。
三轴陀螺仪可以选择三个单轴陀螺组合而成,也可以选择集成的三轴陀螺仪。
市场上有多种陀螺仪可以供选择,比如L3G4200D,MPU6050等。
L3G4200D是三轴数字陀螺仪,其内部集成了三轴陀螺和AD转换器,可以直接输出数字信号,采用I2C或者SPI通信方式,可以兼容于绝大多数的单片机。
市场上存在的三轴加速度计有ADXL335,MMA7600等,其中ADXL335采用模拟输出,需要另外使用AD转换芯片或者使用单片机自己的AD转换功能。
MMA7600采用数字输出,通信方式为I2C通信。
除了以上分立的陀螺仪和加速度计,市场上还有集成了三轴陀螺仪和加速度计的传感器芯片,比如MPU-6050。
相比于以上分立的传感器,MPU-6050具有以下优势:1)集成度高,尺寸仅为4*4*0.9mm,占用PCB面积小。
2)集成工艺可靠,陀螺仪和加速度计共轴性好。
3)采用I2C/SPI通信方式,方便数据接收和处理。
4)精度和价格都满足要求,经济性好。
5)使用广泛。
考虑到MPU-6050具有的优势,结合BUTTERFLY四轴的需求,本文最终选择了MPU-6050作为三轴陀螺仪和加速度计。
MPU-6050是INVEN SENCE公司生产的全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速度计时两者之间的轴间差的问题,减少了大量的包装空间。
MPU-6050的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追踪快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。
产品数据传输可通过最高至400kHz的I2C通信方式向单片机传输测量数据。
MPU-6050可在5V 和3.3V电压下工作,内置温度传感器,可以进行温度补偿。
另外,INVEN SENCE官方给出了其姿态解算的算法,即DMP算法,该算法具有很好的参考价值。
MPU-6050如图3-11:图13 MPU-6050磁力计选择了Honeywell公司生产的3轴磁力计HMC5883.该磁力计采用LCC封装,芯片尺寸仅为3.0*3.0*0.9mm,精度可以达到1-2度,内置AD转换器,通过I2C通信方式输出,无论是尺寸大小,还是精度都满足本文的需求,而且其和MPU-6050搭配使用十分广泛,因此选择了此款磁力计,如图3-12:图14 HMC5883L气压计也同样有多种选择,市场上常见的是价格便宜,但是精度稍低的BMP系列,主要有BMP085,BMP085的高度检测精度是25cm,如果考虑到各方面的干扰和噪声误差,其精度还是比较低的。