PWM输出实验

9.1 pwm简介脉冲宽度调制(pulse width modulation)技术,简称pwm调制技术,是一种通过改变脉冲的宽度以及频率来改变输出频率的一种控制方式。采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。pwm控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。 stm32的定时器除了有计数,定时,输入捕获功能以外,还有pwm输出功能,主要工作原理就是通过在定时器内部设置阈值,当cnt计数器的数小于这个阈值的时候输出1个电平,当cnt的数据大于这个阈值的时候输出另一个电平。通过改变这个阈值来改变占空比(因为cnt最大计数值就是65535),通过改变计数频率来改变pwm脉冲频率。9.2 相关寄存器9.2.1 捕获/比较寄存器:timx_ccmrx1514131211109876543210
oc2ce oc2m[2:0] oc2pe oc2fe cc2s[1:0] oc1ce oc1m[2:0] oc1pe oc1fe cc1s[1:0]
ocxce:输出比较x清0使能
0:ocxref不受etrf输入的影响 1:一旦检测到etrf输入高电平,清除ocxref=0ocxpe:输出比较x预装载使能
0:禁止预装载功能,写入的数值立即起作用 1:开启预装载功能,timx_ccrx的预装载值在更新事件到来时被加载至当前寄存器中注1 :一旦lock级别设为3并且cc1s=00则该位不能被修改
注2 :仅在单脉冲模式下,可以在未确认预装载寄存器情况下使用pwm模式,否则其动作不确定
ocxfe:输出比较x快速使能(该位用于加快cc输出对触发输入事件的响应)
0:根据计数器与ccrx的值,当触发器的输入有一个有效沿时,激活ccx输出的最小延时为5个时钟周期 1:oc被设置为比较电平而与比较结果无关,触发器有效沿和ccx输出间的延时被缩短为3个时钟周期注3 :只在通道被配置成pwm1或pwm2模式时起作用
ocxm[2:0]:输出比较x模式
ccxs[1:0]:捕获/比较x选择(用于定义通道x输入还是输出)
00:输出模式 01:输入模式,映射在ti1上 10:输入模式,映射在ti2上 11:输入模式,映射在trc上,此模式引用于内部触发器输入被选中时9.2.2 刹车和死区寄存器:timx_bdtr注:这个寄存器只有tim1和tim8这两个高级定时器才需要控制。
1514131211109876543210
moe aoe bkp bke ossr ossi lock[1:0] dtg[7:0]
bit 15:主输出使能(一旦刹车输入有效,该位被硬件异步清0)
0:禁止oc和ocn输出或强制为空闲状态 1:如果设置了相应的使能位,则开启oc和ocn输出。bit 14:自动输出使能
0:moe只能被软件置1 1:moe能被软件置1或在下一个更新事件被自动置1** 注1** :一旦lock级别设为1,则该位不能被修改
bit 13:刹车输入极性
0:刹车输入低电平有效 1:刹车输入高电平有效** 注2** :一旦lock级别设为1,则该位不能被修改
** 注3** :任何对该位的写操作都需要一个apb时钟的延迟以后才能起作用
bit 12:刹车功能使能
0:禁止刹车输入 1:开启刹车输入 **注4** :当设置了lock级别1时,该位不能被修改 **注5** :任何对该位的写操作都需要一个apb时钟的延迟以后才能起作用bit 11:运行模式下“关闭状态”选择(该位用于当moe=1且通道为互补输出)
0:当定时器不工作时,禁止oc/ocn输出(oc/ocn使能输出信号=0) 1:当定时器不工作时,一旦ccxe或ccxne为1,先开启oc/ocn并输出无效电平,再置使能输出信号为1 **注6** :一旦lock级别设为2,则该位不能被修改bit 10:空闲模式下“关闭状态”选择(该位用于当moe=0且通道设为输出时)
0:当定时器不工作时,禁止oc/ocn输出(oc/ocn使能输出信号=0) 1:当定时器不工作时,一旦ccxe或ccxne为1, oc/ocn先输出其空闲电平,然后使能输出信号为1 **注7** :一旦lock级别设为2,则该位不能被修改bit 9~bit 8:锁定设置(该位为防止软件错误而提供写保护)
00:锁定关闭,寄存器无写保护 01:锁定级别1,不能写入timx_bdtr寄存器dtg、 bke、 bkp、 aoe位和timx_cr2寄存器oisx/oisxn位 10:锁定级别2,不能写入锁定级别1中的各位,也不能写入cc极性位 11:锁定级别3,不能写入锁定级别2中的各位,也不能写入cc控制位** 注8** :在系统复位后,只能写一次lock位,一旦写入timx_bdtr寄存器,则其内容冻结直至复位
bit 7~bit 0:死区发生器设置(定义了插入互补输出之间的死区持续时间)
9.3 pwm实验例程利用stm32的pa8输出频率1khz,占空比为30%,高电平有效的脉冲。
(1)创建基础工程与pwm.c和pwm.h文件,并将pwm.c和pwm.h文件添加进工程。
(2)pwm.h添加代码如下。
(3)pwm.c添加代码如下。
#include pwm.h/***************************************************name :pwm_initfunction :pwm输出初始化paramater : psc:预分频系数return :none***************************************************/void pwm_init( u16 psc ){ rcc->apb2enr |= 1crh |= 0x0000000b ; //pa8复用功能输出 rcc->apb2enr |= 1psc = psc ; tim1->ccmr1 |= 7#include sys.h#include delay.h#include usart1.h#include pwm.hint main(){ stm32_clock_init( 9 ) ; //stm32时钟初始化 systick_init( 72 ) ; //systick初始化 usart1_init( 72, 115200 ) ; //初始化串口1波特率115200 pwm_init( 719 ) ; //pwm初始化 pwm_set( 30 ) ; //设置占空比30% while( 1 ) { }}9.4 扩展:pwm实现dac输出9.4.1 工作原理由于stm32f1自带2路dac输出,所以当dac不够用的时候,为了节约成本,需要利用pwm配合rc滤波器来实现dac输出,对于pwm脉冲的波形可以列写出脉冲的时域函数表达式
9.4.2 电路设计我们现在设计一个分辨率为8位的pwm信号,其实stm32的分辨率都可以达到16位,甚至32位,但是分辨率越高,速度就越慢,在8位分辨率条件下,我们要求1次谐波对输出电压的影响不要超过1个位的精度,也就是3.3/256=0.01289v。假设v~h~为3.3v,v~l~为0v,那么一次谐波的最大值是2*3.3/π=2.1v,这就要求我们的rc滤波电路提供至少-20lg(2.1/0.01289)=-44db的衰减。 stm32的定时器最快的计数频率是72mhz,8为分辨率的时候,pwm频率为72m/256=281.25khz。如果是1阶rc滤波,则要求截止频率为1.77khz,如果为2阶rc滤波,则要求截止频率为22.34khz。
上图所示位二阶rc滤波器的电路原理,根据二阶rc滤波器的截止频率计算公式
可以得到r28*c37=r29*c38=rc,通过这个公式我们选定的r和c的参数,并得到实际的截止频率为33.8khz,远超过理论的截止频率,该电路实测精度大约在0.5lsb左右。9.4.3 实验例程在这里,我们只需要将实验例程中的pwm频率改为22.34khz即可。通过改变占空比,我们可以用电压表来测量出实际的输出电压。ps:pwm实现dac输出最常见的功能就是语音合成芯片。

是德科技杰出青年教授奖揭晓,助力东南大学毫米波技术研究
一文详解RC充电电路计算方法
区块链项目的治理系统介绍
出奇“智”胜,移动机器人助力企业智能化转型
电容的分类:陶瓷电容与电解电容器的介绍
PWM输出实验
aigo国民好物移动固态硬盘S7 Pro 工作狂人就选它!
接触式图像传感器工作原理和优点
国产机搭载鸿蒙系统 使用率能否超过安卓、iOS
高端智能电网,助力北京石景山区绿色低碳发展
物联网无人机应用典型架构、实现的技术难点及发展趋势
价格直接对半砍?储能行业提前“入冬”,出路在哪?
2019年UKUI 3.0 Beta版桌面环境将年底发布,基于GTK和QT进行开发
Driving LEDs with Constant Cur
波峰焊接中助焊剂引发的缺陷现象及作用机理分析
为什么会形成不同的电弧形态?
苹果13或将发布 苹果13最新消息
中国物联网与绿色智慧城市发展论坛在无锡顺利举行
单片差分放大器AD8351的性能及特点优势
iPhone 8C概念设计曝光:曲面机身对标华为Mate X?