注册会员
- 积分
- 141
- 威望
- 81
- 贡献
- 34
- 兑换币
- 39
- 注册时间
- 2013-8-21
- 在线时间
- 13 小时
- 毕业学校
- GZDXKJXY
|
#include <hidef.h>
#include <time.h>
#include <MC9S12XS128.h>
#include <stdlib.h>
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
int pwm=150;
void delay(int x){
int i,k;
for(i=0;i<=x;i++){
for(k=255;k>=0;k--);
}
}
//核心超频代码、、、、、、、、、、、、、、、、、、、、
void chaopin(char x)//80M
{
char f;
f=(x/8)-1;
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR =0xc0 | f;
REFDV=0x80 | 0x01;
POSTDIV=0x00; //分频=2*外部时钟*(1+SYNR)/(1+REFDV)=160MHz;
_asm(nop); //超频=分频/2
_asm(nop);
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL =1;
}
//核心超频代码、、、、、、、、、、、、、、、、、、、、、、
void pwm_init(void)
{
PWMPRCLK=0X00;
PWMCNT01=0;
PWMSCLA=40;
PWMSCLB=40;
PWMCLK=0xFF; //调用已经分频好的时钟,高电平为SA或SB时钟,低电平为A,或B,时钟[单独操作(PWMCLK_PCLKx=。。。)]
PWMPOL=0xFF; //设置起始波形是高电平计数还是低电平计数或者说翻转,高电平是高电平计数,低电平是低电平计数【单独操作(PWMPOL_PPOLx=)】
PWMCAE=0x00; //设置PWM波对齐方式,高电平为中心对齐,低电平为左边对齐方式,[单独操作(PWMCAE_CAEx=)]
// PWMCTL=0x00; //级联寄存器,高电平开启,低电平关闭,单独操作(PWMCTL_CON01=)
PWMCTL_CON01=1;
PWMDTY01=pwm; //占空比
PWMPER01=1000; //占空比周期 300Hz
//01
//若CAEx=0,
//PWM波频率=选取的时钟/占空比周期
//PWM波周期=1/PWM波频率
//02
//若CAEx=1
//PWM波频率=选取时钟/(占空比周期*2)
//PWM波周期=1/PWM波频率
//占空比计算方法
//当设置的PWMPOL_PPOLx=0时 占空比=[(PWMPERx-PWMDTYx)/PWMERx]*100%
//当设置的PWMPOL_PPOLx=1时 占空比=[PWMDTYx/PWMPERx]*100%
}
void main(void) {
chaopin(24);
pwm_init();
PWME_PWME1=1;
// for(;;){
// pwm++;
// delay(200);
// pwm_init();
// if(pwm>=1000)pwm=0;
// }
}
预计给出的PWM频率是300HZ但是,很神奇的是,PWMDTY寄存器如果为150左右就会变成600HZ左右,其他范围正常,比如(pwm=600,也就是 PWMDTY01=600)就是300HZ其他的也是300HZ 而且,就算调成舵机的要求频率和占空比了,舵机也会乱摆,真心无解了 啊!!求大神救救我啊!!我刚刚接触Freescale 啊!!!!我好可怜的啊!!!
|
|