原创 利用ArduPPM和Arduino制作PPM编码板

2016-6-11 13:12 3894 21 21 分类: MCU/ 嵌入式

转载请注明来自: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:

632985-20160608103300558-281772566.gif

实际上就是执行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的低值:

 

arduppm.fail-safe.gif

做好的PPM编码板我已经在pixhawk上测试过可用,如果要上机使用的话最好给板子套上热缩管。另外用改版pixhawk的朋友如果收不到PPM信号请检查连线,我在micropix上调试了大半天最后发现那个Molex 1.25接口的细线断了...下次还是打上热熔胶好了。

 

好,我们这次掌握了:

Windows下AVR开发环境的搭建,实际完成了一个AVR程序的编译;

AVR ISP的烧写,利用ArduinoIDE快速烧写.hex文件的方法。

 

最后,我们还得到了一个可以实战的PPM编码板笑脸(好像这才是折腾一大圈的初心吧喂!)

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
21
关闭 站长推荐上一条 /3 下一条