当前位置: 首页 > ops >正文

嵌入式开发--汇川伺服干扰造成FDCAN模块错误过多导致死机

情况描述

FDCAN运行时,会有一个FDCAN_ECR寄存器来统计出错的情况,我遇到的情况就是TEC和REC数值过大,导致FDCAN模块挂起。
一般来说,只要总线上的噪声情况不是很严重的话,这两个值都不会很大的。而且当正常发送或正常接收数据包时,这两个计数器的值还会变小。

但我的情况是汇川的伺服驱动器会在CAN总线上发出噪声信号,如下图:
很规律的,每10ms来一组脉冲,持续时间约为2.5ms,大约占用25%的总线时间。这些脉冲会造成FDCAN错误计数器的值增加。

干扰脉冲在伺服上电的时候是没有的,当向0x6040写6,7,0f,1f,2f的过程中,写完0f后,干扰立即出现。
在这里插入图片描述

在这里插入图片描述
对红圈中的一个干扰脉冲放大后如下图:
在这里插入图片描述
其中一组小脉冲总持续时间约0.5ms, 频率约为25MHz。

咨询汇川,说是没法关掉,需要工程师上门检测。这是外地客户寄来给我的样品,而且我手上就只有这一个伺服,开发时间也很紧张,不能寄回去,于是作罢。

尝试解决办法

1 试图清除ECR寄存器

这玩意是只读寄存器,是不能直接清零的。
于是通过重新初始化FDCAN模块来尝试清零。
试过的办法

  MX_FDCAN1_Init();
HAL_FDCAN_Init(&hfdcan1) ;
HAL_FDCAN_DeInit(&hfdcan1) ;
HAL_FDCAN_Init(&hfdcan1) ;

RESET引脚

各种初始化办法都不行,当然按复位键是可以清零的,或者说控制RESET引脚是可以的。但如果这样搞会严重影响其他设备的运行。这个芯片级复位的方案不可接受,只能说万不得已才用。

模块级复位

最后解决的办法是模块级复位,即只复位FDCAN模块
在这里插入图片描述

__HAL_RCC_FDCAN_FORCE_RESET(); //对CAN1外设实施强制复位
delay_us(100);
__HAL_RCC_FDCAN_FORCE_RESET();//释放对CAN1外设的强制复位

通过设置RCC_APB1RSTR1的FDCAN RST位进行FDCAN模块的复位。
代码如下:

//检测到过多错误时,重新初始化FDCAN模块
void LL_fdcan_check_err(void)
{FDCAN_ErrorCountersTypeDef err1;HAL_FDCAN_GetErrorCounters(&hfdcan1, &err1);if((err1.RxErrorCnt>0x40) || (err1.TxErrorCnt > 0x40)){__HAL_RCC_FDCAN_FORCE_RESET();delay_us(100);__HAL_RCC_FDCAN_RELEASE_RESET();//HAL_FDCAN_Init(&hfdcan1);MX_FDCAN1_Init();LL_can_init();HAL_FDCAN_Start(&hfdcan1);}
}

解决及后续

当然,解决干扰源的问题才是正道,但我手上就这么一个伺服驱动器,等后续开发完成,再继续更新吧。

如果有哪位知道怎么解决汇川伺服干扰源的问题,请留言告知,感谢。

http://www.xdnf.cn/news/14243.html

相关文章:

  • 芯片测试之 trim修调测试详解
  • AI结构化数据:智能聊天与传统开发的结合
  • Java大模型开发入门 (6/15):对话的灵魂 - 深入理解LangChain4j中的模型、提示和解析器
  • 从0到1掌握数据库安全:用户认证与授权的深度实践
  • ToonMe:照片变卡通,创意无限
  • Java大模型开发入门 (8/15):连接外部世界(上) - RAG入门与文档加载
  • <10>-MySQL索引特性
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的Dify一键部署
  • HTML+CSS 登陆框动态切换
  • NGINX 四层上游健康检查模块实战`ngx_stream_upstream_hc_module`
  • 会计 - 财务报告
  • 力扣 2616. 最小化数对的最大差值 题解
  • cpu微码大全 微码添加工具 八九代cpu针脚屏蔽图
  • c++ 右值引用移动构造函数
  • 功能安全实战系列10-英飞凌TC3xx_SRI总线监控开发
  • 动态代理选择:JDK vs CGLIB
  • 2.6 激光雷达消息格式
  • ESP32开发-ESP32P4环境配置
  • 【AD笔记】嘉立创元件导入到AD中(原理图-pcd-3D模型)
  • std::ifstream file(filename);详细解释
  • 十字滑台是否可以进行自动化控制?
  • window11等禁止系统更新的设置
  • 【数梦工场】【智慧航空AI大赛】比赛分享 阅读笔记
  • Hugging face 和 魔搭
  • 【论文阅读】Qwen2.5-VL Technical Report
  • Unity 对象层级处理小结
  • UI前端与大数据:如何构建实时数据分析系统?
  • 13_算法链与管道
  • 用于生成式新颖视图合成的密集 3D 场景完成
  • Hashcat使用教程:快速上手密码恢复工具