ZHCAFT7 October 2025 CC2340R5
使用单个 CC2340R5 的 ADC 外设时,由于需要测量的 ADC 输入数量(ADC_COUNT 为五个)多于可用的寄存器数量(四个),并且还必须在每个 PWM 占空比输出周期(即以 PWM_PERIOD/2 的速率)采样 ISEN 引脚(电机电流),因此对所有相关 ADC 通道进行测量存在一定难度。所采用的实现方式是使用经过修改的 ADCBuf TI 驱动器,它利用 ADC 和 DMA 在不中断 CPU 的情况下快速高效地填充大小为 ADCSAMPLESIZE 的 ADC 缓冲区,持续测量 ISEN 和 VSENPVDD(系统电压),并在此过程中定期中断此过程,同时以 ADC_INTERVAL 的速率测量其余 VSENA、VSENB 和 VSENC ADC 引脚。因此,由于每次 ADC_INTERVAL 计时器到期时触发的单次 ADC 测量所需的时间和频率,通过 ADCBuf 获取的每个通道的 ADC 测量次数略低于 PWM_PERIOD/2。由于 ADCBuf 驱动器已配置为通过 PWM LGPT 活动触发 ADC,因此在电机停止时,驱动器不会进行测量。相比之下,每当 ADC_INTERVAL 发生时,单次 ADC 测量都是有效的,与电机是否运转无关。
在 ADC 外设上还启用了窗口监控器,以便在最新的 ISEN 测量值进入或超过窗口限制时,能够立即采取相应措施,并在 adcBufCallback 中进行进一步处理。当测量值超过 WINDOW_LOW 时,ADC 回调状态 ADC_INT_INIFG 会减少 PWM 占空比,直到占空比低于窗口值为止。此时,ADC_INT_LOWIFG 状态会使占空比回到原始值。如果超过 WINDOW_HIGH,则 ADC_INT_HIGHIFG 状态会立即停止电机。任意 ADC 存储寄存器都可以触发窗口监控器,但低窗口阈值和高窗口阈值各只能设置一个值。目前仅 ISEN 配置为使用存储寄存器 2 并启用了窗口监控器,因此只有 ISEN 可以触发窗口监控器。由于 ISEN 在两个 ADC 存储寄存器(0 和 2)之间切换,窗口监控器对 ISEN 的评估速率约为 10kHz。
每当 ADC 回调被触发且不是由窗口监控器状态引起时,表示 ADC 缓冲区已填充。应用会使用 ADC 转换的结果填充 outputBuffer 数组,并评估接收到的 VSENPVDD ADC 转换超过 VSEN_THRESHOLD 时是否需要停止电机。所有转换均为 12 位分辨率(最大值为 4096),并以原始格式保留。尽管 TI 驱动器中还提供了额外的处理 API,可用于进一步调整这些值并将其转换为 µV 格式。必须小心操作,确保这些处理不会干扰电机驱动功能。