步进电机控制
本人最近在写由430控制的步进电机控制,但是步进电机正转几下,又反转几下,可是我只设置他正转的,而且驱动芯片发热,主要是接口处发热严重?求大虾指教代码如下
#include <msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
//函数说明
void delay(uint t);
void front_move(uint step);
void back_move();
//unsigned char forword={0xc0,0x40,0x60,0x20,0x30,0x10,0x90,0x80};
unsigned char forword={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90};
unsigned char back={0xc0,0x80,0x90,0x10,0x30,0x20,0x60,0x40};
int main( void )
{
//sbit key1=P2^0; //正转
//sbit key3=P2^2; //停止
// uchar count=0;
// uint time=0;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P3DIR = 0xff;
P3OUT = 0XFF;
front_move(12);
return 0;
}
//电机驱动子程序
void front_move(uint step)
{
uchar i=0,j;
for(j=0;j<step;j++)
{
for(i=0;i<8;i++)
{
P3OUT=forword;
delay(50);
}
void delay(uint t) /* 对于12M时钟,约延时1ms */
{
uint i;
while(t--)
{
for (i=0;i<800;i++)
{}
}
} 本帖最后由 lanjeo 于 2015-4-29 10:20 编辑
请问你下面的这个表:
unsigned char forword={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90};
是半步控制下的相开关顺序么?
如果是这样的话:
//电机驱动子程序
void front_move(uint step)
{
uchar i=0,j;
for(j=0;j<step;j++)
{
for(i=0;i<8;i++)
{
P3OUT=forword;
delay(50);
}
这个函数的意思就不太懂了,是运动step个电周期?
另外,看门狗是设置的是多长时间?front_move(12);的执行时间是不是过长?
呃……我这边是生产驱动器的,不知道你是什么情况,有需要的话可以联系我。
页:
[1]