请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 1691|回复: 9

STC15w4k61s4增强型6通道pwm频率失控问题

[复制链接]

该用户从未签到

1

主题

4

回帖

31

积分

新手上路

积分
31
发表于 2023-3-16 09:30:16 | 显示全部楼层 |阅读模式
如图所示在控制占空比变化过程中,中间一小段pwm波形的频率变为设定频率的一半占空比变为50,导致占空比输出应为87实际为13,求各位大佬帮忙看一下

调制波形反转

调制波形反转

基波占空比

基波占空比
回复 送花

使用道具 举报

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-16 11:59:30 | 显示全部楼层
本帖最后由 梁工 于 2023-3-20 21:46 编辑

STC15W4K系列的15位PWM是用匹配取反的方式实现的,所以一定要在PWM周期中断里更新占空比数据,避临界情况出现(占空比反转,比如本来占空比20%变成80%)。我最早的四轴飞行器飞控版本就是STC15W4K做的,只要遵循上述操作,PWM就会不会异常,飞了几年四轴没失控过的。
到了STC8A8K64D4和STC8G2K系列的15位PWM改进为匹配点输出1或0,不会出现占空比反转的情况,但依旧要在周期中断中更新占空比(不过临界情况最多影响一个周期)。
STC8H系列、STC32G系列的高级PWM是比较输出方式,也不会出现占空比翻转。
回复 支持 1 反对 0 送花

使用道具 举报

该用户从未签到

1

主题

4

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-16 13:48:25 | 显示全部楼层
梁工 发表于 2023-3-16 11:59
STC15W4K系列的15位PWM是用匹配取反的方式实现的,所以一定要在PWM周期中断里更新占空比数据,避临界情况出 ...

好的谢谢,我去试一试:handshake

该用户从未签到

1

主题

4

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-20 17:42:48 | 显示全部楼层
梁工 发表于 2023-3-16 11:59
STC15W4K系列的15位PWM是用匹配取反的方式实现的,所以一定要在PWM周期中断里更新占空比数据,避临界情况出 ...

你好梁工,我在中断里更新T2的值还是会出现反转的情况,在某个周期里T2没反转电平,代码如下
  1. void pwminit(void)
  2. {
  3.         //IP2 |=0x04;
  4.         P_SW2 |= 0x80;                             
  5.         PWMCFG = 0x00;
  6.         PWMCKS = 0x01;                  
  7.         PWMC = CTL_CYCLE;                                       
  8.         PWM3CR = 0x00;
  9.         PWM3T1 = 0x00;               
  10.         PWM3T2 = CTL_CYCLE/2;        
  11.         PWMCR |= 0xc0;                          
  12.         P_SW2 &=~0x80;
  13. }
  14. void PWM_int(void) interrupt 22
  15. {
  16.         if(PWMIF & 0x40)
  17.         {
  18.                 PWMIF &=~0x40;
  19.                 ceshi=!ceshi;
  20.                 if((ctl_duty>0)&&(ctl_duty<100))
  21.                 {
  22.                         if(last_pwmt2_count!=pwmt2_count)
  23.                         {
  24.                                 last_pwmt2_count=pwmt2_count;
  25.                                 P_SW2 |= 0x80;
  26.                                 PWM3T2 = pwmt2_count;
  27.                                 PWMCR |= 0x02; //设置为pwm输出口
  28.                                 P_SW2 &=~0x80;
  29.                         }
  30.                 }else if(ctl_duty>=100)
  31.                 {
  32.                         PWMCR &=~0x02;
  33.                         ctl_pul=1;
  34.                 }else if(ctl_duty<=0)
  35.                 {
  36.                         PWMCR &=~0x02;
  37.                         ctl_pul=0;
  38.                 }
  39.         }
  40. }
复制代码
3.jpg

点评

会不会是别的中断耽误了时间?PWM中断更新不容易出现问题的。  详情 回复 发表于 2023-3-20 21:48

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-20 21:48:50 | 显示全部楼层
星染 发表于 2023-3-20 17:42
你好梁工,我在中断里更新T2的值还是会出现反转的情况,在某个周期里T2没反转电平,代码如下
...

会不会是别的中断耽误了时间?PWM中断更新不容易出现问题的。

该用户从未签到

1

主题

4

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-21 10:34:14 | 显示全部楼层
梁工 发表于 2023-3-20 21:48
会不会是别的中断耽误了时间?PWM中断更新不容易出现问题的。

别的中断都关了,主程序里边的其他东西都去了还是空一个周期

点评

这样更不应该出现问题,我用这个芯片的PWM有10年了,从没出现过翻转。你先测试一下我们的例子吧。  详情 回复 发表于 2023-3-21 10:47

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-21 10:47:01 | 显示全部楼层
星染 发表于 2023-3-21 10:34
别的中断都关了,主程序里边的其他东西都去了还是空一个周期

这样更不应该出现问题,我用这个芯片的PWM有10年了,从没出现过翻转。你先测试一下我们的例子吧。

该用户从未签到

1

主题

4

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-24 15:20:24 | 显示全部楼层
梁工 发表于 2023-3-21 10:47
这样更不应该出现问题,我用这个芯片的PWM有10年了,从没出现过翻转。你先测试一下我们的例子吧。 ...

解决了梁工,判断一下赋值给T2的变量范围就行了合理就更新T2

点评

值不能太小,也不能太大,否则来不及更新就会导致出错。  详情 回复 发表于 2023-3-24 16:12

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-24 16:12:39 | 显示全部楼层
星染 发表于 2023-3-24 15:20
解决了梁工,判断一下赋值给T2的变量范围就行了合理就更新T2

值不能太小,也不能太大,否则来不及更新就会导致出错。
  • TA的每日心情
    无聊
    昨天 08:26
  • 签到天数: 103 天

    [LV.6]常住居民II

    17

    主题

    524

    回帖

    1079

    积分

    金牌会员

    积分
    1079
    发表于 2023-3-24 18:00:19 | 显示全部楼层
    STC的高级PWM的功能实在是强大,我已受益匪浅,但是到如今再次使用还是有些犯晕出错!!后续还是得以梁工等的自动点才慢慢领悟一些,惭愧!
    不停地学习
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-3-29 05:50 , Processed in 0.078382 second(s), 73 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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