找回密码
 立即注册
楼主: 叶凡

【疑难问题】不同批次的STC8G2K64S4芯片 PWM波形不连续

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-3 09:19:20 | 显示全部楼层
叶*** 发表于 2024-4-3 08:38
梁工,您好:
    感谢您的回复,现在的问题有两个:
①从示波器角度看:示波器的采样参数是一致的扫描速 ...

不管是B版、C版,PWM是不会有问题的。
打开频率计看看频率跟你PWM频率是否一致。
也可以用固定的占空比测试一下,就是程序中先不要改变占空比,初始化后固定一个占空比,看看效果。
再次说明:PWM是硬件产生的,不会出现不连续的情况,如果确实出现,则一般是程序在对PWM进行开关控制(比如三相无刷电机驱动),我从未遇到、听说过硬件PWM会不连续。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-04-29 09:24:38

1

主题

19

回帖

69

积分

注册会员

积分
69
发表于 2024-4-3 09:34:45 | 显示全部楼层
梁*** 发表于 2024-4-3 09:19
不管是B版、C版,PWM是不会有问题的。
打开频率计看看频率跟你PWM频率是否一致。
也可以用固定的占空比测 ...

梁工,您好:
    目前测试时是固定占空比,同一套程序同一版PCB烧录到不同批次的单片机就会出现这个问题,我可以把我这边的单片机寄过去给您验证

点评

第三次请求:打开示波器的频率计看看频率跟你PWM频率是否一致。  详情 回复 发表于 2024-4-3 10:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-3 10:11:09 | 显示全部楼层
叶*** 发表于 2024-4-3 09:34
梁工,您好:
    目前测试时是固定占空比,同一套程序同一版PCB烧录到不同批次的单片机就会出现这个问题 ...

第三次请求:打开示波器的频率计看看频率跟你PWM频率是否一致。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-02 10:18:47

24

主题

515

回帖

990

积分

荣誉版主

积分
990
发表于 2024-4-3 11:03:43 | 显示全部楼层
用逻辑分析仪抓一下看看。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-04-29 09:24:38

1

主题

19

回帖

69

积分

注册会员

积分
69
发表于 2024-4-3 11:48:05 | 显示全部楼层
梁*** 发表于 2024-4-3 10:11
第三次请求:打开示波器的频率计看看频率跟你PWM频率是否一致。

梁工,您好:
示波器频率与我程序设定频率一致。
正常批次波形

正常

正常

异常批次波形单次触发抓拍

异常1

异常1

异常2

异常2

逻辑分析仪抓取

逻辑分析仪

逻辑分析仪




点评

请告知单片机具体型号、那些脚输出PWM、PWM周期、PWM频率、主频时钟,我根据你的条件编写测试程序给你测试。  详情 回复 发表于 2024-4-3 12:10
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-04-29 09:24:38

1

主题

19

回帖

69

积分

注册会员

积分
69
发表于 2024-4-3 11:49:19 | 显示全部楼层
社区*** 发表于 2024-4-3 11:03
用逻辑分析仪抓一下看看。


您好,见下图:
异常波形和示波器测试结果一致
截图202404031148317940.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-3 12:10:46 | 显示全部楼层
叶*** 发表于 2024-4-3 11:48
梁工,您好:
示波器频率与我程序设定频率一致。
正常批次波形

请告知单片机具体型号、那些脚输出PWM、PWM周期、PWM频率、主频时钟,我根据你的条件编写测试程序给你测试。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-04-29 09:24:38

1

主题

19

回帖

69

积分

注册会员

积分
69
发表于 2024-4-3 13:49:43 | 显示全部楼层
梁*** 发表于 2024-4-3 12:10
请告知单片机具体型号、那些脚输出PWM、PWM周期、PWM频率、主频时钟,我根据你的条件编写测试程序给你测 ...


梁工,您好:

出问题的单片机信息:
单片机型号: STC8G2K64S4
软件协议, V1.0: 7.3.12U
主频:
  . 用户设定频率: 24.000MHz
  . 调节后的频率: 24.002MHz ( 主时钟分频系数 = 1; )
PWM引脚:
PWM00-07 PWM20-27 PWM40-47 共24个引脚
PWM周期设置:
0x1000

PWM频率:
理论值:2.928KHz
示波器实测值:2.93KHz

PWM初始化程序片段:

    PWM15_InitStructure.PWM_Enable = ENABLE;          // PWM使能,  ENABLE, DISABLE
    PWM15_InitStructure.PWM_Period = 0x1000;          // PWM周期,  0~0x7fff
    PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; // 时钟源选择,  PWMn_CLK_SYS, PWMn_CLK_TM2
    PWM15_InitStructure.PWM_Clock_PS = 1;             // 系统时钟分频参数(PS+1分频),  0~15
    PWM15_InitStructure.PWM_Counter = ENABLE;         // 计数器使能,  ENABLE, DISABLE
    PWM15_Init(PWM2, &PWM15_InitStructure);
    PWM15Duty(PWM20, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM21, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM22, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM23, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM24, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM25, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM26, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWM15Duty(PWM27, 0x000, 2450); // PWM_ID, 输出低电平位置, 输出高电平位置
    PWMChannelCtrl(PWM20, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM21, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM22, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM23, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断

    PWMChannelCtrl(PWM24, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM25, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM26, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
    PWMChannelCtrl(PWM27, ENABLE, 0, DISABLE, DISABLE, DISABLE); // PWM_ID, 输出使能, 初始电平, PWM中断, 第二个触发点中断, 第一触发点中断
PWM初始化库版本:

截图202404031343515697.jpg
截图202404031344162599.jpg

截图202404031344476019.jpg

PWM测试截图:

截图202404031347509639.jpg

点评

已经按您的技术参数编写了程序,主频24MHz,PWM时钟=主频/2,周期4096(0x1000),低电平时间2450个PWM时钟,高电平时间4096-2450=1646个PWM时钟,PWM频率2.93KHz。 请先别修改程序,直接下载PWM.hex测试。  详情 回复 发表于 2024-4-3 23:28
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-02 10:18:47

24

主题

515

回帖

990

积分

荣誉版主

积分
990
发表于 2024-4-3 15:04:25 | 显示全部楼层
直接找STC原厂进货多好。找中间商,出问题就,,,,,,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-04-29 09:24:38

1

主题

19

回帖

69

积分

注册会员

积分
69
发表于 2024-4-3 15:22:36 | 显示全部楼层
社区*** 发表于 2024-4-3 15:04
直接找STC原厂进货多好。找中间商,出问题就,,,,,,

这次领教了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:50 , Processed in 0.135194 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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