基于STM32,低速CAN通信的收发器芯片选择问题
扫描二维码
随时随地手机看文章
本电路系统第一版测试电路使用的CAN收发器芯片为philips公司生产的TJA1050,电路参考了战舰STM32开发版的电路,如下图。
电路测试没有问题,但是性能不能满足工程要求。经测试在STM32F103C8T6芯片上,工作于24MHZ,在代码中设置SJW,BS2,BS1,BRP分别为1,8,7,125时可以实现12kbps的速率,可正常发送与接收数据。在外部条件最优的前提下,12kbps约对应于5KM的理论通信距离,这显然距离CAN的5kbps对应的10KM距离还有一定差距。现如今,最低通信速率为1,8,7,128配置下的波特率,如果再低则无法正常通信。为达到更远通信距离的目的,我们必须想办法将通信速率降下来。
开始以为是MCU有问题,后来换了其他型号,发现问题一直存在。查资料之后,发现是CAN收发器限制了通信速率。
策略:寻策略:找其他替代CAN收发器
据在网上查询,收发芯片都有速度限制
TJA1050 >60kb/s此数据为官网datasheet提供数据,貌似有问题,亲测12kbps通信无问题
TJA1040>40kb/s此芯片没实际测试过,具体限制未知
MCP2551 >16kb/s此芯片没实际测试过,具体限制未知
65HVD230 >60kb/s此芯片没实际测试过,具体限制未知
SN65HVD232兼容3.3VI/O,参数未知,未提到速度限制,或者是我没找到。
TJA1054T<125kb/s速度满足,但最多只能连接32节点,电路复杂
CTM1050 40kbps—1Mbps可接110节点,但有低速限制,未实测
猜测速度与连接节点之间相互限制,高速收发器可连接110节点,但无法实现低速;低速收发器可实现低速,却不能连接过多节点。据网上说,PCA82C250等老版芯片无速度限制,但不知连接节点数目和抗干扰性能如何。
后某网友提示,其亲测PCA82C250没有低速限制,且兼容3.3VI/O。遂购买PCA82C250和PCA82C251各5片,测试,PCA82C251无法兼容3.3VI/O,但是PCA82C250兼容!将PCA82C250直接替换TJA1050(就在第一版终端测试电路上),测试可正常收发数据。由于第一版电路下载比较特殊,在替换之后无法下载。故,未测试PCA82C250是否能实现低速CAN收发。
据查询,许多CAN收发器要求TXD和RXD端为5VI/O,如PCA82C250、PCA82C251等。若要与STM32连接,需接隔离器,或者说是电平转换器。
最后,经过实测,PCA82C250可以兼容3.3VI/O(数据资料提示不兼容,实测兼容),PCA82C251不兼容3.3VI/O
另外,测试发现在低速情况下(10Kbps)以TJA1050、PCA82C250作为收发芯片,TJA1050端可收数据,不能发。MCU同为STM32C8T6,如果收发芯片两端均为PCA82C250,测试5kbps可相互通信。未测试更低速率情况是否可以正常通信,但250的datasheet上没有写速率限制,理论上应该是0--1Mbps。
其他经验:
LOOPBACK正常但NORMAL不正常。这个是由于CAN总线在发送出错达到一定数量的时候(128?)会自动关闭这个节点来保护整个总线不被堵死。
如果只有一个节点的话,一下子就busoff了,当然是看不到波形的。我用的设置程序帖下面,LZ可以参考一下,已经调通了。另外CAN_InitStructure.CAN_ABOM=DISABLE;这句是我当时busoff的主因。