返回列表 发新帖我要提问本帖赏金: 30.00元(功能说明)

[APM32E1] APM32E103系列CAN通讯受时钟精准影响的测试分析

[复制链接]
 楼主| Alden 发表于 2022-12-22 14:24 | 显示全部楼层 |阅读模式
<
本帖最后由 Alden 于 2022-12-22 14:24 编辑

#申请原创#  @21小跑堂
CAN简介:CAN 是控制器局域网络 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议,支持 CAN 协议 2.0A 和 2.0B。在 CAN 协议中,发送者以广播形式把报文发送给所有接收者,节点在接收报文时,会经过过滤器组根据标识符决定是否需要该报文,这种设计节省了 CPU 的开销。

APM32E103系列支持CAN协议 2.0A 和 2.0B,通信波特率最大为 1Mbit/s,并且拥有双CAN接口,能适应更多的应用场合。

而CAN通讯作为一种异步通讯方式,没有时钟线来参照,对总线上各设备的CAN波特率精度会有一定要求,否则设备之间的CAN通讯波特率相差过大,必然会出现问题。而这个允许的偏差范围却没有资料给出准确的答案,所以我将用APM32E103ZET6开发板实际测试CAN通讯波特率偏移多少会对通讯有影响。

APM32E103的CAN波特率是基于APB1的频率分频配置得到的,E103的主频最高为120Mhz,APB1的频率最大为60Mhz。而想要比较精细的调整can的波特率,只能调整MCU的主频来实现。
这里使用内部高速晶振作时钟源,通过调整内部高速晶振的校准值来微调内部高速晶振的频率,从而调整CAN通讯的波特率。
5ab297174198f6b706b8e44714862f8.png
HSITRM的默认值是0x10,可调整的范围为0x00到0x1F,每步的调整HSI的变化约40khz。该功能是可以根据调整在电压和温度变化的情况下调整HSI的频率。
这里就用来人为偏移主频来测试CAN通讯。

代码就使用之前用st库修改的E103双CAN例程的基础上修改,只使用CAN1来测试就行了。

首先要增加HSI作时钟源的初始化,HSI作时钟源需要二分频到4M,PLL最大倍频系数是16,APB1的最大频率是60Mhz。所以选择15倍频,主频和APB1频率都为60Mhz。
a21a92750232eb466e52eec49307f1a.png
其中        RCC_AdjustHSICalibrationValue(0x10);就是用来对HSI进行校准调整,默认值为0x10,减小该值会降低主频,最大该值会增大主频。
初始化之后可以通过PA8引脚的MCO功能输出HSI的波形,用示波器计算频率。 ada651b3b3c4efb3d74ae8b76d76711.png
使用示波器的频率统计。
5867130b4851ef98c708b45307df6d0.jpg
初始状态下,HSI的频率约为8.038Mhz,配置CAN的波特率为500k,CAN接收到分析发送的特定信息后回复,并串口输出CAN1错误状态寄存器的值,看是否检测到总线通讯错误。
403e960e7f48272c45b6a2fcc5f76c3.png 33460dcd8a0cb189647f0719b508c76.png
此时用CAN分析仪上位机和串口助手可以监测到CAN总线的收发状态是正常的。
d0596c7b3d4ab47ae06f930806d3f6f.png
而调整时钟初始化的校准值:        RCC_AdjustHSICalibrationValue(0x10);
校准值在下调到0x0B和上调0x12时,CAN通讯收发出现异常,CAN分析仪无法收到APM32E103发送的数据,E103的CAN错误状态寄存器也有错误计数,说明波特率相差过大无法正常通讯。
ef7da08e3b0baede4d5c9bf602a9940.png

所以校准值在0x0C~0x11的时候,总线还可以正常通讯,相对应的HSI频率为7.911Mhz~8.077Mhz。
也就是说CAN通讯能容忍的波特率偏差范围大约是±1%。
CAN通讯有比较复杂的仲裁和错误帧判定机制,CAN要在各种工程应用中的稳定通讯对通讯质量的要求也比较高。在CAN通讯出现异常时,串口还是可以正确的传输数据,说明CAN对波特率精度的要求是比串口通讯要高的。
而MCU的内部高速晶振HSI精度是比较有限的,
一般3.3V供电,25°条件下就在±1%范围内,刚好满足CAN通讯需求。
而在全温全压下是会超过±1%范围的。建议在有温度范围要求的场景下使用外部高速晶振。

打赏榜单

21小跑堂 打赏了 30.00 元 2022-12-29
理由:恭喜通过原创审核!期待您更多的原创作品~

评论

在做CAN通信时,因为其要求较高,且无时钟线,对系统的时钟要求则较高,使用时最好使用外部晶振,保证其通信质量。作者的试验也恰恰证实这这一点,继续加油!  发表于 2022-12-29 15:52
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

113

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

49

主题

113

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部