热度 21
2016-6-11 13:12
3846 次阅读|
0 个评论
转载请注明来自: 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/ 下。回到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目录( \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编码板 (好像这才是折腾一大圈的初心吧喂!)