1.介绍
STM32的定时器通道输出矩形波,可以使用PWM模式和输出比较模式。PWM模式能够产生频率和占空比可调的矩形波信号,但不能对信号的相位进行调节。使用输出比较模式,可以实现信号的相位调节和频率调节,但不能对信号的占空比进行调节。
输出比较模式,是当计数器与比较寄存器数值相等时,做出相应动作。其运行模式由OCxM[2:0]控制,具体如下:
OCxM[2:0] | 功能 |
000 | 冻结,输出比较不起作用 |
001 | 设置为有效电平 |
010 | 设置为无效电平 |
011 | 翻转 |
100 | 强制为无效电平 |
101 | 强制为有效电平 |
110 | PWM模式1 |
111 | PWM模式2 |
使用输出比较模式,输出相位可调的矩形波,就需要设置输出模式为翻转。定时器检测到计数值与比较寄存器值相等时,翻转电平,产生矩形波。改变比较寄存器的数值就能改变相位大小,而频率保存不变。其输出波形关系图如下:
2.STM32CubeMx配置
任务:配置TIM1的CH1和CH2为输出比较模式,输出频率为1KHz。TIM1挂载时钟为120MHz。
1-setp:配置时钟源,设置CH1与CH2的模式。
2-setp:配置定时器分频数和计数值,在如下配置的数据下,计数频率=120M/12/5000=2000Hz,由于在输出比较模式下,两个比较点之间电平相同,因此最终输出频率还要除2,为1KHz。
3-setp:配置工作模式和相位关系,工作模式为翻转,在如下配置数据下,CH1通道相位超前CH2,相差180度。
3.程序设置
使用HAL库,需要有开启函数,开启比较输出。
HAL_TIM_OC_Start(&htim1,TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim1,TIM_CHANNEL_2);
在程序中修改相位,即对比较寄存器进行修改,使用函数如下:
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,4999);
4.输出结果
设置CH1超前CH2输出,超前相位为180度,频率为1KHz,输出波形如下: