GR3E三通道接收机解调,PWM转换成串口数字信号。
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
list
obj
tools
.gitignore
12C5A60S2.h
GR3E_decode.plg
GR3E_decode.uvproj
GR3E_decoder.jpg
README.md
main.c

README.md

GR3E_decode

GR3E三通道接收机解调,PPM转换成串口数字信号。
本工程在windows下如果出现乱码等问题,请尝试更换编辑器,如notepad++。
在tools目录下有一个python小程序可以直观地显示出各个通道的数据。

功能

GR3E是富斯(flysky)三通道航模遥控器的接收机,其三个通道输出PPM信号。
本工程使用单片机提取其三个通道的信号,解码后以数字信号通过UART串口输出。

GR3E特性

关于GT2B遥控器和GR3E接收机的详细介绍可访问 http://nicekwell.net/blog/20161223/gt2bhe-gr3ede-gong-neng-he-shi-yong.html
关于PPM信号的详细介绍可访问 http://nicekwell.net/blog/20161223/ppmxin-hao-jie-shao.html

三通道:

通道 功能 备注
CH1 方向 连续变化,精度20us
CH2 油门 连续变化,精度20us
CH3 按钮 在1000us和2000us间切换

由于输出精度是20us,所以单片机在采集信号时精度达到20us即可。

所有通道周期大约是16ms,刷新率60Hz。

每个通道的高电平脉宽范围大约在1000us~2000us之间。
在一个周期内,各个通道的高电平脉冲一个紧接着一个依次输出,三个通道信号全部输出结束最多约占用2ms*3=6ms,周期内剩余约10ms的时间所有通道输出全为低电平。

硬件

【单片机】STC12C5A60S2
【晶振】24MHz
注:此晶振可产生精确地定时器中断,方便监测各个通道,但串口波特率会有0.16%的误差,不会影响使用。
【引脚连接】
CH1:P1.2
CH2:P1.1
CH3:P1.0
TXD:P3.1

输出格式

【波特率】115200
实测发送一个字节大约需要13us,这样算的话一帧发送4字节大约需要50us。
这里测量的13us是程序把一字节数据送入缓存,并等待发送完成标志所用的时间,不是实际串口的工作时间。
【数据格式】
每个周期内,当采集完三个通道的高电平后(最长约6ms)会立刻通过串口发送3个通道的数据信息。
每个周期的数据为一帧,一帧数据有4个字节:
第一字节固定为0x01,标志一帧数据开始。(后面三个字节不可能为这个值)
后面三个字节依次表示CH1、CH2、CH3的脉宽,单位是10us。如输出150表示脉宽为1500us。
注:
1、接收机输出的脉宽范围大约在1000us2000us之间,所以三个脉宽的数据范围大约在100200之间。
2、解码后输出的数据单位是10us,但实际接收机输出的精度是20us,单片机程序也是按照20us的精度采样的。

以上是接收机正常工作的数据输出格式,当接收机接收不到信号时,模块持续输出0x02。

程序结构介绍

两个进程:定时器中断和主循环。

定时器20us一次中断,有两个状态:
1、信号采集中:
  1、采集各个通道高电平时间。
  2、判断当前所有通道是否采集完成(所有通道信号结束后,所有通道都会输出低电平。
    如果连续100us(5个周期)检测到所有通道都是低电平,则认为一帧信号结束,此时对采集到的信号进行判断:
      如果所有通道脉宽大于500us,则认为数据有效,通知主进程发送数据,并进入状态2。
      否则认为数据有问题,通知主循环发送“信号丢失”信号,并进入状2。
2、本周期信号已结束,等待下一周期:
  任意通道采集到高电平则进入状态1。

主循环进程只干一件事,等待定时器进程发送指令,接收到指令后发送数据。
但主循环会忽略第一帧数据,因为第一帧数据可能采集不完整。

更多关于单片机编程结构的文章请访问 http://nicekwell.net/pages/dan-pian-ji-bian-cheng.html

完成之后:

GR3E_decoder

效果演示视频:http://v.youku.com/v_show/id_XMTg3ODIxODc2MA==.html?spm=a2hzp.8253869.0.0&from=y1.7-2