脉冲宽度调制(PWM:Pulse Width Modulation)是一种对模拟信号电平进行数字编码的方法。广泛应用于电机控制、灯光的亮度调节、功率控制等领域。
定时器的每个通道都可以输出PWM信号,对于同一个定时器而言,它的多个通道共享同一个自动重载寄存器,因此可以输出占空比不同,但周期相同的PWM信号。
输出比较模式:成员变量OCMode的取值范围
宏常量定义 | 含义 |
---|---|
IM_OCMODE_TIMING | 输出比较冻结模式,匹配时无通道输出 |
TIM_OCMODE_ACTIVE | 输出比较冻结模式,匹配时无通道输出 |
TIM_OCMODE_INACTIVE | 匹配时设置通道输出为无效电平 |
TIM_OCMODE_TOGGLE | 匹配时设置通道输出电平翻转 |
TIM_OCMODE_PWM1 | PWM输出模式1 |
TIM_OCMODE_PWM2 | PWM输出模式2 |
TIM_OCMODE_FORCED_ACTIVE | 不进行匹配,强制通道输出为有效电平 |
TIM_OCMODE_FORCED_INACTIVE | 不进行匹配,强制通道输出为无效电平 |
有效电平极性:成员变量OCPolarity的取值范围
宏常量定义 | 含义 |
---|---|
TIM_OCPOLARITY_HIGH | 输出有效电平为高电平 |
TIM_OCPOLARITY_LOW | 输出有效电平为低电平 |
快速输出使能:成员变量OCFastMode的取值范围
宏常量定义 | 含义 |
---|---|
TIM_OCFAST_DISABLE | 不使能快速输出模式 |
TIM_OCPOLARITY_LOWTIM_OCFAST_ENABLE | 使能快速输出模式 |
可以加快触发输入事件对通道输出的影响,默认配置为不使能
定时器PWM输出启动函数:HAL_TIM_PWM_Start
函数原型 | HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) |
---|---|
功能描述 | 在轮询方式下启动PWM信号输出 |
入口参数 | htim:定时器句柄的地址 |
返回值 | HAL状态值 |
注意事项 | 1. 该函数在定时器初始化完成之后调用2. 函数需要由用户调用,用于启动定时器的指定通道输出PWM信号 |
定时器比较/捕获寄存器设置函数: __HAL_TIM_SET_COMPARE
函数原型 | __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) |
---|---|
功能描述 | 设置捕获/比较寄存器TIMx_CCR的值。在PWM输出时, 用于改变PWM 信号的占空比 |
入口参数 | HANDLE : 定时器句柄的地址__CHANNEL__: 定时器通道号, 取值范围是TIM_CHANNEL_1 ~TIM_CHANNEL_4__COMPARE__ :写入捕获/比较寄存器TIMx_CCR的值 |
返回值 | 无 |
注意事项 | 1. 该函数是宏函数,进行宏替换,不发生函数调用2. 函数需要由用户调用,用于PWM输出时,改变PWM信号的占空比 |
用PWM信号控制发板上的指示灯LED1。设置PWM周期为 20 ms,占空比从0%开始,步进为20%。递增到100%后,又从0%开始,并重复整个过程。占空比修改的时间间隔为200ms。
经过计算可得,可以取值:PSC=799,ARR=199,CRR从0到200,步进值为40。
main.c
中 /* USER CODE BEGIN PV */
uint16_t CCR = 0;
uint16_t Step = 40;
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
for (CCR = 0; CCR <= 200; CCR = CCR + Step)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, CCR);
HAL_Delay(200);
}
}
/* USER CODE END 3 */
全部0条评论
快来发表一下你的评论吧 !