gd32c103输出pwm波有异常尖峰

[复制链接]
2708|32
 楼主| Hhhhakl 发表于 2022-12-8 11:42 来自手机 | 显示全部楼层 |阅读模式
用gd32c103控制电机,因为换相时需要重新对某个通道的pwm进行开关操作,输出的pwm就出现了异常尖峰。怀疑是没有使能影子寄存器,但是使能后也没用。
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
duzhiqiang521 发表于 2022-12-8 14:26 | 显示全部楼层
Hhhhakl 发表于 2022-12-8 14:18
这是例程里换相中断里的一段代码,差不多就是这样,因为每次换相需要关断一相,开启另外两相的pwm,好像这 ...

这个出现尖峰的波是在互补的使能那个通道吗?比如图中的TIMER_CH0使能了,而TIMER_CH0的互补通道每使能,然后这个尖峰就出现在使能的TIMER_CH0上了?
 楼主| Hhhhakl 发表于 2022-12-8 14:39 来自手机 | 显示全部楼层
duzhiqiang521 发表于 2022-12-8 14:26
这个出现尖峰的波是在互补的使能那个通道吗?比如图中的TIMER_CH0使能了,而TIMER_CH0的互补通道每使能, ...

通道和它的互补通道都会有尖峰,只要是使能了这一路输出,如果是没使能那一个通道就不会有。也就是TIMER_CCX_DISABLE这个函数不会导致尖峰,但是TIMER_CCX_ENABLE会导致尖峰
duzhiqiang521 发表于 2022-12-8 15:08 | 显示全部楼层
那个尖峰脉冲宽度多宽
duzhiqiang521 发表于 2022-12-8 15:12 | 显示全部楼层
因为  timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);这个函数的内部操作是先清0使能位然后再输出使能
 楼主| Hhhhakl 发表于 2022-12-8 15:16 来自手机 | 显示全部楼层
duzhiqiang521 发表于 2022-12-8 15:08
那个尖峰脉冲宽度多宽

几十到几百纳秒左右
duzhiqiang521 发表于 2022-12-8 15:17 | 显示全部楼层
duzhiqiang521 发表于 2022-12-8 15:12
因为  timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);这个函数的内部操作是先清 ...

你看看那个尖峰脉冲是不是几个时钟周期的脉冲宽度,
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;  //使能之后,  输出波形会拉高

所以会出现那个几十-几百纳秒的尖峰。
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 ...

就是执行命令一两个时钟周期的问题
 楼主| 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 ...

哦哦,就是这个原因,解决了,谢谢!不过它例程里也是这样用的,看来这样用这个函数还是有点问题的。
xch 发表于 2022-12-8 19:16 | 显示全部楼层
是不是在已经输出PWM波形时,去修改PWM 占空比?
plsbackup 发表于 2022-12-12 11:03 | 显示全部楼层
这个只能通过滤波的方式解决了吗              
sdCAD 发表于 2022-12-12 11:12 | 显示全部楼层
把你的代码上传看一下是什么问题。
MessageRing 发表于 2022-12-20 18:38 | 显示全部楼层
这个影响应该不是很大
小小蚂蚁举千斤 发表于 2022-12-21 09:12 | 显示全部楼层
应该是硬件问题导致的,但对实际使用肯定不影响
szt1993 发表于 2022-12-21 09:52 | 显示全部楼层
建议楼主排查一下硬件看看是不是在这个通道滤波抗干扰这一部分需要加强
Jacquetry 发表于 2022-12-21 14:55 | 显示全部楼层
硬件设计出的问题吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部