[牛人杂谈] 一些常见的类似同步触发场景和机制

[复制链接]
 楼主| xinpian101 发表于 2025-7-16 10:39 | 显示全部楼层 |阅读模式
定时器事件触发其他操作:

触发 ADC (其他事件): 除了 PWM 比较匹配事件(如 PWM 中点),定时器还可以配置为在以下事件时触发 ADC:

更新事件 (UEV / Overflow): 定时器计数器溢出/重载时触发。常用于周期性、频率固定的采样,与 PWM 开关频率无关(例如采集温度、缓慢变化的电压)。

捕获/比较通道事件: 特定通道的比较匹配或输入捕获事件触发。可用于在特定时间点或响应外部信号边沿时采样。

刹车事件: 高级定时器在发生刹车(如过流保护信号)时触发 ADC,用于紧急状态下的快速诊断采样。

触发 DAC: 定时器事件(更新、比较匹配)可以触发 DAC 输出更新。这对于生成精确同步的波形(如与 PWM 同步的参考电压、特定时间点的模拟信号输出)至关重要。

触发 DMA:

存储器到外设: 定时器更新事件触发 DMA 将内存中的数据块(如波形表)传输到外设(如 DAC 数据寄存器、GPIO 输出数据寄存器),用于生成任意波形、控制 LED 阵列亮度变化等,无需 CPU 干预。

外设到存储器: 定时器事件触发 DMA 将 ADC 数据寄存器中的结果搬运到内存。这是实现 PWM 触发 ADC + DMA 的关键环节,构建了完整的高效数据采集流水线。

触发其他定时器 (主从模式): 一个定时器(Master)的输出触发信号(如 TRGO)可以作为另一个定时器(Slave)的时钟源、使能信号、复位信号或触发信号。这用于:

同步多个定时器的启动/停止。

创建更长周期的定时器(主定时器驱动从定时器计数)。

实现复杂的定时或 PWM 序列。

外部中断/事件触发:

触发 ADC: 外部 GPIO 引脚上的上升沿、下降沿或双边沿事件可以直接触发一次 ADC 转换。适用于需要快速响应外部信号变化的场合(如过零检测后立即采样交流电压、响应按键后采集传感器)。

触发定时器:

外部时钟模式: 使用外部引脚信号作为定时器的时钟源(计数时钟 CK_EXT)。

复位/启动/停止/门控: 外部信号可以复位定时器计数器、启动/停止计数、或作为门控信号(仅当门控信号有效时才计数)。

触发 DMA: 外部事件可以触发 DMA 传输,例如快速将 GPIO 输入状态(通过 IDR 或专用外设)搬运到内存,或者将内存数据快速输出到 GPIO。

通信接口事件触发:

USART/UART: 接收完成 (RXNE)、发送完成 (TC)、发送寄存器空 (TXE) 等事件可以触发 DMA 传输(接收数据到内存,发送内存数据到串口),极大减轻 CPU 负担,提高通信效率。

SPI: 接收缓冲区非空 (RXNE)、发送缓冲区空 (TXE) 事件触发 DMA。在高速 SPI 通信(如驱动显示屏、高速 ADC/DAC)中几乎是标配。

I2C: 事件(如地址匹配、字节传输完成)也可结合 DMA,但相对复杂些。

CAN: 报文接收 (Rx) 或发送 (Tx) 事件触发 DMA,用于高效处理 CAN 总线数据流。

触发 ADC/DAC: 通信接口的特定事件(如帧起始、特定字节接收完成)理论上也可以配置(通过交叉开关或事件路由器)来触发 ADC/DAC,用于实现通信协议与模拟信号采集/生成的同步,但这在标准外设中较少直接支持,可能需要额外逻辑。

ADC 自身事件触发:

规则组转换结束 (EOC): 规则通道组转换完成后,可以触发中断、DMA 请求,甚至在某些高级 MCU 中能触发其他外设(如 DAC 更新)。

注入组转换结束 (JEOC): 注入通道转换完成后触发中断或 DMA(如果支持)。注入通道用于高优先级打断规则转换。

模拟看门狗 (AWD): 当被监视的 ADC 通道电压超出设定阈值时,触发中断。可用于电压监控报警。

比较器事件触发:

模拟比较器输出状态变化(跳变)可以触发:

外部中断: 用于快速响应模拟信号比较结果。

定时器输入捕获: 精确记录比较器跳变发生的时刻。

定时器复位/启动/停止/门控: 控制定时器行为。

ADC 采样 (在特定 MCU 上): 当检测到信号达到某个阈值时立即启动 ADC 采样。常用于峰值检测、窗口比较触发采样。

编码器接口触发:

正交编码器的 Z 相(Index)脉冲信号,通常通过定时器的编码器接口捕获,可以作为一个精确的“原点”信号。这个信号可以用来:

触发 ADC 采样: 在电机/机械装置每次经过原点时进行状态采样(如位置、电流)。

触发定时器复位/同步: 确保定时器计数值与机械位置原点对齐。

触发中断/DMA: 进行原点相关处理。

核心思想与优势:

硬件自动化: 减少或消除软件轮询、标志检查、手动启动操作的需要,将 CPU 解放出来处理更高级的任务或进入低功耗模式。

精确同步: 硬件事件之间的触发延迟极低且确定(通常在几个时钟周期内),保证了操作的精确时序和同步性,这是软件中断难以达到的。

提高实时性: 硬件对事件的响应速度远超软件。

降低功耗: CPU 可以更长时间休眠,由硬件自动处理事件链。

简化软件: 软件只需要配置好触发链路,启动初始外设,然后等待结果或处理完成中断即可,逻辑更清晰。

提高可靠性: 避免了软件延迟或错过关键时间窗口的风险。

 楼主| xinpian101 发表于 2025-7-16 10:40 | 显示全部楼层
现代单片机通常都具备强大的事件路由器 (Event Router)、交叉开关 (Crossbar) 或可配置逻辑单元 (CLB / CLC) 功能。这些硬件模块允许工程师灵活地将一个外设产生的事件信号路由到另一个外设的触发输入端口,从而构建出复杂的、由硬件自动执行的同步触发链路。配置这些链路是开发高效、可靠嵌入式系统(尤其是实时控制系统)的关键技能。
蚊子的噩梦 发表于 2025-7-17 12:31 | 显示全部楼层
定时器触发ADC和DAC的操作确实可以提高系统的响应速度和效率,尤其是在需要精确同步的场景中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

1624

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部