计算机控制技术_实验二报告

更新时间:2023-06-09 18:57:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

步进电机控制

计算机控制技术课程实验之二

步进电机控制

实验内容

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

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

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

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

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

#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;

void delay(uint z)

{

uint i,j;

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

for(j=0;j<110;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(200);

}

}

void motor_f()

{

uchar i;

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

{

P1=fan[i];

delay(200);

}

}

void main()

{

timer_init();

while(1)

{

if(flag==0)

步进电机控制

motor_f();

}

else

{

motor_z();

}

}

}

void timer() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(t>=200)

{

t=0;

flag=~flag;

}

t++;

}

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

#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};

步进电机控制

bit flag=0;

uint shijian;

uchar temp,num=0;

void delay(uint z)

{

uint i,j;

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

for(j=0;j<110;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(5);

while(P3!=0xff)

{

步进电机控制

delay(5);

temp=P3;

switch(temp)

{

case 0xfe:

{flag=~flag;break; }

case 0xfd:

{

num++;

if(num>=4)

num=3;

break; }

case 0xfb:

{

if(num!=0)

num--; //减速键按下,速度标志减1 else

num=0;

break; }

//default : break;

}

while(temp!=0xff)

{

temp=P3;

}

}

}

deal() //根据速度标志进行数据处理 {

switch(num)

{

case 0: P0=0xf9; //数据管显示1

shijian=320; //转速最慢 break;

case 1: P0=0xa4; //数据管显示2

shijian=160;

break;

case 2: P0=0xb0; //数据管显示3

shijian=80;

break;

case 3: P0=0x99; //数据管显示4 shijian=40;

break;

}

步进电机控制

return shijian;

}

void main()

{

//shijian=350; //timer_init();

while(1)

{

keyscan();

deal();

if(flag==0) {

motor_f(); }

else

{

motor_z(); }

}

}

/*void timer() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

if(t>=200)

{

t=0;

flag=~flag;

}

t++;

} */

本文来源:https://www.bwwdw.com/article/hgv1.html

Top