找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5064|回复: 0
打印 上一主题 下一主题
收起左侧

单片机步进电机控制实验

[复制链接]
跳转到指定楼层
楼主
实验八步进电机控制实验
一、实验目的
  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)程序设计与调试
  1. #include<reg52.h>

  2. #define uchar unsigned char

  3. #define uint unsigned int

  4. uchar code zheng[]={

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

  6. uchar code fan[]={

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

  8. //uchar t;

  9. bit flag=0;

  10. uint shijian;

  11. uchar temp;

  12. void delay(uint z)

  13. {

  14. uint i,j;

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

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

  17. }

  18. /*void timer_init()

  19. {

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

  21.   TH0=(65536-50000)/256;

  22.   TL0=(65536-50000)%256;

  23.   ET0=1;

  24.   EA=1;

  25.   TR0=1;

  26. } */

  27. void motor_z()

  28. {

  29.   uchar i;

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

  31.    {

  32.     P1=zheng[i];

  33.         delay(shijian);

  34.    }

  35. }

  36. void motor_f()

  37. {

  38.   uchar i;

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

  40.    {

  41.     P1=fan[i];

  42.         delay(shijian);

  43.    }

  44. }

  45. void keyscan()

  46. {

  47.   P3=0XFF;

  48.   delay(1);

  49.   if(P3!=0xff)

  50.    {

  51.           temp=P3;

  52.           switch(temp)

  53.           {

  54.             case 0xfe:

  55.                {flag=~flag;break;   }

  56.                case 0xfd:

  57.                {if(shijian<=60)

  58.                  {shijian=50;}

  59.                 else

  60.                {shijian=shijian-100;}

  61.                break;  }

  62.                case 0xfb:

  63.                {if(shijian>=600)

  64.                 {shijian=650;}

  65.                 else

  66.                 {shijian=shijian+100;}

  67.                break;  }

  68.                default : break;

  69.           }

  70.           while(temp==P3);

  71.    }

  72. }

  73. void main()

  74. {

  75.    shijian=350;

  76.   //timer_init();

  77.   while(1)

  78.    {

  79.      keyscan();

  80.      if(flag==0)

  81.          {

  82.            motor_z();

  83.          }

  84.     else

  85.          {

  86.               motor_f();

  87.          }

  88.    }

  89. }

  90. /*void timer() interrupt 1

  91. {

  92.   TH0=(65536-50000)/256;

  93.   TL0=(65536-50000)%256;

  94.   if(t>=200)

  95.    {

  96.     t=0;

  97.     flag=~flag;

  98.    }

  99.   t++;

  100. } */
复制代码



六、实验后的经验总结
1.掌握了proteus基本的操作方法.与KEIL C51联合调试的方法
2.掌握了步进电机工作原理的极编程的方法,做实验时要仔细,要按步骤来,避免人为错误,避免出现电路连接错误。
3.做实验要独立完成.
七、对实验课的建议
多练习一下编程,老师可以多讲解一下编程的过程。做实验应多给学生时间自主练习,让同学们对于实验有更深刻的理解,从实践中找出问题,解决问题.




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表