当前位置:文档之家› 步进电机与直流电机控制实验

步进电机与直流电机控制实验

if(P35==0) return 2;
if(P37==0) return 3;
return 0xFF; //无键按下时,返回0xFF
}
void Delay(uint16 ms)
{
uint16 i;
do
{
for(i=700;i;i--); //以1ms为延时单位
} while(--ms);
}
3、设计程序,控制直流电机全速正转2s,反转2s,然后再慢速正转2s,反转2s,如此循环。
uint8 code REV_TABLE[8]={
0x6F, 0x7f,0x3F,0xBF,0x9F,0xDF,0xCF,0xEF }; //4-8拍反转相序字
void Delay(uint16 ms);
void main()
{
uint8 i,j;
while(1)
{
for(j=0;j<128;j++) //正转90°(1024步)
步进电机和直流电机是机电一体化系统中常用的两种电动执行设备。步进电机可在电脉冲信号的控制下,实现快速启停以及精确的角位移控制。直流电机可通过H桥电路切换转向,并可利用PWM技术进行调速。
ZSC-1实验箱为MCU1配置了一个四相步进电机(其最小步距角为5.625°/64)和一个减速直流电机。图3.10.1为步进电机实验电路。P2.4~P2.7某根口线输出低电平时,相应的功率三极管导通,其所连接的一相线圈通电,口线输出高电平时线圈断电。程序以一定的时间间隔依次输出单4拍、双4拍或4-8拍方式对应的相序字,便可控制步进电机转动,颠倒相序字顺序,或改变时间间隔,步进电机的转向和转速也随之改变。图中按键KX0~KX3可用于步进电机转向、转速的控制输入。
图3.10.1步进电机实验电路
图3.10.2为直流电机实验电路,其核心为功率三极管T104~T107组成的H型全桥驱动电路。在单片机控制信号作用下,4个功率管呈现多种不同的通断组合,使电机处于相应工作状态。图中按键KX0~KX3可用于直流电机转向、转速的控制输入。
图3.10.2直流电机实验电路
表3.10.1为不同控制信号组合对应的直流电机状态。进行调速控制时,单片机先将FWD、REV置为10或01组合,再通过ENM输出PWM信号,利用PWM信号的不同占空比来调节电机绕组的平均电压,从而实现电机转速的控制。
C语言参考程序如下(请将下划线部分补充完整):
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit P32 = P3^2;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P37 = P3^7;
C语言参考程序如下(请将下划线部分补充完整):
#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sfr P1M1=0x91;
sfr P1M0=0x92;
sbit ENM =P1^4;
sbit REV = P1^6;
uint8 code PHASE_TABLE[8]={0xEF,0xCF,0xDF,0x9F,0xBF,0x3F,0x7F,0x6F }; //4-8拍相序字
uint8 ScanKey();
void Delay(uint16 ms);
void main()
{
int i=0,j,k,SpeedTime=25;
③用串行电缆连接实验箱和PC机各自的串行通信口,并运行PC机上的STC_ISP程序,进行单片机程序下载(注意MCU1要先断电再上电)。
④验证程序运行效果。也可对程序做适当修改,试验多种不同的控制方案和运行效果。
2、设计程序,通过按键KX0、KX1调节步进电机的转速,通过按键KX2、KX3切换其转向。
uint8 Key,Direction=0;
while(1)
{
P2=PHASE_TABLE[i]; //查表输出当前相序字
if(Direction==0) //准备下一个相序字
{
if(++i>=8) i=0;
}
else
{
if(--i<0) i=7;
}
for(j=0;j<SpeedTime;j++) //由SpeedTime控制总延时
REV=0;
Delay(2000);
REV=1; //反转2s
FWD=0;
Delay(2000);
PWMOut(50); //慢速
FWD=1; //正转2s
REV=0;
Delay(2000);
REV=1; //反转2s
FWD=0;
Delay(2000);
}
}
void PWMInit()
{
TMOD=0x01;
for(i=0;i<8;i++)
{
P2=FWD_TABLE[i]; //查表并输出正转相序字
Delay(5); //软件延时(控制步进电机转速)
}
Delay(2000);
for(j=0;j<128;j++) //反转90°(1024步)
for(i=0;i<8;i++)
{
P2=REV_TABLE[i]; //查表并输出反转相序字
}
else
{
PwmHighTiming=10*Duty; //根据占空比计算高、低电平定时时间
PwmLowTiming=1000-PwmHighTiming;
PwmHighTH0Buff=(65536-PwmHighTiming)>>8;
PwmHighTL0Buff=(65536-PwmHighTiming)&0xff;
{
for(k=700;k;k--); //以1ms为延时单位
Key=ScanKey();
if(Key==0xFF) continue; //无键按下,则继续延时循环
while(ScanKey()!=0xFF); //有键按下,等待按键释放后再处理
if(Key==0)
{
if(SpeedTime>5)
SpeedTime-=5; //KX0按下,则加速
Delay(5); //软件延时(控制步进电机转速)
}
Delay(2000);
}
}
void Delay(uint16 ms)
{
uint16 i;
do
{
for(i=700;i;i--);
} while(--ms);
}
②在Keil中创建工程,加入源程序文件,设置选项,进行编译、连接、转换处理,生成HEX格式的单片机程序文件。
}
}
}
uint8 ScanKey()
{
if(P32==1&&P34==1&&P35==1&P37==1)
return 0xFF; //无键按下时,返回0xFF
Delay(10); //延时消抖
if(P32==0) return 0; //KX0~KX3按下,分别返回0,1,2,3
if(P34==0) return 1;
{
uint16 i;
do
{
for(i=700;i;i--); //以1ms为延时单位
} while(--ms);
}
5、实验心得
PwmLowTH0Buff=(65536-PwmLowTiming)>>8;
PwmLowTL0Buff=(65536-PwmLowTiming)&0xff;
ENM=1;
PwmPhase=1;
TH0= PwmHighTH0Buff;
TL0= PwmHighTL0Buff;
TR0=1;
}
}
void Delay(uint16 ms)
表3.10.1直流电机控制功能表
ENM
FWD
REV
电机状态
ENM
FWD
REV
电机状态
0
0
0
制动
1
0
0
制动
0
0
1
惰行
1
0
1
反转
0
1
0
惰行
1
1
0
正转
0
1
1
惰行
1
1
1
制动
三、实验设备
1、PC机一台(已安装Keil uVision、STC_ISP等软件);
2、ZSC-1单片机实验箱一台。
四、实验内容和步骤
1、设计程序,控制四相步进电机以4-8拍方式(步距角为5.625°/64)正转90°,停2s,然后反转90°,再停2s,如此循环。
}
else if(Key==1)
{
if(SpeedTime<50)
SpeedTime+=5; //KX1按下,则减速
}
else if(Key==2)
Direction=0; //KX2按下,则正转
else if(Key==3)
Direction=1; //KX3按下,则反转
break; //从延时循环中跳出
sbit FWD = P1^7;
uint16 PwmHighTiming,PwmLowTiming;
uint8 PwmHighTH0Buff,PwmHighTL0Buff,PwmLowTH0Buff,PwmLowTL0Buff;
相关主题