作者:CamelGo
Crazepony-II(第4版/4.1版)硬件组成
- 主控:STM32f103T8U6
- 姿态传感器:MPU6050(3加速度+3角速度)
- 电子罗盘:HMC5883L
- 无线通信协议:NRF24L01+ 与 蓝牙2.1/蓝牙4.0透传共存
- 有线通信协议:CP2102(USB转串口)
- 电机驱动:SI2302场效应管
- 外部接口:标准mircoUSB接口
- 电机:Coreless高速电机 3W转/分钟
- 桨叶:46mm黑色正反桨
- 电池:350mAh 25c航模动力电池
单片机在任何一个系统里面,无论他扮演什么角色。它要正常工作,都必须要有一个最小系统。下面,从最小系统开始简介Crazepony:
STM32的最小系统一般包括:复位电路,外部时钟电路,启动模式选择电路,电源退偶电路等
复位
查阅意法半导的官方手册可以知道,STM32系列单片机都是低电平复位。于是采用如图的主流复位电路作为Crazepony主控的复位电路
外部时钟
官方手册有写,外部时钟我们采用的是8M无源晶振。单片机内部做倍频,系统时钟最高可达到72M
启动模式
STM32的启动模式分为三种,可以下面的表格给出:
由于为了方便用户调试和二次开发,所以Crazepony采用了SWD在线程序调试接口和ISP程序下载两种方式。SWD调试接口可以使用编译调试器在线对程序进行仿真、调试、下载,这对开发人员来说是很方便的,缺点就是需要PC端有一个这样的软件来支撑。串口ISP下载方式,只需要STM32的UART1的两个数据 线,就能将编译生成的*.HEX文件烧写进单片机,不足之处是不能仿真程序。
关于启动模式的应用,在USB-Serial处会有介绍。
电源退偶
不仅是主控最小系统需要对电源退偶,所有的数字电路和模拟电路共存的系统,都需要对电源退偶。电源退偶,说直接一点就是将电源上的噪声电压引入到地平面,让电源电压保持在一个稳定的值,这样系统才可能稳定工作。怎么做呢?用一个大电容并联一个小电容。
我们都知道,电容对频率越高的信号,呈现低阻特性,对直流呈现高阻特性。那么电源上的噪声对地平面而言,就是一个交流信号,交流信号就能通过电容到达地平面,而电源是一个直流,电容对他呈现出无限大的阻力,无法通过。这样,我们用示波器就可以看到,加了退偶电容的电源会比没加退偶电容的电源,波形要稳定得多。
市面上所有的航模动力电池,都是3.7V的标称值,比此电压高的电池,都是几个3.7V的电池串联起来的
Crazepony采用了一节动力电池,电池电压是3.7V,而系统所有芯片都要求是3.3v供电。3.7V到3.3V只有0.4v的压差,我们考虑过采用低压差的LDO稳压芯片输出,但是要知道,四个空心杯电机转起来以后,瞬间电流能达到3A,此时电池电压会被拉低到一个LDO无法正常工作的值,于是我们后来放弃了直接将电池接到LDO稳压芯片上,而是在中间采用一个过渡的电路:一个DC-DC的升压电路,首先将电池电源升到5V左右,再接入LDO芯片(MIC5205-3.3)如图
锂电池充电这一块,采用的是 LTC4054,外部电路简单,一个电阻R7作为充电限流电阻,充电电流最大可达600mA,充电电流计算公式:IBAT =(VPROG /RPROG)*1000
。
R6作为充电指示灯的限流电阻,选择几百欧姆就行了。当充电进行中,引脚STR常低,充电结束时,STR拉高。对应的状态就是:充电时,CHG灯常亮,充电完成,CHG 灯灭。
Crazepony采用的是最常用的MPU6050陀螺仪加速度计一体芯片,成本不超过20元,对小四轴来说,它的精度和性能绰绰有余了(当我听说教研室师兄用的一颗传感器裸片卖1W+时,我整个人都不好了..),MPU6050在这个价位里面几乎是占有绝对的性价比优势。首先,它将陀螺仪和加速计整合在一个片上,通过IIC总线给出六个维度的ADC值;其次,芯片本身提供一个“从”IIC接口,供用户接第三方的IIC器件,一般选择是接一个电子罗盘,如HMC5883L,构成一个9轴的输出的姿态模组,现在MPU9150已经丧心病狂的把电子罗盘功能也整合在片上了,但是要买60+元;最后,这颗芯片内部集成了一个DMP(Digital Motion Processor)处理器,这是最让我爱不释手夜不能寐的一个功能,直接硬件解算四元数,从某种程度上说解放了20%的主控资源。
采用HMC5883L作为机身的电子罗盘。电子罗盘接到MPU6050的从IIC总线(auxda,auxdl)上,在初始化MPU6050时,设置成主IIC总线与从IIC总线直通,STM32可以直接通过主IIC总线访问从IIC总线,从而读取HMC5883L的数据。
数据更新模式采用硬件中断模式,即MPU6050和HMC5883L都有一个硬件中断引脚MP_INT和HM_INT,这样,能保证数据到来时间的准确,让CPU资源最大化利用。
由于电子罗盘是一个对电磁环境很敏感的元件,所以在布局时,尽量将HMC5883放在一个空旷的地带,周围不要有金属,附近不要有不要有大电流通过。
在这个问题的处理上,dji的Phantom系列飞行器已经有了很好参考,Phantom系列的电子罗盘是放在飞机的起落架上的,可以看出他们的工程师在设计 飞行器的时候,考虑问题是很周全的。
无刷电机的操作相对来说是比较麻烦的,而有刷电机就是我们小时候玩的四驱车上的那种电机,接上电就能猛转,反着接它就反着猛转,就是这么简单。
Crazepony使用的是有刷空心杯电机,所以电机的控制属于有刷直流电机控制。相对于无刷电调来说要简单很多,所以电调我们就默认指无刷电机的电调,而这里只用电机驱动来代替。Crazepony采用的是有刷空心杯高速电机,转速在3W转/分钟左右。要驱动有刷电机,很简单,只需要将信号的驱动能力增大,就能驱动有刷电机了。
那么选择什么元件来提供这样的特性呢?Crazepony的电机驱动IC选型经历了三级管,中功率管的失败,最后选用的是场效应管(即MOSFET)SI2302。
由于笔者完全是由于一种强烈的爱好选择了飞行器,最开始连有刷电机和无刷电机的物理结构区别都不知道,电调又是啥?傻傻分不清楚……
从一个几乎零基础的状态去选择电机驱动芯片,弯路是必须要走的,学费是必须要交的。曾以为书上学到的东西马上就能用,马上能转化为产品,后来发现真的是自己想多了。
最开始用的三极管作为电机驱动,采用很经典的共射电路“三极管工作在开关状态应该就行了吧?”画了用三极管驱动的PCB板,发现电机越转越慢,根本没劲。“也许是因为三极管扛不了大电流,好吧那我换个中功率管吧,集电极最大6A电流行了吧?”可以想象结果是不行的。
首先了解下为什么三极管作为简单的电机驱动是不可取的方案:
- 三极管作为一个古老的半导体先驱,它是以一个放大器件的姿态而出现的,它在线性区域特性集中,饱和与截止都是两种极端的工作状态,而作为电机驱动的话,我们只能选择它的这两种极端工作模式。
- 用三极管作为大电流负载的驱动管时,不得不考虑的是他自身的管压降对负载的影响,这是很严重的。自身耗散越来越大,电机和管子是串联关系,电池电压只有3.7V,电机就只能越转越慢了
在晶体管家族里面还有一种跟三极管特性互补的,所有特性都集中在开关状态的晶体管,场效应管,即MOSFET。通常的场效应管完全导通时,源漏极电阻都是mΩ级别的,即它自身的耗散非常小。用它做为驱动管再合适不过了。最终选择了一个SOT23封装的,导通电压Vgs<4v的场管(SI2302),结果表现出了很好的驱动性能。
每个场效应管接一个大电阻下拉,目的是为了防止在单片机没接手电机的控制权时,电机由于PWM信号不稳定开始猛转。接一个下拉电阻,保证了场管输入信号要么是高,要么是低,没有不确定的第三种状态。那么电机也只有两种状态,要么转,要么不转。主控输出的是PWM波形,用于控制场效应管的关闭和导通,从而控制电机的转动速度。这就是crazepony电机驱动的原理。就是这么简单。
Crazepony在选择通信芯片上,也是选择了大家熟悉的芯片,NRF24L01。我相信很多朋友跟我一样,在大学阶段玩过最多的无线芯片就是它了,因为市面上有很多针对这个芯片延伸出来的各种通信模块,技术很成熟,也很稳定,性价比很高。
我查阅了NRF24L01的芯片手册,官方给出了整套硬件设计方案,包括天线的设计,PCB阻抗计算,以及底层的SPI驱动协议等等,资料很详细。
于是我们将这颗芯片画在了机身上面,在天线方面的选择上,我采用体积很小的2.4G陶瓷天线,这种天线比PCB天线占地面积小,对这个寸土寸金的小飞机而言,简直太棒了。
前面已经说了启动模式的切换会在下载程序时用到。
Crazepony在设计之初,就考虑到了,一般用户PC机上是不会装像KEIL这种软件的,但是所有的PC机都有USB接口,那么在机身上集成一个USB-Serial协议转换芯片,那么就能够直接用一根micro USB的数据线(就是现在统一的安卓手机数据/充电线)对飞机进行固件(*.HEX)升级了,这种方式真是太棒了。
试想,你的电脑里原来都是跟你工作相关的文件或者是软件,今天你买来一台Crazepony,里面的固件虽然已经很优秀了,但是我们一直在完善它,突然有一天,我们告诉你,我们的固件升级了,你可以选择更新固件。那么,现在有两种方式供你选择来升级你的飞机:第一,你需要装一个叫做KEIL或者IAR或者其他类似的专业软件,还得在淘宝买一个你看都看不懂的jlink调试器。第二,你只需要将你的安卓手机线拿出来,插上电脑,打开我们的一键升级软件。这两种方式,我想大家都会选择第二种吧。
那么,要实现第二种方式,我们就需要用到启动方式的切换来实现。
我们可以看到PNP型三极管Q5的基极是和复位按键连接的,PNP型三极管是基极低电平导通。Q5的发射极是和电源连接,集电极是和BOOT0连接。显然,BOOT0的电位高低,是跟复位按键是否按下直接相关的,同时我们有上面的铺垫也知道,BOOT0=1,BOOT1=1时,STM32从内部闪存开始启动,用于程序调试用。复位按键按下之前,BOOT0=0(内部下拉),复位按键按下以后,BOOT0=1,复位后,间隔四个时钟周期后采样BOOT0的电平,如果是高电平,那么进入调试模式,开始接收串口发送的程序代码,存放在内部的Flash中,下载完毕以后,软件复位,此时复位按键肯定已经弹起了,四个时钟周期以后采样BOOT0,此时是低电平,进入正常模式,这样就完成了一次ISP下载。
这样一来,机身和外部的有线接口就只有一根安卓手机的标配数据线micro USB线。它既是充电线,也是调参、烧写固件的数据线。这对大妈来说,想必操作也是很简单的吧。
有了USB-Serial的转换,那么我们的飞机和PC上位机的通信就有了必要的硬件基础。
为了让Crazepony能跟上智能机泛滥的步伐,同时也是为了增加它的适应性和降低成本的考虑,我们在原来的基础上增加了蓝牙透传模块,硬件焊盘上兼容蓝牙2.1和蓝牙4.0 BLE技术。就是说,同样一个Crazepony的裸PCB板,可以选择焊接蓝牙2.1和蓝牙BLE的模块。
蓝牙协议是很复杂的,要想去接触并试图一步一步的写出来,在我现有的时间下,几乎不太可能了。而将蓝牙透明传输成串口,这就很好的将Crazepony与安卓设备对接了,可以直接在安卓设备上面开发遥控app或者上位机。这想想也有点小激动呢,于是,我们真的这么干了,也成功了。
Crazepony的主要硬件介绍到这里就告一段落了,笔者刚结束学生时代,工程经验十分有限,硬件设计过程中肯定许多有不足和漏洞,希望广大读者指正,我们一定会积极接受意见并作出修订,希望把Crazepony做得更加完善,更加稳定,给这片土地上的广大爱好者提供丰富的资料和开发经验。