定时器输出比较模式 生成移相的PWM波 DMA--基于cubemx-stm32f4

参考文章:工程师笔记|使用 TIMER 输出比较模式输出相移信号

在全桥变换器中,需要同极性,不同相位的PWM波来驱动MOS管实现升压操作。
本文章参考如上文章,使用TIM1高级定时器输出了1路原始PWM波,定时器的输出比较功能输出了三路基于原始PWM波移相后的PWM波,并使用了DMA。

首先参照别人的文章看看输出比较模式和PWM模式的区别:
stm32输出比较模式与PWM模式
主要区别就是:
PWM1模式:CNT与CCR作比较,若CNT小于CCR则输出为高电平,若CNT大于CCR则输出为低电平,并且在CNT计数至ARR时,CNT会更新至0并产生上溢事件。
输出比较模式:在CNT与CCR不断做比较的过程中,若CNT等于CCR,产生的则是电平翻转,并且会产生中断,通过对中断回调函数的编写,就能够实现多路不同频率信号的输出。
DMA 的循环模式,可以在最后一次数据传输完成后,自动重新加载初始编程值,内部地址寄存器会重新加载基址值,进入下一个循环。
所以输出比较结合DMA相当于就是中断函数,但是DMA处理的速度会更快。

目标:频率10khz 占空比40%
TIM1_CH1:基准PWM波 相位为0
TIM1_CH2: 相移45°
TIM1_CH3: 相移90°
TIM1_CH4: 相移180°

配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Toggle on match"(匹配时翻转电平)
CCR不用设置,通过DMA写入的值
基准PWM极性为高(高电平有效),输出比较通道的极性为低(低电平有效)(为什么?)
看看这篇文章先了解一下极性和有效吧!

在这里插入图片描述
对DMA的配置:
记住!每一个通道的DMA都要点一下进行配置!
设置为循环/内存到外设
Q:为什么这里用的是Word一个字?
因为在后续的定义中传输的数据是uint32_t类型的 ,stm32的一个字就是32位的。

在这里插入图片描述

计算第一,二次反转的CCR值
我就直接引用别的文章的话了:
首先需要计算 channel2、channel3 和 channel4 的 CCR 值。以 channel2 为例:配置的计数周期为 100,初始极性为 low,当 CNT 计数值与 CCR 寄存器匹配的时候,输出电平发生翻转,所以为了实现与 channel1 占空比相同的波形,需要翻转两次电平。

第一次翻转的 CCR 可以通过相位差进行计算,第二次翻转的 CCR 值可以通过占空比和第一次翻转的 CCR 值这两个条件进行计算。Channel2 第一次翻转的 CCR 值为: “1000 x (45°/360°) = 125”;第二次翻转的 CCR 值为:“125 + (40% x 100) = 525”

同理:
Channel3(90): 1.250 2.650
Channel4(180): 1.500 2.900

添加代码如下:
在这里插入图片描述
在这里插入图片描述
测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值