51单片机驱动步进电机调速 有大神能教教我么

软件我用C语言 照着书弄得 不知道为什么不行
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit mode=P2^0;
sbit direction=P2^1;
sbit clk=P2^2;
sbit key1=P2^3;
sbit key2=P2^4;
sbit key3=P2^5;
sbit key4=P2^6;
sbit lcars=P2^7;
sbit lcden=P3^0;
uchar code state[3][16]={"speed(n/min):120","direction:ccw"."direction:cw"};
char countkey;
unit count_int;
unit code zhouqi[]={2500,125,62,12};
unit code speed[]={3,60,120,600};
void delayms(unit x)
{
unit i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
lcdrs=0;
P1=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(unchar date)
{
lccdrs=1;
P1=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init_lcddisply()
{
uchar unm;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
for(num=0;num<16;num++)
{
write_date(state[2][num]);
delayms(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(state[0][num]);
delayms(5);
}
}
void write_ddat_to_lcd(unchar add,unit dat)
{
unchar gewei,shiwei,baiwei;
gewei=dat%10;
shiwei=dat%100/10;
baiwei=dat/100;
write_com(0x80+add);
write_com(0x30+baiwei);
write_com(0x30+shiwei);
write_com(0x30+gewei);
}
void keyscan()
{
uchar i;
if(key1=0)
{
delayms(5);
if(key1=0)
{
while(!key1);
countkey++;
if(countkey>3)
countkey=0;
write_dat_to_lcd(0x4d,speed[countkey];
}
}
if(key==2)
{
delayms(5);
if(key2==0)
{
while(!key2);
countkey--;
if(countkey<0)
countkey=3;
write_dat_to_lcd(0x4d,speed[countkey];
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
direction=1;
write_com(0x80+0x000;
for(i=0;i<16;i++)
{
write_date(state[2]);
delayms(2);
}
}
}
if(key4==0)
{
delayms(5);
if(key4==0)
{
while(!key4);
direction=0;
write_com(0x80+0x000;
for(i=0;i<16;i++)
{
write_date(state[1]);
delayms(2);
}
}
}
}
void main()
{
countkey=1;
mode=1;
direction=1;
init_lcddisplay();
TMOD=0x02;
TH0=255-200;
TL0=255-200;
EA=1;
ET0=1;
TR0=1;
while(1)
{
keyscan();
}
}
void timer0_int(1) interrupt 1
{
TR0=0;
count_int++;
if(count_int>zhouqi[countkey])
{
clk=~clk;
count_int=0;
}
TR0=1;
}
有没有帮帮我呀
我实在是不会整了
help~~~~
这个太笼统,你还是把问题细化一些吧
看了一篇又一偏,没看的懂
我也是 不会
嗯哪 我给你发图行吗
这里哪不懂啊.
这是设计要求 我自己弄不出来了 不太理解297 和 298 到底怎么驱动电机的

图片好象是两相电机,改变频率调速。你也弄一张清楚一点的图片,怎么看啊!
http://baike.baidu.com/link?url= ... vUudT9SzBhYM1zc68s_
这个是L297是芯片介绍
http://wenku.baidu.com/link?url= ... P9bks_OaSrL99B0wA0S
L298芯片资料
可以理解为297将一路正弦脉冲转变成ABCD思路脉冲,单四拍,双四拍或者四八拍,具体几拍看别的控制信号,产生的ABCD经过298伺服放大带动电机 。中间的INH和ENA没看懂
这个感觉不是很难吧,L298能控制两路电机,并且最少有两种方法能实现调节电机的转速,感觉控制使能引脚是最简单的,但归根到底是利用PWM
那个能控制四相电机么
嗯 那单片机要怎么控制297呢 程序怎么编
二相和四相有什么区别吗? 我不懂啊 我就随便选的电机
我没用过四相电机,但是不管几相电机,只是步距角不同吧,这个只是精度上的差异吧,建议你仔细看一下L298的datasheet,功能并不复杂
首先你的那个图中貌似就是简单的电机,按照你的设计需求,先选一个步进电机,弄清楚电机的控制方法,然后通电顺序用单片机的引脚去控制(实现正反转),至于速度就可以用L298进行调整了
