打印
[STM32F4]

STM32F407 CANopen RPDO接收异常

[复制链接]
1191|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-10-27 14:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用STM32F407基于CANopen_Cia402标准来控制电机,但是在电机RPDO1设置完后,想通过RPDO1来改变电机控制字的时候发现它的值并未改变,用SDO则能成功改变。
下面是我的代码,不知道是我初始化有问题还是我的PDO报文有问题,劳请大神们指点
这是报文部分的代码
/*------NMT初始化------*/        {0x02,0x00+NodeID},//关闭远程节点        {0x82,0x00+NodeID},//复位NodeID对应节点        /*---------------------*/        {0x2f,0x60,0x60,0x00,0x04,0x00,0x00,0x00},//设置伺服运行模式为转矩轮廓模式        {0x40,0x61,0x60,0x00,0x00,0x00,0x00,0x00},//核对运行模式        {0x23,0x15,0x20,0x00,0x01,0x00,0x00,0x00},//设置正向转矩速度限制为1%额定速度        {0x23,0x16,0x20,0x00,0x01,0x00,0x00,0x00},//设置反向转矩速度限制为1%额定速度        {0x2f,0x01,0x1A,0x00,0x00,0x00,0x00,0x00},//清除TPDO2的映射项    {0x23,0x00,0x14,0x01,0x00+NodeID,0x20,0x00,0x80},//禁能RPDO1        {0x2F,0x00,0x16,0x00,0x00,0x00,0x00,0x00},//清除RPDO1的映射项        {0x23,0x00,0x16,0x01,0x10,0x00,0x40,0x60},//将0x6040 子索引0x00 数据长度为16位的(控制字)作为第一个映射对象        {0x23,0x00,0x16,0x02,0x10,0x00,0x71,0x60},//将0x6071 子索引0x00 数据长度为16位的作为第二个映射对象        {0x2F,0x00,0x14,0x02,0xff,0x00,0x00,0x00},//将RPDO1的传输类型设置为异步,即将接收到的数据直接更新到应用    {0x2F,0x00,0x16,0x00,0x02,0x00,0x00,0x00},//设置RPDO1的映射项位2个    {0x23,0x00,0x14,0x01,0x00+NodeID,0x20,0x00,0x00},//使能RPDO1        {0x23,0x00,0x18,0x01,0x80+NodeID,0x01,0x00,0x80},//禁能TPDO1        {0x2F,0x00,0x1A,0x00,0x00,0x00,0x00,0x00},//清除TPDO1的映射项        {0x23,0x00,0x1A,0x01,0x10,0x00,0x41,0x60},//将0x6041 子索引0x00 数据长度为16位的(状态字)作为第一个映射对象        {0x23,0x00,0x1A,0x02,0x10,0x00,0x77,0x60},//将0x6077 子索引0x00 数据长度为16位的(实际转矩值)作为第二个映射对象        {0x2F,0x00,0x18,0x02,0x01,0x00,0x00,0x00},//设置TPDO1的传输类型为接收一个同步帧时发送        {0x2F,0x00,0x1A,0x00,0x02,0x00,0x00,0x00},//设置TPDO1的映射项为2个        {0x23,0x00,0x18,0x01,0x80+NodeID,0x01,0x00,0x00},//使能TPDO1        {0x01,0x00+NodeID},//启动节点        {0x00},//心跳        {0x00},//同步        {0x06,0x00,0x00,0x00},        {0x07,0x00,0x00,0x00},        {0x0f,0x00,0x00,0x00},//3步通过RPDO1改变控制字使得节点允许操作
下面是COB-ID
/*-----NMT初始化-----*/        0x00,        0x00,        /*-------------------*/        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,//RPDO1设置        0x600 + NodeID,    0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,//tpdo1设置        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x600 + NodeID,        0x00,//开启节点        0x700 + NodeID,        0x80,        0x200 + NodeID,        0x200 + NodeID,        0x200 + NodeID,

使用特权

评论回复
沙发
classroom| | 2023-10-31 15:38 | 只看该作者
CAN总线上的通信是否正常

使用特权

评论回复
板凳
laocuo1142| | 2023-10-31 15:38 | 只看该作者
在STM32F407中,RPDO接收中断可能被屏蔽或未正确配置。检查中断使能位和中断掩码,确保它们被正确设置。

使用特权

评论回复
地板
flycamelaaa| | 2023-10-31 15:39 | 只看该作者
检查一下程序代码有没有错误或逻辑问题

使用特权

评论回复
5
AloneKaven| | 2023-10-31 22:09 | 只看该作者
通信的问题吧

使用特权

评论回复
6
童雨竹| | 2024-2-9 07:18 | 只看该作者

VHumanBody为 8kV

使用特权

评论回复
7
Wordsworth| | 2024-2-9 08:21 | 只看该作者

电路中有一组并行线路,正常信号通过时候基本不受影响

使用特权

评论回复
8
Clyde011| | 2024-2-9 09:24 | 只看该作者

更小的较小的c形孔可以做到(低至0.35mm)。

使用特权

评论回复
9
公羊子丹| | 2024-2-9 10:17 | 只看该作者

人体具有300PF的等效电容

使用特权

评论回复
10
万图| | 2024-2-9 11:20 | 只看该作者

对于插件电感,我们一般见的比较多的就是UU型和EE型以及环型

使用特权

评论回复
11
Uriah| | 2024-2-9 12:23 | 只看该作者

您可能已经在某些Wi-Fi模块上看到过它们,

使用特权

评论回复
12
帛灿灿| | 2024-2-9 14:19 | 只看该作者

使用的开关管数量多,且要求参数一致性好,驱动电路复杂,实现同步比较困难。这种电路结构通常使用在1KW以上超大功率开关电源电路中。

使用特权

评论回复
13
Bblythe| | 2024-2-9 15:22 | 只看该作者

需要让电源热稳定,在稳定后再进行测试

使用特权

评论回复
14
周半梅| | 2024-2-9 17:18 | 只看该作者

反激式电路与正激式电路相反,

使用特权

评论回复
15
Pulitzer| | 2024-2-9 18:21 | 只看该作者

理解了共模噪声我们就知道共模电感就知道为什么共模电感会接在交流一侧了

使用特权

评论回复
16
xdvca| | 2024-7-31 23:43 | 只看该作者
0x600 + NodeID是你的RPDO1和TPDO1的COB-ID,这个COB-ID需要与从站(电机控制器)匹配。

使用特权

评论回复
17
xdvca| | 2024-7-31 23:44 | 只看该作者
NodeID与电机控制器的节点ID一致。

使用特权

评论回复
18
为你转身| | 2024-8-31 13:27 | 只看该作者
使用CANopen协议控制电机时,正确配置和调试CANopen PDO是非常重要的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2061

主题

7478

帖子

10

粉丝