OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11466|回复: 24

关于输出比较产生特定可变周期、占空比、相位差方波介绍

[复制链接]

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-7-15 20:49:29 | 显示全部楼层 |阅读模式
本帖最后由 nashui_sx 于 2019-9-28 19:44 编辑

0.2通道180°相位差方波,3通道120°相位差方波,4通道90°相位差方波
1.试验平台stm32f103c8t6
2.2通道用定时器3的1、2通道;3通道用定时器3的1、2、3通道;4通道用定时器3的1、2、3、4通道;
3.实现方法,周期和占空比用捕获通道中断反复修改捕获值来实现
4.相位差采用定时器的生效同步规则来实现(下一次更新时间生效)
其实之前发的帖子已经有了输出比较,只是大家不知道如何产生特定方波,故新开一贴
参考:http://www.openedv.com/forum.php?mod=viewthread&tid=104491&extra=

优点幼儿的例子用定时器中断控制方便点,这样还能中断内翻转任意io实现特定形式方波
为了新手,直接改好了三个的例子
2通道180°相位差方波.rar (271.27 KB, 下载次数: 193)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-7-22
在线时间
14 小时
发表于 2019-7-30 15:38:31 | 显示全部楼层
楼主使用输出比较模式输出PWM占空比是怎么改变的?可以分享一下经验吗?
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-7-30 15:45:44 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-7-30 16:04 编辑
Armcore123 发表于 2019-7-30 15:38
楼主使用输出比较模式输出PWM占空比是怎么改变的?可以分享一下经验吗?

中断内一直改变捕获值呀,设置高电平的值,到了自动翻转电平,再设置成低电平的值,来回这个设置
你看着代码问,好说明白点

回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-7-22
在线时间
14 小时
发表于 2019-7-30 16:56:36 | 显示全部楼层
就是这样单路PWM输出倒很简单,如果要写四路,用同一个定时器的4个通道,4个通道不是只执行同一个中断吗?然后是不是还需要结合四路之间的相位差计算一下他们触发中断的先后顺序?
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-7-30 17:15:46 | 显示全部楼层
Armcore123 发表于 2019-7-30 16:56
就是这样单路PWM输出倒很简单,如果要写四路,用同一个定时器的4个通道,4个通道不是只执行同一个中断吗? ...

对呀,就是一个中断呀,可以的你看最后一个例子就好了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2019-7-22
在线时间
14 小时
发表于 2019-7-30 22:13:09 | 显示全部楼层
nashui_sx 发表于 2019-7-30 17:15
对呀,就是一个中断呀,可以的你看最后一个例子就好了

[img]非常感谢,问题已经解决了,但我发现我的直接根据数字设置周期偏移的方法好像特麻烦,我看到你代码里边设置周期偏移那部分很简洁,我没看懂,能解释解释吗?非常感谢!
                TIM_OCInitStructure.TIM_Pulse = 400* 0/100+10;
                TIM_OC1Init(TIM3, &TIM_OCInitStructure);           
                TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
   
                TIM_OCInitStructure.TIM_Pulse = 400*25/100+10;
                TIM_OC2Init(TIM3, &TIM_OCInitStructure);            
                TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);
                 
                TIM_OCInitStructure.TIM_Pulse = 400*50/100+10;
                TIM_OC3Init(TIM3, &TIM_OCInitStructure);           
                TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);

                TIM_OCInitStructure.TIM_Pulse = 400*75/100+10;
                TIM_OC4Init(TIM3, &TIM_OCInitStructure);           
                TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable);
就那个(400*x%/100+10)怎么解释
D:\课程资料文件夹\2019年电子设计
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-8-10 22:15:17 | 显示全部楼层

周期是400     *x/100 计算 偏移的周期计数长度    +10 这个只要不是0 都可以
定时器使能一瞬间 各个通道都开始计数,到通道捕获的时候进中断交替设置这个值
那使能前先给每个通道第一次设置个值,这样第一次溢出的时候就会偏移,以后每次交替设置高低电平就好了
理论上不加那个10也可以,但是实测有时候有问题,随便加个值就好了,具体也没细分析
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-8-10 22:19:16 | 显示全部楼层

一句话就是,偏移后,每次进中断交替设置是下面控制的高低电平
TIM_SetCompare1(TIM3, TIM_GetCapture1(TIM3)+50);//高电
TIM_SetCompare1(TIM3, TIM_GetCapture1(TIM3)+350);//低电平

TIM_OCInitStructure.TIM_Pulse = 400*50/100+10;
就是为了让第一次进中断是时间每个通道不同,这样就偏移波形了
+10是实践出来的,不是0都可以,备注有说明
应该可以解决这需要+10的问题,懒得研究了就没研究了
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-22
在线时间
16 小时
发表于 2020-6-17 16:30:45 | 显示全部楼层
楼主,移相90度那个为什么我用示波器只能测出一路的PWM波的频率呢?
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-22
在线时间
16 小时
发表于 2020-6-17 16:31:32 | 显示全部楼层
另外三路的频率我都测不出来
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-6-17 17:14:50 | 显示全部楼层
zxj15283329240 发表于 2020-6-17 16:30
楼主,移相90度那个为什么我用示波器只能测出一路的PWM波的频率呢?

是开发板的话检查引脚占用   直接循环翻转引脚看是否有波形
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-22
在线时间
16 小时
发表于 2020-6-18 10:23:15 | 显示全部楼层
nashui_sx 发表于 2020-6-17 17:14
是开发板的话检查引脚占用   直接循环翻转引脚看是否有波形

有波形的 引脚也没占用 只是能看到波形看不到频率
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-22
在线时间
16 小时
发表于 2020-6-18 10:26:57 | 显示全部楼层
我除了上面的问题还想问一下这个程序的频率是2.5KHZ 我想用190KHz的PWM该怎么设置呢,我尝试过改变arr的值 但是arr只能是65535,我有尝试改变psc的值 但是psc一旦改变就会变化占空比和脉宽。请楼主指导一下谢谢
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-6-18 10:38:24 | 显示全部楼层
zxj15283329240 发表于 2020-6-18 10:26
我除了上面的问题还想问一下这个程序的频率是2.5KHZ 我想用190KHz的PWM该怎么设置呢,我尝试过改变arr的值  ...

8楼。。。。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-9-22
在线时间
16 小时
发表于 2020-6-18 18:57:35 | 显示全部楼层

8楼?有答案吗
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-10-20
在线时间
13 小时
发表于 2021-11-2 21:32:05 | 显示全部楼层
你好,我使用翻转模式可以正常工作,有效模式无输出。自己查了寄存器没有发现问题。配置如下
屏幕截图 2021-11-02 212459.png
回复 支持 反对

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-4-23 14:20:09 | 显示全部楼层
我也想问一下  频率怎么设置的
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2022-4-24 08:56:10 | 显示全部楼层
jinghua 发表于 2022-4-23 14:20
我也想问一下  频率怎么设置的

arr psc呀
回复 支持 反对

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-5-17 14:41:59 | 显示全部楼层

意思是通过这个公式计算的频率吗?

意思是通过这个公式计算的吗?

意思是通过这个公式计算的吗?
回复 支持 反对

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-5-17 14:42:53 | 显示全部楼层

意思是通过这行代码计算的吗
Inked1652769517(1)_LI.jpg
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2022-5-18 12:30:41 | 显示全部楼层
jinghua 发表于 2022-5-17 14:42
意思是通过这行代码计算的吗

是的,这个是时钟频率 配合输出比较值就可以了
回复 支持 反对

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-5-18 16:21:32 | 显示全部楼层
nashui_sx 发表于 2022-5-18 12:30
是的,这个是时钟频率 配合输出比较值就可以了

是再配合这句计算 它的频率吗   
还有一个疑问楼主   
就是 这个 TIM_GetCapture1(TIM3)是什么?
1652862002(1).jpg
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2022-5-19 12:16:42 | 显示全部楼层
jinghua 发表于 2022-5-18 16:21
是再配合这句计算 它的频率吗   
还有一个疑问楼主   
就是 这个 TIM_GetCapture1(TIM3)是什么?

当前计数器值,读出来加上下次的 高低点平数  下次中断值就定了你最好先理解下定时器的常见的几个寄存器的意思
回复 支持 反对

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-5-20 09:47:09 | 显示全部楼层
nashui_sx 发表于 2022-5-19 12:16
当前计数器值,读出来加上下次的 高低点平数  下次中断值就定了你最好先理解下定时器的常见的几个寄存器 ...

好 我去看一下   谢谢楼主
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2023-3-23
在线时间
3 小时
发表于 2023-3-24 10:39:16 | 显示全部楼层
本帖最后由 Lim123 于 2023-3-24 13:52 编辑

如果我把周期设置成5us的话好像会出问题
           
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 13:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表