单片机原理及应用.docx
- 文档编号:30665865
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:19
- 大小:582.13KB
单片机原理及应用.docx
《单片机原理及应用.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用.docx(19页珍藏版)》请在冰豆网上搜索。
单片机原理及应用
《单片机原理及应用》课程设计
学院:
物联网工程学院
班级:
自动化1104
姓名:
学号:
07041104
指导老师:
吴定会
成绩:
基于单片机的步进电机控制器设计
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
1、设计目的
通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬、软件设计技术及调试技巧。
2、设计要求
1、独立按键实现步进电机的启停、加速、减速、正转、反转的控制;
2、能实现步进电机的转速调节;
3、步进电机的转速由数码管显示。
3、仪表设备
型号
备注
1
STC89C51RC单片机芯片
一片
2
ULN2003驱动芯片
一片
3
MT03641BR八位共阳数码管芯片
一片
4
8550PNP
四个
5
不同阻值电阻
若干
6
30pF电容
两个
7
12M晶振
一个
8
按键
四个
9
28BYJ-48电机
一个
10
+5V电源
一个
4、硬件线路图及主要芯片说明
本设计的硬件电路只要包括控制电路、最小系统、驱动电路、显示电路四大部分。
最小系统只要是为了使单片机正常工作。
控制电路只要由开关和按键组成,由操作者根据相应的工作需要进行操作。
显示电路主要是为了显示电机的工作状态和转速。
驱动电路主要是对单片机输出的脉冲进行功率放大,从而驱动电机转动。
1、控制电路
根据系统的控制要求,控制输入部分设置了顺时针控制,逆时针控制,加速控制,减速控制和停止按键。
控制电路如图1所示。
当按下按键,内部程序检测P0.1-P0.4的状态变化来调用相应的启动和换向程序,从而实现系统的电机的启动和正反转控制。
根据步进电机的工作原理可以知道,步进电机转速的控制主要是通过控制通入电机的脉冲频率,从而控制电机的转速。
对于单片机而言,主要的方法有:
软件延时和定时中断在此电路中电机的转速控制主要是通过定时器的中断来实现的,该电路控制电机加速度主要是通过按键的断开和闭合,从而控制外部中断。
根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,从而改变了电机的转速。
图1控制电路原理图
2、最小系统
单片机最小系统或者称为最小应用系统,就是用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般应该包括:
单片机、复位电路、晶振电路。
复位电路:
使用了独立式键盘,单片机的P1口键盘的接口。
该设计要求只需4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,使用了6路独立式键盘。
复位电路采用手动复位,所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态,晶振电路用22PF的电容和一12M晶体振荡器组成为整个电路提供时钟频率。
如图2示。
晶振电路:
8051单片机的时钟信号通常用两种电路形式电路得到:
内部震荡方式和外部中断方式。
在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如图4示。
其电容值一般在5~30pf,晶振频率的典型值为12MHz,采用6MHz的情况也比较多。
内部振荡方式所得的时钟信号比较稳定,实用电路实用较多。
图2复位及时钟振荡电路
3、驱动电路
本次设计用ULN2003来驱动步进电机,电路图如图4所示。
通过单片机的P2.0~P2.3输出脉冲到ULN2003的1B~4B口,经信号放大后从1C~4C口分别输出到电机的ABCD四相。
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/50V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成该电路的特点如下:
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
USN2003的参数
本设计所用的步进电机是28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-),八拍(A-AB-B-BC-C-CD-D-DA-A。
。
。
)
步进电机四相八拍相序表
步序
相序
通电相
对应PB口的输出值
(状态字)
PB13
PB12
PB11
PB10
1
0
0
0
1
A
01H
2
0
0
1
1
AB
03H
3
0
0
1
0
B
02H
4
0
1
1
0
BC
06H
5
0
1
0
0
C
04H
6
1
1
0
0
CD
0CH
7
1
0
0
0
D
08H
8
1
0
0
1
DA
09H
由此可得电机逆时针旋转的相{0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}
图3步进电机驱动电路
4、显示电路
在该步进电机的控制器中,电机可以正反转,可以加速、减速,其中电机转速的等级分为十级,为了方便知道电机转速的等级,这里设计了电机转速和电机的工作状态的显示电路。
在显示电路中,主要是利用了单片机的P0口接一个两位的共阳极数码管。
数码管a、b、c、d、e、f、g、dp分别接P0.0~P0.7口.数码管的公共角1,2分别接p2.0,p2.1。
本次所用的数码管参数和管脚图如下:
图4步进电机显示电路
5、总体电路图
把各个部分的电路图组合成总电路图,如图5所示。
图5总体电路图
5、系统工作原理
本程序包括按键处理、中断处理、数据处理、显示处理四个主要部分
1、按键处理
按键处理安排在主程序当中,使其处于不断检测状态,当有按键按下能够及时对其进行相应的处理。
同时,对于按键还应该进行消抖处理,避免系统误动作。
其主要程序如下:
if(k1==0){delay(5);//延时消抖
if(k1==0){TR0=~TR0;k++;}//启动/停止
}while(!
k1);//等待按键释放
if(k2==0){delay(5);//延时消抖
if(k2==0)time=time-150;}//加速
while(!
k2);//等待按键释放
if(k3==0){delay(5);//延时消抖
if(k3==0)time=time+150;}//减速
while(!
k3);//等待按键释放
if(k4==0){delay(5);//延时消抖
if(k4==0)f++;}//正/反转
while(!
k4);//等待按键释放
2、中断处理
中断程序中安排对P1口赋值及对定时器重新装入初值,每次进入中断程序时,先判断是否执行反转,如是,则送反转编码,否则,送正转编码。
其主要程序如下:
voidtimer0()interrupt1
{
if(f%2){P1=FF[j++];if(j==8)j=0;}//f为奇数时代表反转,则送反转编码到P1口
else{P1=ZF[j++];if(j==8)j=0;}//否则送正转编码到P1口
TH0=(65536-time)/256;
TL0=(65536-time)%256;//重新装初值
}
3、数据处理
通过对数据进行处理来获得电机的转速,可以先计算出1ms时电机的速度,然后通过改变时间间隔来计算电机的转速。
其主要程序如下:
voiddispose()
{
temp1=15000/time;
h=temp1/10;//十位
w=temp1%10;//个位
temp2=15000%time;
p=temp2/1000;//小数点后第一位小数
q=temp2%1000*10/1000;//小数点后第二位小数
}
4、显示处理
显示程序则通过对相应数码管的通断,然后送段码。
以这种方式来控制其动态显示,同时需要主要每个数码管都应该延时亮一段时间。
并且要对其消隐。
以获得较好的显示效果。
其主要程序如下:
voiddisplay(uchara,ucharb,ucharc,uchard)
{
P2=0xfe;
P0=SM[a];//显示十位
delay
(1);
P0=0xff;//消隐
P2=0xfd;
P0=SM[b]&0x7f;//显示个位(带小数点)
delay
(1);
P0=0xff;//消隐
P2=0xfb;
P0=SM[c];//显示小数点后第一位小数
delay
(1);
P0=0xff;//消隐
P2=0xe7;
P0=SM[d];//显示小数点后第二位小数
delay
(1);
P0=0xff;//消隐
6、程序框图
当给系统供电以后,通过单片机复位电路对系统进行上电复位系统经过初始化以后,便开始执行按键查询等待相应的操作,当有按键按下的时候程序便调用并执行相应的子程序,其具体的主流程图6.1如下所示:
图6.1 主程序
系统初始化流程图:
对相应的系统参数进行初始化,包括系统上电默认运行参数设定,包括两相四拍的工作方式,初始速度档位是30转/分,系统中断设定,定时器设定,载入定时器初值和默认的工作参数等,具体流程图如图6.2所示。
图6.2 系统初始化流程图
按键子程序:
1、延时子程序:
在本延时子程序当中每调用一次延时子程序延时时间是1毫秒。
2、按键响应子函数:
在本设计当中按键的一端接地,另一端接单片机的对应端口,所以当按键按下,既是将单片机对应端口电平拉低。
所以在编程的时候判断按键按下是低电平有效。
图6.3画出的是电机增速和减速的子程序框图。
图6.3 增速减速子程序
7、程序清单
#include
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
ucharcodeZF[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转编码表
ucharcodeFF[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转编码表
ucharcodeSMz[8]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//数码表
ucharcodeSMf[8]={0xff,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f};//数码表
sbitk1=P3^2;//定义K1为启动/停止按键
sbitk2=P3^3;//定义K2为加速按键
sbitk3=P3^4;//定义K3为减速按键
sbitk4=P3^5;//定义K4为正/反转按键
ucharj=0;
ucharf=0;
uinttime=6000;//time为每两拍之间的间隔时间
uinth,w,p,q;
uchartemp1;
/*1ms延时函数(12M晶振下)*/
voiddelay(ucharz)
{
uchars,v;
for(s=0;s for(v=0;v<125;v++);//一个for循环8个机器周期(125*8*1us=1ms) } /*显示函数*/ voiddisplay(uchara) { if(f%2) {P2=SMf[a]; } else P2=SMz[a]; } /*数值处理函数*/ voiddispose() { temp1=20833/time; h=temp1/10;//十位 w=temp1%10;//个位 p=(20833/(time/10))%10;//小数点后第一位小数 q=(20833/(time/100))%10;//小数点后第二位小数 } /*主函数*/ voidmain() { uchark; TMOD=0x01;//定义定时器0工作方式1 EA=1;//开总中断 ET0=1;//开定时器0中断 TH0=(65536-time)/256; TL0=(65536-time)%256;//装定时器初值 TR0=1;//开定时器0 while (1) { if(k1==0){delay(5);//延时消抖 if(k1==0){TR0=~TR0;k++;}//启动/停止 }while(! k1);//等待按键释放 if(k2==0){delay(5);//延时消抖 if(k2==0)time=time-1000;}//加速 while(! k2);//等待按键释放 if(k3==0){delay(5);//延时消抖 if(k3==0)time=time+1000;}//减速 while(! k3);//等待按键释放 if(k4==0){delay(5);//延时消抖 if(k4==0)f++;}//正/反转 while(! k4);//等待按键释放 dispose(); if(k%2) display(0);//停止时显示00.00 else display(w);//正常运转时调用显示函数 } } /*定时器0中断处理函数*/ voidtimer0()interrupt1 { if(f%2) {P1=FF[j++]; if(j==8)j=0;}//f为奇数时代表反转,则送反转编码到P1口 else {P1=ZF[j++]; if(j==8)j=0;}//否则送正转编码到P1口 TH0=(65536-time)/256; TL0=(65536-time)%256;//重新装初值 } 8、设计体会 经过为期一周的学习和努力,本次设计顺利完成,具体结论如下: 1、采用单片机作为控制核心,利用其强大的功能,把键盘电路和数码管显示电路,电机驱动电路,电机电流检测电路有机的结合起来,组成一个操作方便,交互性强的简单系统。 2、通过系统的设计实现了预期的设计目标,完成了全部的设计任务,具体功能如下: 完成了整个系统的硬件设计和软件编程,能通过按键控制步进电机的转速控制,能实现启动、正转、反转、加速、减速控制, 通过这次设计,我也对步进电机有了初步的了解,更重要的是对单片机的知识进行了巩固和复习,上学期虽然学习了单片机,并且取得了不错的成绩,但终究是理论上的学习,纸上谈兵,真正到了实践上才发现自己存在非常多的不足。 通过程序的编写和理解,我对C语言进行了复习和巩固,通过实际操作,对单片机的应用过程有了深刻了解。 总之,这次课程设计令我受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用