我和Crazepony的那点事儿(2)
作者: CamelGo
/ May 29,2014
最近笔者忙于毕业事宜,博客没跟上…
上次说到机身硬件就停笔了,莫非是给以后留点故事来写罢了,好吧废话不多说了,那么就开始吧
(一)
首先谈谈硬件选型的依据吧:
主控方面:
曾经在犹豫用TI的430系列单片机还是意法半导的STM32。那是在我大二的时候,从来没有接触过STM32,以前都是用51单片机和TI的msp430系列单片机。好吧,我承认了,我做Crazepony其实是就是为了学习STM32的,没有买过STM32相关的开发板,就这么简单粗暴大刀阔斧的开始了我的STM32之旅…
最终选择用STM32当然还有其他原因,TI公司的MSP430系列都是基于低功耗在做文章,作为移动消费电子,对电源续航能力要求比较高的场合比较适用。
而意法半导的大部分单片机都是ARM架构体系下的Cortex内核为基础的单片机,这里有必要啰嗦一下何谓Cortex架构:
英国的ARM公司在经典处理器ARM11架构之后,为了给不同需求的CPU厂商提供服务,之后的内核架构命名都改为Cortex,并分成了A,R,M三类,也即将ARM的三个字母拆分为三个架构的名,代表着不同的发展方向:
- A系列处理器可托管丰富的OS平台和位应用商提供全方位的解决方案,诸如低成本手机、数字电视、机顶盒、打印机、服务器等
- R系列为实时处理器,要求可靠性、可用性、可维护性和实时响应的嵌入式系统提供解决方案
- M系列是一系列可向上兼容的高效能、易于使用的处理器,这些处理器旨在帮助开发者满足将来嵌入式的需要,这些需要包括低成本、不断增加的连接、代码改善移植等。M系列主要应用在智能测量、人机接口设备、汽车电子、工业控制、大型家电等。
很显然,苹果公司的A系列CPU也是嵌入的Cortex内核。
之所以选择STM32F103T8U6作为Crazepony的主控芯片。首先因为他是crotex-M3内核,继承了ARM的优良性能,主频能跑到72MHz,3个通用定时器,1个高级定时器,7通道DMA控制器,而且总线接口资源丰富;其次是因为它VFQFPN36的封装,只有6mm*6mm的占地面积,对这个寸土寸金的项目来说简直太赞了。这么高的性价比,当然让我选择了他作为主控。72MHz虽然生不了孩纸,但是足以处理除了图像之外的大部分任务了。
传感器方面:
目前Crazepony采用的是最常用的MPU6050陀螺仪加速度计一体芯片,成本不超过20元,对小四轴来说,它的精度和性能绰绰有余了(当我听说教研室师兄用的一颗传感器裸片卖1W+时,我整个人都不好了..),MPU6050在这个价位里面几乎是占有绝对的性价比优势。首先,它将陀螺仪和加速计整合在一个片上,通过IIC总线给出六个维度的ADC值;其次,芯片本身提供一个“从”IIC接口,供用户接第三方的IIC器件,一般选择是接一个电子罗盘,如HMC5883L,构成一个9轴的输出的姿态模组,现在MPU9150已经丧心病狂的把电子罗盘功能也整合在片上了,但是要买60+元;最后,这颗芯片内部集成了一个DMP(Digital Motion Processor)处理器,这是最让我爱不释手夜不能寐的一个功能,直接硬件解算四元数,从某种程度上说解放了20%的主控资源
数据通信方面:
数据通信这块,也没什么特别要考虑的,短距离高速通信且免费这一点要求就限制了只能选择2.4GHz这个频段,在这个频段出了很多优秀的芯片厂商。在学生时代,我用得最多是Nordic公司的NRF24L01这个系列的收发一体芯片,由于刚开始着手启动Crazepony这个项目时,我只会这颗操作芯片,本着方便的原则,所以很自然的选择了这颗它(后来发现国外一个团队bitcraze也用的这个系列的芯片时,还是有点小激动的,不同的是,crazyfile用的是NRF24LU1,这颗芯片在与USB的接口上要容易些)
差不多了,硬件芯片选型大概是这样。下面谈谈这期间的一些细节
(二)
一个处女座仅仅是要求机身上芯片封装统一是QFN有错么,不要再黑处女座了好么,他们活得很累的。(~.~)
机身外形:
如上一篇博客谈到到的,我前前后后花了两年时间,以学习STM32这款单片为目的开始着手一个完全陌生的飞行器,从硬件到软件。可以想象,这两年我因为无知所走的弯路和画废掉的板子以及烧掉的生活费,加起来能换多少个菜包子和素馒头了。
机身外形的设计对我来说是最头大的,一直想不到什么好的主意,最关键的是我本人是天线专业的,我自以为是的把2.4G的天线露在机身外部(如图1),凸显我是学过天线设计的男人。但是这严重破坏了美感不说,还强烈的刺激了处女座的用户。一次偶然的机会拆了一个平板电脑,发现主板上有根长得很像电容贴片电容的元件,百度后才发现,居然是一根2.4G的陶瓷天线,这….我这四年天线专业的所学算是全部还给老师了。于是,后来再参考了某公司的某飞行器外形,压缩了天线,有了最终双曲线过度的Crazepony外形(如图2)
调试方便的考虑:
在第三版之前,我都是用的stm32的SWD接口烧写调试固件代码,这种方式的确比较方便和有效,但是有个致命的弊端就是需要外接一个硕大的jlink调试器,这种设计简直太反人类了。纠结了好长时间,后来在看datasheet时发现STM32支持另外一种下载模式,用串口即可完成代码的下载,不足是不能在线调试。但是相比于能简化操作的诱惑,我还是决定在机身整合这样一个下载电路。(如图)
这样一来,机身和外部的有线接口就只有一根安卓手机的标配数据线mircoUSB线。它既是充电线,也是调参、烧写固件的数据线。这对大妈来说,想必操作也是很简单的吧
电机驱动:
由于笔者完全是由于一种强烈的爱好选择了飞行器,最开始连有刷电机和无刷电机的物理结构区别都不知道,电调又是啥?傻傻分不清楚…
从一个几乎零基础的状态去选择电机驱动芯片,弯路是必须要走的,学费是必须要交的。曾以为书上学到的东西马上就能用,马上能转化为产品,后来发现真的是自己想多了。
最开始用的三极管作为电机驱动,采用很经典的共射电路“三极管工作在开关状态应该就行了吧?”画了用三极管驱动的PCB板,发现电机越转越慢,根本没劲。“也许是因为三极管扛不了大电流,好吧那我换个中功率管吧,集电极最大6A电流行了吧?”可以想象结果是不行的
首先了解下为什么三极管作为简单的电机驱动是不可取的方案:
- 三极管作为一个古老的半导体先驱,它是以一个放大器件的姿态而出现的,它在线性区域特性集中,饱和与截止都是两种极端的工作状态,而作为电机驱动的话,我们只能选择它的这两种极端工作模式
- 用三极管作为大电流负载的驱动管时,不得不考虑的是他自身的管压降对负载的影响,这是很严重的。自身耗散越来越大,电机和管子是串联关系,电池电压只有3.7V,电机就只能越转越慢了
在晶体管家族里面还有一种跟三极管特性互补的,所有特性都集中在开关状态的晶体管,场效应管,即MOSFET。通常的场效应管完全导通时,源漏极电阻都是mΩ级别的,即它自身的耗散非常小。用它做为驱动管再合适不过了。
最终选择了一个SOT23封装的,导通电压Vgs<4v的场管(SI2302),结果表现出了很好的驱动性能
未完待续~~ 2014/5/29