8051U PWM 初试
本帖最后由 DebugLab 于 2024-8-18 18:33 编辑实验目标:1KHz 占空比50% 方波
PWM模块结构如图:
先看输入时钟
再看PWM输出引脚
一共有三组可以选择,不能混搭,画PCB的时候注意一下
然后看工作模式
太多了 都看迷了
直接说重点:
6 位 PWM 模式时,计数器一直加,然后进行比较,产生PWM(非严谨)
先配置
CCON = 0x00; //初始化 具体见下图
CMOD = 0x08; //设置时钟是系统时钟
CL = 0x00; //这两个计数器清零
CH = 0x00;
再设置
CCAPM0 = 0x42; //PCA 模块 0 为 PWM 工作模式
PCA_PWM0 = 0x80; //PCA 模块 0 输出 6 位 PWM
CCAP0L = 0x20; //PWM 占空比为 50%
CCAP0H = 0x00; //6位用不到这个
占空比 6位计数器加64就满了,CCAP0L = 0x20; 0x20就是32 正好 64一半(非严谨)
PWM频率为: 输入时钟 除以 64
本次输入时钟是24MHz,所以PWM频率为375,000Hz
实测频率376KHz ???
结果:未完成实验目标
如果要随时改变PWM占空比,要将值放入CCAPnH里面,这样下个周期才用这个值 纠正错误
CCAPM0 = 0x42; //PCA 模块 0 为 PWM 工作模式
PCA_PWM0 = 0x80; //PCA 模块 0 输出 6 位 PWM
CCAP0L = 0x20; //PWM 占空比为 50%
CCAP0H = 0x20; //这个也要赋值 STC8051U 打卡第一天
PWM 捕获 STC8051U 打卡第二天
PWM 深入 STC8051U 打卡第三天
PWM 捕获 PCA (Programmable Counter Array) 是一种多功能计数器/定时器外设,常见于许多微控制器中(如8051系列)。它提供了灵活的可编程计数器功能,能够实现多种定时和计数操作。
任务:
PWM(脉宽调制)模式,10位
代码如下:
设计占空比:
void PWM_Set(u16 value)
{
if(0<=value<=1023) {
value = 1023 - value;
PCA_PWM2 = (PCA_PWM2 & ~0x30) | ((value >> 8) << 4);
CCAP2H = value & 0xff;
}
}初始化代码:
CCON = 0x00; //清中断标志
CMOD = 0x08;//PCA 时钟为系统时钟
CL = 0x00;//计数器值清零
CH = 0x00;
CCAPM2 = 0x42;
PCA_PWM2 = 0xc0;
PWM_Set(100);
CCON |= 0x40; //将CR置1,启动PCA计数器测试代码
while(1) {
PWM_Set(count);// 设置 PWM 占空比
count++; // 递增 PWM 值
if (count > 1023) count = 0;// 超过 1023 归零
delay_ms(1); // 延时 1ms(控制渐变速度)
} 测试条件:配置系统时钟为40MHz,WTST = 0X00;//程序读取等待控制 0速度最快 CKCON = 0X00;//拓展RAM读取等待 0速度最快
结果:
理论值:40000000/1024 = 39.0625KHz
页:
[1]