Crazepony硬件原理讲解

作者:CamelGo,nieyong

原理图设计

Crazepony硬件组成:

  • 主控:STM32F103T8U6
  • 姿态传感器:MPU6050(3轴加速度+3轴角速度)
  • 电子罗盘:HMC5883L(未焊接)
  • 无线通信协议:NRF24L01+与蓝牙BLE透传模块HM-11共存
  • 有线通信协议:CP2102(USB转串口)
  • 电机驱动:SI2302场效应管
  • 外部接口:标准Mirco USB接口
  • 电机:空心杯(Coreless)高速有刷电机,3W转/分钟
  • 桨叶:75mm黑色正反桨
  • 电池:650mAh,25C航模动力电池

下面是Crazepony的硬件框图。

有几点说明:

  • 气压计MS5611和电子罗盘HMC5883L是连接在姿态传感器MPU6050的从I2C接口上
  • USB串口芯片CP2102和蓝牙串口透传模块是连接在STM32的同一个串口上。串口原则上是一对一的,这种连接方式原则上是不正确的。

单片机最小系统

单片机在任何一个系统里面,无论他扮演什么角色,它要正常工作,都必须要有一个最小系统。下面,从最小系统开始简介Crazepony:

STM32的最小系统包括复位电路,外部时钟电路,启动模式选择电路,电源退偶电路等

复位

查阅意法半导的官方手册可以知道,STM32系列单片机都是低电平复位,对应芯片上的NRST引脚。在最新的Crazepony上,去掉了复位按钮,只能够通过开关上断电进行复位。STM32的复位引脚NRST接到了USB串口芯片CP2102上,作用和原理在其中模式部分会详细介绍。

外部时钟

官方手册有写,外部时钟我们采用的是8M无源晶振。单片机内部做倍频,系统时钟最高可达到72M。

电源退偶

不仅是主控最小系统需要对电源退偶,所有的数字电路和模拟电路共存的系统,都需要对电源退偶。电源退偶,说直接一点就是将电源上的噪声电压引入到地平面,让电源电压保持在一个稳定的值,这样系统才可能稳定工作。怎么做呢?用一个大电容并联一个小电容。

我们都知道,电容对频率越高的信号,呈现低阻特性,对直流呈现高阻特性。那么电源上的噪声对地平面而言,就是一个交流信号,交流信号就能通过电容到达地平面,而电源是一个直流,电容对他呈现出无限大的阻力,无法通过。这样,我们用示波器就可以看到,加了退偶电容的电源会比没加退偶电容的电源,波形要稳定得多。

启动模式选择电路

该部分内容到USB串口部分讲解。

系统电源

市面上所有的航模动力电池,都是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电机驱动的原理。就是这么简单。

2.4G 通信

Crazepony在选择通信芯片上,也是选择了大家熟悉的芯片,NRF24L01。我相信很多朋友跟我一样,在大学阶段玩过最多的无线芯片就是它了,因为市面上有很多针对这个芯片延伸出来的各种通信模块,技术很成熟,也很稳定,性价比很高。

我查阅了NRF24L01的芯片手册,官方给出了整套硬件设计方案,包括天线的设计,PCB阻抗计算,以及底层的SPI驱动协议等等,资料很详细。

于是我们将这颗芯片画在了机身上面,在天线方面的选择上,我采用体积很小的2.4G陶瓷天线,这种天线比PCB天线占地面积小,对这个寸土寸金的小飞机而言,简直太棒了。

USB串口模块

使用USB串口芯片CP2102实现,使用该USB接口实现4个功能:固件下载,充电,串口调试信息,上位机通信。

这里重点介绍通过USB接口进行固件下载,这涉及到STM32的三种启动模式,可以下面的表格给出:

  • BOOT0=0,从用户闪存启动,就是指从用户烧入STM32的Flash的固件启动。
  • BOOT0=1,BOOT1=0,从系统存储器启动。系统存储器是指STM32出厂时就带有的一小段程序,相当于出厂时内置的Bootloader。这段程序可以从串口接收数据,并且烧入到用户闪存中。这就是从USB接口进行固件下载的原理。这种下载固件方式一般叫做串口ISP下载。
  • BOOT0=1,BOOT1=0,从内置SRAM启动。暂时不清楚该启动模式的原理。

Crazepony使用的STM32F103T8U6型号芯片,BOOT0为第35号引脚,BOOT1为第17号引脚(该引脚被复用为普通GPIO口PB2)。

ISP是在系统编程的英文缩写(In-System Programming)。简单的说,可以不用插拔芯片,也不需要编程器,就可以在你的目标应用板(有单片机的电路板)上直接编程,作程序改动调试。

Crazepony支持SWD在线程序调试接口和串口ISP程序下载两种方式。SWD调试接口可以使用编译调试器(也就是JLink或者STLink)在线对程序进行仿真、调试、下载,这对开发人员来说是很方便的,缺点就是需要额外的调试器(JLink或者STLink)以及PC端软件(Keil)来支撑。串口ISP下载方式,只需要STM32的UART1的两个数据线,就能将编译生成固件(如HEX或者bin文件)烧写进单片机,不足之处是不能仿真调试程序。

试想,你的电脑里原来都是跟你工作相关的文件或者是软件。现在你买来一台Crazepony小四轴,里面的固件虽然已经很优秀了,但是我们一直在完善它,突然有一天,我们告诉你,我们的固件升级了,你可以选择更新固件。那么,现在有两种方式供你选择来升级你的飞机:第一,你需要装一个叫做KEIL的专业软件,还得在淘宝买一个你看都看不懂的JLink调试器。第二,你只需要将你的安卓手机线拿出来,插上电脑,打开我们的一键升级软件。这两种方式,我想大家都会选择第二种吧。

那么在机身上集成一个USB串口协议转换芯片,那么就能够直接用一根Micro USB的数据线(就是现在统一的安卓手机数据/充电线)对飞机进行固件(HEX)升级了,这种方式真是太棒了。

我们可以看到CP2102的DTR引脚通过Q1三极管控制BOOT0的电平,CP2102的RTS引脚控制STM32的复位引脚NRST。通过查看CP2102的芯片手册可以知道,只有在激活状态(可以同通过CP2102驱动程序控制,也就是PC上的烧写软件MCUISP)下DTR和RTS才是低电平,其它时候都是高电平。点击烧写软件MCUISP上的烧写按钮,CP2102的DTR引脚和RTS引脚同时拉低,这时候BOOT0=1,STM32芯片被复位,间隔四个时钟周期后采样BOOT0的电平为高,BOOT1电平为低,进入从系统存储器启动,开始接收串口发送的固件数据,烧入到用户内存中。

有了USB串口转换,那么我们的飞机和PC之间通信就有了必要的硬件基础。机身和外部的有线接口就只要一根安卓手机的标配数据线micro USB线。它既是充电线,也是调参、烧写固件的数据线。这对大妈来说,想必操作也是很简单的吧。

蓝牙透传模块

为了让Crazepony能跟上智能机泛滥的步伐,同时也是为了增加它的适应性和降低成本的考虑,我们在原来的基础上增加了蓝牙透传模块,硬件焊盘上兼容蓝牙2.1和蓝牙4.0 BLE技术。就是说,同样一个Crazepony的裸PCB板,可以选择焊接蓝牙2.1模块(HM-06,停产)和蓝牙BLE模块(HM-11)。

蓝牙协议是很复杂的,要想去接触并试图一步一步的写出来,在我现有的时间下,几乎不太可能了。而将蓝牙透明传输成串口,这就很好的将Crazepony与安卓设备对接了,可以直接在安卓设备上面开发遥控app或者上位机。这想想也有点小激动呢,于是,我们真的这么干了,也成功了。

Crazepony的主要硬件介绍到这里就告一段落了,笔者刚结束学生时代,工程经验十分有限,硬件设计过程中肯定许多有不足和漏洞,希望广大读者指正,我们一定会积极接受意见并作出修订,希望把Crazepony做得更加完善,更加稳定,给这片土地上的广大爱好者提供丰富的资料和开发经验。