打印
[APM32F4]

APM32F407 TMR1 PWM调制

[复制链接]
143|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guguli|  楼主 | 2023-9-28 14:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guguli 于 2023-9-28 14:10 编辑

APM32F407  TMR1 PWM调制
一、原理
  在控制系统中,定时器(Timer)是非常重要的的外设,定时器功能多,应用广,主要用途包括延时、时间测量、定期中断、PWM(脉冲宽度调制)生成等。定时器通常由一个计数器寄存器和一些控制寄存器组成。计数器寄存器用于保存计数器的当前值,而控制寄存器用于配置定时器的工作模式、时钟源、中断使能等。计数器根据时钟源的脉冲递增,当计数器达到预定的值时,可以触发中断或执行其他操作。
PWM(脉冲宽度调制)是一种模拟控制方式,采用适当控制方法即可使电压与频率协调变化,可以通过调整PWM的周期、占空比从而达到控制充电电流的目的。最常见的PWM应用就是PWM调制直流电机了。
直流电机是根据通电导体在磁场中会受力的原理来工作的,当通入电流后,由于磁场的相互作用,电机会转动。想要调节电机的转速方法较多,最为简单的就是调节电压。用微控制器的定时器产生PWM波,通过调制PWM波的占空比和频率来调制电机的转速,实际上就是通过调节电压的方法调节电机的转速。本想用APM32F407的TMR1输出PWM来调制直流电机的,但由于手头上没有电机,就用想用PWM调制呼吸灯。
LED的亮度和直流电机的转速一样,可以通过元件两端电压的变化发生改变,单片机IO口输出的是数字信号,通过IO口输出高低电平达到控制的目的,通过改变PWM的占空比和频率怎样调制IO口的输出电压?
假设单片机输出的高电平为5V,低电平为0V,假设某一时间T内,IO口输出的PWM波形为:
                                   图1
图1中,在0~t1,pwm的占空比为50%,t1~t2占空比为40%,IO口输出的PWM的占空比逐渐减小,在t4~t5,占空比为10%,在0~t5时间内,IO口输出的模拟电压为:
0~t1:u1 = 5v × 50% = 2.5v
t1~t2:u2 = 5v × 40% = 2v
t2~t3:u3 = 5v × 30% = 1.5v
t3~t4:u4 = 5v × 20% = 1.0v
t4~t5:u5 = 5v × 10% = 0.5v
在0~t5内,IO口输出的电压从2.5V减小到0.5V,通过输出PWM占空比的调制,从而实现了输出电压的变化。

                            图2
图2中,电压由0V变为5v的过程中,由于占空比的变化次数不同,影响电压变化的周期,影响呼吸灯的呼吸频率。
二、软件设计
采用APM32F407的TMR1输出PWM,调制PWM波的占空比。

定时器1是高级定时器,配置定时器1为PWM输出模式2,自动重装载值为999,根据系统时钟频率为168MHz, 根据APM32F407系统框架图得知,TMR1与APB2总线相连,所以定时器的时钟频率为168MHz,分频系数为167,所以输出的PWM周期为1000微秒,在更新中断服务函数中,对占空比进行更改:

每产生一次更新事件,PWM的占空比就增加或减少,也就是说,每次产生更新事件,LED两端电压都会增加或减少,从而达到了调节LED亮度的效果,是LED的亮度由亮变暗或由暗变亮。

使用特权

评论回复
沙发
lulu202| | 2023-9-28 14:12 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝