单片机论坛

 找回密码
 立即注册
QQ登录 只需一步,快速开始
搜索
查看: 82|回复: 1
收起左侧

数字阀的单片机步进电机驱动控制系统仿真与源码设计

[复制链接]
ftfsvtt3 发表于 2018-2-8 18:51 | 显示全部楼层 |阅读模式
是一个数字阀的控制系统 带步进电机启动/停止 正转/反转 正加/逆减 正加/逆减 设定加速度 设定角度等按键功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
数字阀的步进电机驱动控制系统设计单片机源程序如下:
  • #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
    所有资料51hei提供下载:
    步进电机240.zip (90.57 KB, 下载次数: 4)

    评分

    参与人数 1黑币 +50 收起 理由
    admin + 50 共享资料的黑币奖励!
    查看全部评分
    回复 使用道具 举报
    牛吧 发表于 2018-2-9 15:42 | 显示全部楼层
    好体,收藏中
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 立即注册
    本版积分规则
    QQ|手机版|小黑屋|单片机论坛
    Powered by 单片机教程网
    快速回复 返回顶部 返回列表