学习如何让STM32在运行时改变PWM频率和占空比

前言

最近有个需求是关于调节占空比去控制风扇实现三挡风力大小的。由于硬件供电和控制成本等原因,普通的芯片支撑不起几个风扇同时转起来,于是就沿用了一个神奇的电路方案,但是这个方案在输出占空比的时候达不到真正的占空比(这里解释不清),因为电机类需要特别注意频率的大小,频率太高或者太低或多或少都会让人耳接受不了,反正是需要在运行时同时改变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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值