标题:
数字阀的单片机步进电机驱动控制系统仿真与源码设计
[打印本页]
作者:
ftfsvtt3
时间:
2018-2-8 18:51
标题:
数字阀的单片机步进电机驱动控制系统仿真与源码设计
是一个数字阀的控制系统 带步进电机启动/停止 正转/反转 正加/逆减 正加/逆减 设定加速度 设定角度等按键功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(18.87 KB, 下载次数: 34)
下载附件
2018-2-9 00:32 上传
数字阀的步进电机驱动控制系统设计单片机源程序如下:
#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);
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(50.27 KB, 下载次数: 36)
下载附件
2018-2-9 00:33 上传
所有资料51hei提供下载:
步进电机240.zip
(90.57 KB, 下载次数: 24)
2018-2-8 18:51 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
牛吧
时间:
2018-2-9 15:42
好体,收藏中
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1