目 录
第一章 概述 …………………………………………… 2
1.1 单片机简介 …………………………………… 2
1.2步进电机简介 ………………………………………… 2
第二章 设计目的与要求 ……………………………… 3
2.1设计目的 ……………………………………………… 3
2.2设计要求 ……………………………………………… 3
第三章 硬件电路设计 ………………………………… 4
3.1程序流程图 …………………………………………… 4
3.2硬件电路图 …………………………………………… 5
3.3系统工作原理 ………………………………………… 6
3.4功能说明 ……………………………………………… 6
第四章 软件设计 ……………………………………… 7
4.1 C语言程序 …………………………………………… 7
4.2汇编语言程序 ………………………………………… 12
第五章 总结与体会 ………………………………… 26
第六章 参考文献 …………………………………… 27
第一章 概述
1.1单片机简介
单片机是单片微型计算机的简称,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
1.2步进电机简介
步进电动机是一种用电脉冲信号进行控制,并将电脉冲信号转换成相应的角位移的执行器。由于受脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。改变通电顺序可改变步进电动机的旋转方向;改变通电频率可改变步进电动机的转速。
步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的多相时序控制器。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机、交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。 步进电机作为执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
1.3步进电机工作原理
对于一四相步进电机,采用单极性直流电源供电,只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。下图是四相反应式步进电机工作原理示意图。
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
a. 单四拍 b. 双四拍 c八拍
第二章 设计目的与要求
2.1设计目的
通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬件、软件设计技术及调试技巧。
2.2设计要求
1.由一个总开关按钮控制步进电机的启动和停止,并由一个LED灯指示电机状态,亮表示电机运转;灭表示电机停止。
2.由一个按钮选择电机正转或反转,并由两个LED灯指示电机旋转状态,其中一个亮表示正转,另一个亮表示反转。
3.由三个按钮实现三级调速功能,分别对应低速、中速、高速模式,并由三个LED灯指示电机速度模式。
第三章 硬件电路设计
3.1程序流程图
3.2硬件电路图
3.3系统工作原理
本系统由单片机主电路、步进电机及其驱动电路、开关键控制电路、步进电机状态显示电路几部分组成。单片机的P0口与开关电路相连,P2口与LED指示灯相连,P1口与步进电机相连。工作时,CUP根据程序对来自P0口的瞬时值进行分析和处理,并决定将要采取的控制行为。根据得出的控制决策适时地向P1口和P2口输出相应信号,然后通过驱动电路,转换成对步进电机的控制信号。
3.4功能说明
1. “总开关”控制电源通断。只闭合“总开关”,电机并不转动,“电源指示灯”亮;断开“总开关”后电机停止转动,“电源指示灯”灭。
2. “正转开关”闭合后电机正转,“正转指示灯”亮。
3. “反转开关”闭合后电机反转,“反转指示灯”亮。
4. “慢速开关”闭合后电机慢速旋转,“慢速指示灯”亮。
5. “中速开关”闭合后电机中速旋转,“中速指示灯”亮。
6. “快速开关”闭合后电机快速旋转,“快速指示灯”亮。
第四章 软件设计
4.1 C语言程序
include "reg52.h"
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
sbit kaiguan = P0^0;
sbit zhengzhuan = P0^1;
sbit fanzhuan = P0^2;
sbit mansu = P0^3;
sbit zhongsu = P0^4;
sbit kuaisu = P0^5;
sbit chaokuaisu = P0^6;
sbit kaiguanLED = P2^0;
sbit zhengzhuanLED = P2^1;
sbit fanzhuanLED = P2^2;
sbit mansuLED = P2^3;
sbit zhongsuLED = P2^4;
sbit kuaisuLED = P2^5;
sbit chaokuaisuLED = P2^6;
unsigned char ZZ[4] = {0x01,0x02,0x04,0x08};
unsigned char FZ[4] = {0x08,0x04,0x02,0x01};
//延时子程序
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<80; k++)
{; }
}
}
//正转子程序
void prun()
{
unsigned int i;
zhengzhuanLED = 0;
//正转慢速
if(mansu == 0)
{
mansuLED = 0;
for (i=0; i<4; i++)
{
P1 = ZZ[i];
delay(100);
}
mansuLED = 1;
}
//正转中速
if(zhongsu == 0)
{
zhongsuLED = 0;
for (i=0; i<4; i++)
{
P1 = ZZ[i];
delay(80);
}
zhongsuLED = 1;
}
//正转快速
if(kuaisu == 0)
{
kuaisuLED = 0;
for (i=0; i<4; i++)
{
P1 = ZZ[i];
delay(40);
}
kuaisuLED = 1;
}
//正转超快速
if(chaokuaisu == 0)
{
ChaokuaisuLED = 0;
for (i=0; i<4; i++)
{
P1 = ZZ[i];
delay(10);
}
chaokuaisuLED = 1;
}
zhengzhuanLED = 1;
}
//反转子程序
void nrun()
{
unsigned int j;
fanzhuanLED = 0;
//反转慢速
if(mansu == 0)
{
mansuLED = 0;
for (j=0; j<4; j++)
{
P1 = FZ[j];
delay(100);
}
mansuLED = 1;
}
//反转中速
if(zhongsu == 0)
{
zhongsuLED = 0;
for (j=0; j<4; j++)
{
P1 = FZ[j];
delay(80);
}
zhongsuLED = 1;
}
//反转快速
if(kuaisu == 0)
{
kuaisuLED = 0;
for (j=0; j<4; j++)
{
P1 = FZ[j];
delay(40);
}
kuaisuLED = 1;
}
//反转超快速
if(chaokuaisu == 0)
{
chaokuaisuLED = 0;
for (j=0; j<4; j++)
{
P1 = FZ[j];
delay(10);
}
chaokuaisuLED = 1;
}
fanzhuanLED = 1;
}
//主程序
main()
{
while(1)
{
if(kaiguan == 0)
{
kaiguanLED = 0;
if(zhengzhuan == 0)
prun();
if(fanzhuan == 0)
nrun();
}
else
kaiguanLED = 1;
}
}
4.2汇编程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP ,#60H
SETB P2.7
JB P0.7, MAIN ;判断开关是否打开
CLR P2.7
JNB P0.0 ,LOOP4 ;判断是否正转
LOOP1: ;正转
JNB P0.1, LOOP2
JNB P0.2, LOOP3
;正转慢速
CLR P2.0
SETB P2.1
CLR P2.2
SETB P2.3
SETB P2.4
MOV P1,#01H
ACALL DELAY1
MOV P1,#02H
ACALL DELAY1
MOV P1,#04H
ACALL DELAY1
MOV P1,#08H
ACALL DELAY1
ACALL MIEDENG
LJMP MAIN
LOOP2: ;正转中速
CLR P2.0
SETB P2.1
SETB P2.2
CLR P2.3
SETB P2.4
MOV P1,#01H
ACALL DELAY2
MOV P1,#02H
ACALL DELAY2
MOV P1,#04H
ACALL DELAY2
MOV P1,#08H
ACALL DELAY2
ACALL MIEDENG
LJMP MAIN
LOOP3: ;正转快速
CLR P2.0
SETB P2.1
SETB P2.2
SETB P2.3
CLR P2.4
MOV P1,#01H
ACALL DELAY3
MOV P1,#02H
ACALL DELAY3
MOV P1,#04H
ACALL DELAY3
MOV P1,#08H
ACALL DELAY3
ACALL MIEDENG
LJMP MAIN
LOOP4: ;反转
JNB P0.1, LOOP5
JNB P0.2, LOOP6
;反转慢速
SETB P2.0
CLR P2.1
CLR P2.2
SETB P2.3
SETB P2.4
MOV P1,#08H
ACALL DELAY1
MOV P1,#04H
ACALL DELAY1
MOV P1,#02H
ACALL DELAY1
MOV P1,#01H
ACALL DELAY1
ACALL MIEDENG
LJMP MAIN
LOOP5: ;反转中速
SETB P2.0
CLR P2.1
CLR P2.2
SETB P2.3
SETB P2.4
MOV P1,#08H
ACALL DELAY2
MOV P1,#04H
ACALL DELAY2
MOV P1,#02H
ACALL DELAY2
MOV P1,#01H
ACALL DELAY2
ACALL MIEDENG
LJMP MAIN
LOOP6: ;反转快速
SETB P2.0
CLR P2.1
SETB P2.2
SETB P2.3
CLR P2.4
MOV P1,#08H
ACALL DELAY3
MOV P1,#04H
ACALL DELAY3
MOV P1,#02H
ACALL DELAY3
MOV P1,#01H
ACALL DELAY3
ACALL MIEDENG
LJMP MAIN
//慢速延时程序
DELAY1:
MOV R0, #200
YANSHI1:
MOV R1, #500
DJNZ R1, $
DJNZ R0 , YANSHI1
RET
//中速延时程序
DELAY2:
MOV R0, #100
YANSHI2:
MOV R1, #500
DJNZ R1, $
DJNZ R0 , YANSHI2
RET
//快速延时程序
DELAY3:
MOV R0, #50
YANSHI3:
MOV R1, #500
DJNZ R1, $
DJNZ R0 , YANSHI3
RET
//灭灯程序
MIEDENG:
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.3
SETB P2.4
RET
END
第二篇:基于单片机的步进电机课程设计报告
设计题目:基于单片机的步进电机控制系统设计
设计目的:
综合运用所学的《单片机原理及应用》的理论知识,通过实践加强对所学知识的理解,具备设计单片机应用设计系统的能力。以单片机为核心设计一个步进电机控制系统,要求能够通过键盘设置步进电机的正转和反转,加速和减速。并在LED数码管显示器上显示步进电机转速。通过了解系统的软硬件构成及其特点,详细掌握怎样通过单片机控制其输出来控制步进电机的运转,并对应地在数码管上显示出来,更加系统的了解步进电机的组成,工作原理,控制方法。
设计要求:
【1】进行方案论证,说明步进电机控制系统的工作原理
【2】设计控制系统所需的硬件电路,给出电路原理图和元器件清单。
【3】给出软件流程图并编写程序源代码。
【4】完成系统的调试,给出调试结果并分析。
【5】了解单片机的内部结构,组成,学习单片机的工作原理以及内部工作状态,并熟悉在不同时刻,单片机的输入输出情况
【6】了解步进电机的分类和用途,掌握步进电机的内部结构以及工作原理,并学习单片机简单控制步进电机的正转和反转,加速和减速
【7】使用keil和proteus等软件进行系统的仿真,并在开发板硬件上实现。锻炼自己的编程,调试能力。
设计条件:
步进电机的工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件步进电机。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号时,它就驱动步进电机按设定的方向转动一个固定的角度。称为“步距角”。它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
电机的位置和速度与导电次数(脉冲数)和频率成一一对应关系。而方向由导电顺序决定
(贴图:电机结构)
步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。
用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号。因为所选电机是两相的,所以只需P1口的低四位p1.0到p1.3分别接在电机的四根电线上,通过程序调整电机的转速,通过键盘的按钮,就可以改变延时时长从而改变电机的转速。p0口接在led数码管上,可以显示当前的电机转速和按钮状态。
(画图:控制逻辑框图)
步进电机选择:
步进电机28BYJ5VDC型四相八拍电机,电压为DC5V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一个步距角。当通电状态的改变完成一个循环时,转子转过一个齿距。 四相步进电机可以在不同的通电方式下运行,常见的通电方式有单四拍(A-B-C-D-A),双四拍(AB-BC- CD-DA-AB),八拍(A-AB-B-BC-C-CD-D-DA-A)
由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口,
控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它就会再转一步。两个脉冲的间隔时间越短,步进电机就转的越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。具有实现用延时时间的长短来决定。延时时间的方案是:
虽然可以采用定时的方法,比较精确的控制延时的时间,但是我们在这里不而是采用消耗指令的方法达到延时的效果,此方案虽占用大量的CPU空间,降低了单片机的使用效率而且延时间不易计算。但易理解。对于初学者来说,有很强的可操作性。
单片机的选择:
采用Stc89c52单片机,该单片机应用广泛,集成度高,可靠性强,结构简单,价格低廉,易于使用,是宏晶科技推出的新一代超强抗干扰,高速低功耗的单片机。他的功能已完全能够实现本设计的要求。对于学校的学生而言。性价比尤为突出,更多的被我们所第一时间采用。
(贴图:单片机)
驱动电路的选择:
使用达林顿驱动芯片ULN2003,该芯片为集电极开路驱动芯片,能驱动四相步进电机,它的每一对达林顿都串联一个2.7k的基极电阻,在5v的工作电压下它能与TTL和CMOS电路直接相连。可以直接处理原先需要标准逻辑缓冲器。ULN2003是高压大电流达林顿晶体管系列产品。具有电流增益高,工作电压高,温度范围宽。带负载能力强等特点。适应于各类要求高速大功率驱动的系统。缺点是如果用于驱动直流电机的话,只能换一个方向转动。换向要改变电机的接法。
(贴图:驱动电路)
显示电路的选择:
采用6位LED数码管的最后两位显示。利用74HC573芯片接P2.6和P2.7分别控制段选和位选。
(贴图)
按键的选择:
独立按键。考虑到控制要求的条件,我们采用独立按键就可达到我们想要的目的。且容易变成和实现。矩阵虽也可完成,但程序设计太过复杂,因为时间紧,任务中,采用独立按键。K1接P3.4暂停控制(预实现)。K2接P3.5正反转控制。K3接P3.6加速控制。K4接P3.7减速控制。
(贴图)
报警电路:
实现高速太高和低速太低报警。当所加频率太高,达到9时长报警。当所加频率太低,到0时滴滴滴短报警。
(贴图)
程序设计:
#include<reg51.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit jia_key=P3^6;
sbit jian_key=P3^7;
sbit zf_key=P3^5;
bit flag=0;
bit stopflag;
Unsignedchar ,num=1,show_num=0,maichong=10,table_begin=0;
unsignedcharcode table1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};
unsignedcharcode
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay (unsigned char i)
{ unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void dispose()
{ switch(num)
{ case 0:
show_num=0;
case 1:
show_num=1;
maichong=9; break; maichong=10; beep=0; delay(100); beep=1; break; case 2:
show_num=2;
maichong=8; break; case 3:
show_num=3; maichong=7; break; case 4:
show_num=4;
case 5: maichong=6; break;
show_num=5;
maichong=5; break;
case 6:
show_num=6;
case 7: maichong=4; break;
show_num=7;
case 8: maichong=3; break;
show_num=8;
case 9: maichong=2; break;
show_num=9;
maichong=1; beep=0; delay(10); beep=1; break; case 10:
show_num=0;
maichong=0; break; }
if(flag==0) {table_begin=0;}
else table_begin=4;
}
void display()
{
dula=0;
P0=table[show_num];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(5);
P0=table[0];
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(5);
}
void qudong( )
{
unsigned char i,j;
for(j=0+table_begin;j<4+table_begin;j++) {
}
P1=table1[j]; for(i=0;i<maichong;i++) } { display(); }
void key()
{
if(jia_key==0) {
delay(5); if(jia_key==0) {
num++; if(num==10) num=9; while(jia_key==0); }
}
if(jian_key==0) {
delay(5); if(jian_key==0) { if(num!=0)
} num--; else num=0; while(jian_key==0); }
if(zf_key==0)
{
void main() delay(5); if(zf_key==0) { flag=~flag; while(zf_key==0); } }
{ while(1)
{ key();
} dispose(); qudong(); }
体会总结
本次课程设计是我到目前为止觉得最有意义也是收获最大的一次实验设计,可以说虽在实践的过程中麻烦复杂,但是在做出一点成功之后,很有成就感。身为电子系自动化专业的学生,设计是我们将来必须的技能,而这次课程设计恰恰是给我们一个应用自己所学知识的平台。
因为这次课程设计需要动脑动手,把自己课堂上学到的软件和硬件知识全部
应用进来,要想完成好这次课程设计,首先需要弄懂步进电机的工作原理,与外部电路的连接,单片机原理,C语言程序设计等。这其中有以前课堂上学过的也有需要我们自学研究的。这不仅考察了自己原来的知识程度还加强了我们独立获取知识并加以运用的能力。
这次课程设计我不仅学到了很多知识,还制作出了自己想要的控制任务。很有成就感。在这次三人小组的分工合作中,使我体会到了分工合作的力量和重要性。在合作团结中,通过相互帮助相互指点,使我们彼此负责的那部分任务都有了更好的了解和掌握。
通过这次课程设计,我对步进电机的了解拓宽了,对单片机和外围电路的认识也更加清晰了,这为我以后工作提供了坚实的基础。在摸索该如何设计电路使之实现所需功能的过程中还培养了我的设计思维,增加了实际动手能力,让我体会到了设计电路的艰辛的同时,更让我体会到了成功的喜悦。两个星期过去了,看着自己的劳动成果,心理满是欣慰。最后,感谢老师和同学们的悉心指导和帮助。 参考文献
【1】周国运,单片机原理及应用(C语言版)。中国水利水电出版社2012.1
【2】李蒙,毛建东,单片机原理及应用【M】。中国轻工业出版社,2010.2
【3】郭天祥,51单片机C语言教程【M】。北京:电子工业出版社。2009.12
【4】谭浩强,C语言设计。北京:清华大学出版社,2005.7
【5】徐益民,步进电机的单片机控制系统的设计。哈尔滨:黑龙江科技学院,2005