⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 设计.txt

📁 电动推进注射器的控制系统的设计
💻 TXT
字号:
快速复位可由单片机的复位引脚实现。

输入:
P3_0接注射结束提示信号
P3_1接按键1,表示正转 key=1
P3_2接按键2,表示反转 key=2
P3_3接按键3,表示加速 jiasu=1
P3_4接按键4,表示减速 jiansu=1


输出:
P3_5正转灯,正常工作时正转亮
P3_6反转灯,正常工作时反转亮
P3_7报警灯,当速度超出规定范围时,即速度过快或过慢时灯亮。


输出:
P1控制步进电机的信号


输出:
P2接8位数码管,注射时显示速度 接到注射结束信号时显示C


说明:对应的硬件设计有5个按键,一个复位,一个正转,一个反转,一个加速,一个减速
                    有一个注射结束信号的电路连接到单片机上
                    有电路连接单片机与步进电机
                    有3个LED灯,一个表正转,一个表反转,一个表报警
                    有1个8位数码管


#include<AT89X51.h>
unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格
unsigned char code B_Rotation[4]={0x10,0x08,0x040,0x02};//反转表格
unsigned char const xianshi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示表
sbit key1=P3^1;//定义正转按键
sbit key2=P3^2;//定义反转按键
sbit key_jiasu=P3^3;//定义加速按键
sbit key_jiansu=P3^4;//定义减速按键
unsigned int key=0;
unsigned int jiasu=0,jiansu=0;
unsigned int t1=10000;
void delay(unsigned int i);

void Delay(unsigned int i)//延时
{
 while(--i);
}

void main()
{unsigned int i;
while(1)
{ if(!key1)//以下为判断正转按键的程序段
       {
        delay(200);
          while(!key1);
             if(key1)
              {
                 delay(200);
                    if(key1)
					{key=1;P3_5=0;P3_6=1;}
              }
       }
  if(!key2) //以下为判断反转按键的程序段
       {
        delay(200);
          while(!key2);
             if(key2)
              {
                 delay(200);
                    if(key2)
					{key=2;P3_5=1;P3_6=0;}
              }
       }
  if(!key_jiasu)//以下为判断加速按键的程序段
       {
        delay(200);
          while(!key_jiasu);
             if(key_jiasu)
              {
                 delay(200);
                    if(key_jiasu)
					{jiasu=1;}
              }
       }
  if(!key_jiansu)//一下为判断减速按键的程序段
       {
        delay(200);
          while(!key_jiansu);
             if(key_jiansu)
              {
                 delay(200);
                    if(key_jiansu)
					{jiansu=1;}
              }
       }


//如果接到注射结束信号,则执行下面的程序段
 if(P3_0==1) //注射结束信号
   {P1=0;//停电机
    P2=0x39; //结束信号
    break;//停止注射,到下次复位后再启动
   }

//没有接到注射结束信号,即正常运行时执行的程序段
 if(P3_0==0)
 {
   //正转时执行下面的程序段
   if(key==1)
   {  P3_5=0;//正转灯亮
      P3_6=1;
      for(i=0;i<4;i++)      //4相
     {
       P1=F_Rotation[i];  //输出对应的相 
        //下面是速度控制程序段
        if(jiasu==1)
        {jiasu=0; 
         if(t1>=60000)//如果速度超过最大值
           {P1_7=0;}//报警灯亮
         else{t1=t1+10000;P1_7=1;}
         }
        if(jiansu==1)
        {jiansu=0;
         if(t1<=10000)//如果速度低于最小值
            {P1_7=0;}//报警灯亮
         else{t1=t1-10000;P1_7=1;}
          }
        Delay(t1);        //改变这个参数可以调整电机转速
      }
       P2=xianshi[t1/10000];//显示注射速度的档次,本设计共有1~6档
     }

    //反转时执行下面的程序段,其他与正转类似
    if(key==2)
    {  P3_5=1;
       P3_6=0;
      for(i=0;i<4;i++)      //4相
     {
       P1=B_Rotation[i];  //输出对应的相 
        if(jiasu==1)
        {jiasu=0; 
         if(t1>=60000){P1_7=0;}
         else{t1=t1+10000;P1_7=1;}
         }
        if(jiansu==1)
        {jiansu=0;
         if(t1<=10000){P1_7=0;}
         else{t1=t1-10000;P1_7=1;}
          }
        Delay(t1);        //改变这个参数可以调整电机转速
      }
       P2=xianshi[t1/10000];
     }
 }

}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -