嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解

目录

一、移位相关问题

1.1 类型提升规则

  • C语言中的类型提升 :当对小于 int 的类型(如 uint8_t、uint16_t)进行算术运算时,它们会先被提升为 int 类型(32位),然后再执行运算。

1.2 移位运算注意事项

  • 左右移位差异 :移位时左边的0不影响计算,右边的0影响计算。例如:
    • 0x01 = 1(二进制 0000 0001)
    • 0x10 = 16(二进制 0001 0000)

1.3 N位编码满量程值

  • 公式正确性 :N位数字编码的满量程值是 2^N - 1,不是 2^N。
  • 原因分析 :
    1. N位二进制能表示的数值范围是 0 到 2^N - 1,共有 2^N 个离散状态。
    2. 当编码值为最大值 2^N - 1 时,应输出物理量的满量程值。
    3. 映射公式的分母必须是 2^N - 1,而不是 2^N------否则永远达不到满量程输出。
  • 实用提示:记得换算的时候多少位就是除以多少,不要照搬公式。

二、简称和符号含义

2.1 通信协议相关

FDCAN
  • 全称:Flexible Data-rate Controller Area Network
  • 中文:灵活数据速率控制器局域网络
  • 说明:传统 CAN 协议的升级版,最主要的区别是波特率可以更高,单帧能携带的数据更多。
HSE
  • 全称:High-Speed External
  • 中文:高速外部时钟
  • 说明 :即板载晶振(如8MHz),是系统高精度基准源。 注意:确保CAN/EtherCAT波特率稳定的前提是必须启用HSE,而非内部RC振荡器。
PLL
  • 全称:Phase-Locked Loop
  • 中文:锁相环
  • 说明:负责将HSE低频倍频至芯片主频(如72M~600MHz),直接决定 MCU 的运算速度。
PCLK
  • 全称:Peripheral Clock
  • 中文:外设时钟
  • 说明:由系统主频分频后供给各种外设(如CAN、定时器、串口等),直接决定通信波特率和电机脉冲计数精度。
  • 一句话总结:HSE 起振 → PLL 倍频出 SYSCLK(系统主频) → MCU 内核与 AHB 总线跑 SYSCLK → AHB 分频出 APB1/APB2 总线时钟 → APB 给外设供 PCLK(PCLK1 / PCLK2)

2.2 CANopen 相关术语

PDO
  • 全称:Process Data Object
  • 中文:过程数据对象
SDO
  • 全称:Service Data Object
  • 中文:服务数据对象
PDO vs SDO 对比表
特性 PDO SDO
用途 实时控制数据(高频、周期性交换) 非实时参数配置(低频、按需访问)
传输方式 广播或周期轮询(无需确认) 点对点请求/响应(需确认)
实时性 微秒级延迟(严格同步) 毫秒级延迟(异步)
数据量 小数据块(如:1 字节 I/O 状态) 大数据块(如:配置文件、参数表)
可靠性 无重传机制(丢包需下一周期补偿) 支持重传(确保数据完整)
典型场景 电机位置控制、传感器读取 修改伺服参数、上传日志
cob_id
  • 全称:Communication Object ID
  • 中文:CANopen中的CAN ID
CoE
  • 全称:CANopen over EtherCAT
  • 说明 :
    • 速度提升:1Mbps → 100Mbps,通信周期从毫秒级提升至250μs级。
    • CoE优点 :
      • ⚡ 同步:软件抖动 → 硬件分布式时钟,多轴同步误差从微秒级压缩至亚微秒级(<1μs)。
      • 🔌 接线:手拉手菊花链加终端电阻 → 普通网线任意拓扑,单站掉线不影响整体通信。
      • 📁 大文件:SDO 8字节低速分段传输 → 邮箱大包瞬间传输,固件升级极快。
      • ✅ 组网:手动拨码设节点 → ESI自动扫描即插即用,免去繁琐的节点地址分配。
BRS
  • 全称:BitRateSwitch
  • 中文:FDCAN比特率切换

2.3 数学符号

  • Π:这是希腊字母π(圆周率)

三、交流与反馈

欢迎大家有问题评论交流 (* ^ ω ^)

如果您在阅读过程中有任何疑问或建议,欢迎在评论区留言讨论!

相关推荐
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
Seoyoneh4 天前
呼叫中心系统上云还是本地部署?架构、成本与运维全维度技术对比
人工智能·信息与通信·通信
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊4 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型