按照设定转速值控制无刷直流电机运转

2019-07-18 15:30发布

st12c5a60s2单片机通过调速,按照设定转速值控制无刷直流电机运转。请问为什么改变定时初始值,转速不变么?请求各位指导。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
zhanglixpp
2019-07-19 00:05
使用12分频时,频率为3.6Khz。好像能设置的最低频率。使用T0定时器可以改变频率,但是由技术手册推荐的公式计算出的频率与示波器测试的实际频率不相符,占空比不对,10%对应转速为0,45%就已经达到最大了。请问大侠有谁知道这个原因不?
#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;
}

1.PNG
2.PNG
3.PNG
4.PNG
5.PNG
6.PNG

一周热门 更多>