驱动步进电机的时候 方向控制只往一个方向转 大家帮我看看是哪里出了问题
//设置电机控制p2.5口为PWR信号输出,p2.6口为方向控制输出,p2.7口为驱动器使能端
//程序设置为开机送进脉冲信号驱动步进电机主动,延时,步进电机完成方向转换,循环测试。
#include"includes.h"
#define OUT16 P2OUT_bit.P2OUT_5
#define OUT17 P2OUT_bit.P2OUT_6
#define OUT18 P2OUT_bit.P2OUT_7
void InitSysClock(void);
void InitPorts(void);
void MOT_CONTROL(void);
void DELAY(unsigned int i);
void main()
{
InitSysClock();
InitPorts();
MOT_CONTROL();
return;
}
//定时器A 中断服务程序区
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(MOT_DIR_OUT==MOT_DIR_FORE)
{
DELAY(5000);
}
P2OUT ^= 0x20; //P2.5口取反输出
CCR0 += 50000; //重新载入CCR0捕获/比较数据寄存器数据
}
/*
__interrupt void change_direction(void)
{
P2OUT^=0x80; //P2.6口取反输出 完成方向转换
CCR0 +=50000; //重新载入CCR0捕获/比较数据寄存器数据
}
*/
void InitSysClock(void)
{
// int i;
// 系统时钟初始化
/*
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}while ((IFG1 & OFIFG)); // OSCFault flag still set?
*/
WDTCTL = WDTPW + WDTHOLD; //停止看门狗WDT,不使用内部看门狗定时器。
CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,CCR0捕获/比较功能中断为允许。
CCR0 = 50000; //捕获/比较控制寄存器CCR0初值为50000。
TACTL = TASSEL_2 + MC_2; //设置定时器A控制寄存器TACTL,使时钟源选择为SMCLK辅助时钟。
}
void InitPorts(void)
{
OUT16=OUT17=OUT18=0;
}
void MOT_CONTROL(void)
{
MOTOR_ENA××E =ENA××E;
DELAY(5000);
for(;;)
{
MOT_DIR_OUT=MOT_DIR_FORE;
DELAY(5000);
MOT_DIR_OUT=MOT_DIR_BACK; //P2.7口取反
DELAY(5000);
}
}
void DELAY(unsigned int i)
{
do (i--);
while(i!=0);
}
//结束--------------------------------------------------------------------------
1、P2.5、P2.6、P2.7都有取反操作,到底是其中的用哪个来在控制方向?
2、MCLK和SMCLK没有选择XT2作为时钟源?
3、步进驱动器需要求怎样实现转向翻转?
是这样的 P2.5控制PWM 脉冲输出 这里我只输出一个方波 ,P2.6方向控制只需置1和0就可以了 我用了一个开关来控制方向 现在我要控制转速 有几个档希望改一下脉冲输出