STC8G1K08A之PWM占空比调整

STC8G1K08A之PWM占空比调整

PWM的占空比影响因素:

在这里插入图片描述
由描述可知控制PWM占空比为XCCAPnL以及CCAPnL中的值。当CL中的值比XCCAPnL+CCAPnL中的值小时,输出低电平。
CCAPnL的值可以直接进行地址访问进行赋值:
在这里插入图片描述
XCCAPnL的值在PCA_PWMn的地址中进行赋值:
在这里插入图片描述

以下为示例代码:
在这里插入图片描述
输出占空比为10% :
计算思路: 当CL及CH自增到3FF时会溢出到0, 3FF+1 = 400 。 则若想占空比为10%
→ 400 换算成 十进制:1024 。(1024 - x)/1024 = 0.1 → x = 921.6 取整为922 换算成十六进制:
39AH 。则3为XCCAPnL中的值,9A为CCAPnL中的值。

XCCAPnH 及 CCAPnH 中的值为 CH[1:

### STC8G1K08A 单片机 PWM 占空比配置方法 #### 配置概述 STC8G1K08A 是一款高性能、低功耗的单片机,支持多路PWM输出并允许灵活调整占空比。通过设置特定寄存器可以实现对PWM信号特性的精准调控。 #### 寄存器设定 对于PWM占空比的具体配置涉及到几个关键寄存器的操作: - **CCAPnL**: 此寄存器用于存储比较匹配值的一部分,在决定何时切换PWM状态方面起着重要作用。 - **XCCAPnL (位于PCA_PWMn)**: 这个额外的捕获/比较寄存器同样参与定义PWM周期内的高电平持续时间[^4]。 当`CL`中的计数值小于等于`XCCAPnL + CCAPnL`时保持高电平;一旦超过该阈值,则转为低电平直到下一个周期开始。 #### 实现代码示例 下面给出一段简单的C语言程序片段来演示如何初始化并动态改变指定通道上的PWM波形参数: ```c #include "stc8.h" void InitPWM(void){ PCA0MD &= ~0x40; //关闭看门狗定时器 PCA0CN |= 0x40; //使能PCA模块 REF0CN |= 0x08; //选择内部振荡器作为PCA时钟源 PCA0MD = 0x0B; //启动PCA, 设置工作模式为自由运行方式 CRF0CN |= 0x0E; //选择分频系数为12T(即fosc/12), 启动PCA计数器 CMOD0=0b00000001;//选择PCA模块0的工作模式为高速PWM(HSPWM) CCPER0=0xFF; //预设最大计数值(全周期) } // 动态修改PWM占空比函数 void SetPWMDuty(unsigned char dutyCyclePercentage){ unsigned int compareValue; compareValue=(unsigned int)((float)dutyCyclePercentage*256/100); CCAP0L=compareValue&0xff; //更新CCAPnL *(volatile unsigned char*)0xA7=(char)(compareValue>>8); // 更新XCCAPnL(Port address for PCA_PWM0 is 0xA7) } ``` 此段代码首先完成了基本的硬件初始化操作,接着提供了接口让用户能够方便地根据百分比形式输入期望达到的目标占空比例,并据此计算出合适的比较匹配值写入相应的寄存器完成实际效果呈现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值