利用AD调节步进电机转速报告.docx
《利用AD调节步进电机转速报告.docx》由会员分享,可在线阅读,更多相关《利用AD调节步进电机转速报告.docx(25页珍藏版)》请在冰豆网上搜索。
利用AD调节步进电机转速报告
吉林化工学院课程设计说明书
四相步进电机控制
FourPhaseSteppingMotorControl
学生学号:
08530211
学生姓名:
闫昌鹏
专业班级:
电信0802
指导教师:
郝富春
起止日期:
2011.03.28~2011.04.15
吉林化工学院
JilinInstituteofChemicalTechnology
课程设计任务书
一、设计题目:
四相步进电机控制
二、设计目的
1.掌握步进电机控制方法;
2.掌握A/D转换原理;
3.掌握ADC0809、L298、TLP521-4等应用;
4.初步掌握用电路图软件绘制电路原理图方法。
三、设计任务及要求
(一)基本要求
1.熟悉A/D转换、数码管动态显示、步进电机控制电路
2.熟悉并说明所用芯片功能
3.熟悉构成电路的各元件功能
4.画出四相步进电机控制电路图
5.用硬件四相步进电机电路(用实验板焊接电路)
6.技术指标:
实现电机启、停、正转、反转、电压调速功能。
.
(二)发挥与创新
1.实时显示电机转速
2.显示电机转动圈数
四、设计时间及进度安排
设计时间共三周(11.03.28-11.04.15)具体安排如下表
周安排
设计内容
设计时间
第一周
查阅资料元件测试、电路设计
03.28-04.02
第二周
电路焊接、软件编程、系统设计
04.6-04.08
第三周
编写课程设计说明书答辩教师评定成绩
04.11-04.15
五、指导教师评语及学生成绩
指导教师评语:
年月日
年月日
成绩
指导教师(签字):
第1章课程设计的目的及意义
目的:
课程设计是学生理论联系实际的重要实践教学环节,是对学生进行的一次综合性专业设计训练。
通过课程设计使学生获得以下几方面能力,为毕业设计(论文)奠定基础。
1、进一步巩固和加深学生所学一门或几门相关专业课(或专业基础课)理论知识,培养学生设计、计算、绘图、计算机应用、文献查阅、报告撰写等基本技能;
2、培养学生实践动手能力及独立分析和解决工程实际问题的能力;
3、培养学生的团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风。
意义:
步进电机是一种将电脉冲转化为角位移的执行机构。
通过四相电机的学习,学生进一步理解了单片机的相关基本知识,对于实验室的各种元器件有了更深入的了解,具备了在日常生活中识别相关元器件的能力,
2、有利于逻辑思维的锻炼
在许多常规学科的日常教学中,我们不难发现这样一个现象,不少学生的思维常常处于混乱的状态。
写起作文来前言不搭后语,解数学题步骤混乱,这些都是缺乏思维训练的结果。
程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
3、有利于与其他学科的整合
在程序设计和电路板的焊接过程中我们合理的运用以前所学的数字电子技术和电路知识,发挥了各学科相关知识的整合优势。
4、有利于治学态度的培养。
在课程设计初学阶段,学生经常会犯粗心大意的错误,一块合格的电路板可能要通过几次
乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。
第2章系统总体方案
2.1摘要
随着仪器仪表系统的数字化、智能化、网络化,完成自动化仪表重模拟技术向数字技术的转变。
而数字技术才采用新技术、新工艺、由LSI和VLSI构成的新型数字仪表及高档智能仪器的大量问世,标志着电子仪器领域的一场革命,也开创了现代电子测量技术的先河。
新一代数字仪表正朝着标准模块化的方向发展,预计在不久的将来,许多数字仪表将由标准化、通用化、系列化的模块所构成,给电路设计和安装调试、维修带来极大方便。
本系统采用STC公司STC89C52RC芯片为核心进行设计,并配合L298D驱动芯片,合理利用了该芯片上丰富的资源,采用ADC08009做数据采集。
在数码管上対实时数据进行显示。
单片机与L298D用光耦连接,提高了抗干扰性,并且可以保护单片机。
有单片机ALE引脚为ADC0809提供时钟周期,用74LS74A对时钟4分频,使时钟满足ADC0809工作时钟。
本系统完成了题目的全部基本要求和发挥部分要求,在整体上保证了设计任务的超额完成。
2.2系统方案
2.2.1控制器的选择
方案一:
采用CPLD为控制核心,适合复杂逻辑控制和高速运算系统;
方案二:
使用51单片机为核心,适合系统控制。
综合分析,本系统采用STC89C52RC单片机,STC89C52RC单片机与51单片机兼容同时可以通过下载线下载程序,方便了程序的调试和运行。
2.2.2电子驱动电路的方案选择
方案一:
由分立元件制作驱动电路。
优点是可根据实际需要制作电路,成本低廉。
缺点是电路体积大,调试困难。
方案二:
使用L298D做驱动电路简单,性能稳定,调试方便。
根据电路要求分析,本系统采用L298D做驱动电路
2.2.3显示器的选择方案
方案一:
选用LED数码管显示电机转速的各种信息,LED显示信息量小、功耗大,同时还需要制作相应硬件驱动电路。
显示效果明显。
方案二:
选用字符点阵LCD模块显示小车的各种信息,LCD信息量大、功耗低,,它提供标准的并行或者串行接口,驱动简单,使用方便。
显示要求明显且显示的信息量不大,所以采用方案一。
2.2.4开发软件的选择
方案一:
汇编语言。
比较直接、简洁,不适合复杂运算。
不易读。
方案二:
C语言。
比较灵活,适合复杂判断和运算。
根据实际,选择用KEILC进行编程。
第3章元器件介绍
3.1STC89C52RC型单片机
图2-1
主要特性:
80C51核心处理器单元;
3V/5V工作电压,操作频率0~33MHz(STC89LE516AD最高可达90MHz);5V工作电压,操作频率0~40MHz;
大容量内部数据RAM:
1K字节RAM;
64/32/16/8kB片内Flash程序存储器,具有在应用可编程(IAP),在系统可编程(ISP),可实现远程软件升级,无需编程器;
支持12时钟(默认)或6时钟模式;
双DPTR数据指针;
SPI(串行外围接口)和增强型UART;
PCA(可编程计数器阵列),具有PWM的捕获/比较功能;
4个8位I/O口,含3个高电流P1口,可直接驱动LED;
3个16位定时器/计数器;
可编程看门狗定时器(WDT);
低EMI方式(ALE禁止);
兼容TTL和COMS逻辑电平;
掉电检测和低功耗模式等。
下面主要介绍STC89系列单片机有特色之处及需要注意的地方。
一、1kbit片内RAM(数据存储器)
普通8051系列单片及片内RAM只有128(8051)或256(8052)字节,低128字节(地址:
00H~7FH),可直接或间接寻址;高128字节(地址:
80H~FFH),只可间接寻址;
STC89系列单片机另外增加了768字节的片内扩展RAM,以解决众多技术人员在编程时的RAM资源严重缺乏的问题。
768字节的片内扩展RAM(地址:
000H~2FFH)与外部扩展RAM地址重叠,单片机可通过软件设置AUXR.1,决定是否使用片内扩展RAM,以防止可能的与外部扩展RAM的冲突,默认为使用片内扩展RAM。
片内扩展RAM的访问采用间接寻址,可通过①、MOVX?
A,@DPTR或MOVX?
@DPTR,A指令访问片内扩展RAM(00H~2FFH,共768字节);②、MOVX?
A,@R指令访问片内扩展RAM(00H~FFH,共256字节)。
当DPTR≥300H时,系统访问外部扩展RAM。
注意:
在使用第二种指令时,特别要注意是使用MOV还是MOVX,MOV访问的是片内RAM,MOVX访问的是片内扩展RAM,刚刚接触此类单片机的技术人员最容易在这里犯错误。
二、64/32/16/8K片内Flash(程序存储器)与ISP功能
STC89系列单片机按芯片型号分别有64/32/16/8K片内Flash,分为2个Flash存储块:
Block0和Block1。
2个Flash存储块在物理上Block0在前,Block1在后。
通过REMAP功能可以将Flash块重定位。
下图显示的是STC89C58的程序存储器结构
3.2步进电机
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。
步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。
其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。
例如:
三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。
两个脉冲的间隔越短,步进电机就转得越快。
调整单片机发出的脉冲频率,就可以对步进电机进行调速。
3.3L298N
L298是SGS公司的产品,比较常见的是15脚封装的L298N,内部同样包含4通道逻辑驱动电路。
可以方便的驱动两个直流电机,或一个两相步进电机。
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。
(1)L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。
4脚VS接电源电压,VS电压范围VIH为+2.5~46V。
输出电流可达2.5A,可驱动电感性负载。
1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。
L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。
5,7,10,12脚接输入控制电平,控制电机的正反转。
EA,EB接控制使能端,控制电机的停转。
表1是L298N功能逻辑图。
In3,In4的逻辑图与表1相同。
由表1可知EA为低电平时,输入电平对电机控制起作用,当EA为高电平,输入电平为一高一低,电机正或反转。
同为低电平电机停止,同为高电平电机刹停。
(1)虚线框图1控制电机正反转,U1A,U2A是比较器,VI来自炉体压强传感器的电压。
当VI>VRBF1时,U1A输出高电平,U2A输出高电平经反相器变为低电平,电机正转。
同理VI<VRBF1时,电机反转。
电机正反转可控制抽气机抽出气体的流量,从而改变炉体压强。
(2)U3,U4两个比较器组成双限比较器,当VB<VI<VA时输出低电平,当VI>VA,VI<VB时输出高电平。
VA,VB是由炉体压强转感器转换电压的上下限,即反应炉体压强控制范围。
根据工艺要求,我们可自行规定VA,VB的值,只要炉体压强在VA,VB所确定范围之间电机停转(注意VB<VRBF1<VA,如果不在这个范围内,系统不稳定)。
(3)U5A是一个比较器,Rs1是采样电阻,VRBF2是电机过流电压。
Rs1上电压大于VREF2,电机过流,U5A输出低电平。
由上面可知,框图1控制电机正反转,框图2控制炉体压强的纹波大小。
当炉体压强太小或太大时,电动机转到两端固定位置停止,根据直流电机稳态运行方程[3]电机转数N为0,电机的电流急剧增加,时间过长将会使电机烧坏。
但电机起动时,电机中线圈中的电流也急剧变大,因此我们必须把这两种状态分开。
长延时电路可把这两种状态区分出来。
长延时电路工作原理:
当Rs1过流U5A产生一个负脉冲经过微分后,脉冲触发555的2脚,电路置位,3脚输出高电平,由于放电端7脚开路,C1,R5及U6A组成积分器开始积分,电容C1上的充电电压线性上升,延时运放积分常数C1。
当C1上充电电压,即6脚电压超过2/3VCC,555电路复位,输出低电平。
电机启动时间一般小于0.8s,C1充电时间一般为0.8~1s。
U5A输出电平与555的3脚输出电平经U7相或,如果U5A输出低电平大于C1充电时间,U7在C1充电后输出低电平由与门U8输入到L298N的6脚ENA端使电机停止。
如果U5A的输出电平小于C1充电时间,6脚不动作电机的正常启动。
长延时电路吸收电机启动过流电压波形,从而使电机正常启动。
3.4ADC0809
ADC0809是M美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D芯片。
3.4.1主要特性
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
3.4.2外部特性
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
GND:
地。
图3-2ADC0809管脚图
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
3.4.3传送方式
(1)定时传送方式
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
第4章功能概述及方案设计
4.1功能概述
我们设计的“步进电机控制“这一套系统,主要利用ADC0890实现数据采集,数据为0---5V电压,转换为0—255的数字量,数码管对数字量实时显示。
单片机读取的数字量改变步进电机的转速。
4.2具体方案设计
我们将系统分为数码管显示模块、AD数据采集模块、复位电路、步进电机模块。
4.2.1数码管显示模块
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,本设计主要采用74LS247芯片进行译码显示,输入4位2进制码,可输出7位2进制码,数码管采用共阳极,由外部电路驱动数码管,因为单片机不一定能提供足够的功率,采用三极管9012做位选。
当基极为低电平时,选中所控制的数码管,限流电阻选2K。
4.2.2AD转换模块
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
4.2.3步进电机模块
光耦合器的主要优点是:
信号单向传输,输入端与输出端完全实现了电气隔离隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。
光耦合器是70年代发展起来产新型器件,现已广泛用于电气绝缘、电平转换、级间耦合、驱动电路、开关电路、斩波器、多谐振荡器、信号隔离、级间隔离、脉冲放大电路、数字仪表、远距离信号传输、脉冲放大、固态继电器(SSR)、仪器仪表、通信设备及微机接口中
4.2.3复位电路
复位电路主要用于复位,复位后单片机内回到初始状态。
第5章程序流程及程序
5.1程序流程图
5.2程序
程序
5.2实物图
图5.2四相电机实物图
5.3程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uinttemp,sum,x;
longintcount;
ucharqian,bai,shi,ge,a=1,b=1,c=1,cc=0;
uchartable1[]={0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9};//个位段码表
uchartable2[]={0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9};//十位段码表
uchartable3[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};//百位段码表
uchartable4[]={0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79};//千位段码表
sbitP2_7=P2^7;
sbitP2_6=P2^6;//正转
sbitP2_5=P2^5;//反转
sbitP2_4=P2^4;//停转
sbitWr=P3^6;
sbitRd=P3^7;
//**************************延时函数********************************//
voiddelay_ms(uchari)//i=10,大约延时10ms
{
ucharx,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
//***********************步进电机控制******************************//
voidzheng()//正转
{
if(P2_6==0)
{
delay_ms(100);
if(P2_6==0)
{
while(a)
{
x=58-sum/5;cc=1;
if(sum==0)P2=0x7f;
else
{
P2=0x78;delay_ms(x);
P2=0x74;delay_ms(x);
P2=0x72;delay_ms(x);
P2=0x71;delay_ms(x);
if(P2_4==0||P2_5==0){a=0;b=c=1;};
}
}
}
}
}
voidfan()//反转
{
if(P2_5==0)
{
delay_ms(100);
if(P2_5==0)
{
while(b)
{x=58-sum/5;cc=1;
if(sum==0)P2=0x7f;
else
{
P2=0x71;delayms(x);
P2=0x72;delayms(x);
P2=0x74;delayms(x);
P2=0x78;delayms(x);
if(P2_4==0||P2_6==0){b=0;a=c=1;};
}
}
}
}
}
voidting()//停止
{
if(P2_4==0)
{
delayms(100);//延时去抖
if(P2_4==0)
{
while(c)
{
P2=0x7f;cc=0;
if(P2_6==0||P2_5==0){c=0;b=a=1;};
}
}
}
}
//*************************显示函数***********************************//
voidtimer1()interrupt3//定时器1中断
{
TH1=(65536-30000)/256;
TL1=(65536-30000)%256;
P1=table1[ge];delay_ms(7);
P1=table2[shi];delay_ms(7);
P1=table3[bai];delayms(7);
P1=table4[qian];
}
//************************定时器初始化*********************************//
voidtime_init()
{
TMOD=0x10;
TH0=(65536-50000)/256;
TL0=(65536-40000)%256;
TH1=(65536-40000)/256;
TL1=(65536-40000)%256;
IE=0x8a;TR0=1;TR1=1;
}
//**************************数据采集*********************************//
voidtimer0()interrupt1/