立即注册 登录
返回首页

uid:193941的个人空间

日志

单片机步进电机控制实验

已有 502 次阅读2017-4-26 20:51 | 步进电机, 单片机

实验八步进电机控制实验

一、实验目的

  1.掌握Keil C51软件与Protues软件联合仿真调试的方法;

  2.掌握步进电机的工作原理及控制方法;

  3.掌握步进电机控制的不同编程方法。

二、实验内容

1.用Proteus设计一四相六线步进电视控制电路。要求利用P1口作步进电机的控制端口,通过达林顿阵列ULN2003A驱动步进电机。

   2.编写程序,实现步进电机的正反转控制。正反转时间分别持续10S时间,如此循环。

   3.设计一可调速步进电机控制电路。P3.0~P3.2分别接案件K1~K3,其中K1为正反转控制按键,K2为加速按键,K3为减速按键,要求速度7档(1~7)可调,加减速各设3档,复位时位于4档,要求每档速度变化明显。该步进电机控制电路在以上电路的基础上自行修改。

三、实验仪器与设备

1.微机1台      2.Keil C51集成开发环境      3.Proteus仿真软件

四、实验原理及步骤

1.用Proteus设计四相六线步进电机控制电路;

2.在Keil C51中编写步进电机正反转控制程序,编译通过后,与Proteus联合测试;

3.启动仿真,观察步进电机转动是否正常

4.用Proteus设计可调速步进电机控制电路,仿真调试、运行程序并查看效果。

五、电路设计及调试

(1)实验电路

(2)程序设计与调试

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar code zheng[]={

0xf3,0xf6,0xfc,0xf9};

uchar code fan[]={

0xf9,0xfc,0xf6,0xf3};

//uchar t;

bit flag=0;

uint shijian;

uchar temp;

void delay(uint z)

{

 uint i,j;

 for(i=0;i<z;i++)

 for(j=0;j<80;j++);

}

/*void timer_init()

{

  TMOD=0X01;//定时器0,方式1

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

  ET0=1;

  EA=1;

  TR0=1;

} */

void motor_z()

{

  uchar i;

  for(i=0;i<4;i++)

   {

    P1=zheng[i];

        delay(shijian);

   }

}

void motor_f()

{

  uchar i;

  for(i=0;i<4;i++)

   {

    P1=fan[i];

        delay(shijian);

   }

}

void keyscan()

{

  P3=0XFF;

  delay(1);

  if(P3!=0xff)

   {

          temp=P3;

          switch(temp)

          {

            case 0xfe:

               {flag=~flag;break;   }

               case 0xfd:

               {if(shijian<=60)

                 {shijian=50;}

                else

               {shijian=shijian-100;}

               break;  }

               case 0xfb:

               {if(shijian>=600)

                {shijian=650;}

                else

                {shijian=shijian+100;}

               break;  }

               default : break;

          }

          while(temp==P3);

   }

}

void main()

{

   shijian=350;

  //timer_init();

  while(1)

   {

     keyscan();

     if(flag==0)

         {

           motor_z();

         }

    else

         {

              motor_f();

         }

   }

}

/*void timer() interrupt 1

{

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

  if(t>=200)

   {

    t=0;

    flag=~flag;

   }

  t++;

} */

六、实验后的经验总结

1.掌握了proteus基本的操作方法.与KEIL C51联合调试的方法

2.掌握了步进电机工作原理的极编程的方法,做实验时要仔细,要按步骤来,避免人为错误,避免出现电路连接错误。

3.做实验要独立完成.

七、对实验课的建议

多练习一下编程,老师可以多讲解一下编程的过程。做实验应多给学生时间自主练习,让同学们对于实验有更深刻的理解,从实践中找出问题,解决问题.


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部