找回密码
 立即注册
查看: 1639|回复: 25

8G1K08A-36I-SOP8 怎么输出可调频率和占空比的PWM?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-16 20:24:02

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 2024-9-14 16:29:19 | 显示全部楼层 |阅读模式
新接触STC8G1K08A-36I-SOP8单片机,
感觉比较迷你好玩,想入坑玩玩,
但是奈何针对stc8g1k08a的教程比较少,
今想利用stc8g1k08a-8pin实现输出可调频率和占空比的PWM,
越简单越好,看的手册算利用pca好像可行,
但是要操作各种寄存器,占空比计算比较复杂,
有大佬指导一下?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-9-14 16:48:08 | 显示全部楼层
8G1K08A,3路PCA输出PWM程序(已测试通过):
void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
{
        unsigned char temp_l,temp_h,temp;
      
        temp_l=pwm_0&0x00ff;                //读pwm_0低8位赋值给temp_l
        temp_h=(pwm_0&0x0300)>>4;        //读pwm_0高2位,移动到XCCAP0H(PCA_PWM0[5:4])位置,赋值给temp_h
        temp=PCA_PWM0&0xcd;                        //读PCA_PWM0,XCCAP2H(PCA_PWM0[5:4])、EPC0H(PCA_PWM0[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_0==0x03ff)                        //如果pwm_0最大
                temp_h|=0x02;                        //设置EPC0H(PCA_PWM0[1])为1
        PCA_PWM0=temp_h;                        //写PCA_PWM0(先写高2位)
        CCAP0H=temp_l;                                //写CCAP0H(再写低8位)
      
        temp_l=pwm_1&0x00ff;                //读pwm_1低8位赋值给temp_l
        temp_h=(pwm_1&0x0300)>>4;        //读pwm_1高2位,移动到XCCAP1H(PCA_PWM1[5:4])位置,赋值给temp_h
        temp=PCA_PWM1&0xcd;                        //读PCA_PWM1,XCCAP1H(PCA_PWM2[5:4])、EPC1H(PCA_PWM1[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_1==0x03ff)                        //如果pwm_1最大
                temp_h|=0x02;                        //设置EPC1H(PCA_PWM1[1])为1
        PCA_PWM1=temp_h;                        //写PCA_PWM1(先写高2位)
        CCAP1H=temp_l;                                //写CCAP1H(再写低8位)
      
        temp_l=pwm_2&0x00ff;                //读pwm_2低8位赋值给temp_l
        temp_h=(pwm_2&0x0300)>>4;        //读pwm_2高2位,移动到XCCAP2H(PCA_PWM2[5:4])位置,赋值给temp_h
        temp=PCA_PWM2&0xcd;                        //读PCA_PWM2,XCCAP2H(PCA_PWM2[5:4])、EPC2H(PCA_PWM2[1])清零后赋值给temp
        temp_h|=temp;                                //写其他位到temph
        if(pwm_2==0x03ff)                        //如果pwm_2最大
                temp_h|=0x02;                        //设置EPC2H(PCA_PWM2[1])为1
        PCA_PWM2=temp_h;                        //写PCA_PWM2(先写高2位)
        CCAP2H=temp_l;                                //写CCAP2H(再写低8位)
}


void Init(void)
{
        P_SW2|=EAXFR;
        P3M0=0x00;
        P3M1=0x00;
        P5M0=0x00;
        P5M1=0x00;
      
        CCON=0x00;                                //设置PCA控制寄存器
        CMOD=0x80;                                //设置空闲模式下PCA停止计数,禁止PCA计数器溢出中断,设置PCA时钟为系统时钟/12(900Hz)
        CL=0x00;                                //设置PCA计数器
        CH=0x00;                                //设置PCA计数器
        CCAPM0=PWM0;                        //使能PCA模块0PWM功能
        PCA_PWM0=0xc0;                        //设置PCA模块0输出10位PWM
        CCAPM1=PWM1;                        //使能PCA模块1PWM功能
        PCA_PWM1=0xc0;                        //设置PCA模块1输出10位PWM
        CCAPM2=PWM2;                        //使能PCA模块2PWM功能
        PCA_PWM2=0xc0;                        //设置PCA模块2输出10位PWM
        CR=1;                                        //启动PCA
}


void main(void)
{
        Init();
        while(1)
        {
                PWM_Out(A,B,C);
        }
}
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2024-9-14 16:50:25 | 显示全部楼层
截图202409141649032235.jpg

截图202409141649469977.jpg

8G1K08A-36I-SOP8的管脚比较特殊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2024-9-14 16:51:12 | 显示全部楼层
截图202409141651085515.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2024-9-14 16:52:44 | 显示全部楼层
截图202409141652051831.jpg


截图202409141652401124.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-16 20:24:02

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 2024-9-14 16:54:00 | 显示全部楼层
Debu*** 发表于 2024-9-14 16:48
8G1K08A,3路PCA输出PWM程序(已测试通过):
void PWM_Out(unsigned int pwm_0,pwm_1,pwm_2)
{

占空比和频率怎么修改?

点评

通过CMOD.CPS设置 [attachimg]56939[/attachimg]  详情 回复 发表于 2024-9-14 16:58
看说明书,PCA部分要看 12个小时  详情 回复 发表于 2024-9-14 16:55
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2024-9-14 16:54:14 | 显示全部楼层

这个程序可以认真学习下
截图202409141653484937.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2024-9-14 16:55:10 | 显示全部楼层
Zhang*** 发表于 2024-9-14 16:54
占空比和频率怎么修改?

看说明书,PCA部分要看 12个小时
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-16 20:24:02

1

主题

9

回帖

33

积分

新手上路

积分
33
发表于 2024-9-14 16:57:35 | 显示全部楼层
神*** 发表于 2024-9-14 16:55
看说明书,PCA部分要看 12个小时

这。。。。,已经看半天了

点评

https://www.stcaimcu.com/forum.p ... id=10790&pid=107129 看我备注 [attachimg]56940[/attachimg] 注意先写高2位再写低8位,一次性写入,不要使用“读→修改→写”的方式(先读出来再修改最后一次写入)  详情 回复 发表于 2024-9-14 17:02
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-9-14 16:58:09 | 显示全部楼层
Zhang*** 发表于 2024-9-14 16:54
占空比和频率怎么修改?

通过CMOD.CPS设置
截图202409141658001151.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 04:08 , Processed in 0.145192 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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