找回密码
 立即注册
查看: 82|回复: 5

STC8GPWM

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-10-25 08:45:22
已绑定手机

5

主题

1

回帖

29

积分

新手上路

积分
29
发表于 2025-10-25 08:45:22 | 显示全部楼层 |阅读模式
怎样使用15位pwm中2组pwm形成死区?

且使用库函数实现,可随时关闭pwm并初始化位低电平
回复

使用道具 举报 送花

3

主题

1848

回帖

544

积分

等待验证会员

积分
544
发表于 2025-10-25 08:48:00 | 显示全部楼层
STC8G系列单片机支持多通道PWM输出,其中部分通道支持互补PWM输出并可配置死区时间。若需使用15位PWM模式下的两组PWM通道实现带死区的互补输出,并通过库函数进行配置,同时支持随时关闭PWM输出并初始化为低电平,可参考以下实现方案。

一、硬件资源与功能说明

STC8GPWM模块支持15位分辨率的PWM输出,支持互补输出及死区控制。通常互补PWM通道为成对出现,如PWM0与PWM1、PWM2与PWM3等,具体需参考数据手册中关于PWM通道的定义。

死区控制是通过专用寄存器配置实现的,通常为PWMxDEADTIME类寄存器,可设置上升沿与下降沿之间的延迟时间,以防止上下桥臂直通。

二、实现目标

1. 使用两组PWM通道(如PWM0与PWM1)实现互补输出;
2. 配置死区时间;
3. 使用库函数进行初始化与控制;
4. 支持运行中随时关闭PWM输出;
5. PWM关闭后输出保持低电平。

三、开发环境与库函数说明
MCU型号:STC8G系列(如STC8G1K08/STC8G1K16等);
开发环境:Keil uVision 或 IAR;
使用官方STC提供的标准库函数;
引脚配置需根据实际封装定义进行设置。

四、代码实现步骤

1. 初始化PWM模块(使用库函数)

首先配置PWM模块为15位模式,并设置两组PWM为互补输出。
  1. c
  2. include "stc8g.h"
  3. void PWMInit(void)
  4. {
  5.     // 设置PWM0和PWM1为互补输出
  6.     PWMxSetMode(PWM0, PWMMODECOMPLEMENTARY);  // 设置为互补模式
  7.     PWMxSetResolution(PWM0, PWMRESOLUTION15BIT); // 设置为15位精度
  8.     // 设置频率与占空比
  9.     PWMxSetFrequency(PWM0, 20000);  // 设置频率为20kHz
  10.     PWMxSetDuty(PWM0, 50);         // 设置占空比为50%
  11.     // 设置死区时间(单位为系统时钟周期)
  12.     PWMxSetDeadTime(PWM0, 100);    // 设置死区时间为100个系统时钟周期
  13.     // 启动PWM0输出
  14.     PWMxStart(PWM0);
  15. }
复制代码
注:上述函数为示意性函数名,具体函数名与参数请参考STC官方提供的库函数手册,例如PWMInit(), PWMSetDeadTime()等。

2. 关闭PWM并初始化为低电平

在需要关闭PWM时,需调用关闭函数,并将PWM引脚设置为低电平输出。
  1. c
  2. void PWMShutdown(void)
  3. {
  4.     // 停止PWM输出
  5.     PWMxStop(PWM0);
  6.     // 将PWM0和PWM1引脚设置为低电平
  7.     P1M1 &= ~0x03;  // 假设PWM0/PWM1在P1.0和P1.1
  8.     P1M0 &= ~0x03;
  9.     P1 |= 0x00;     // 设置为低电平输出
  10. }
复制代码
实际引脚配置请根据具体型号和封装进行调整,确保PWM通道与GPIO引脚对应。

3. 主函数示例
  1. c
  2. void main(void)
  3. {
  4.     // 系统初始化
  5.     SysInit();
  6.     // PWM初始化
  7.     PWMInit();
  8.     while(1)
  9.     {
  10.         // 可在此添加控制逻辑,例如按键控制关闭PWM
  11.         if (SomeCondition)
  12.         {
  13.             PWMShutdown();
  14.         }
  15.     }
  16. }
复制代码

五、注意事项

1. 死区时间单位:不同型号的STC8G系列单片机对死区时间的单位可能不同,有些以系统时钟周期为单位,有些以PWM时钟为单位,需查阅数据手册确认。
2. 互补输出引脚配置:必须确保所选PWM通道为互补对,否则无法正常配置死区。
3. 关闭PWM后的引脚状态:关闭PWM后,需手动将引脚配置为普通IO输出,并设置为低电平,防止悬空或高电平状态。
4. 库函数兼容性:确保使用的库函数版本与MCU型号匹配,避免因库函数不兼容导致配置失败。

六、总结

通过STC8G系列单片机的PWM模块,可以使用库函数快速实现15位互补PWM输出,并配置死区时间。在关闭PWM时,应手动将引脚设置为低电平输出,以满足系统安全需求。该方案适用于电机驱动、电源变换等需要死区控制的应用场景。

如需进一步优化,可结合中断、定时器或其他外设实现动态占空比调整或故障保护功能。

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-10-25 08:45:22
已绑定手机

5

主题

1

回帖

29

积分

新手上路

积分
29
发表于 2025-10-25 09:47:20 | 显示全部楼层

STC8G库函数PWM

STC8G库函数使用15位增强型PWM中的两组PWM做死区,

要求两组PWM可随时关闭,并初始化为低电平
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-11-01 08:22:10

792

主题

1万

回帖

2万

积分

管理员

积分
20133
发表于 2025-10-25 12:50:17 | 显示全部楼层

截图202510251250151828.jpg

截图202510251249447801.jpg


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-11-01 08:22:10

792

主题

1万

回帖

2万

积分

管理员

积分
20133
发表于 2025-10-25 12:51:24 | 显示全部楼层
截图202510251250501144.jpg


截图202510251251203636.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:544
  • 最近打卡:2025-10-31 09:14:02
已绑定手机

48

主题

2300

回帖

8120

积分

论坛元老

积分
8120
发表于 2025-10-25 14:14:01 | 显示全部楼层
参考ISP软件里面的范例程序
截图202510251413482027.jpg
截图202510251414546133.jpg
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-11-2 01:22 , Processed in 0.139105 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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