打印
[STM32F1]

如何有效使用STM32的PWM产生如图所示的PWM

[复制链接]
1883|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hjl2832|  楼主 | 2020-9-26 09:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hjl2832 于 2020-9-26 09:33 编辑


如图上所示,我想使用单片机做数字电源控制,需要实现上面的PWM输出功能。我的思路,利用定时器1输出固定的PWM(60KHz,50%占空比);利用定时器2来做可变频率控制;
工作流程:利用AD采集输出电压,进而通过定时器2控制定时器1工作的起停来改变可变时间T2。
现在的问题:当负载变化时,输出电压调整的响应时间很慢,达不到想要的稳压输出效果(理想状态应该在几十毫秒之内就能调整好)。
还有没有其它的控制思路能实现上述PWM波形输出。

使用特权

评论回复
沙发
gaoyang9992006| | 2020-9-26 10:10 | 只看该作者
有个PWM中断,可以计数多少个PWM周期,到了T1后,你可以关闭PWM输出,继续计时T2后,开启PWM。

使用特权

评论回复
板凳
LcwSwust| | 2020-9-26 10:16 | 只看该作者
若是PID算法的话需要多偿试不同参数

使用特权

评论回复
地板
hjl2832|  楼主 | 2020-9-26 10:34 | 只看该作者
gaoyang9992006 发表于 2020-9-26 10:10
有个PWM中断,可以计数多少个PWM周期,到了T1后,你可以关闭PWM输出,继续计时T2后,开启PWM。 ...

我试过PWm中断,打开后因为中断时间间隔太小(uS级),严重影响单片机的其它程序运行。资源全部被这个PWM中断占用了(中断中就只如版主所说的做一件事,计数)。

使用特权

评论回复
5
gaoyang9992006| | 2020-9-26 10:43 | 只看该作者
hjl2832 发表于 2020-9-26 10:34
我试过PWm中断,打开后因为中断时间间隔太小(uS级),严重影响单片机的其它程序运行。资源全部被这个PWM中 ...

说的是,你这个需求好矛盾啊。要不这样。弄一个三极管。然后一个定时器控制的IO,定时开关它输出你的这个PWM信号。

使用特权

评论回复
6
gaoyang9992006| | 2020-9-26 10:44 | 只看该作者
gaoyang9992006 发表于 2020-9-26 10:43
说的是,你这个需求好矛盾啊。要不这样。弄一个三极管。然后一个定时器控制的IO,定时开关它输出 ...

不过这样就没法把控每一段PWM波是否都一致了。所以如果你要求T1的PWM周期数,那就没法实现,如果不要求,近似的。是可以。

使用特权

评论回复
7
dalarang| | 2020-9-26 11:23 | 只看该作者
我觉得不必用纯软件来实现啊,用定时器1生成60KHz固定PWM输出,用定时器2输出250Hz-2.5kHz可变频率输出,两者用与门连接输出,从硬件上进行处理就好了嘛

使用特权

评论回复
8
hjl2832|  楼主 | 2020-9-26 12:15 | 只看该作者
dalarang 发表于 2020-9-26 11:23
我觉得不必用纯软件来实现啊,用定时器1生成60KHz固定PWM输出,用定时器2输出250Hz-2.5kHz可变频率输出,两 ...

那样没法保证每一个T1时刻都是同步的

使用特权

评论回复
9
yuan_莫| | 2020-9-26 14:18 | 只看该作者
DMA就可以的

使用特权

评论回复
10
香水城| | 2020-9-26 19:38 | 只看该作者
对你所说的 “输出电压调整的响应时间很慢,” 不是很理解。 你ADC采集这边的问题 还是 调整定时器输出 的问题?

按理说 调整定时器的输出应该很快的,T1到了关闭PWM,同时开启T2,T2到了启动PWM输出。 注意 此时关闭CCR的预装功能。

使用特权

评论回复
11
masterqqq| | 2020-9-27 05:06 | 只看该作者
TIM Pulse,Prescaler不变,改变Period

使用特权

评论回复
12
sanjue| | 2020-9-27 11:39 | 只看该作者
我见过这种类似控制方式的电源,但没有楼主这么严格的时序控制的

使用特权

评论回复
13
coody| | 2020-9-27 15:36 | 只看该作者
很容易实现的吧,不管是PWM还是方波输出,间歇输出是经常要用到的。

使用特权

评论回复
14
风来吴山| | 2020-9-27 16:26 | 只看该作者
我写过类似的程序,一个基础频率,一个调制频率,其实一个定时器就行了。内部的基础频率可以是外部调制频率的N倍,使用count来记录进了多少次中断,使用multiple来记录基础频率与调制频率的倍数关系,当count == multiple - 1时,也就是高低电平的边缘时,写入值,当count == multiple时,再次写入值就行了。基础频率和调制频率都是可以修改的。

使用特权

评论回复
15
ayb_ice| | 2020-9-27 16:53 | 只看该作者
两个PWM信号相与就可以了

使用特权

评论回复
16
icecut| | 2020-9-27 18:08 | 只看该作者
用f3, f4系列, pwm性能很好. 如果你软件实现功力不够就外挂一个与门

使用特权

评论回复
17
東南博士| | 2020-9-27 20:43 | 只看该作者
这种是不是属于专用协议了?

你在做无线电调制吗?

使用特权

评论回复
18
cdwujinshan| | 2020-9-27 20:57 | 只看该作者
外加与门

使用特权

评论回复
19
wangjiahao88| | 2020-9-27 20:58 | 只看该作者
不复杂,就是简单的载波啊!

固定发一个 0X80  然后 延时就可以啊!

使用特权

评论回复
20
goodluck09876| | 2020-9-27 21:03 | 只看该作者
T1到了关闭PWM,同时开启T2,T2到了启动PWM输出。 注意 此时关闭CCR的预装功能。

使用特权

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

本版积分规则

26

主题

1021

帖子

4

粉丝