实验八步进电机控制实验
一、实验目的
? 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.做实验要独立完成.
七、对实验课的建议
多练习一下编程,老师可以多讲解一下编程的过程。做实验应多给学生时间自主练习,让同学们对于实验有更深刻的理解,从实践中找出问题,解决问题.