哈哈哈哈 发表于 2024-8-17 17:27:25

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 ???


结果:未完成实验目标


哈哈哈哈 发表于 2024-8-20 10:30:12

如果要随时改变PWM占空比,要将值放入CCAPnH里面,这样下个周期才用这个值

哈哈哈哈 发表于 2024-8-20 11:52:46

纠正错误
CCAPM0 = 0x42;      //PCA 模块 0 为 PWM 工作模式
    PCA_PWM0 = 0x80; //PCA 模块 0 输出 6 位 PWM
    CCAP0L = 0x20;      //PWM 占空比为 50%
    CCAP0H = 0x20;   //这个也要赋值

哈哈哈哈 发表于 2024-8-21 09:26:35

STC8051U 打卡第一天
PWM 捕获

哈哈哈哈 发表于 2024-8-21 09:26:58

STC8051U 打卡第二天
PWM 深入

哈哈哈哈 发表于 2024-8-21 09:27:42

STC8051U 打卡第三天
PWM 捕获

哈哈哈哈 发表于 2025-5-26 16:07:52

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(控制渐变速度)
}

哈哈哈哈 发表于 2025-5-26 16:14:16

测试条件:配置系统时钟为40MHz,WTST = 0X00;//程序读取等待控制 0速度最快      CKCON = 0X00;//拓展RAM读取等待 0速度最快
结果:

理论值:40000000/1024 = 39.0625KHz
页: [1]
查看完整版本: 8051U PWM 初试