高级会员
- 积分
- 579
- 威望
- 303
- 贡献
- 188
- 兑换币
- 0
- 注册时间
- 2012-2-28
- 在线时间
- 44 小时
- 毕业学校
- 淮南师范学院
|
void PLL_Init(void)
{
//(1)禁止总中断
//DisableInterrupts;
//(2)CLKSEL的第7位置0,选择系统时钟源为OSCCLK
//在PLL程序执行前,内部总线频率=OSCCLK/2
//clksel.7(PLL选择位)决定内部总线时钟来源
//=O,BusClock=OSCCLK/2; =1,BusClock=PLLCLK/2
CLKSEL &= 0xff; //此时:BusClock=PLLCLK/2
//(3)禁止PLL
PLLCTL &= 0xbf; //PLLCTL.6(pllon)设为0;先关闭PLL,或者PLLCTL |= (1<<6)
//(4)根据需要的时钟频率设置SYNR和REFDV寄存器 BusClock=PLLCLK/2;
//计算公式LLCLK=2*OSCCLK*((SYNR+1)/(REFDV+1))
SYNR = 0x00; //对PLLCLK增频的因子
REFDV = 0x00; //对PLLCLK分频的因子,PLLCLK=2*OSCCLK*(SYNR+1)/(REFNV+1);
//(5)打开PLL
PLLCTL |=0x40; //PLLCTL.6(pllon)设为1;开PLL 或者 PLLCTL |= (1<<6); 或者 PLLCTL_PLLON=0;
//(6)通过判断CRGFLG寄存器的LOCK位,确定PLL是否稳定
while ((CRGFLG&0x08) == 0x00);
//(7)时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
CLKSEL |= (1<<7); //本句执行后:BusClock=PLLCLK/2 或者 CLKSEL |=0x80;或者 CLKSEL_PLLSEL=1;
//(8)设置是否允许IRQ中断、是否允许看门狗
//COPCTL = 0x00; //COPCTL.2-0(cr2:cr0) =000禁止看门狗
//EnableInterrupts; //开总中断
}
/************************************************************************/
void PWM_Init(void)
{
PWME = 0x00; //禁止PWM
PWMCTL_CON23 = 1; //合并第23号PWM通道号,舵机控制信号由PWM5(pp3)输出
PWMCTL_CON67 = 1; //合并第67号PWM通道号,舵机控制信号由PWM5(pp7)输出
PWMPRCLK = 0x11;//PWM预分频ClockA=Busclk/2=8MHz,ClockB=Busclk/2=8MHz
PWMSCLA = 2; //PWM分频ClockSA=ClockA/(2*PWMSCLA)=8MHz/(2*2)=2MHz
PWMSCLB = 2; //PWM分频ClockSB=8M/(2*2)=2MHz
//PWM时钟选择ClockA,ClockSA;ClockB,ClockSB-------------------------------------*
//通道0,1,4,5使用时钟ClockA,ClockSA *
//通道2,3,6,7使用时钟ClockB,ClockSB--------------------------------------------*
PWMCLK_PCLK0 = 0; //选择ClockA的时钟
PWMCLK_PCLK1 = 0; //选择ClockA的时钟
PWMCLK_PCLK4 = 1; //选择ClockSA的时钟,电机控制
PWMCLK_PCLK5 = 1; //选择ClockSA的时钟
PWMCLK_PCLK3 = 1; //选择ClockSB的时钟
PWMCLK_PCLK7 = 1; //选择ClockSB的时钟
PWMPOL = 0xff; //极性选择,开始时为高
PWMCAE = 0x00; //左对齐
PWMPER0 = 43; //PWM通道0周期(1/8MHz)*(43+1)=5.5us 调制信号
PWMDTY0 = 27; //占空比=[(PWMDTY0+1)/(PWMPER0+1)]=[(21+1)/(43+1)]=30%
PWMPER1 = 43; //PWM通道1周期(1/8MHz)*(43+1)=5.5us 调制信号
PWMDTY1 = 27; //占空比=[(PWMDTY1+1)/(PWMPER1+1)]=[(21+1)/(43+1)]=30%
PWMPER23 = 40000; //T=20ms,控制转向舵机
PWMDTY23 =3000;//3000 中间 3750 右极限 2350 左极限
PWMPER67 = 40000; //T=20ms,控制舵机
PWMDTY67 = 3000;//3098 中间 3230 左极限 2480 右极限
PWMPER4 = 199; //F=20K=50us=100*0.5us,控制直流电机
PWMDTY4 = 0;
PWMPER5 = 199; //F=20K=50us=100*0.5us
PWMDTY5 = 0;
PWME_PWME0 = 1; //使能 PP0产生PWM波形
PWME_PWME1 = 1; //使能 PP1产生PWM波形
PWME_PWME3 = 1; //使能 PP23产生PWM波形
PWME_PWME4 = 1; //使能 PP4产生PWM波形
PWME_PWME5 = 1; //使能 PP5产生PWM波形
PWME_PWME7 = 1; //使能 PP67产生PWM波形
}
void main(void)
{
PLL_Init();
PWM_Init();
EnableInterrupts;
}
帮忙看下程序,4、5控制电机,怎么刚开始电机要倒转几秒钟
|
|