[开发工具] TTCAN是啥?一文答疑,带你揭开时间触发CAN的神秘面纱
前言最近在折腾CAN总线偶然发现TTCAN觉得这玩意儿挺酷但网上资料要么太深奥要么全是术语翻得我晕头转向。所以我花了点时间整理了一下跟大家聊聊这玩意儿。这篇文章不细抠CAN协议帧那些复杂细节种类太多讲不过来就聚焦CAN和TTCAN本身做个简单分享哈欢迎交流一、TTCAN是啥跟标准CAN有啥区别先说标准CANController Area Network。CAN总线就像一个热闹的微信群群里每个设备节点比如汽车的刹车、发动机控制器有啥事就喊一嗓子发消息。谁的ID优先级高谁先被听见这叫事件触发。但问题来了群里人一多消息挤得慌低优先级的消息可能得排队甚至被挤掉。像刹车这种关键信号延迟可不行TTCAN时间触发CAN就是给CAN加了个“时间表”。就像微信群不让随便喊了得按日程表轮流发言。比如刹车信号固定9:00发发动机信号9:05发谁也别抢。这样消息就能准时到达不会因为总线忙而延迟。TTCAN特别适合需要高确定性的场景比如汽车刹车、转向、无人驾驶或者工业自动化。二、CAN vs TTCAN简单对比-触发方式- CAN有事就发靠优先级抢总线。- TTCAN按时间表发像火车时刻表准点到秒。-确定性- CAN高优先级消息稳低优先级可能等半天。- TTCAN每条消息有自己的“专属时间”不怕挤。-时间同步- CAN靠位同步节点没统一时间概念。- TTCAN所有节点共享“全局时钟”靠一个“时间主节点”校准。-场景- CAN车窗、灯光这些普通场景够用。- TTCAN刹车、无人驾驶这种硬核实时场景。图1CAN vs TTCAN对比三、TTCAN咋工作的核心原理讲明白TTCAN的核心是个“时间表”叫系统矩阵System Matrix就像学校的课程表规定啥时候发啥消息。整个流程我拆成几块慢慢讲1. 全局时间让大家手表对齐TTCAN要求所有节点时间一致就像大家得看同一块表。咋做到呢- 网络里有个“时间主节点”Time Master它会定期发个参考消息Reference Message告诉大家“现在是几点”。- 参考消息带个时间戳比如“当前1000微秒”其他节点收到后调自己的本地时钟。- 每个节点有个时间计数器16位或19位取决于TTCAN级别按网络时间单位NTU递增。NTU一般是1微秒1 Mbit/s的CAN。例子时间主节点像学校广播每小时喊“现在是上午9点”每个教室节点听到后调钟保持时间一致。2. 系统矩阵消息的日程表系统矩阵就像课程表规定每个消息的“发言时间”。它包含-基本周期Basic Cycle一个完整的时间表比如一小时包含多个时间窗口。周期完就循环。-时间窗口Time Window-独占窗口专属时间只让特定消息发像VIP包场。比如刹车信号9:00-9:01发。-仲裁窗口像标准CAN消息抢总线优先级高的先发。-空闲窗口留着以后用或者给不重要的消息。-矩阵周期多个基本周期组成一个大循环像一周的课表。图2系统矩阵示意图3. 参考消息同步的指挥棒参考消息是TTCAN的“心脏”由时间主节点发干两件事-同步时间告诉大家当前时间校准时钟。-触发周期标志基本周期开始后面按时间表发消息。参考消息有-特殊ID节点一看就知道是“时间信号”。-时间戳1字节或4字节取决于级别。-主节点优先级最后3位主节点挂了备份主节点接管。例子参考消息像火车站广播“现在9:00下一班车是刹车消息”节点听到后对齐时间按表发消息。4. 通信流程按表发车TTCAN的通信像火车发车1. 时间主节点发参考消息宣布“新周期开始”。2. 节点按系统矩阵的时间窗口发消息- 独占窗口只有指定消息能发别人别插嘴。- 仲裁窗口像标准CAN抢总线。3. 周期结束主节点再发参考消息进入下一个周期。4. 主节点故障备份主节点Potential Time Master接手。图3TTCAN通信流程5. TTCAN的两种级别TTCAN分两种-Level 1基础版16位时间计数器NTU1微秒够用大多数场景。-Level 2高级版19位计数器NTU更精细小于1微秒还能暂停周期等外部事件适合超高精度场景。例子Level 1像普通手表精确到秒Level 2像计时器精确到毫秒。四、TTCAN咋同步为啥这么稳TTCAN的同步比标准CAN强因为它管两层同步位级同步保证每个位发得准和全局时间同步保证节点时间一致。我来拆解1. 位级同步和CAN一样每个CAN位分成几段-同步段1个时间量Tq节点检测电平跳变比如从1到0对齐时间。-传播段补偿总线延迟。-相位缓冲段1和2调整采样点防止时钟偏差。-采样点读总线电平的地方。如果节点时钟有点偏差靠重同步调整跳变早了延长缓冲段晚了缩短用同步跳转宽度SJW控制范围。例子像大家一起跳舞音乐电平跳变响时踩准节拍有人快慢了就小调步伐。2. 全局时间同步TTCAN独有- 时间主节点发参考消息带时间戳。- 节点收到后把本地时间计数器调到跟主节点一样。- 如果时钟偏差微调计数器速度保持同步。- 主节点挂了备份主节点接管继续发参考消息。3. 为啥稳-高精度时钟用晶振误差几十ppm时间准得像瑞士表。-容错机制主节点切换、错误检测CRC、位错误防止崩盘。-差分信号CAN用CAN_H和CAN_L抗干扰边沿清晰同步更准。图4同步机制示意图五、APM32F407能玩TTCAN吗手头有块APM32F407开发板查了下资料它的CAN控制器支持标准CAN 2.0A/2.0B最高1 Mbit/s有3个发送邮箱和2个接收FIFO功能跟STM32F407差不多。但官方文档没提TTCAN支持估计硬件上没直接支持TTCAN的全局时间同步功能。不过TTCAN Level 1可以用软件模拟比如- 用APM32F407的CAN控制器实现位级同步配置CAN_BTR寄存器设置Tq、SJW等。- 用定时器模拟时间计数器记录全局时间。- 写代码解析参考消息校准时间安排时间窗口。但这得花不少工夫软件模拟的精度和稳定性可能不如专用TTCAN芯片比如Bosch的TTCAN_TC。如果项目要求不高标准CAN够用TTCAN就先放放毕竟配置时间表挺麻烦的。六、TTCAN的优缺点-优点1. 准时消息按时发刹车信号绝不迟到。2. 安全时间同步错误检测系统稳。3. 兼容标准CAN节点能收TTCAN消息升级方便。4. 容错主节点挂了有备份网络不崩。-缺点1. 复杂得设计时间表配置窗口开发费劲。2. 硬件要求Level 1能软件搞Level 2可能要专用芯片。3. 灵活性差突发消息得挤仲裁窗口随机性差。4. 带宽浪费独占窗口可能空闲效率不高。例子TTCAN像高铁准点安全但票贵标准CAN像公交便宜灵活但高峰期挤。七、TTCAN适合啥场景TTCAN专为高实时性、高安全性场景设计比如-汽车线控刹车、转向、油门延迟不得。-无人驾驶传感器、控制器得精确同步。-工业自动化生产线机器人按节拍干活。-电力系统同步监控电网状态。例子无人驾驶里刹车信号必须0.1秒内到TTCAN保证准时发安全第一。八、常见问题解答1. TTCAN需要啥硬件Level 1可以用普通CAN控制器像APM32F407加软件搞定Level 2可能要专用芯片精度更高。2. TTCAN和CAN能混用吗能标准CAN节点能收TTCAN消息但不能参与时间调度适合逐步升级。3. TTCAN同步有多准Level 1到1微秒Level 2更细取决于晶振几十ppm误差。4. TTCAN有啥局限开发复杂突发消息支持差适合周期性任务。九、扩展问题解答1. TTCAN的时间表咋设计得根据消息的周期和优先级分配窗口。比如刹车消息每10ms发一次占独占窗口次要消息挤仲裁窗口。可以用Excel列时间表算好每个窗口的NTU数调试时看总线负载别超100%。2. TTCAN的参考消息咋实现时间主节点定期发个特殊ID的消息带时间戳。其他节点收到后解析时间戳调本地计数器。可以用CAN控制器的过滤器识别参考消息省点CPU。十、总结TTCAN就是CAN的“高铁版”靠参考消息和系统矩阵让消息准时发适合刹车、无人驾驶这种硬核场景。核心是-全局时间时间主节点发参考消息校准时钟。-系统矩阵规定发车时间独占窗口最稳。-同步机制位级同步全局同步双保险。-容错主节点挂了有备份稳得一批。APM32F407的CAN功能很强适合标准CAN想玩TTCAN得费点心思软件模拟。刚接触TTCAN的我还在摸索欢迎大家留言分享经验---------------------作者DKENNY链接https://bbs.21ic.com/icview-3474828-1-1.html?_dsign491e7af5来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。