打印

GD32F303,EXTI外部触发中断扫描频率,被PWM输出严重影响

[复制链接]
1848|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kfhzy|  楼主 | 2022-4-23 12:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kfhzy 于 2022-4-26 11:30 编辑

我的项目是,控制多个EC风机。EC风机转速受PWM控制,反馈是转速对应的脉冲。
实际GD32F303的配置是,PWM的载频为10KHz,使用TIM3的4个output通道输出PWM。
转速采集采用EXTI外部触发,使用一个100kHz的定时器,作为测量时钟。

调试时,当控制1只EC风机时,一切正常,即PWM输出正常,转速采集的脉冲变化和100k定时器的值相同。即在EXTI对应端子上,施加100Hz的频率,计数器值应该是1000(即100k / 100 = 1000),实际单片机读到的计数值也是1000,且波动范围可以是个位数,1001,1003,998等。


当控制2只或2只以上EC风机时,出现了诡异的现象。此时,PWM输出正常,风机也正常运转。
但是转速采集的脉冲计数变化不再是100k的变化速率了,而是10K的变化速率。即,假如在EXTI对应端子上,施加100Hz的频率,计数器值是1000,但波动变为了1010,990,1020,980等等,再也没有个位数的变化了。

并且,当改变PWM的载频至50K时,采集的脉冲频率变化即为50k的变化速率。即波动变为了1005,1010,995,990等等。


当改变PWM的载频,如100K时,采集的脉冲频率变化即为100k的变化速率。波动才又有了个位数的变化。


在调试中,TIM3的4个PWM通道,只要是一个或零个PWM输出,EXTI的频率采集就正常。一旦使能了2个及以上的PWM输出,EXTI的频率采集就异常了,并且随着PWM的频率改变而改变。


各位大神,看看这是什么情况呢?



使用特权

评论回复
沙发
xdqfc| | 2022-4-24 10:42 | 只看该作者
用示波器看一下EXTI的波形有没有受多路输出的影响,再看看100Khz的基准时钟有没有受影响,最起码看一下,然后再分析,估计是中断不及时的可能性较大,没有看到源程序,没有办法分析。

使用特权

评论回复
板凳
kfhzy|  楼主 | 2022-4-26 09:30 | 只看该作者
本帖最后由 kfhzy 于 2022-4-26 11:27 编辑
xdqfc 发表于 2022-4-24 10:42
用示波器看一下EXTI的波形有没有受多路输出的影响,再看看100Khz的基准时钟有没有受影响,最起码看一下,然 ...

100kHz的时钟没有受影响,否则统计到的脉冲间隔计数应是错误的。
EXTI波形一直有示波器监视,频率及幅值没有问题。
现在的情况是,EXTI和中断配合后,统计的脉冲数量基本是对的,就是误差变化有问题,关闭TIM3的PWM输出,误差变化可以是±1的倍数。一旦开启2个或2个以上PWM通道,误差变化就是 ±10的倍数了。
中断不及时的问题很令人疑惑,TIM3产生4个通道的10kHz的,PWM波形时,并没有使用任何中断,完全是配置好的外设自己运行的,MCU除了初始化和启动TIM3后,就没有进行任何干预了。而且,在EXTI中断配置中,尝试了很多种优先级配置方式,把EXTI的优先级调到能调整的最高级,结果和之前都是一样的。现在有些怀疑是芯片内部逻辑有冲突

使用特权

评论回复
地板
kfhzy|  楼主 | 2022-4-27 12:29 | 只看该作者
这么大的芯片bug,没人遇到?

使用特权

评论回复
5
xdqfc| | 2022-4-28 09:27 | 只看该作者
kfhzy 发表于 2022-4-27 12:29
这么大的芯片bug,没人遇到?

呵呵,遇到的还有比这更奇葩的呢,只能尽量修改程序,实在不行,就换芯片喽,这里是GD32板块,咱就不多说了。

使用特权

评论回复
6
lvben5d| | 2022-4-28 14:35 | 只看该作者
kfhzy 发表于 2022-4-27 12:29
这么大的芯片bug,没人遇到?

你可以先关闭1通道, 单独试试2通道, 如果每个通道单独好的,那么看看计算转速得 中断是否会耽误了。

使用特权

评论回复
7
kfhzy|  楼主 | 2022-4-29 19:06 | 只看该作者
lvben5d 发表于 2022-4-28 14:35
你可以先关闭1通道, 单独试试2通道, 如果每个通道单独好的,那么看看计算转速得 中断是否会耽误了。 ...

这个试过了,无论TIM3的个通道,开启任意一个通道,EXTI中断都是正常的。开启任意两个以上,EXTI中断就不正常了。甚至调试的时候,在线用监视器直接开启或关闭PWM,效果一样。

使用特权

评论回复
8
kfhzy|  楼主 | 2022-4-29 19:08 | 只看该作者
xdqfc 发表于 2022-4-28 09:27
呵呵,遇到的还有比这更奇葩的呢,只能尽量修改程序,实在不行,就换芯片喽,这里是GD32板块,咱就不多说 ...

主要是,这次恰巧用的是GD的芯片了,还没有用ST的芯片这样子试过,不知道会不会一样有这问题。不知道是ARM的架构问题,还是芯片厂家移植的问题

使用特权

评论回复
9
lvben5d| | 2022-5-5 16:30 | 只看该作者
kfhzy 发表于 2022-4-29 19:06
这个试过了,无论TIM3的个通道,开启任意一个通道,EXTI中断都是正常的。开启任意两个以上,EXTI中断就不 ...

你看看 2楼提出的问题, 会不会是中断不及时引起 ?  前面中断优先级配置, 把采样引脚中断设置可以抢占其他中断源。

使用特权

评论回复
10
kiwis66| | 2022-5-6 11:14 | 只看该作者
一般不会冲突的,检查下底层初始化代码

使用特权

评论回复
11
kfhzy|  楼主 | 2022-5-16 18:49 | 只看该作者
lvben5d 发表于 2022-5-5 16:30
你看看 2楼提出的问题, 会不会是中断不及时引起 ?  前面中断优先级配置, 把采样引脚中断设置可以抢占 ...

本来现象就是,开启多路PWM输出,就引起中断不及时了。首先,PWM的操作,在配置上,没有使用任何中断。但是,它却能引起 exti功能的而中断不及时,这就是很奇怪的事情。二楼提出的问题,之前已经回答了。现在关注的是,PWM的多路开启,为何会使EXTI中断不及时。

使用特权

评论回复
12
kfhzy|  楼主 | 2022-5-16 18:53 | 只看该作者
kiwis66 发表于 2022-5-6 11:14
一般不会冲突的,检查下底层初始化代码

还不至于出现底层代码的问题,最起码这些功能配置,在单独运行的时候都是好的,甚至pwm只开启1路的时候都是好的,开启2路以上,才出现干扰exti中断的问题。  此外,即使在调试的时候,通过调试器直接改写PWM启动的寄存器,打开和关闭多路pwm后,exti中断被干扰或者干扰消失可以清晰的看到。

使用特权

评论回复
13
gtkbegin01| | 2022-7-3 13:19 | 只看该作者
垃圾GD32,同样问题 PWM严重影响其他中断的及时性
垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾
好垃圾垃圾

使用特权

评论回复
14
kfhzy|  楼主 | 2022-9-5 16:53 | 只看该作者
gtkbegin01 发表于 2022-7-3 13:19
垃圾GD32,同样问题 PWM严重影响其他中断的及时性
垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾 ...

哈哈,你这么说,心里好多了,可算遇到个明白人了。一同被坑,一同快乐着就好~~~~

使用特权

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

本版积分规则

19

主题

113

帖子

2

粉丝