STC12C5A60S2S输出频率怎么设置成1KHZ

2019-07-15 12:50发布

着急!!!!着急!!!在线等。。。。
最近调试stc12c5a60s2程序的,晶振11.0592M.  PWM输出,使用12分频的时钟源,频率在3.6KHZ。使用T0定时器作为时钟源,频率只有500HZ一下。哪位大侠知道怎么设置成1Khz.还有使用WM输出时:send_PWM1(0xfa)时,转速235转;send_PWM1(0xe0);时,转速在1600转。不是成比例增加的(我理解的占空比是50%时,转速是最大转速的一半,可是我的程序实际不是这样的,0x80时,转速达到6000转了都,好可怕)。哪位大侠知道原因啊?       
这是PWM程序:
#include"stc12c5a60s2.h"
#include "PWM.h"
void send_PWM1(uchar j_temp);
void pwm_init() ;
//static uint step0 = 0;
//static uint step1 = 0;
//void Set_PWM1(uchar duty);



void send_PWM1(uchar j_temp)
{       
   CR      =   0;
   CMOD    =   0x00;   // CIDL - - - - CPS1 CPS0 ECF  Setup PCA Timer
                        // CPS1 CPS0 = 00, Fosc/12 is PCA/PWM clock
                                                // CPS1 CPS0 = 01, Fosc/2 is PCA/PWM clock         CMOD.1,CMOD.2
                        // 18432000/12/256 = 6000
   CL      =   0x00;
   CH      =   0x00;
   CCAP1L  =   j_temp;   //Set the initial value same as CCAP0H        00为高电平,FF为低电平
   CCAP1H  =   CCAP1L;   //230   10%
   CCAPM1  =   0x42;   //0100,0010 Setup PCA module 0 in 8BIT PWM,
   CR      =   1;      //启动 PCA/PWM 定时器
}
/*
void pwm_set(unsigned char x,unsigned char y)
{
CCAP0H=x;
CCAP0L=x;
CCAP1H=y;
CCAP1L=y;
}
  */


void pwm_init()      //PWM初始化函数,初始占空比为0
{
    CR      = 0;
    CMOD    = 0x00;   // CIDL - - - - CPS1 CPS0 ECF  Setup PCA Timer
    CCON   = 0x00;                    // CPS1 CPS0 = 00, Fosc/12 is PCA/PWM clock
                        // 11952000/256


    CCAPM1 = 0x42;                 // 设置为高速模式,允许中断
//    IPH    = 0x80;               // PCA为最高优先级
//  IP     = 0x80;
    CL      =   0x00;
    CH      =   0x00;
        CR      =   1;      //启动 PCA/PWM 定时器
//        EA     = 1;
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
langzitianya
2019-07-16 09:54
本帖最后由 langzitianya 于 2016-10-20 06:15 编辑

一般的调制pwm调制出来后直接驱动后级放大,然后驱动电机的话,这样调制出来的实际就是电压控制电机的,电压和电机的转数是不成正比的,如果想精确那就要有一个转数的反馈才可以的
QQ图片20161020061301.png
这个频率自己算,根据你想得到的PWM的频率算出频率,然后用内部晶振就可以了

一周热门 更多>