实验九_步进电机控制实验
实验九:步进电机控制试验
姓名:王琳 专业:通信工程 学号:2011412517 成绩:
一、 实验目的
1、掌握keilc51软件与protues软件的联合仿真调试的方法 2、掌握步进电机的工作原理及控制方法 3、掌握步进电机的不同编程方法 二、 实验内容
1、用protues设计一四相六线步进电机控制电路。要求利用p1口做为步进电机的控制接口,通过达林顿阵列ULN2003A。参考电路给出。
2、编写程序,实现步进电机的正反转控制。正反转时间分别持续10秒时间。如此循环。
3、设计一可调速度步进电机控制电路。P3.0~P3.2分别接按键K1~K3,其中K1为正反转控制按键,K2为加速按键,K3为减速按键,要求速度7档可调,加减速各设三档,复位时位于4档,要求每档速度变化明显。P2口接一共阳极数码管,显示当前档位。 三. 实验说明实验步骤 1 步进电机控制原理;
步进电机是利用电磁铁的作用原理,将脉冲信号换为线位移或角位移的电机。 每来一个脉冲,步进电机转动一定的角度,带动机械移动一小段距离。特点:来 一个脉冲,转动一个步距角。控制脉冲频率,可控制电机转速。改变脉冲顺序,可改变转动方向. 2 步骤
(1)用proteus设计四相留下六线步进电机控制电路;
(2)在keilc51中编写键盘识别程序,编写通过后,与proteus联合调试 (3)启动仿真,观察步进电机转动是否正常;
(4)用protues设计可调速步进电机控制电路,仿真调试、运行程序并查看
效果;
四.电路设计及调试
1 实验电路
2、实验程序
(1)#include sbit A1=P1^0; sbit B1=P1^1; sbit C1=P1^2; sbit D1=P1^3; bit flag;
char code table[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; void delay(t) {
int i;
for(;t>0;t--)
for(i=110;i>0;i--); }
void main() {
unsigned char i; TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; EA=1; while(1) {
for(i=0;i
for(i=0;i
void tim0() interrupt 1 {
unsigned char num;
TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++;
if(num==200) { num=0; flag=~flag; } }
(2)#include #define uchar unsigned char #define uint unsigned int sbit A1=P1^0; sbit B1=P1^1; sbit C1=P1^2; sbit D1=P1^3; sbit ZF=P3^0; sbit K2=P3^1; sbit K3=P3^2; uchar code zhuan[]={0x01,0x02,0x04,0x08}; uchar code table[]={0xff,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xf8}; uchar dangwei=4; uchar sudu;
uchar flag1,flag2,flag3; void delay(uint z)
{
uint a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--); }
void main() {
uchar i; EA=1; EX0=1; IT0=1; ET0=1;
TMOD=0x01;
TH0=(65536-10000)/256; TL0=(65536-10000)%256; TR0=1; while(1) {
if(ZF==0) { delay(5); if(ZF==0) { flag1++; if(flag1==2) flag1=0; } }
switch (dangwei) {
case 1:sudu=240;break; case 2:sudu=210;break; case 3:sudu=180;break; case 4:sudu=150;break; case 5:sudu=100;break; case 6:sudu=60;break; case 7:sudu=40;break; }
P2=table[dangwei]; if(flag1==0) {
for(i=0;i
P1=zhuan[i]; if(flag1==1) delay(sudu); { } for(i=0;i
void tim() interrupt 1 {
TH0=(65536-10000)/256; TL0=(65536-10000)%256;
if(K2==0&&flag2==0) {
flag2=1; dangwei++;
if(dangwei>7) dangwei=7; switch (dangwei) {
case 2:sudu=210;break; case 3:sudu=180;break; case 4:sudu=150;break; case 5:sudu=110;break; case 6:sudu=80; break; case 7:sudu=40; break; } }
if(K2==1) flag2=0; }
void tim0() interrupt 0 {
dangwei--;
if(dangwei
三、 实验总结
1、 控制脉冲频率,可控制电机转速。通过改变脉冲顺序,可改变转动方向。 2、 利用定时器中断检测按键时,因为每20ms就扫描一次键盘,而若按下一
次按键时间过长,会引起一次按键重复检测的情况,可设置一个标志位,反映按键是否被检测完,等一侧按键完成后在接受下一次按键触发。