OpenEdv-开源电子网

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

求助各位大神!!!按键修改延时 第一次结果很奇怪

[复制链接]

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
发表于 2022-7-20 11:35:05 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wetyu 于 2022-7-20 11:37 编辑

我设置了按键修改延时的程序 第一次按s1时TIM2和TIM3的pwm延时总是会先跳变10us 第二次开始就恢复正常 t也是正常增加的 请问有大神知道为什么嘛?




第一次按键后现象如图

第一次按键后现象如图

代码如图

代码如图

最佳答案

查看完整内容[请看2#楼]

仍不建议调用初始化函数。 建议看一下初始化函数的源代码,看操作了哪些寄存器,是否操作了CNT,是否可以根据自己的需要 写一个类似的函数,只修改需要的寄存器, 比如:停止PWM(若此时正在输出高电平,要能立即变低)、设置初始值(计数值CNT)、设置比较值(CCR)、设置重装值(ARR)、启动PWM。 也可以让两个定时器的CNT设置到不同的值然后同时启动来达到“移相”,这样就不需要加延时了。 要不再了解一下高级定时器 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3380

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8608
金钱
8608
注册时间
2020-5-11
在线时间
4042 小时
发表于 2022-7-20 11:35:06 | 显示全部楼层
wetyu 发表于 2022-7-20 17:04
前面初始化过了 因为现在想实现在修改脉宽的时候保证两路之间的死区一直维持 所以在按键里面修改延时 才 ...

仍不建议调用初始化函数。
建议看一下初始化函数的源代码,看操作了哪些寄存器,是否操作了CNT,是否可以根据自己的需要
写一个类似的函数,只修改需要的寄存器,
比如:停止PWM(若此时正在输出高电平,要能立即变低)、设置初始值(计数值CNT)、设置比较值(CCR)、设置重装值(ARR)、启动PWM。
也可以让两个定时器的CNT设置到不同的值然后同时启动来达到“移相”,这样就不需要加延时了。

要不再了解一下高级定时器,带死区的?
傲游截图20220720171352.jpg
专治疑难杂症
回复

使用道具 举报

11

主题

2141

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4847
金钱
4847
注册时间
2015-1-10
在线时间
607 小时
发表于 2022-7-20 16:17:15 | 显示全部楼层
这个10是不是跟按键消抖的10ms有关呢?
回复

使用道具 举报

54

主题

350

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1095
金钱
1095
注册时间
2022-4-20
在线时间
378 小时
发表于 2022-7-20 16:20:13 | 显示全部楼层
正常波形怎样的,发来看看
又菜又爱指点
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-20 16:35:07 | 显示全部楼层
阿侑kevin 发表于 2022-7-20 16:17
这个10是不是跟按键消抖的10ms有关呢?

已经把按键消抖改成1us了 但是还是没用
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-20 16:38:43 | 显示全部楼层
驭剑的秘密 发表于 2022-7-20 16:20
正常波形怎样的,发来看看

下午有测试了一下 好像也不是正常的 按键以后TIM2和TIM3的波形都在变化
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-20 16:43:42 | 显示全部楼层


C:\Users\10176\Pictures
2.jpg
1.jpg
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-20 16:46:12 | 显示全部楼层

黄色为第一路正常波形 蓝色为第二路 紫色为第三路 第一张是按键后  第二张是按键前
回复

使用道具 举报

12

主题

3380

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8608
金钱
8608
注册时间
2020-5-11
在线时间
4042 小时
发表于 2022-7-20 16:46:39 | 显示全部楼层
建议初始化只在初始化的时候调用

main()
{
xxx_init();//初始化定时器
while(1)
{
   按键处理;修改比较值;
}
}
专治疑难杂症
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-20 17:04:31 | 显示全部楼层
LcwSwust 发表于 2022-7-20 16:46
建议初始化只在初始化的时候调用

main()

前面初始化过了 因为现在想实现在修改脉宽的时候保证两路之间的死区一直维持 所以在按键里面修改延时 才又重新初始化了一次  如果不在按键里面修改延时 请问有其他的办法可以实现两路脉宽调整时不会影响两路死区吗?
回复

使用道具 举报

4

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-4-21
在线时间
5 小时
 楼主| 发表于 2022-7-21 17:00:54 | 显示全部楼层
LcwSwust 发表于 2022-7-20 11:35
仍不建议调用初始化函数。
建议看一下初始化函数的源代码,看操作了哪些寄存器,是否操作了CNT,是否可 ...

非常感谢你的指导 之前用过高级定时器设置两路之间死区 但是由于我需要的脉宽和死区时间都太短 所以互补输出的值需要设置的特别大 而要改变频率的话就有点麻烦
回复

使用道具 举报

12

主题

3380

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8608
金钱
8608
注册时间
2020-5-11
在线时间
4042 小时
发表于 2022-7-21 17:29:41 | 显示全部楼层
wetyu 发表于 2022-7-21 17:00
非常感谢你的指导 之前用过高级定时器设置两路之间死区 但是由于我需要的脉宽和死区时间都太短 所以互补 ...

的确麻烦,我看手册里提到的“单脉冲模式”可能用得上,慢慢研究,应该能解决的。
“单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,
并在一个程序可控的延时之后产生一个脉宽可程序控制的脉冲。”


专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-26 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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