打印

gd32c103输出pwm波有异常尖峰

[复制链接]
1862|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hhhhakl|  楼主 | 2022-12-8 11:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用gd32c103控制电机,因为换相时需要重新对某个通道的pwm进行开关操作,输出的pwm就出现了异常尖峰。怀疑是没有使能影子寄存器,但是使能后也没用。

AF28A204-0C39-46BB-B447-F0CE12D1231B.jpeg (153.58 KB )

AF28A204-0C39-46BB-B447-F0CE12D1231B.jpeg

使用特权

评论回复
沙发
Hhhhakl|  楼主 | 2022-12-8 11:45 | 只看该作者
有没有哥们儿遇到过这种情况啊,我用官方例程的6步法输出的pwm测出来也有这个尖峰

使用特权

评论回复
板凳
duzhiqiang521| | 2022-12-8 13:39 | 只看该作者
Hhhhakl 发表于 2022-12-8 11:45
有没有哥们儿遇到过这种情况啊,我用官方例程的6步法输出的pwm测出来也有这个尖峰 ...

有代码吗

使用特权

评论回复
地板
Hhhhakl|  楼主 | 2022-12-8 14:18 | 只看该作者
这是例程里换相中断里的一段代码,差不多就是这样,因为每次换相需要关断一相,开启另外两相的pwm,好像这个函数就会导致出现尖峰

9624A194-3513-414C-936E-2E0E4994C951.jpeg (115.77 KB )

9624A194-3513-414C-936E-2E0E4994C951.jpeg

使用特权

评论回复
5
duzhiqiang521| | 2022-12-8 14:26 | 只看该作者
Hhhhakl 发表于 2022-12-8 14:18
这是例程里换相中断里的一段代码,差不多就是这样,因为每次换相需要关断一相,开启另外两相的pwm,好像这 ...

这个出现尖峰的波是在互补的使能那个通道吗?比如图中的TIMER_CH0使能了,而TIMER_CH0的互补通道每使能,然后这个尖峰就出现在使能的TIMER_CH0上了?

使用特权

评论回复
6
Hhhhakl|  楼主 | 2022-12-8 14:39 | 只看该作者
duzhiqiang521 发表于 2022-12-8 14:26
这个出现尖峰的波是在互补的使能那个通道吗?比如图中的TIMER_CH0使能了,而TIMER_CH0的互补通道每使能, ...

通道和它的互补通道都会有尖峰,只要是使能了这一路输出,如果是没使能那一个通道就不会有。也就是TIMER_CCX_DISABLE这个函数不会导致尖峰,但是TIMER_CCX_ENABLE会导致尖峰

使用特权

评论回复
7
duzhiqiang521| | 2022-12-8 15:08 | 只看该作者
那个尖峰脉冲宽度多宽

使用特权

评论回复
8
duzhiqiang521| | 2022-12-8 15:12 | 只看该作者
因为  timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);这个函数的内部操作是先清0使能位然后再输出使能

使用特权

评论回复
9
Hhhhakl|  楼主 | 2022-12-8 15:16 | 只看该作者
duzhiqiang521 发表于 2022-12-8 15:08
那个尖峰脉冲宽度多宽

几十到几百纳秒左右

使用特权

评论回复
10
duzhiqiang521| | 2022-12-8 15:17 | 只看该作者
duzhiqiang521 发表于 2022-12-8 15:12
因为  timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);这个函数的内部操作是先清 ...

你看看那个尖峰脉冲是不是几个时钟周期的脉冲宽度,

使用特权

评论回复
11
duzhiqiang521| | 2022-12-8 15:28 | 只看该作者
那就没问题了,timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state)  这个函数的内部操作过程是        TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);    //会先关掉输出   所以我们的输出波形会拉低
        TIMER_CHCTL2(timer_periph) |= (uint32_t)state;  //使能之后,  输出波形会拉高

所以会出现那个几十-几百纳秒的尖峰。

使用特权

评论回复
12
duzhiqiang521| | 2022-12-8 15:29 | 只看该作者
duzhiqiang521 发表于 2022-12-8 15:28
那就没问题了,timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t st ...

就是执行命令一两个时钟周期的问题

使用特权

评论回复
13
Hhhhakl|  楼主 | 2022-12-8 16:18 | 只看该作者
duzhiqiang521 发表于 2022-12-8 15:28
那就没问题了,timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t st ...

哦哦,就是这个原因,解决了,谢谢!不过它例程里也是这样用的,看来这样用这个函数还是有点问题的。

使用特权

评论回复
14
xch| | 2022-12-8 19:16 | 只看该作者
是不是在已经输出PWM波形时,去修改PWM 占空比?

使用特权

评论回复
15
plsbackup| | 2022-12-12 11:03 | 只看该作者
这个只能通过滤波的方式解决了吗              

使用特权

评论回复
16
sdCAD| | 2022-12-12 11:12 | 只看该作者
把你的代码上传看一下是什么问题。

使用特权

评论回复
17
MessageRing| | 2022-12-20 18:38 | 只看该作者
这个影响应该不是很大

使用特权

评论回复
18
小小蚂蚁举千斤| | 2022-12-21 09:12 | 只看该作者
应该是硬件问题导致的,但对实际使用肯定不影响

使用特权

评论回复
19
szt1993| | 2022-12-21 09:52 | 只看该作者
建议楼主排查一下硬件看看是不是在这个通道滤波抗干扰这一部分需要加强

使用特权

评论回复
20
Jacquetry| | 2022-12-21 14:55 | 只看该作者
硬件设计出的问题吧

使用特权

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

本版积分规则

3

主题

11

帖子

0

粉丝