标题:
步进电机系统开发实例 带仿真和单片机程序
[打印本页]
作者:
林嗳莫
时间:
2016-6-29 14:42
标题:
步进电机系统开发实例 带仿真和单片机程序
2
.步进电机控制系统设计
第一个按键,速度等级增加,有多个速度等级,速度等级显示在LCD上
第二个按键,速度等级减小
步进电机240.zip
(89.03 KB, 下载次数: 80)
2016-6-29 14:41 上传
点击文件名下载附件
步进电机系统开发
下载积分: 黑币 -5
第三个按键,电机停止
第四个按键,电机启动
0.png
(17.22 KB, 下载次数: 104)
下载附件
2016-6-29 15:07 上传
#include <REGX51.H>
#include "def.h"
#include "lcd1602.h"
void MotorStop(void); //声明函数
void qx (u16 ii);
void zt (void);
sbit k1=P3^2; // 运行与停止
sbit k2=P2^1; // 方向转换
sbit k3=P2^2; // 速度调整
sbit k4=P2^3; // 设定圈数
u8 code ffw[4] ={0x01,0x02,0x04,0x08}; // 正转
u8 code rev[4] ={0x08,0x04,0x02,0x01}; // 反转
u16 snum=156; //预设角度
u16 rate=101; //预设速率
u16 ii; //角度显示
u16 ia=100; //报警值
void Delay_xms(u8 x)//ms延时函数
{
u8 i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
bit on_off=1; // 运行与停止标志
bit direction=1; //方向标志
void to(void) //外部中断
{
IT0=1;
EX0=1;
EA=1;
}
void bao (void) //、、、、、、、、、、、、、、、、、、、、、、、、报警 、、、、、、、、、、、、、、、、、、、、、、、、
{
if((ii==ia)|(on_off==1))
{
ii=snum;
if(on_off==1)
{
zt();
}
else
{
qx(ia);
display_lcd(0x19,0x21);
}
on_off=1;
MotorStop();
}
}
void clockwise(u16 rate) //顺时针转动
{
u8 i;
for(i=0;i<4;i++)
{
P1=ffw[i];
Delay_xms(rate);//转速调节
}
}
//停止转动
void MotorStop(void)
{
P1=0xff;
}
void anticlockwise (u16 rate) //逆时针转动
{
u8 i;
for(i=0;i<4;i++)
{
P1=rev[i];
Delay_xms(rate);//转速调节
}
}
void key (void) //按键判断
{
if (k2 == 0)
{
delay(10);
if (k2 == 0)
{
direction=~direction; // 方向标志;
}
while (!k2);
}
if(on_off==1)
{
if (k3 == 0)
{
delay(10);
if (k3 == 0)
{
while (!k3)
{
if(direction==1)
{
Delay_xms(100);
if(rate<255)
{
rate++;
}
}
else
{
Delay_xms(100);
if(rate>10)
{
rate--;
}
}
}
}
}
if (k4 == 0)
{
delay(10);
if (k4 == 0)
{
while (!k4)
{
if(direction==1)
{
Delay_xms(100);
if(snum<255)
{
snum++;
}
}
else
{
Delay_xms(100);
if(snum>10)
{
snum--;
}
}
}
}
}
}
}
void zt (void) //状态显示
{
u8 a,b,c,d,e,f;
if(on_off==0)
{
display_lcd(0,'n');
}
else
{
display_lcd(0,'f');
}
if(direction==1)
{
display_lcd(1,0x7e);
}
else
{
display_lcd(1,0x7f);
}
a=snum/100;
b=(snum-100*a)/10;
c=(snum-100*a-b*10)%10;
d=rate/100;
e=(rate-100*d)/10;
f=(rate-100*d-e*10)%10;
display_lcd(0x10,a+'0');
display_lcd(0x11,b+'0');
display_lcd(0x12,c+'0');
display_lcd(0x15,d+'0');
display_lcd(0x16,e+'0');
display_lcd(0x17,f+'0');
}
void qx (u16 ii)
{
u8 a,b,c;
a=ii/100;
b=(ii-100*a)/10;
c=(ii-100*a-b*10)%10;
display_lcd(0x10,a+'0');
display_lcd(0x11,b+'0');
display_lcd(0x12,c+'0');
}
void quan (void) //圈数
{
if(on_off==0)
{
if(direction==1)
{
for(ii=0;ii<snum;ii++)
{
clockwise (rate);
bao();
if(on_off==0)
{
qx(ii);
}
}
}
else
{
for(ii=0;ii<snum;ii++)
{
anticlockwise(rate);
bao();
if(on_off==0)
{
qx(ii);
}
}
}
}
}
void main (void)
{
to();
lcd_init();
zt();
while(1)
{
key();
quan();
}
}
void exint0() interrupt 0
{
if (k1 == 0)
{
delay(10);
if (k1 == 0)
{
on_off=~on_off; // 运行与停止标志;
}
while (!k1);
}
}
复制代码
作者:
xuejiamwj
时间:
2016-7-15 11:36
楼主,我想问一下,你这个电机是多大的电机??工业用大功率电机你这个能实现吗?
作者:
nihaoqisiba
时间:
2016-7-17 22:45
学习学习学习学习学习学习,谢谢分享
作者:
td123
时间:
2017-9-7 10:35
学习,学习,学习,学习,学习
作者:
ysln2008
时间:
2019-3-4 13:02
感谢分享 但是我没有积分了 只能看看你的原理图了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1