测调 西安.老雷子 2020年6月1日
软件平台 WINDOWS Keil uVision,STM32 ST-LINK
硬件平台 STM32S108C8B6 通用32开发板调试
发射端: 蜂鸟远T1 输入需要用MCU进行编码,利于指定编码
接收端: 蜂鸟灵R1 输出有五种模式,其中模式5就是串口直接输出编码的
编码模式 EV1527
一、 系统调试硬件结构说明
发射端硬件示意图 接收端硬件示意图
二、 如何对位进行编码
先简单了解一下编码中如何把二进制体现出来,如下图,芯片本身调制解调不是调整频率而是采用调幅模式,换句话说,用发射和不发射的时长和间隔来体现是逻辑1还是逻辑0;如下,看懂这个逻辑关系也就注意到了后面发射的时候怎么编1的码,怎么编0的码了。
上面的对于1位的编码按照从高位到低位顺序连接起来,再在开始加上一个同步码就完成了一个字节的传输,实现起来还是很方便的。
发射一个字节流程如下:
1、 发射同步:逻辑1持续1T然后逻辑0持续3T
2、 顺序发射bit7、bit6、bit5、bit4、bit3、bit2、bit1、bit0(逻辑0和1按照上面规则)
三、 如何对一个发射码进行编码?
对于一个发射码而言,按照EV1527的编码规范,发送/接收的码总共应该是8个字节,而这八个字节,并不是将上面单一字节内容直接拼接完成的。
例如编码“80A7E40B”
字节 0x80 0xA7 0xE4 0x0B
顺序 Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8
Bit数 4 4 4 4 4 4 4 4
值 8 0 A 7 E 4 0 B
上面4个字节,每个字节8位。但需要注意的是蓝色部分(Z1Z5)是遥控器对码时候用的内部编码(对于远R1自学习过程而言),总共2^20个也就是编码规范中常说的百万编码,以此确保不会串码;黄色部分(Z6)只有半个字节,但这4位才对应实际按键编码,这个四位键盘编码在标准用法中只有四个值(1,2,4,8),也可以扩展直接用115(0x01~0x0F)。绿色部分的字节在发射编码的时候可以忽略不处理(芯片自己会生成一个校验码加上去的)
如果要完成80A7E40B代码的发射,流程如下:
1、 准备一个缓冲区unsigned char Ask_send_buf[12]
2、 Ask_send_buf[0]=0x80;Ask_send_buf[1]=0xA7;Ask_send_buf[2]=0Xe4;
3、 Ask_send_buf[2]的低4位清零并给Ask_send_buf[2]加上键盘码(1~15);
4、 发射Ask_send_buf[0]
5、 发射Ask_send_buf[1]
6、 发射Ask_send_buf[2]
7、 发射同步码(这个过程在编码规范里面是在前面的,但放在这个位置通讯更稳)
8、 暂停发射做一个发射间歇(一般有15毫秒合适)
上述实际上,按照通讯编码规约,完成一个发射码的过程必须要先后发送四次才符合1527的编码规范,因此,需要将上述过程中4~8步骤重复4次接收端才能认可。
四、 调试注意事项
1、 硬件连接逻辑确认(前面给出的连接关系别搞错线,注意所选用的模块电压不要出现烧片)
2、 如何确认发射端开始发码?
无线模块开始发射以后,由于无线433信号不依赖专用设备比较难以判断是否已经发射,建议可采用其他无线设备检查是否已经开始发射,可以用对讲机将频率调整为433MHz,发射端发码时候会有明显噪音出现。(凡带有自学习功能的遥控器或者遥控模块在未成功学习之前即使收到信号也没反映的)
3、 如何确认发射码正确?
接收端用灵R1模块,在确认发射端发射时进入学习状态进行学习,调整R1的输出模式为第5模式,然后通过R1模块自带串口输出功能将接受到的发射码发送到上位机查看。(需要注意模块接收的代码会自动加上前置字符串“LC:”,还会有后面的通讯校验字节)
4、 如何确认MCU的机器周期时钟
不同的MCU和不同的时钟配置,指令周期都可能不同,采用代码延时(计时器更方便大家可自己移植)时,为了保证第一个时序图中一个T的时间基本准确在400纳秒,最好采用示波器来矫正正确的循环次数。
示波器不方便的时候,先搞个1分钟或者几分钟的延时通过秒表来反向推算一下400纳秒到底需要多少个等待周期;
五、 硬件照片
顺手把丑陋的调试硬件照片发上来,看看这么简单的连接就搞定了,还有,这无线模块缺失做的太小了,红色是灵R1,蓝色带螺旋天线的是远T1你不小心估计都没看到那个模块,调试通过发现这对模块真心好用,通讯非常稳定可靠。
顺便看看我用的调试板背面,手动飞了两根线,USB接口就直接可以SWD方式下载调试这个STM32的开发板了,比较方便。
六、 上位机接收到的代码
调试过程中,灵R1模块除了完成与串口通讯模块的三根线连接之外,需要按照手册进行对码学习过程和输出模式设置过程。标准9600的串口通讯,使用还是比较简单的。
源代码也给大家分享一下吧,免得朋友们走弯路啦
完整实现的代码下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)