前言
在做 BLDC 电机控制时,需要 ADC 的采样时刻和定时器产生的 PWM 波形相配合,才能获取准确的采样值, 本文介绍了 CW32F030 系列芯片通过运用 DMA 功能实现高级定时器和 ADC 的同步触发采样的功能。
▇ PWM 输出实现
1.1 输出端口的配置
根据 GPIO 复用功能分配表(完整表格请参阅 CW32F030 用户手册中表 9-2 GPIO 复用功能分配表),选取期 望输出互补 PWM 波形的引脚,如本例中 PA8、PA9、PA10、PB13、PB14、PB15,如下表所示:
▼ GPIO 复用功能分配表
PA8 和 PB13 组成一对互补输出通道 CH1,PA9 和 PB14 组成一对互补输出通道 CH2,PA10 和 PB15 组成一 对互补输出 CH3。
步骤如下:
- 将相关的 GPIO 设置为输出;
- 将 GPIO 配置为 ATIM 的比较输出复用功能。
代码如下:
1.2 ATIM 的配置
ATIM 包含一个 16 位的计数器 / 定时器和 7 个比较单元。7 个比较单元中,有六个具有捕获功能,并且这 6 个捕获 / 比较单元可以成对使用,组成互补输出的功能。
本文以产生一个驱动 BLDC 电机所需的 20kHz 的三路互补输出的 PWM 波形为例,选取 ATIM 的时基信号为 PCLK。
本例中 PCLK 为 64MHz,并通过 ATIM 的预分频器进行 16 分频后,以 4MHz 频率进行计数。
为方便设定 ADC 的采样时间,ATIM 采用中央对齐模式计数,设置 ATIM 的自动重载寄存器(ARR)为 100, 则 ATIM 的将先从 0 累加至 99,再从 100 递减至 1,故计数周期为 2 倍的 ARR 寄存器的值,即 PWM 的频率 为 20kHz。
通过设置 ATIM 的控制寄存器(CR)的 COMP 位为 1,使得 PWM 以互补的方式输出,CH1A 和 CH1B 的脉宽 由通道 1比较 /捕获寄存器 A(CH1CCRA)决定,CH1B的输出脉宽不再由通道 1比较 /捕获寄存器 B(CH1CCRB) 决定,CH1CCRB 仍可用于设定 CH1B 比较匹配的值。CH2A 和 CH2B,CH3A 和 CH3B 与之类似。
在设置输出 PWM 互补输出时,可以对互补通道加入死区时间,由死区时间寄存器(DTR)控制。
ATIM 配置输出 3 对互补带死区的 PWM 波形,详细配置代码如下:
▼ 产生的 PWM 波形如下:
1.3 ADC 的配置
1.3.1 序列采样
当需求的采样通道小于等于 4 路时,可以通过 ADC 的序列采样模式实现,并且可以通过 ATIM 的通道 1~3 比 较 / 捕获寄存器 B 中任意一个寄存器设定 ADC 的采样时刻,这些操作都可以由硬件自动完成,减轻了 CPU 的工作量。
以采样 AIN0~AIN3 这 4 路输入为例,设定采样时刻为 ATIM 计数达到 ARR 时,其参考代码如下:
上述方法完全由硬件实现,不需要 CPU 和中断的参与,执行效率非常高,不足的地方是采样通道限制为 4 路。
1.3.2 DMA 扩展采样
如果需要对超过 4 路的模拟量进行采样,则需要结合 DMA 的功能,以实现较少的 CPU 参与。其思路如下:
- ADC 配置为单通道单次转换,完成转换后硬件触发 DMA;
- DMA 的 CH1 用于将 ADC 的转换结果传输到 RAM 中,本例中将采样 6 个 ADC 通道,因此传输次数 CNT 为 6,源地址固定为 ADC 的 RESULT0 寄存器,目的地址需要递增;
- DMA 的 CH2 用于更改 ADC 的采样通道,当 ADC 转换完成后,从 RAM 中取 ADC 的通道配置参数,自 动配置 ADC 的寄存器值,因此源地址为 RAM,地址递增,目的地址为 ADC 的通道控制寄存器;
- DMA 的 CH3 用于再次启动 ADC,因为 ADC 配置为单次转换,当转换完成后,ADC 自动停止转换,所 以需要通过 DMA 向 ADC 的转换启动寄存器置位,以再次启动 ADC 转换;
- DMA 的 CH1 传输完成后,ADC 的 6 路转换也完成了,并且转换结果也被传输到 RAM,可通过 CH1 的 传输完成中断,将 DMA 的参数重新配置,就实现了多路 ADC 的循环采样;
- 通过 ATIM 的比较通道 4,去触发 DMA 的 CH4,向 ADC 的转换启动寄存器置位,启动 ADC。
其参考代码如下:
• ADC 的配置:
ADC 配置为单次单通道采样,采样完成后可触发 DMA。
• DMA 的配置:
• ATIM 需要在之前的配置上增加通道 4 的设置,增加的代码如下:
这种方法可以实现多于 4个模拟通道的采样,采样结果自动保存在内存中,并且仅在最后一个通道采样完成后, 进入一次中断服务程序对 DMA 的配置进行复位,所以 CPU 的开销是比较小的,而且可以通过 ATIM 的比较 通道 4 灵活设置采样时机。