首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

pwm运行问题,在线等[求助]

pwm运行问题,在线等[求助]

请教问题

MC9S12DG128B
为什么单步执行的时候PWM驱动33886和舵机都正常
全速执行的时候33886无法正常产生波形为恒高
舵机也不动



void PWM_init ()
{
PWME= 0x00; //关PWM

//通道0 1 做MOTOR PWM 5KHz 用SA 通道 2做舵机PWM 20ms =50Hz 用SB
PWMPRCLK = 0x42; //B口4分频 A口4分频
PWMCLK=0x07; //通道0 通道1 用sA时钟源 通道2用SB
PWMSCLA=30; //SA提供10kHz的频率 24MHZ/4/2/30)=1MHz
PWMSCLB=75; // S1t提供0.25K频率 24/16/2/75=10K
PWMPOL =0x07; // 通道012 先高电平
//PWMCAE对齐方式默认 左对齐
PWMPER0 = 200; // 33886 频率是50Hz 1/1MHz*200=1/5KHz f=5k
PWMPER1 = 200; // 33886 频率是50Hz 1/1MHz*200=1/5KHz 5k
PWMPER2 = 200; //舵机的频率是50Hz 1/10k*200=1/50Hz =20ms

}



PWMDTY2 =i*2; //舵机占空比i%
PWMDTY0 =p*2; //MOTOR占空比p%
PWMDTY1 =0; //MOTOR占空比0%

PWMCNT0 = 0; //计数器清零
PWMCNT1 = 0;
PWMCNT2 = 0;
PWME=0x07; //PWM通道0 通道1 通道2输出PWM

[此贴子已经被作者于2007-6-2 12:06:37编辑过]

[此贴子已经被作者于2007-6-2 12:08:16编辑过]

[此贴子已经被作者于2007-6-2 12:08:56编辑过]

[此贴子已经被作者于2007-6-2 12:10:49编辑过]

通道0 1 做MOTOR PWM 是怎么回事?
难道33886需要2路PWM信号?
代码中很多注释和实际的寄存器设置不相符,这是怎么回事?以哪个为准?
void pwminit(void) {
DDRP = 0xff; //控制输出
PWME = 0x00;
PWMPRCLK = PWMPRCLK_PCKA2_MASK|PWMPRCLK_PCKB0_MASK;

PWMCLK=0x0; //PWMCLK_PCLK6_MASK|PWMCLK_PCLK7_MASK; //A时钟源为通道0,1提供时钟信号,B时钟源为通道6,7提供时钟信号
//A口提供500kHz的频率,B口提供4MHz的频率

PWMPOL =PWMPOL_PPOL0_MASK|PWMPOL_PPOL1_MASK|PWMPOL_PPOL6_MASK|PWMPOL_PPOL7_MASK; //用s1口做1通道的时钟 先高电平
PWMCAE=0x0; //对齐方式默认 左对齐
PWMCTL=PWMCTL_CON01_MASK|PWMCTL_CON67_MASK;

PWMPER01 = 10000; // 通道1输出 50Hz
PWMDTY01 = 750;
PWMCNT01 =0x0;

PWMPER67 = 800; //通道7输出5kHz
PWMDTY67 = 400;
PWMCNT67 =0x0;

PWME=0xff;
}

参考一下我的程序吧。
我觉得你先得确定一下你的E时钟是否为24MHz,如果你预先没有设置的话,默认是8MHz。
返回列表