|
之前前发过一个关于舵机的控制问题,原来同一个PWMx口有两个通道输出的,选择哪个通道输出还要配置PTTRRx寄存器。现在配好了,新问题又出来了,就是舵机只能一个方向打到最大。是不是频率的问题啊?有的人说配置成50hz有的人说要配成300hz。急啊!在线等啊!!!贴个程序。。。如果有大神可以贴自己的程序出来更好了。
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
void SetBusCLK_64M(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x07;
REFDV=0x80 | 0x01;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
_asm(nop); //BUS CLOCK=64M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
void PWM_45(void) { //舵机初始化
PTTRR_PTTRR5 = 1;
PWME_PWME5 = 0;
PWMCTL_CON45 = 1; //4和5联合成16位PWM;
PWMCAE_CAE5 = 0; //选择输出模式为左对齐输出模式
PWMCNT45 = 0; //计数器清零;
PWMPOL_PPOL5 = 1; //先输出高电平,计数到DTY时,反转电平
PWMPRCLK_PCKA1 = 1; //clockA 4分频,clockA=busclock/4=16MHz;
PWMPRCLK_PCKA0 = 0;
PWMPRCLK_PCKA2 = 0;
PWMSCLA = 0x08; //对clock SA 16分频,pwm clock=clockA/16=1MHz;
PWMCLK_PCLK5 = 1; //选择clock SA做时钟源
PWMPER45 = 20000; //周期20ms; 50Hz;
PWMDTY45 = 1510; //高电平时间为1.5ms;
PWME_PWME5 = 1;
}
void main(void) {
int i;
int j;
int k;
SetBusCLK_64M();
PWM_45();
while(1) {
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1280;//左转
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1740; //右转
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1850; //极右
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1050; //极左
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1510; //摆正
for(i=0;i<=200;i++) {
for(j=0;j<=200;j++) {
for(k=0;k<=20;k++)
;}
}
PWMDTY45=1510;
}
}
|
|