找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21445|回复: 24
收起左侧

STC单片机PCA PWM调占空比问题

  [复制链接]
ID:63752 发表于 2014-8-16 23:30 来自手机 | 显示全部楼层 |阅读模式
CCP如何计算占空比?求指导?
回复

使用道具 举报

ID:51024 发表于 2014-8-17 00:36 | 显示全部楼层


while(1);
{
  if(timer1>a) timer1=0;
  if(timer1<b)  PWM=0;
  else PWM=1;
}

可以同过定时器对timer计数,调节周期,通过调a,b的值调占空比。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:63752 发表于 2014-8-18 08:53 | 显示全部楼层
wangyin 发表于 2014-8-17 00:36
while(1);
{
  if(timer1>a) timer1=0;

我这单片机是STC15F2K60S2,是PCA模块的PWM,上面有两个位,是CCAP0H和CCAP0L,是调节占空比的,但是是怎样计算的呢?比如我要60%占空比,我如何计算?真不明白呢。
回复

使用道具 举报

ID:63752 发表于 2014-8-18 22:41 来自手机 | 显示全部楼层
有人知道吗?问题还没解决呢!
回复

使用道具 举报

ID:2318 发表于 2014-8-19 13:16 来自手机 | 显示全部楼层
看来你是使用的硬件pwm,,其实这样更简单,,稍等一下我发资料给你
回复

使用道具 举报

ID:1 发表于 2014-8-19 20:19 | 显示全部楼层
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编程计数器阵列(PCA)/PWM,其中PCA1模块用作捕获模式,可识别输入的PWM调制信号,PCA0模块用作脉宽调节模式(PWM),可实现频率转换。此外,由于该单片机价格比较便宜,故采用此单片机作为核心控制芯片。

       前期曾写过一个不用PCA模块实现的PWM程序,是软件实现,下面是一个stc单片机PCA的自带PWM编程实例参考 。

#include<reg52.h>

sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CL = 0xE9;
sfr CH = 0xF9;
sfr CCAP0L = 0xEA;
sfr CCAP0H = 0xFA;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sbit CR = 0xDE;
void main(void)
{
CMOD = 0x02; // 设置 PCA 定时器
CL = 0x00;//清零
CH = 0x00;
CCAP0L = 0x40; //设置75%占空比
CCAP0H = 0x40; // 当CL由ff变为00溢出时,CCAP0H装载到CCAP0L中,实现无干扰的更新PWM。
CCAPM0 = 0x42; //0100,0010 设置使用PWM模式
CR = 1; //开启 PCA 定时器.
while(1){};
}
回复

使用道具 举报

ID:63752 发表于 2014-8-20 13:06 | 显示全部楼层
admin 发表于 2014-8-19 20:19
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编 ...

明白了,很感谢。占空比公式是,设占空比是D,D=(256-CCAPnH)/ 256(8位PWM模式)。
回复

使用道具 举报

ID:26188 发表于 2014-8-21 20:36 来自手机 | 显示全部楼层
,这几天我也要用到这个p w m,一起学习了,谢谢楼主
回复

使用道具 举报

ID:69323 发表于 2014-11-23 22:12 | 显示全部楼层
很好,简单好用,谢谢楼主

回复

使用道具 举报

ID:72258 发表于 2015-8-4 12:13 | 显示全部楼层
admin 发表于 2014-8-19 20:19
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编 ...

请问,您有没有关于增强型51单片机的PCA相关的资料,我看数据手册有很多问题,但是目前在网上也没有找答案,比如问什么高速脉冲输出的频率只除以CCAPnL,pwm的8位和7位的区别等等吧。还有关于PCA的用途,除了产生pwm外,还能做什么。希望您可以耐心帮我解答。
回复

使用道具 举报

ID:73872 发表于 2015-8-4 13:16 | 显示全部楼层
我也在学pwm调频
回复

使用道具 举报

ID:86938 发表于 2015-8-6 16:03 | 显示全部楼层
定时器对timer计数,调节周期,通过调a,b的值调占空比
回复

使用道具 举报

ID:117336 发表于 2016-4-28 16:55 | 显示全部楼层
admin 发表于 2014-8-19 20:19
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编 ...

要产生38Khz的要怎么调呢?
回复

使用道具 举报

ID:117336 发表于 2016-4-28 16:55 | 显示全部楼层
XUSHENG 发表于 2014-8-20 13:06
明白了,很感谢。占空比公式是,设占空比是D,D=(256-CCAPnH)/ 256(8位PWM模式)。

那频率怎么跳呢
回复

使用道具 举报

ID:97438 发表于 2016-4-29 08:53 | 显示全部楼层
佳佳0227洋洋 发表于 2015-8-4 12:13
请问,您有没有关于增强型51单片机的PCA相关的资料,我看数据手册有很多问题,但是目前在网上也没有找答 ...

stc的数据手册上不是都有呢

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:378119 发表于 2018-8-23 14:41 | 显示全部楼层
admin 发表于 2014-8-19 20:19
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编 ...

请问如何控制输出的引脚呢
回复

使用道具 举报

ID:388197 发表于 2018-8-23 16:57 | 显示全部楼层
建议使用STC8系列,性价比比较高,带增强PWM模式,通过设置3个寄存器(PWM周期,高电平保持时间,低电平保持时间)即可输出任意占空比的PWM(15位还是16位不记得了),通过PWM电平跳变中断可实现实时的PWM周期,占空比调整,附件是DATASHEET

STC8系列中文资料.rar

164 Bytes, 下载次数: 48

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:500370 发表于 2019-3-29 09:20 | 显示全部楼层
想请高手帮忙编程stc 单片機 pwm脈衝
回复

使用道具 举报

ID:493177 发表于 2019-3-29 10:27 | 显示全部楼层
看51数据手册,写的很明白
回复

使用道具 举报

ID:623571 发表于 2019-10-13 23:30 | 显示全部楼层
admin 发表于 2014-8-19 20:19
stc单片机是作于1个时钟/机器周期,且有增强型8051内核,故其速度比普通8051快8~12倍。该单片机有2路可编 ...

这一段代码,PWM输出到哪个引脚呢?如果想让PWM输出到P7.0(CCP0_3)引脚,应该怎么改?
回复

使用道具 举报

ID:878048 发表于 2021-5-29 13:36 | 显示全部楼层
佳佳0227洋洋 发表于 2015-8-4 12:13
请问,您有没有关于增强型51单片机的PCA相关的资料,我看数据手册有很多问题,但是目前在网上也没有找答 ...

从PCA中断还可以做定时器,
回复

使用道具 举报

ID:598207 发表于 2021-11-25 17:19 | 显示全部楼层
楼主您好,假如设置输出不同的占空比,该如何设置?
回复

使用道具 举报

ID:509408 发表于 2021-11-25 17:57 | 显示全部楼层
//#include        "Define.h"
#include        "STC15Fxxxx.H"
//#include        "PinDef.h"
//#include        "Global.h"

#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5



void PwmConfig(void)
{
        // ACC = P_SW1;
         //ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
        // P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
         
         ACC = P_SW1;
         ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=1 CCP_S1=0
         ACC |= CCP_S0; //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
         P_SW1 = ACC;
        //
        // ACC = P_SW1;
        // ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=1
        // ACC |= CCP_S1; //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
        // P_SW1 = ACC;
                CCON = 0; //初始化PCA控制寄存器
         //PCA定时器停止
         //清除CF标志
         //清除模块中断标志
         CL = 0; //复位PCA寄存器
         CH = 0;
         CMOD = 0x0A; //设置PCA时钟源         系统时钟SYSclk/4

        //PWM的频率 = PCA时钟输入源频率/2^n   (n=6,7,8)

         //禁止PCA定时器溢出中断
//         PCA_PWM0 = 0x00; //PCA模块0工作于8位PWM
//         CCAP0H = CCAP0L = 0x20; //PWM0的占空比为87.5% ((100H-20H)/100H)
//         CCAPM0 = 0x42; //PCA模块0为8位PWM模式
       
         PCA_PWM1 = 0x40; //PCA模块1工作于7位PWM
//         CCAP1H = CCAP1L = 0x20; //PWM1的占空比为75% ((80H-20H)/80H)
         CCAPM1 = 0x42; //PCA模块1为7位PWM模式
       
//         PCA_PWM2 = 0x80; //PCA模块2工作于6位PWM
//         CCAP2H = CCAP2L = 0x20; //PWM2的占空比为50% ((40H-20H)/40H)
//         CCAPM2 = 0x42; //PCA模块2为6位PWM模式
         CR = 1; //PCA定时器开始工作
}


这个官方手册上示例程序。看资料吧。我用的工程应用了下。添加了部分自己的注释。
CMOD = 0x0A; //设置PCA时钟源         系统时钟SYSclk/4
//PWM的频率 = PCA时钟输入源频率/2^n   (n=6,7,8)

配置好后,你自己计算出想要的占空比就可以了
回复

使用道具 举报

ID:962202 发表于 2022-3-10 19:27 | 显示全部楼层
我也在学习如何做一个电位器可调PWM(硬件)PCA舵机测试器,楼上的都看看参考
回复

使用道具 举报

ID:1009207 发表于 2022-3-11 14:31 | 显示全部楼层
可以通过调pwm,对舵机进行调节,同时,对电压升压即可
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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