1.需求
工作中需要把目前设备的单向232转为485/422模式,实现双向通讯,目前查找相关资料。突然想到一件事,我是否能让232现有的单向上发线同时连工控机的tx,rx,然后靠协议,来定时切换PIC一侧的tx rx?PIC可能不支持这个,对吧? check 一下:pinmux如果能把一个io口既可以配成rx,也可以配成tx就可以。。。我觉得这不可能,放弃。只有485有这种半双工能力。
2.工控机端
我的usb接口是一款422、485兼容设备,看看电平规格吧。它的VCC是+5V,似乎可以。它用的是CH340做协议转换,这个片子似乎可以同时支持3种规格的串口协议。
2.1 usb-485/422接口设备测试
说明书中,提及设备本身测试的时候,似乎是按422的线序的, TX+ <-> RX+ ,Tx- <->Rx-我现在的需求是要能让两根差分线实现双向通讯。据说485的方向识别是个问题。
485的自发自收可以短接Tx+,Rx+吗? =>check。实测电平值在2.85V(差分线之间)。短接似乎不可能,成对的Tx Rx反相,短接后,理想情况,信号会拉至0.我的接口设备VCC无电压,不知道是不是出错,或者商家就没有引出这个管脚。
485标准:发送器A、B之间的逻辑1安排在+2~+6V;负电平在-2~-6V,是另一个逻辑状态;接收端认为+200mV以上都算1,-200 mV以下都算0;
485在接收端,会变成反逻辑,我不知道这个反转是怎么回事。485,422一个全双工,一个半双工,只有这一点区别。电平较RS232降低,说是为了避免接口烧毁。
由上图可知:485标准的发送电压下限是Vpp = 3.0V,我的这款设备几乎是卡着这个下限做的,也兼容了TTL电平。
2.2 CH340支持485半工收发吗?
暂不考虑,往前推进。
3. PIC端
PIC的串行通信模块,叫EUSART,也叫SCI
- E ...........enhanced 增强
- U...........universal 多功能
- S|A ....... syn, asyn 同步和异步
- R|T ........recv, transmit,首发
Tx,Rx Pin对应的IO口的TRIS位是用来控制Tx,Rx的自动换向的。它需要强制设置为1。标志着由eusart模块来接管它的方向控制:
TRIS是控制端口的三态的.所以,这才是半双工的意思,你要自己切?不对:
所以,这件事看起来毫无难度,只要把Tx,Rx的TRIS位使能,然后让设备的Tx Rx分别接至工控机的Tx+Rx+,Tx-Rx-,就OK了?
4.着手编码
先尝试切至485 tx模式,这样可以提高信号输出抗干扰能力。
再检查一下:
4.1 uart_ttl tx only => 485tx
这是Tx+Tx-,设备一侧的发送。再次检测电平匹配:
上位机侧+5V(一端Tx+,一端Tx-)
单片机IO口:
输出在4.3~0.6之间,可以。
器件一侧我配成了同步master tx only。看看能不能通:
4.2 乱码排错
我把设备发送,和工控机测发送的波形采集了一下:
工控机侧Tx:
设备侧Tx:
两者同时设置为115200波特率时,上位机一侧的实际频率是116736;PIC一侧是113581,但是PIC看起来完全是时钟数据:检查后发现,配置为485模式,不能将eusart设置为同步模式,同步模式会输出时钟和数据两根线,485不是这种协议。
注意对于485模式,MCC,PINMUX配置出的管脚是Tx1 |Rx1。
修改MCC配置:
最终效果: