电路
设计初衷
电源5V
选择5V的原因,差分2.5V比1.5V可以提高传输能力
TTL输入
3.3V电平满足需求
TTL输出
4.5V了,MCU是3.3V平台
这样就分为两种情况
MCU接收端可以容忍5V输入
MCU接收端不可以容忍5V输入,就要进行电压转换,我这里使用的是电阻分压 注意就是这里引发的震荡。
为什么选择电阻分压,当时的思考是,无论MCU是否能容忍5V这样总该不会有问题。
MCU串口接收引脚
事后写文档才开始去详细看IO引脚接受电平情况
PA3,PC5
引脚说明
通过查阅MCU数据手册可以看到PA3,PC5都可以接受5V电平。
震荡
这路串口我使用了shell 交互功能;//就是因为有shell这个电路才震荡的。
shell有一个功能:无论什么输入都会有输出;
现象描述
电路上电,就看到了串口接收引脚一直有数据,串口发送引脚也一直发送数据;
整个MCU一直被这个收发占用了。
调试
原理图/PCB检查
因为这个收发电路是晚上抄别人的,自己第一次这样使用,怀疑原理图/封装 哪里没有连接正确。
没有发现问题;
R59接收电阻去掉
这样就相当于接收接地了,MCU正常运行了,串口输出也正常。
485芯片坏了吗?
换了485芯片,问题依旧。
单独测试接收
将R57电阻对地,示波器解码功能测试接收到的数据正常。
此时空闲的时候接收引脚是呈现高电平约5V的。
单独测试发送
上位机收到数据也是正常;
此时空闲的时候接收引脚是呈现高电平约1.2V的。
到这里1.2V没有引起我的注意。
收发电路全部还原测试
这时候又恢复了震荡状态,测试注意到了 接收引脚电路是在变化,但是低电平只有1.2V.
这时候我才意识到,接收引脚是因为收发切换导致的电平变化,并不是有实际的数据。
与上面的测试收据对应起来了。
查485芯片数据手册
啊哈 ,破案了
震荡的原因
板卡上电 -> 485芯片接收状态(1脚高电平) -> MCU输出log信息 -> 485芯片发送状态(1脚高阻)由R44,D28,R59,R58 分压约1.2V -> MCU接收到数据,shell解析,输出解析内容 -> 485芯片发送状态(1脚高阻)由R44,D28,R59,R58 分压约1.2V -> MCU接收到数据,shell解析,输出解析内容......无限循环。
解决方案
- 将R58去掉;//我的选择
- 增加电平转换芯片
这两种方案都是可以的。
小结
这都是满满的经验啊。
刚遇到这个问题我也是很纳闷,怀疑USB转485坏了,怀疑MCU坏了....开始烦躁。
此时不应该继续这种坏情绪。
喝杯咖啡 / 出去走走 / 小憩一会。。。
思路理清楚在继续调试,就会高效很多。