打印
[STM32F1]

求助!!STM32产生两个频率相同、可调,存在相位差的信号。

[复制链接]
11237|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jj1989|  楼主 | 2014-5-24 21:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    两个信号的相位差为18度,频率相同,并且信号频率变化范围为600HZ----900KHZ。
目前想到的方法是使用两个定时器,都工作于PWM模式,配置两者的参数相同。先使能信号S1,延时一段时间再使能信号S2,这样就有相位差了,但是在频率很高的时候,这样的延时会带来很大的误差。不能满足要求了。请问下大家还有没有其它好的方法,大家一起讨论一下。谢谢!
    产生的信号要求如下图,信号周期为T,两信号之间的相位差为18度。

沙发
mmuuss586| | 2014-5-24 21:56 | 只看该作者
https://bbs.21ic.com/icview-188023-1-1.html
看看这个帖子,多你会有帮助

使用特权

评论回复
评论
cool_coder 2014-5-24 22:02 回复TA
那个贴子不错,刚好我也需要这个功能,很有帮助! 
评分
参与人数 1威望 +4 收起 理由
cool_coder + 4 很给力!
板凳
jj1989|  楼主 | 2014-5-24 22:04 | 只看该作者
mmuuss586 发表于 2014-5-24 21:56
https://bbs.21ic.com/icview-188023-1-1.html
看看这个帖子,多你会有帮助

首先表示感谢,这个帖子我看过,也试了一哈,用的Toggle(翻转)模式。这种情况下,占空比可以随意调节吗?好像只能是50%。这个模式不是很清楚怎么回事,我看官方有个这样的例程,在中断里面又设置了计数值。这种模式大致的工作原理是怎么样的呢?

使用特权

评论回复
地板
cool_coder| | 2014-5-24 23:09 | 只看该作者
jj1989 发表于 2014-5-24 22:04
首先表示感谢,这个帖子我看过,也试了一哈,用的Toggle(翻转)模式。这种情况下,占空比可以随意调节吗 ...

换不同的PWM模式试试看,我觉得这个有戏(我还没试过):
Asymmetric PWM mode
Asymmetric mode allows two center-aligned PWM signals to be generated with a programmable phase shift. While the frequency is determined by the value of the TIMx_ARR register, the duty cycle and the phase-shift are determined by a pair of TIMx_CCRx register. One register controls the PWM during up-counting, the second during down counting

使用特权

评论回复
5
jj1989|  楼主 | 2014-5-24 23:23 | 只看该作者
cool_coder 发表于 2014-5-24 23:09
换不同的PWM模式试试看,我觉得这个有戏(我还没试过):
Asymmetric PWM mode
Asymmetric mode allows t ...

看这段英文,好像是可以哦,明天试试。

使用特权

评论回复
6
ufo2013| | 2014-8-13 17:39 | 只看该作者
楼主这问题怎么解决的,求解

使用特权

评论回复
7
jj1989|  楼主 | 2014-8-31 16:49 | 只看该作者
ufo2013 发表于 2014-8-13 17:39
楼主这问题怎么解决的,求解

不好意思,至今都没解决。

使用特权

评论回复
8
wallace_tsou| | 2014-8-31 17:09 | 只看该作者
S1從TIMx出,另做一個CC(T/20)做為啟動另一個Timer輸出信號,並啟動TRGO,供另一個Timer用。
TIMy,設定one pulse mode(寬度T/50),從TRGO做為啟動輸入,其CC。
使用one pulse mode主因是因為T由TIMx控制,TIMy只做T/50即可。

使用特权

评论回复
9
1324968| | 2014-9-6 17:09 | 只看该作者
可以开3个定时器啊,两个定时器推PWM,第一个开启的时候,开启定时器,时间到了,开启第二个定时推PWM,这样就可以控制相位差了

使用特权

评论回复
10
huzi2099| | 2014-9-6 17:43 | 只看该作者
本帖最后由 huzi2099 于 2014-9-6 23:33 编辑

矛盾在于pwm起点和终点有一个是不可调的,中央对齐也不行因为中间点不可调.
我的想法是用两路pwm合成一路,第一路出pwm的开点到周期结束的方波,第二路出周期开点到pwm关点的方波.
两路pwm开漏状态输出经两个电阻合并为一路,这样只有两路输出同时为高时输出才是高电平,相当于与的结果.
可以实现pwm任意起终点都可调.不同频率固定相位差的数值是不一样的只能自己算出来了.
不知道说清楚没.

使用特权

评论回复
11
Just_Beat_It| | 2015-8-3 10:18 | 只看该作者
本帖最后由 Just_Beat_It 于 2015-8-3 16:47 编辑

输出比较模式就可以,但是只能输出占空比为50%的pwm波。

使用特权

评论回复
12
Just_Beat_It| | 2015-8-3 11:58 | 只看该作者
jj1989 发表于 2014-5-24 22:04
首先表示感谢,这个帖子我看过,也试了一哈,用的Toggle(翻转)模式。这种情况下,占空比可以随意调节吗 ...

是的,这种方法占空比只能是50%。。。

使用特权

评论回复
13
liang5319| | 2015-8-3 14:09 | 只看该作者
使用Timer1,两路比较输出,IO使用自动翻转模式。。就能占空比和频率同时可调,同时两路脉冲可以产生任何相位差。。我之前做过。。

使用特权

评论回复
14
tgwfcc| | 2015-8-13 18:09 | 只看该作者
本帖最后由 tgwfcc 于 2015-8-13 18:12 编辑
liang5319 发表于 2015-8-3 14:09
使用Timer1,两路比较输出,IO使用自动翻转模式。。就能占空比和频率同时可调,同时两路脉冲可以产生任何相 ...

什么意思呢?我用输出比较模式,翻转,占空比是50%,具体怎么调呢?看到另外一个帖子是说要在中断里修改CCR的值,来修改占空比,但是试了一下,不行呢?
http://www.360doc.com/content/11/0917/23/7736891_149118340.shtml

使用特权

评论回复
15
liang5319| | 2015-8-17 14:18 | 只看该作者
产生翻转比较的“时刻“是可以从寄存器里设置的,然后打开比较匹配后的中断,一旦发生翻转就在中断里更改为下一个要翻转的值。,两路脉冲的每个翻转”时刻“都是有规律的。。而且,使用比较输出功能,一旦比较成功单片机立刻通过硬件翻转IO,然后产生中断,理论上中断不会影响脉冲的精度。。大致就是这个意思吧。。之前也费了很大功夫做这个。。多看看手册吧。

使用特权

评论回复
16
jj1989|  楼主 | 2015-8-17 15:33 | 只看该作者
liang5319 发表于 2015-8-17 14:18
产生翻转比较的“时刻“是可以从寄存器里设置的,然后打开比较匹配后的中断,一旦发生翻转就在中断里更改为 ...

恩,谢了。

使用特权

评论回复
17
laofan523| | 2016-5-14 21:40 | 只看该作者
liang5319 发表于 2015-8-17 14:18
产生翻转比较的“时刻“是可以从寄存器里设置的,然后打开比较匹配后的中断,一旦发生翻转就在中断里更改为 ...

大神 发个程序看看吧 想学

使用特权

评论回复
18
slzx| | 2017-11-8 15:16 | 只看该作者
liang5319 发表于 2015-8-17 14:18
产生翻转比较的“时刻“是可以从寄存器里设置的,然后打开比较匹配后的中断,一旦发生翻转就在中断里更改为 ...

您编写程序用的寄存器还是库函数?

使用特权

评论回复
19
seawind1986| | 2017-11-8 17:19 | 只看该作者
1324968 发表于 2014-9-6 17:09
可以开3个定时器啊,两个定时器推PWM,第一个开启的时候,开启定时器,时间到了,开启第二个定时推PWM,这 ...

你启动定时器前把初值设置成不同的就行了呗还单独用一个定时器启动另外俩定时器搞毛线?

使用特权

评论回复
20
liang5319| | 2017-11-9 18:36 | 只看该作者
slzx 发表于 2017-11-8 15:16
您编写程序用的寄存器还是库函数?

产生波形时的中断里直接通过修改寄存器,不用库函数。其他的使用标准库。

使用特权

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

本版积分规则

3

主题

43

帖子

1

粉丝