找回密码
 立即注册
查看: 635|回复: 7

8051U PWM 初试

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

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-17 17:27:25 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-8-18 18:33 编辑

实验目标:1KHz 占空比50% 方波
PWM模块结构如图:
截图202408171605302857.jpg

先看输入时钟
截图202408171609366865.jpg

再看PWM输出引脚
截图202408171611301424.jpg

一共有三组可以选择,不能混搭,画PCB的时候注意一下
然后看工作模式
截图202408171621346687.jpg

太多了 都看迷了
直接说重点
截图202408171634154949.jpg

6 位 PWM 模式时,计数器一直加,然后进行比较,产生PWM(非严谨)



先配置
  1. CCON = 0x00; //初始化 具体见下图
  2.     CMOD = 0x08; //设置时钟是系统时钟
  3.     CL = 0x00;      //这两个计数器清零
  4.     CH = 0x00;
复制代码
截图202408171638021849.jpg



再设置
  1. CCAPM0 = 0x42;      //PCA 模块 0 为 PWM 工作模式
  2.     PCA_PWM0 = 0x80; //PCA 模块 0 输出 6 位 PWM
  3.     CCAP0L = 0x20;      //PWM 占空比为 50%
  4.     CCAP0H = 0x00;     //6位用不到这个
复制代码
截图202408171644462800.jpg

占空比 6位计数器加64就满了,CCAP0L = 0x20; 0x20就是32 正好 64一半(非严谨)

PWM频率为: 输入时钟 除以 64
本次输入时钟是24MHz,所以PWM频率为375,000Hz
实测频率376KHz   ???
截图202408171723213207.jpg

结果:未完成实验目标


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-20 10:30:12 | 显示全部楼层
如果要随时改变PWM占空比,要将值放入CCAPnH里面,这样下个周期才用这个值
截图202408201028511263.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-20 11:52:46 | 显示全部楼层
纠正错误
  1. CCAPM0 = 0x42;      //PCA 模块 0 为 PWM 工作模式
  2.     PCA_PWM0 = 0x80; //PCA 模块 0 输出 6 位 PWM
  3.     CCAP0L = 0x20;      //PWM 占空比为 50%
  4.     CCAP0H = 0x20;     //这个也要赋值
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-21 09:26:35 | 显示全部楼层
STC8051U 打卡第一天
PWM 捕获
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-21 09:26:58 | 显示全部楼层
STC8051U 打卡第二天
PWM 深入
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2024-8-21 09:27:42 | 显示全部楼层
STC8051U 打卡第三天
PWM 捕获
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2025-5-26 16:07:52 | 显示全部楼层
PCA (Programmable Counter Array) 是一种多功能计数器/定时器外设,常见于许多微控制器中(如8051系列)。它提供了灵活的可编程计数器功能,能够实现多种定时和计数操作。
任务:
PWM(脉宽调制)模式,10位
代码如下:
设计占空比:
  1. void PWM_Set(u16 value)
  2. {
  3.   if(0<=value<=1023) {
  4.     value = 1023 - value;
  5.     PCA_PWM2 = (PCA_PWM2 & ~0x30) | ((value >> 8) << 4);
  6.     CCAP2H = value & 0xff;
  7.   }
  8. }
复制代码
初始化代码:
  1.   CCON = 0x00; //清中断标志
  2.   CMOD = 0x08;//PCA 时钟为系统时钟
  3.   CL = 0x00;  //计数器值清零
  4.   CH = 0x00;
  5.   CCAPM2 = 0x42;
  6.   PCA_PWM2 = 0xc0;
  7.   PWM_Set(100);
  8.   CCON |= 0x40; //将CR置1,启动PCA计数器
复制代码
测试代码
  1.   while(1) {
  2.         PWM_Set(count);  // 设置 PWM 占空比
  3.         count++;        // 递增 PWM 值
  4.         if (count > 1023) count = 0;  // 超过 1023 归零
  5.         delay_ms(1);    // 延时 1ms(控制渐变速度)
  6.   }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-29 22:07:07

13

主题

97

回帖

324

积分

中级会员

积分
324
发表于 2025-5-26 16:14:16 | 显示全部楼层
测试条件:配置系统时钟为40MHz,  WTST = 0X00;  //程序读取等待控制 0速度最快      CKCON = 0X00;  //拓展RAM读取等待 0速度最快
结果:
截图202505261609462167.jpg
理论值:40000000/1024 = 39.0625KHz
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-28 22:55 , Processed in 0.940879 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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