用C51单片机,编写脉冲控制步进电机的驱动器

如题所述

#include <Reg51.h>
#define uchar unsigned char
//显示扫描定时常数,定时时间5ms(fosc=6MHz)
#define TC -2500
//点动软定时常数,定时时间160ms(单位20ms)
#define TCS 8
//快速软定时常数,定时时间40ms(单位20ms)
#define TCF 2
void disp(unsigned);
sbit DOWN = P3^0; //定义P3.0脚名
sbit UP = P3^1; //定义P3.1脚名
sbit MOD = P3^7; //定义P3.7脚名
uchar dbuf[4]; //显示缓冲区
unsigned count = 0; //进给计数

Int0SER() interrupt 0 //INT0中断服务(方式切换)
{ MOD = ! MOD;
}
Time0() interrupt 1 //T0中断服务(显示扫描、步进驱动)
{ static uchar pot[4] = {0x01,0x02,0x04,0x08}; //LED位置输出数据
static uchar i = 0; //扫描位置
static uchar rht[8] = {0x01,0x03,0x02,0x06, //步进电机节拍表
0x04,0x0c,0x08,0x09};
static uchar rhi = 0; //节拍索引
static uchar str = TCF; //进给软定时器
TH0 = TC>>8; //重置T1计数初值
TL0 = TC;
//显示扫描
P2 = P2 & 0xf0;
P2 = P2 | pot[i]; //修改显示位置
P0 = dbuf[i]; //输出字形数据
if(++i==4)
{i = 0; //修改扫描位置
//步进驱动
if(--str==0)
{str = MOD==1 ? TCF : TCS;
P1 = ~rht[rhi]; //输出节拍
disp(count); //显示进给步数
if(!UP ) //正向进给
{rhi = rhi==0 ? 7 : rhi-1;
count++; }
else if(! DOWN) //反向进给
{rhi = rhi==7 ? 0 : rhi+1;
count--; }
}
}
}
main( ) //主函数
{ TMOD = 0x01; //置T0定时、方式1、内启动
TCON = 0x01;
TH0 = TCF>>8; //装入T0时常
TL0 = TCF;
IE = 0x83;
P1 = 0xff;
TR0 = 1;
while( 1 );
}
//输出函数
void disp(unsigned x)
{ //字形数据表
static uchar font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
char i;
for(i=3;i>=0;i--)
{dbuf[i] = font[x & 0x0f];
x >>= 4; }
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-02
是什么步进电机啊,有没有驱动器,如果有的话,就直接给脉冲就好了。追问

白山步进电机型号BSHB368,没有驱动器。我需要一产生脉冲的电路,请大侠赐教