硬汉嵌入式论坛

 找回密码
 立即注册
查看: 784|回复: 1
收起左侧

[CAN/FDCAN] 使用CANopenNode的两个问题。

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-6-27 17:19:15 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM17) //没有采用htim == canopenNodeSTM32->timerHandle
	{
		canopen_app_interrupt();
	}
  /* USER CODE END Callback 1 */
}

[C] 纯文本查看 复制代码
void ctlPP(uint8_t nodeID,int32_t target_position){
    CO_NMT_sendCommand(CO->NMT, CO_NMT_ENTER_OPERATIONAL, nodeID);//节点进入操作状态
    CO_SYNCsend(CO->SYNC);
    printf("%d joint position_actual_value=%ld\r\n",nodeID,OD_RAM.x2727_position_actual_value_m64_0);
    
    OD_RAM.x2700_controlword_m40_0 = 0x06;
    OD_RAM.x274F_target_position_m7A_0 = 0;
    CO_TPDOsendRequest(&CO->TPDO[JOINT1_PDO_CH1]);//关闭
    canopen_app_interrupt();
    
    OD_RAM.x2700_controlword_m40_0 = 0x07;
    OD_RAM.x274F_target_position_m7A_0 = 0;
    CO_TPDOsendRequest(&CO->TPDO[JOINT1_PDO_CH1]);//准备使能
    canopen_app_interrupt();
    
    OD_RAM.x2700_controlword_m40_0 = 0x0f;
    OD_RAM.x274F_target_position_m7A_0 = 0;
    CO_TPDOsendRequest(&CO->TPDO[JOINT1_PDO_CH1]);//使能
    canopen_app_interrupt();
    //06->07->0F
    CO_SYNCsend(CO->SYNC);

    OD_RAM.x2700_controlword_m40_0 = 0x2f;
    OD_RAM.x274F_target_position_m7A_0 = 0;
    CO_TPDOsendRequest(&CO->TPDO[JOINT1_PDO_CH1]);//发TPO0
    canopen_app_interrupt();

    OD_RAM.x2700_controlword_m40_0 = 0x3f;
    OD_RAM.x274F_target_position_m7A_0 = target_position;
    CO_TPDOsendRequest(&CO->TPDO[JOINT1_PDO_CH1]);//发TPO0
}

1.我是在freeRTOS中使用的,原来的代码是htim == canopenNodeSTM32->timerHandle没法使用,改成了上面的。pdo不能够即时触发,[CANopenNode协议栈使用CO_TPDOsendRequest函数只有最后一条生效]之前已经说过,我在代码中穿插入canopen_app_interrupt()就能即时发送了。
2.第二个问题是配置了rpdo,CO_SYNCsend(CO->SYNC),OD_RAM.x2727_position_actual_value_m64_0是一直都是上次获得的值。也就是需要连续两次sync触发CO_SYNCsend(CO->SYNC)才能正确同步,在代码里面写两个CO_SYNCsend或者加延时都是没有用的。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-6-27 17:24:31 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 06:06 , Processed in 0.204302 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表