作者: CamelGo / July 7,2014
毕业了,一直 沉浸在离别的情绪中难以自拔
距离上一篇博客更新,已经快有一个月了,如果再不写,那么Crazepony很可能被怀疑是烂尾了,所以…
今天主要谈谈以下几个事情:
机身源代码部分,截止目前为止,都是属于一砖一瓦敲出来的裸机代码。为了满足各个层次用户的需求和体现出 我们的努力,后续会试着移植一个FreeRtos的实时操作系统内核,因为bitcraze 团队就用的这个内核,向他们无限靠近是我们的目标。
那么,现在就结合裸机代码,来说说Crazepony的软件框架:
学过 51单片机的都知道,任何一个处理器要正常运行后面的代码,首先必须得有一大段设备初始化的代码先运行,这些代码用于初始化处理器的内部时钟、中断优先级、I/O 口的输入输出方向等等,也就是为后续代码正常运行,做了一个环境配置准备。
Crazepony 的主控是 Crotex-M3内核,其实就是ARM架构发展到一定阶段的产物,那是什么呢?还是ARM架构。于是,对ARM的初始化,首先必须要做的就是系统时钟初始化,中断向量表初始化,中断优先级初始化,I/O方向初始化,如下:
然后,STM32内部模拟EEPROM初始化;然后,LED初始化;然后,延时函数初始化;然后 ,蓝牙电源使能初始化;然后,电机PWM输出初始化;然后,电池电压AD初始化;IIC总线初始化,传感器初始化,PID参数初始化,无线收发模块初始化为接受模式,开 蓝牙,开定时器3,开定时器4。
初始化看起来很繁杂,很多,也没啥好说的。现在谈谈Crazepony是怎么正常飞起来的:
前面已经努力的初始化了一大堆东西了,那么飞机起飞所需设备以及环境也正常了,Crazepony接下来需要做的最重要事情,就是如何去合理的控制这些设备,让飞机正常起飞
飞机起飞所需要的必须设备就是:电机+螺旋桨+姿态传感器。
在这里,我们必须承认的一点就是,四路PWM信号的占空比大小,线性的代表了电机转速快慢,也即线性代表了电机上提供的升力。于是,Crazepony现在只需要控制单片机内部定时器准确的输出四路PWM信号就行了,其他的事情,交给执行机构:电机+螺旋桨去完成。
接下来 ,程序运行到死循环while(1);程序会一直停在这里,等待数据中断的到来,而不是死机死在这里,这是有区别的,学过51的人都知道,我不在多说。
在初始化代码段,我们说到初始化了两个定时器,一个定时器3,一个定时器4,这两个定时器都可以打断死循环while(1)。定时器3用于广播机身姿态信息,定时器4的任务要繁重得多,用于 更新遥控数据+机身姿态融合+PID计算输出+PWM输出。(关于PID和姿态融合部分的细节http://www.crazepony.com/wiki.html )可以看到,定时器4里面任务的优先级明显要比定时器3实时性要求更高,所以。中断优先级的顺序是:定时器4 > 串口中断 > 定时器3。姿态更新频率为1000Hz,广播信息更新频率为1Hz。
1000Hz的数据更新频率,已经足够承受Crazepony反应了,阿莫上有人说几百赫兹是最佳。其实,这差不多了多少。学信号的人都知道,采样间隔越小,对信号的还原越精确,所以,我还是宁愿高一点
综上,有点乱,但是我们缕一缕。很简单,只有3个中断。定时器4是核心中断,所有的算法都是在这里实现的,机身的稳定也是靠这个中断来实现的
大概的框架就是这样,实现的细节,源码里面都有注释,写得很浅显易懂
按照原计划,第四版将会是最终版,不会再改了。但是鉴于嘉利创工艺的问题,我还是得做4.1版。这里不吐槽嘉利创了,大家都不容易~~
说说4.1版的特性吧:
最后,有必要说下,4.1版,我们目前正在加班熬夜完善,争取在9月初公布购买链接
Crazepony四轴交流群 :346226561
~~~~未完待续 2014/7/7