打印
[STM32F1]

请假STM32F103 PWM输出问题

[复制链接]
1993|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我使用STM32F103控制一个步进电机,一共有4路信号,使用IO可以控制,现在想使用PWM功能实现,4路信号的波形如下:


控制起来很简单,每路信号低电平占空比是25%,第1路相位是0度,第2路相位是180度,第3路相位是90度,第4路相位是270度
我的问题是,占空比可以设置,但4路信号的相位如何设置?
沙发
mmuuss586| | 2014-8-13 08:51 | 只看该作者

使用特权

评论回复
板凳
ifreecoding|  楼主 | 2014-8-13 11:02 | 只看该作者
mmuuss586 发表于 2014-8-13 08:51
参考这个帖子:
https://bbs.21ic.com/icview-188023-1-1.html

没看明白,能说的具体点么,或者直接贴份代码

使用特权

评论回复
地板
airwill| | 2014-8-13 11:59 | 只看该作者
简单的输出翻转方式是不行的, 因为翻转方式输出的占空比是 50%, 而这里要 25%.
由于相位各不相同, 不能使用一个定时器来实现, 好在 STM32 的定时器比较多, 还是能够实现的.
另外, 其中两个是反相的, 如果结合电平翻转, 那么反相的两个 PWM 可以使用同一个定时器实现. 这样只要两个定时器就能实现. 接下来是两个定时器之间相位差控制问题了, 相信不是难事吧.

使用特权

评论回复
5
ifreecoding|  楼主 | 2014-8-13 12:28 | 只看该作者
airwill 发表于 2014-8-13 11:59
简单的输出翻转方式是不行的, 因为翻转方式输出的占空比是 50%, 而这里要 25%.
由于相位各不相同, 不能使用 ...

用多个定时器实现就太麻烦了,各个定时器之间还需要同步
看来我还是使用一个定时器,在定时器中断里驱动IO吧

使用特权

评论回复
6
airwill| | 2014-8-13 13:51 | 只看该作者
ifreecoding 发表于 2014-8-13 12:28
用多个定时器实现就太麻烦了,各个定时器之间还需要同步
看来我还是使用一个定时器,在定时器中断里驱动I ...

是的, 这也是个好办法, 如果占空比精度要求并不是很高的话, 足可胜任.
当然, 如果要很高的脉宽精度, 用一个定时器也是可以实现的. 使用好 CCRx, 在中断里合理修改合适的 CCR 就可以了.   比前面提到的方案软件上麻烦了一些

使用特权

评论回复
7
ifreecoding|  楼主 | 2014-8-13 14:29 | 只看该作者
airwill 发表于 2014-8-13 13:51
是的, 这也是个好办法, 如果占空比精度要求并不是很高的话, 足可胜任.
当然, 如果要很高的脉宽精度, 用一 ...

多谢!
我觉得用中断也不麻烦,比如说我在一楼的图中,一个状态由4部分组成,都是1个低电平+3个高电平,如果需要100Hz的话那么只需要配置一个2.5ms的中断,每4个中断输出4个状态,完成一个输出周期
在第一个中断里,IO1置0,IO2置1,IO3置1,IO4置1
在第二个中断里,IO1置1,IO2置1,IO3置0,IO4置1
在第三个中断里,IO1置1,IO2置0,IO3置1,IO4置1
在第四个中断里,IO1置1,IO2置1,IO3置1,IO4置0

如此重复循环,我觉得比配置PWM还方便

使用特权

评论回复
8
ww168tech| | 2014-10-15 23:27 | 只看该作者
100hz倒好说,要是100k的话呢,感觉频繁中断就不好整了

使用特权

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

本版积分规则

2

主题

68

帖子

3

粉丝