DMFDCAN使用说明(Version1.1)
这段时间在DM电机上实在吃了太多苦头,胸中块垒堆砌不吐不快
观前提示
提前备好DM相关文档+阅读poria_cocos博客
1.部分参数详解

Frame Format:直译为帧格式,有classic mode,FD mode with BitRate Switching ,……without BitRate Swtching三种格式。
| 差别对比 | classic mode | FD mode with BitRate Switching | FD mode without BitRate Switching |
|---|---|---|---|
| 格式 | CAN2.0 | FDcan | |
| 数据段字节数 | 0-8 | 0-64 | |
| 仲裁段波特率 | 1M max | ||
| 数据段波特率 | 1M max,总与仲裁段波特率相同 | 5M max,允许数据段和仲裁段使用不同波特率 |
可以看到,选用classic mode时,我们工作在can2.0模式下。由于1M及以下波特率时can2.0和FDcan表现上并无差别,所以一切正常工作。当我们需要提高数据段波特率以支持搭载更多电机时,必须开启FD mode with Bitrate Switching ,只有这个模式允许切换仲裁段的低频至数据段的高频,并通过一个bitrate switching位实现标示。如果使用其他模式,cubemx将总采用仲裁段时钟收发。
BRP timeseg1,2:
规定读取一位电平所用时间。CAN通讯中,BRP为预分频参数,BRP和CAN时钟主频共同决定1Tq对应的实际时长。而Tq(时间量子)是对时间的抽象层。
time_seg1,2其单位均为Tq,二者共同定义接受点与发送点。
一位显性电平时间长度为timeseg1+timeseg2+SJW。SJW是节点自动延时补偿设置,其上限由参数Sync Jump Width指定。总之计算方法如下:
$$1Tq=\frac{1}{APB\ Frequency/BRP}$$
$$1Bit=timeseg1+timeseg2+SJW\ (\text{小于Sync Jump width})$$
下面这段引用poria_cocos的博客,其实内涵差不多,但是这个有图更详细,从波特率的视角解释了问题。

剩下这些参数自己搜,这里贴两个链接:
https://blog.csdn.net/hans_yu/article/details/89400011 Can总线的位时序和参数设置
https://poria-cocos.github.io/aritcles/fa9b8fb3.html poria cocos的实践教程
2.TDC与错误帧解读
在将数据段波特率提到4M以上时,会出现仲裁段存在而数据段丢失的情况。其本质是发送节点回读过快,错误读取总线电平,直接进错误帧然后朝外面吐隐性电平。
解决方法1:
不用4M以上的数据段波特率(目前)。
解决方法2:
自定义TDC,即回读延迟,这玩意我还没弄明白。咕咕咕
point:
但是有意思的是我们可以在正常通讯的情况下,调用较大的TDC实现回读过慢导致的读取总线电平错误的情况,会出现类似的错误帧。如下图(此时为4M波特率):

波形等后面有空了补,总之就是你发现在控制段之后数据段直接被拉低了就是数据段报错了,别被逻辑分析仪的0x00 0xFF给骗了
3.现在的DM所用波特率与计算方法
可挂载电机数计算器(DM),现在用的4M
4.DM电机上手全流程
-
硬件调试:主控拓展版级联can小板至电调,使用一同n反结构
-
软件尝试:上位机can指令时序确认
-
上机:调教波特率这种底层
-
愉快编写电机
-
毒点:3519的写参数命令和存参数命令无法使用上位机一键配置完成,2325可以。自定义can命令发送详见达妙can文档即可
5.各个控制模式简要讲解
MIT:所见即所得
POS:可以通过修改PMAX来更改转动圈数上限
SPD:所见即所得
浙公网安备 33010602011771号