前言
最近有个需求是关于调节占空比去控制风扇实现三挡风力大小的。由于硬件供电和控制成本等原因,普通的芯片支撑不起几个风扇同时转起来,于是就沿用了一个神奇的电路方案,但是这个方案在输出占空比的时候达不到真正的占空比(这里解释不清),因为电机类需要特别注意频率的大小,频率太高或者太低或多或少都会让人耳接受不了,反正是需要在运行时同时改变PWM频率和占空比,本文着重于应用,不讲原理。
一、定时器介绍
使用的是野火指南者STM32F103VET6,该板子有8个定时器,其中TIM6和TIM7属于基本定时器,TIM1和TIM8属于高级定时器,本文使用通用定时器TIM3即可。
定时器分类(适用于指南者)
TIMx
功能
基本定时器
TIM6、TIM7
基本定时,也可用于触发 DAC 外设。
通用定时器
TIM2、TIM3、TIM4、TIM5
输出比较(时序和延迟生成)、单脉冲模式、输入捕获(用于测量
外部信号频率)、传感器接口(编码器和霍尔传感器)等各种场合。
高级定时器
TIM1、TIM8
除通用功能外,它们还包含一些与电机控制和数字能量转换应用相关的功能:三个带死区控制的互补信号以及紧急关断输入。
单通道或双通道定时器:用作通用定时器,通道数有限。
带互补输出的单通道或双通道定时器:与上一类型相同,只是其中一个通道上具有死区发生器。这样可得到时基与高级定时器无关的互补信号。
二、PWM的周期、频率、占空比计算
在stm32中PWM的周期、频率、占空比等计算基本上是使用了TIM的时基单元,下面是时基结构体的介绍。
typedef struct
{
uint16_t TIM_Prescaler //驱动CNT计数器的分频器1-65536,都有
uint16_t TIM_CounterMode //计数器计数模式,TIMx,x[6,7]没有,其他都有
uint16_t TIM_Period //自动重装载寄存器,都有
uint16_t TIM_ClockDivision //时钟分频因子,TIMx,x[6,7]没有,其他都有
uint8_t TIM_RepetitionCounter //重复计数器的值,TIMx,x[1,8]才有
}TIM_TimeBaseInitTyp