着急!!!!着急!!!在线等。。。。
最近调试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() ;
//sta
tic 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;
}
一般的调制pwm调制出来后直接驱动后级放大,然后驱动电机的话,这样调制出来的实际就是电压控制电机的,电压和电机的转数是不成正比的,如果想精确那就要有一个转数的反馈才可以的
这个频率自己算,根据你想得到的PWM的频率算出频率,然后用内部晶振就可以了
一周热门 更多>