【分享帖】云台电机调通了,原因是在CAN的初始化配置上面
3587
0
18
2015-05-08
云台电机我已经没白天没黑夜的调试一个星期了,之前就一直没调通过。一开始怀疑电源的问题,更改供电方式后还是不转。
就怀疑是CAN通信问题,可是经过和底盘主控的CAN通信发现是正常的。
然而,和底盘通信成功却没和电机通信成功。云台主控一直没接收到电机返回的数据,进入不了CAN接收中断。
而且,电机一上电就会导致云台主控停止发送控制云台电机的命令。
就测试经过CAN收发器的波形,发现电机的CAN波形是严格的1MHZ,云台主控发出的CAN波形却不是1MHZ。
我是按照官方给的程序配置的CAN初始化程序,其中配置CAN的频率有这么一段
[code] can.CAN_SJW = CAN_SJW_1tq;
can.CAN_BS1 = CAN_BS1_9tq;
can.CAN_BS2 = CAN_BS2_4tq;
can.CAN_Prescaler =3; //CAN BaudRate 1/(1+9+4)/3=1Mbps[/code]这一段经过计算是1MHZ,但是示波器上却显示出来的波形小于1MHZ,一个数据位是2.64US,频率大概是1/2.64=0.379MHz;
所以就调整上面的一些参数,让最终的CAN波形达到1MHZ。然后电机上电就转起来了!!!:lol
调整参数有技巧:
1.can.CAN_SJW = CAN_SJW_1tq;一般是固定这个值不变的。
2.can.CAN_BS1 的范围是 CAN_BS1_1tq ------ CAN_BS1_16tq 且一般大于can.CAN_BS2 对应的数值
3.can.CAN_BS2 的范围是CAN_BS2_1tq ------ CAN_BS2_8tq 且一般小于can.CAN_BS1 对应的数值
4.can.CAN_Prescaler 这个是分频系数,范围1-1024,不过一般不要设太大。
5.不要拘泥于那个公式算出来的频率,我是看着示波器调的,最终调出的结果算出来就不是1MHZ了,但是示波器上就是1MHZ,这就能正常通信了!
6.CAN的时钟是APB1 ,上述步骤不能达到目的的话就看看APB1 的时钟配置 是否正常吧!
贴出来我调出正常波形的CAN配置程序吧:
[code]can.CAN_SJW = CAN_SJW_1tq;
can.CAN_BS1 = CAN_BS1_12tq;
can.CAN_BS2 = CAN_BS2_3tq;
can.CAN_Prescaler =1; [/code]
但是,我不保证你们使用这些个参数就能正常通信,参数不重要,重要的是调参的方法!
就怀疑是CAN通信问题,可是经过和底盘主控的CAN通信发现是正常的。
然而,和底盘通信成功却没和电机通信成功。云台主控一直没接收到电机返回的数据,进入不了CAN接收中断。
而且,电机一上电就会导致云台主控停止发送控制云台电机的命令。
就测试经过CAN收发器的波形,发现电机的CAN波形是严格的1MHZ,云台主控发出的CAN波形却不是1MHZ。
我是按照官方给的程序配置的CAN初始化程序,其中配置CAN的频率有这么一段
[code] can.CAN_SJW = CAN_SJW_1tq;
can.CAN_BS1 = CAN_BS1_9tq;
can.CAN_BS2 = CAN_BS2_4tq;
can.CAN_Prescaler =3; //CAN BaudRate 1/(1+9+4)/3=1Mbps[/code]这一段经过计算是1MHZ,但是示波器上却显示出来的波形小于1MHZ,一个数据位是2.64US,频率大概是1/2.64=0.379MHz;
所以就调整上面的一些参数,让最终的CAN波形达到1MHZ。然后电机上电就转起来了!!!:lol
调整参数有技巧:
1.can.CAN_SJW = CAN_SJW_1tq;一般是固定这个值不变的。
2.can.CAN_BS1 的范围是 CAN_BS1_1tq ------ CAN_BS1_16tq 且一般大于can.CAN_BS2 对应的数值
3.can.CAN_BS2 的范围是CAN_BS2_1tq ------ CAN_BS2_8tq 且一般小于can.CAN_BS1 对应的数值
4.can.CAN_Prescaler 这个是分频系数,范围1-1024,不过一般不要设太大。
5.不要拘泥于那个公式算出来的频率,我是看着示波器调的,最终调出的结果算出来就不是1MHZ了,但是示波器上就是1MHZ,这就能正常通信了!
6.CAN的时钟是APB1 ,上述步骤不能达到目的的话就看看APB1 的时钟配置 是否正常吧!
贴出来我调出正常波形的CAN配置程序吧:
[code]can.CAN_SJW = CAN_SJW_1tq;
can.CAN_BS1 = CAN_BS1_12tq;
can.CAN_BS2 = CAN_BS2_3tq;
can.CAN_Prescaler =1; [/code]
但是,我不保证你们使用这些个参数就能正常通信,参数不重要,重要的是调参的方法!
文章标签
请问这篇文章对你有用吗?
【分享帖】云台电机调通了,原因是在CAN的初始化配置上面