找回密码
 立即注册
查看: 268|回复: 12

请教PWM频率

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 13:24:58 | 显示全部楼层 |阅读模式
梁工及各位朋友请教一个问题,先谢谢。目前用STC8G2K64S4用PWM控制LED的亮度基本是正常工作,PWM的时钟为系统时钟,如果系统用11.0592的频率,那么PWM的频率最高只能为2.7KHz左右,如何将这个PWM的频率提高到20KHz左右?

如果在烧写时将频率设置为22.1184,最大也只有5.4KHz左右,离20KHz还远。
如果PWM时钟选择定时器T2的溢出作为时钟,最大可以到多少?
回复

使用道具 举报 送花

3

主题

714

回帖

139

积分

等待验证会员

积分
139
发表于 2025-5-18 13:28:00 | 显示全部楼层
在STC8G2K64S4LED的PWM驱动中,频率的设置对LED的亮度和驱动性能至关重要。以下是对如何提高PWM频率的详细说明:

1. PWM频率的设置方式
定时器T2的溢出作为时钟:STC8G2K64S4是基于定时器T2的LED驱动芯片,其时钟频率由定时器T2的溢出输出决定。通常,STC8G2K64S4的定时器T2最大支持16位正序计数器,其时钟频率为1 MHz(即2^16 Hz)。
频率计算:当定时器T2的溢出作为时钟时,其最大时钟频率为1 MHz。为了提高频率,可以通过调整定时器T2的正序计数器位数来实现。例如,将正序计数器设置为1024(即2^10),则时钟频率为约976 MHz,这显然高于实际工作频率。然而,1024位计数器通常用于更高的时钟频率,如10 MHz或更高。因此,实际频率的计算需要结合定时器的位数和正序计数器的设置。

2. 如何提高PWM频率
使用更高的定时器位数:将定时器T2的正序计数器位数增加到16位。例如,将正序计数器设置为1024,此时定时器的时钟频率为约976 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。
使用溢出作为时钟:当定时器T2的溢出作为时钟时,时钟频率为1 MHz。通过调整正序计数器的位数,可以将时钟频率扩展到更高的值。例如,将正序计数器设置为2048(即2^11),此时定时器的时钟频率为约500 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。
结合FRC100设置:FRC100(Fundamental Frequency Reference Module 100)可以将时钟频率调至更高的值,例如10 MHz或更高。通过设置FRC100,可以进一步提高PWM的时钟频率。

3. 如何将PWM频率提高到20KHz左右
定时器T2的溢出作为时钟:将定时器T2的正序计数器位数增加到16位,将正序计数器设置为1024。此时,定时器的时钟频率为约976 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。例如,如果FRC100设置为10 MHz,此时PWM的时钟频率为约10 MHz,远高于20KHz。
调整FRC100设置:如果需要将PWM频率提高到20KHz,可以通过调整FRC100的设置来实现。例如,将FRC100的频率设置为20 MHz,此时PWM的时钟频率为约20 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。例如,如果FRC100设置为10 MHz,此时PWM的时钟频率为约10 MHz,远高于20KHz。

4. 总结
将定时器T2的正序计数器位数增加到16位,将正序计数器设置为1024,此时定时器的时钟频率为约976 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。
如果需要将PWM频率提高到20KHz左右,可以通过调整FRC100的设置来实现。例如,将FRC100的频率设置为20 MHz,此时PWM的时钟频率为约20 MHz。然而,实际驱动时会根据LED的驱动能力(如FRC100)来调整时钟频率。

5. 注意事项
定期检查频率:定期检查PWM的时钟频率,以确保LED的工作环境稳定。如果发现频率不稳定,可能需要重新调整定时器的设置。
查阅资料:确保使用正确的定时器和设置,以避免因误用导致的频率问题。参考相关资料,如STC8G2K64S4的PDF手册,以确保设置的正确性和安全性。

希望以上信息对您有所帮助!如果还有其他问题,欢迎随时咨询。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 13:51:43 | 显示全部楼层
国芯人*** 发表于 2025-5-18 13:28
在STC8G2K64S4LED的PWM驱动中,频率的设置对LED的亮度和驱动性能至关重要。以下是对如何提高PWM频率的详细 ...

如果用T2, 会在P1.3口上不断输出高低电平,是吗?这个就得改硬件了呀
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9128

积分

超级版主

DebugLab

积分
9128
发表于 2025-5-18 15:17:03 | 显示全部楼层
使用的是15位增强PWM还是PCA?
降低PWM位数可以提高频率
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 18:25:33 | 显示全部楼层
Debu*** 发表于 2025-5-18 15:17
使用的是15位增强PWM还是PCA?
降低PWM位数可以提高频率

谢谢回复。这是初始化,麻烦看看如何降低PWM位数?

void pwm_init(){

     PWMSET = 0x08;          //使能 PWM3 模块(必须先使能模块后面的设置才有效)
     PWMSET = 0x0c;          //使能 PWM3+PWM4模块(必须先使能模块后面的设置才有效)

     P_SW2 = 0x80;  //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
     PWM0CKS = 0x00;  //PWM0 时钟为系统时钟

     PWM2CKS = 0x00;    //0000     //2.7KHz   370.0us          1
     PWM3CKS = 0x00;
     PWM3C = 0x1000;  //设置 PWM3 周期为 1000H 个 PWM 时钟  R1+G1;R2+G2;R3+G3
     PWM2C = 0x1000;  //设置 PWM2 周期为 1000H 个 PWM 时钟  R4+G4;R5+G5
     //PWM00T1= 0x0100;  //在计数值为 100H 地方 PWM00 通道输出低电平
        PWM32T1= 0x1000;  //R1--在计数值为 100H 地方 PWM32 通道输出低电平  PWM32T1=0x1000!!!!//输出占空比=0,不亮
        PWM33T1= 0x1000;  //G1

        PWM34T1= 0x1000;  //R2
        PWM35T1= 0x1000;  //G2         
        PWM36T1= 0x1000;  //R3
        PWM37T1= 0x1000;  //G3

        PWM20T1= 0x1000;  //R4
        PWM21T1= 0x1000;  //G4

        PWM22T1= 0x1000;  //R5
        PWM23T1= 0x1000;  //G5
        PWM32T2= LEVEL;  //R1--在计数值为 500H 地方 PWM32 通道输出高电平  //输出占空比=0,不亮
        PWM33T2= LEVEL;  //G1
        PWM34T2= LEVEL;  //R2--在计数值为 500H 地方 PWM34 通道输出高电平  //输出占空比=0,不亮
        PWM35T2= LEVEL;  //G2

        PWM36T2= LEVEL;  //R3--在计数值为 500H 地方 PWM36 通道输出高电平  //输出占空比=0,不亮
        PWM37T2= LEVEL;  //G3

        PWM20T2= LEVEL;  //R4--在计数值为 500H 地方 PWM20 通道输出高电平  //输出占空比=0,不亮
        PWM21T2= LEVEL;  //G4

        PWM22T2= LEVEL;  //R5--在计数值为 500H 地方 PWM22 通道输出高电平  //输出占空比=0,不亮
        PWM23T2= LEVEL;  //G5
//---------------------------------------------------------------------       
      //PWM00CR= 0x80;    //使能 PWM00 输出
      PWM32CR= 0x80;      //使能 PWM32 输出   R1
      PWM33CR= 0x80;      //使能 PWM33 输出   G1

      PWM34CR= 0x80;      //使能 PWM34 输出   R2
      PWM35CR= 0x80;      //使能 PWM35 输出   G2

      PWM36CR= 0x80;      //使能 PWM34 输出   R3
      PWM37CR= 0x80;      //使能 PWM35 输出   G3

      PWM20CR= 0x80;      //使能 PWM20 输出   R4
      PWM21CR= 0x80;      //使能 PWM21 输出   G4

      PWM22CR= 0x80;      //使能 PWM22 输出   R5
      PWM23CR= 0x80;      //使能 PWM23 输出   G5
     //PWMCFG01 = 0x01;  //启动 PWM0 模块
     //PWMCFG23 = 0x10;  //启动 PWM3 模块 控制 R1,G1;R2,G2,R3,G3,
     PWMCFG23 = 0x11;    //启动PWM3模-->控制R1,G1;R2,G2,R3,G3;启动PWM2模-->控制R4,G4;R5,G5,
}                                  

点评

修改周期即可 [attachimg]99659[/attachimg]  详情 回复 发表于 2025-5-18 18:37
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9128

积分

超级版主

DebugLab

积分
9128
发表于 2025-5-18 18:37:07 | 显示全部楼层
fs*** 发表于 2025-5-18 18:25
谢谢回复。这是初始化,麻烦看看如何降低PWM位数?

void pwm_init(){

修改周期即可
截图202505181837036760.jpg
当前是4096(12位PWM)
截图202505181838029228.jpg


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 19:02:44 | 显示全部楼层
Debu*** 发表于 2025-5-18 18:37
修改周期即可

当前是4096(12位PWM)

感谢!我马上试一试,看最高可以到多少?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 20:14:51 | 显示全部楼层
Debu*** 发表于 2025-5-18 18:37
修改周期即可

当前是4096(12位PWM)

试了一下,这个1000H只能改大,如改为2000H,频率下降一半,但不能改小,改小后不能工作,没有产生PWM波形,这是哪里设置不对吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-18 20:39:24 | 显示全部楼层
STC8G2K64S4, 内部晶振选11.0592,  PWM3CKS = 0x00;  //PWM3 时钟为系统时钟,不分频,PWM3C = 0x1000;  //设置 PWM3 周期为 1000H 个 PWM 时钟,这时示波器测试约2.7KHz。    烧写时如设置IRC频率22.1184,则测试PWM频率约5.4KHz。据手册说明,再将IRC频率设置高,将造成工作不稳定。能做到20KHz左右吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-05-19 09:39:11

2

主题

25

回帖

172

积分

注册会员

积分
172
发表于 2025-5-19 02:35:17 | 显示全部楼层
谢谢超级版主的指导,现已经基本调试正常。烧写时选22.1184,PWM频率最高可以达到21.5KHz,基本满足设计需求。谢谢超版!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 03:33 , Processed in 0.251262 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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