注册会员
- 积分
- 88
- 威望
- 147
- 贡献
- 31
- 兑换币
- 0
- 注册时间
- 2011-11-16
- 在线时间
- 3 小时
|
pwm2通道和0通道控制电机的,pwm7通道控制舵机的,为什么电机转的时候我让舵机转电机就停了呢?请问我的问题出在哪儿啊?
程序代码:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include<mc9s12xs128.h>
int speed=40,k0flag=0;
int shu[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
void BUS_CLK_Init() {
CLKSEL = 0X00;
PLLCTL_PLLON=1;
SYNR = 1;
REFDV = 1;
POSTDIV= 0X00;
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL = 1; //总线时钟为16Mhz
}
void PWM02_Speed_Init() {
DDRP=0xff;
PTP =0xff; //PP0,PP0输出高电平使能两个2104
PWME_PWME0 = 0;
PWME_PWME2 = 0;
PWME_PWME7 = 0;
PWMCTL_CON67 = 1;//67通道级联
PWMPRCLK = 0X00;//CLKA 不分频 CLKB BU分频
PWMCLK_PCLK0 = 1;//通道0选择CLKSa
PWMCLK_PCLK2 = 1;//通道2选择CLKSB
PWMCLK_PCLK7 = 1;//通道7选择CLKSB
PWMSCLA = 0X08;
PWMSCLB = 0X08;//对CLKA B 进行16分频 1MHz
PWMPOL_PPOL0 = 0; //先输出gao电平 技术到DTY时 电平反转
PWMPOL_PPOL2 = 0; //先输出低电平 技术到DTY时 电平反转
PWMPOL_PPOL7 = 1; //先输出低电平 技术到DTY时 电平反
PWMCAE_CAE0 = 0;
PWMCAE_CAE2 = 0;
PWMCAE_CAE7 = 0;
PWMPER0 = 200; // 频率1k
PWMDTY0 = 0; //高电平时间为1.45ms
//PWMPER2 = 200; //周期20ms 频率50hz
//PWMDTY2 = 50; //高电平时间为1.45ms
PWMPER67 = 20000; //周期20ms 频率50hz
PWMDTY67 = 1350; //高电平时间为1.45ms数变大 2300--400之间 810 --2300
PWME_PWME0 = 1; //通道0开
PWME_PWME7 = 1; //通道7开
//PWME_PWME2 =1;
}
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void key() //按键函数
{
if((PTM&0x01)==0 && k0flag==1)
{
speed=speed+10;
if (speed>200) speed=50;
PWMDTY0=speed;
k0flag=0;
}
if((PTM&0x02)==0 && k0flag==1)
{
PWMDTY0=0;
PWMDTY67= 1350;
speed=40;
k0flag=0;
}
if((PTM&0x04)==0 && k0flag==1)
{
PWMDTY67 = 900;
k0flag=0;
}
if((PTM&0x08)==0 && k0flag==1)
{
PWMDTY67 = 1800;
k0flag=0;
}
if(PTM==0x0f)
{
k0flag=1;
}
}
void main(void)
{
BUS_CLK_Init();
PWM02_Speed_Init();
DDRB=0XFF;
for(;;)
{
//_FEED_COP();
key();
PTP_PTP1=0TP_PTP3=0;
PORTB=shu[PWMDTY0/10/10];
PTP_PTP1=1;
key();
PTP_PTP1=0;PTP_PTP3=0;
PORTB=shu[PWMDTY0/10%10];
PTP_PTP3=1;
}
}
还有就是为什么我的程序不稳定呢,有时候一开机电机并不受按键控制,怎么也不转
希望高手赐教!!感激不尽!! |
|