功能说明:
1.使用Proteus8.10仿真stc89c51正反调速控制uln2003步进电机。
2.运行参数显示屏LCD12864显示。
3.按键控制电机正反转以及调速与急停。
注意事项:
处理器 :STC89C51/STC89C52
仿真软件:Proteus8.10
按键控制步进电机正反转并可调速
初始状态如下图所示:
正转控制如下图:
反向控制如下所示:
部分程序如下所示:
#include "macro.h"
uchar buf_Direction; //设定步进电机的转向
uint set_speed; //设定步进电机的转速
uchar step_motor_loop[8]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; //驱动控制指令表
uchar step_index;
//电机正反转控制接口
#define CST_STEP_MOTOR_Z 10 //正转
#define CST_STEP_MOTOR_F 20 //反转
#define CST_STEP_MOTOR_ST 0 //停止
//晶振选择
#define fosc_12MHz 12
#define fosc_24MHz 24
#define fosc_setting fosc_12MHz
//定时器工作方式1
#define CST_TIME_MS 1000
#define CST_TH0 (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)/256
#define CST_TL0 (65536-CST_TIME_MS*fosc_setting/fosc_12MHz)%256
电机正反运行状态控制代码如下:
static uchar key_loose=0;
uchar temp=0;
P1=0XFF;
temp=P1&0xFF;
if(key_loose >0)
{
if(temp==0xFF)
key_loose=0;
return;
}
else if(temp !=0xFF)
{
key_loose=10;
temp=P1&0xFF;
switch(temp)
{
case 0xFE:
buf_Direction=CST_STEP_MOTOR_Z;
list_write_HZ_Str(6,20,"顺向");
caluate();
break;
case 0xFD:
buf_Direction=CST_STEP_MOTOR_F;
list_write_HZ_Str(6,20,"逆向");
caluate();
break;
case 0xFB:
buf_Direction=CST_STEP_MOTOR_ST;
list_write_HZ_Str(6,20,"停止");
list_write_HZ_Str(6,60," ");
break;
case 0xEF:
if(buf_Direction !=CST_STEP_MOTOR_ST)
{
if(set_speed <80)set_speed +=2; //减速
caluate();
}
break;
case 0xF7:
if(buf_Direction !=CST_STEP_MOTOR_ST)
{
if(set_speed >14)set_speed -=2; //加速
caluate();
}
break;
default:
break; //其它值返回
}
}
主程序如下所示:
void main(void)
{
P2=0xff;
P1=0xff;
P0=0Xff;
init_timer0();
iniLCD(); //初始化 LCD
buf_Direction=CST_STEP_MOTOR_ST;
set_speed=60;
step_index=3;
EA=1; //开启中断
while(1)
{
key_Scan(); //按键扫描函数
}
}
作者:amusen
祝好!
下载链接