在确定数字的情况下,canbus波德率配置的逻辑是什么?
CAN_InitStructure.CAN_BS1 = CAN_BS1_2tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 16;
CAN_Init(CAN1, &CAN_InitStructure);发布于 2019-07-05 13:11:37
你忘了
CAN_InitStructure.SyncJumpWidth = CAN_SJW_1TQ;比特率将是:
BITRATE = (CANCLOCK / CAN_InitStructure.CAN_Prescaler) / (1 + CAN_InitStructure.CAN_BS1 + CAN_InitStructure.CAN_BS2)其中CANCLOCK是以赫兹为单位的CAN外围时钟。这取决于您的时钟树配置。
你的时间量子频率是TQF = CANCLOCK / CAN_InitStructure.CAN_Prescaler
时间量子本身TQ = 1/TQF (以秒为单位)
位时间是BITTIME = TQ * (CAN_InitStructure.SyncJumpWidth + CAN_InitStructure.CAN_BS1 + CAN_InitStructure.CAN_BS2)
记住,xxxx_3tq的意思是3 TQ
发布于 2019-07-07 21:24:45
为CAN配置波德率有点麻烦,但所有CAN控制器的工作原理都很相似。
您希望每个位的样本点接近87.5%的理想位置(如自动化/CANopen推荐中的CAN )。为了达到这个目的,您需要知道在样本点之前和之后有多少TQ (时间量子)。
每个TQ的长度由CAN控制器的时钟决定,由系统时钟导出和划分,每个TQ的长度为1个时钟周期。16 TQ通常是理想的,所以你会想在那之后选择一个除数。如果你在16兆赫运行系统时钟,你可以选择16除数,得到1兆赫的can时钟。请记住,内部RC振荡器是一个不可接受的CAN!您必须使用外部晶体或振荡器,以获得足够的精度。
采样点之前的段通常称为同步段(固定1 TQ)、传播段和相位段1--控制器与控制器之间的术语略有不同。这些段合在一起应占所需波德率的87.5%,而样本点后的段(通常称为相段2 )应构成其余部分。
同步跳跃宽度(SJW)与波特率计算本身无关,但与之相关。SJW确定给定波特率允许时钟偏离多少TQ --对于800 work或1000 work,您将其设置为3,否则1应该工作。
https://stackoverflow.com/questions/56903322
复制相似问题