转载请注明来自:ednchina 少年Pie的硬件博客
ArduPPM是ArduPilot提供的开源PPM编码固件,它可以运行在ATMega328p和ATMega32u2上。地址:
https://github.com/ArduPilot/ardupilot/tree/master/Tools/ArduPPM
我们在使用pixhawk或者apm飞控的时候经常需要把PCM接收机的输出转换成PPM输出。有了ArduPPM我们就可以用手上的Arduino来改装成PPM编码器,简单省事。
ArduPPM并不是一个Arduino程序,而是原生AVR程序。所以我们需要配置AVR编译环境进行编译。在Windows下,需要以下工具:
1. MinGW(Msys),主要是使用Msys提供的shell以及Linux工具链,地址:
http://www.mingw.org
2. WinAVR,由一系列开源项目集合而成的Windows下的AVR开发工具链,多数工具依赖MinGW,仿真器依赖Cygwin(编译不需要),地址:
http://www.webring.org/l/rd?ring=avr;id=59;url=http%3A%2F%2Fwinavr%2Esourceforge%2Enet%2F
装好以上两个工具之后访问Msys的安装目录,把从GitHub下载的ArduPPM复制到msys/1.0/home/[your username]下。回到Msys主目录点击msys.bat,启动Msys Shell。
我们这里用Arduino Pro Mini来演示,所以要使用ATMega328p目录的makefile:
实际上就是执行make即可。像这样就编译好了,当前目录下会多出一堆文件,我们需要的是Encoder-PPM.hex。
下一步就是把.hex文件烧写进Arduino Pro Mini,这一步根据硬件配备可有两个选择:
1. 如果用Arduino系列的工具,可以通过串口下载,但是由于Arduino Bootloader会将TX引脚设为输出,ArduPPM的第一通道会无法接收数据。
如果你的飞控支持通道映射并且不需要使用所有8个通道,那可以把第一通道插到其他通道上,飞控上映射一下就行。
地面测试的时候推荐用这种方法,稳定之后再采用下面的ISP方法固化。
2. 利用ISP编程器直接对ATMega328p编程,覆盖掉Arduino Bootloader。ISP编程的时候要特别注意熔丝位的设置,一旦设错ATMega就会锁片。
ISP编程器可以用USBASP之类,也可以用另一块Arduino,通过烧写ArduinoIDE自带的ArduinoISP示例项目来制作,具体方法可参考我之前的文章:手把手教你把5V的Arduino改造成3.3V版本,地址:
http://www.cnblogs.com/xiedidan/p/3940496.html
(做PPM板请不要把Arduino改造成3.3V,只学习Arduino ISP的制作方法即可)。
其实对于新手以及图省事的老手来说,最简单的办法就是把Encoder-PPM.hex重命名成ATmegaBOOT_168_atmega328.hex,伪装成Arduino Bootloader让ArduinoIDE下载:
Encoder-PPM.hex改名后扔进ArduinoIDE的Bootloader目录([your arduino path]\Arduino\hardware\arduino\avr\bootloaders\atmega\),然后在ArduinoIDE选择5V 16M的Arduino Mini Pro。(一定要用5V 16M,这是ArduPPM要求的。)
选好ISP编程器,点击工具-烧录引导程序,ArduinoIDE会帮忙设好熔丝位并下载hex。这样就一切OK了。
ArduPPM官方没有给出具体的引脚映射说明(因为它原本是配合专门的硬件使用),在Arduino Pro Mini上引脚和通道的映射关系为:
TXD - CH1
RXD- CH2
2 - CH3
3 - CH4
...(中间以此类推)...
7 - CH8
10 - PPM
接线的时候要注意接收机与PPM编码板要共地,PPM编码板也要与飞控共地。一般来说这几个之间有供电的就不用特别关心共地了。
另外提醒一下,不管使用什么接收机,都推荐把油门接在第三通道上,因为ArduPPM的Fail-Safe功能默认第三通道是油门,丢信号时该通道输出900us的低值:
做好的PPM编码板我已经在pixhawk上测试过可用,如果要上机使用的话最好给板子套上热缩管。另外用改版pixhawk的朋友如果收不到PPM信号请检查连线,我在micropix上调试了大半天最后发现那个Molex 1.25接口的细线断了...下次还是打上热熔胶好了。
好,我们这次掌握了:
Windows下AVR开发环境的搭建,实际完成了一个AVR程序的编译;
AVR ISP的烧写,利用ArduinoIDE快速烧写.hex文件的方法。
最后,我们还得到了一个可以实战的PPM编码板(好像这才是折腾一大圈的初心吧喂!)
文章评论(0条评论)
登录后参与讨论