《毕业设计(论文)基于单片机的DC5V4相步进电机的变频调速的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的DC5V4相步进电机的变频调速的设计.doc(25页珍藏版)》请在三一办公上搜索。
1、题目:步进电机正反转及调速设计渭南师范学院 物理与电气工程系2008级电气(1)班摘 要: 利用单片机组成的变频调速控制器可以实现从低频(12 Hz) 起动到50 Hz ,可以消除以往工频50 Hz 直接起动对电机的冲击, 延长电机的使用寿命,同时由于变频器的输出电压可以自适应调节, 使负载电机可以工作在额定电压以下,不仅节能且可延长电机的使用寿命。本设计利用Atmel公司的AT89S52单片机对步进电机的变频调速进行开发,设计了实现所需功能的硬件电路,应用C语言进行软件编程,并用实验板进行演示、验证。关键词:单片机、AT89S52、变频调速、C语言编程一、绪论1.1 课题背景随着电力电子技术
2、的日益发展和PWM控制技术的成熟, 利用电机的转速和输入电源的频率是线性关系这一原理, 将50 Hz 的交流电通过整流和逆变转换为频率可调的电源, 供给异步电动机, 实现调速的目的。不仅在方便经济的基础上有一定的优势,同时21世纪又是一个低碳环保型社会,对变频调速的研发具有很高的实际价值。1.2 设计任务系统控制原理图AT89S52电源电路时钟电路键盘电路LCD显示电路步进电机驱动电路霍尔检测电路1.3 课题意义 在相应绿色节能经济的同时,顺应21世纪低碳经济的发展模式,本设计采用经济、小型、环保、低功耗的单片机作为核心控制模块,模拟变频器工作对电机实行“变频调速”控制。采用变频的目的在,于当
3、前变频调速技术已经在经济社会,绿色环保社会,低碳节约型社会发挥着重要的最用。目前变频调速器已全部采用了数字化技术,并且日趋小型化、高可靠性和高精度。从应用角度看,其不仅具有显著的节电性能,而且还具有如下的优良性能:(1) 高速响应、低噪声、大范围、高精度平滑无级调速; (2) 体积小、重量轻、可挂墙安装,占地面积小; (3) 保护功能完善,能自诊断显示故障所在,维护简便; (4) 操作方便、简单; (5) 内设功能多,可满足不同工艺要求; (6) 具有通用的外部接口端子,可同计算机、PLC联机,便于实现自动控制; (7) 软起动、软停机,具有电流限定和转差补偿控制; (8) 电动机直接在线起动
4、,起动转矩大,起动电流小,减小对电网和设备的冲击,并具有转矩提升功能,节省软起动装置; (9) 功率因数高,节省电容补偿装置;(10) 与鼠笼式;转子电动机结合,使调速系统维护更加简单经济。 此次设计在于全方位的模仿变频器,实现对电机的变频调速控制。同时,对周边辅助模块,如:LCD显示模块、磁敏式传感器工作方式以及整个系统的运行和控制衔接方式都有了更深层次的探究。是对现实工作场景的一个缩写,为变频调速技术提前打下了一定的基础。1.4 本章小节本章主要介绍了课题背景、设计任务和课题意义,对单片机的优点及结构作了简要叙述,也对本系统的应用及概况进行了说明。二、系统功能及操作2.1 系统功能的确定2
5、.1.1 基本功能 能实现对四相步进电机的简单控制,如:电机正转,电机反转,电机加速以及电机减速等功能,同时对电机实时速度有一个直观的显示和说明。2.1.2 扩展功能 本设计在满足其预定工作状态下,对测速模块和显示模块有了更进一步的研究和说明。它除了能正常地实现电机的常规动作之外,而且能实时显示电机的工作状态及转速。2.2 系统操作说明(1)接通电源,检查装置周边设备是否具有良好的工作环境(2)打开电脑及做好硬件的准备和软件的烧写检查工作(3)打开Kiel编程软件对程序进行正确编译,并规范应用软件正确烧如芯片内。(4)连接好外围硬件设备,确保无漏接、错接、乱接、无接触松动等现象(5)按照硬件电
6、路按钮标示进行对电机的操作(6)实验完毕后,关断电源,合理有序的摆放好物料2.3 本章小节 本章主要对整个系统进行了一个全方位的概括和简要介绍,同时,对安全规范操作设备也做了一定详细的说明。为对后续章节更好的理解有了一个实质性的认识。三、系统硬件设计实验板介绍3.1 芯片的选择本设计选用AT89S52芯片,它是一种低功耗、高性能CMOS 8位微控制器,具有8K(0000H1FFFH)在线系统可编程Flash存储器。片上Flash允许程序存储器在线编程,也适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供灵活、高效的解决方案
7、。3.2 实验板电路原理图实验板电路结构框图如图3-2所示,原理电路图(只有本设计所需部分)见附录A。图3-2 实验板结构框图3.3 功能电路分析3.3.1 时钟电路实验板的时钟振荡源电路如图3-3所示。其中JT 为11.0592MHz 的晶振,改变两电容CB的值即可对此晶振频率进行调节。该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。图 3-3 时钟电路3.3.2 电源模块 电源模块为系统板上其它模块提供5V 电源,系统板为从USB 接口获取5V 电源,只要用相应配套的USB线从电脑主机获取5V直流电源。3.3.3 复位电路如图
8、3-4所示为实验板的复位电路,当RESET 信号为低电平时,实验板为工作状态,当RESET信号为高电平时,实验板为复位或下载程序状态。由于AT89S52具有ISP 的功能,即可以通过并口线直接将程序下载到单片机内,因此, AT89S52 具有两种状态,下载程序状态和运行状态。该复位电路能实现上电自动复位,也能手动复位,一般复位时RESET应保持20毫秒以上高电平,此复位时间由接地电容控制。图 3-4 复位电路3.3.4 键盘电路 设计中编者采用自做独立键盘实现了对电机的远程控制。AT08C51内设有4X4矩阵键盘和独立键盘模块,本设计公用到8个独立键盘分别控制电机的7种工作方式以及芯片的复位功
9、能。实现了对电机正转、反转、刹停、停机、加速、减速和清零的有效控制,操作便宜。7位控制独立键盘图示如下:图3-4 键盘电路3.3.5 LCD显示电路LCD1602显示模块可以与本设计单片机AT89S52单片机直接接口,LCD1602的8位双向数据线D0D7连接P0口的P0.0P0.7,LCD1602使能信号E连接P2口线的P2.2。LCD1602读/写选择信号R/W连接P2口线的P2.1,当P2.1=0时为写数据信号,当P2.1=1时为读数据信号。LCD1602数据/命令选择信号RS连接P2口线的P2口线的P2.0,当P2.0=0时为命令信号;当P2.0=1时为数据信号。需要注意的是液晶显示模
10、块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。 LCD1602的VCC引脚接+5电源,引脚GND接地。LCD1602显示模块与单片机AT89S52的接口电路如下所示:图3-5 LCD 显示电路3.3.6 步进电机驱动电路本设计所使用的电机驱动模块为SGS公司的恒压恒L298N,它属于恒压恒流桥式2A驱动芯片。L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N
11、芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。本设计是利用来L298N芯片驱动四相五线式的步进电机,四线分别连接驱动芯片的4个输出端口,另外2线实质可以看为1线式接+5V电源即可。相关驱动芯片的接口图及连接图如下图所示:图3-6 步进电机驱动电路3.3.7 霍尔检测电路 霍尔传感器的外形图和与原理图,如下图所示。磁钢用来提供霍尔能感应的磁场,当霍尔元件以切割磁力线的方式相对磁钢运动时,在霍尔输出端口就会有电压输出,所以霍尔传感器和磁钢需要配对使用。本设计既是利用这一原理来进
12、行对步进电机的速度测试的。 。图3-7 霍尔检测模块3.4 本章小节本章主要对芯片及周边辅助功能芯片进行了一个系统的介绍,以及它们在设计电路中所起到的作用进行了一个很好的阐释,通过原理图直观的说明了其在整个设计中所起的作用。四、系统软件设计4.1 主程序设计 整个程序进行模块化设计,主程序只需调用相应的程序即可。主程序流程如下图所示:主程序扫描函数显示函数停机系统初始函数图4-1 总设计流程图4.2 系统中涉及的存储器的作用4.2.1 TMR0相关的存储器的作用与TMR0相关的存储器有3个它们的作用如下所示:1、 定时器/计数器0TMR0用于对光电传感器送入的脉冲进行计数2、 选项寄存器OPT
13、ION_REG用于控制定时器是对下降沿信号作为T0CKI的外部时钟源3、 中断寄存器INTCON用与控制定时器是否溢出,是否溢出中断4、 RA方向控制寄存器TRISA4作为定时器的外部时钟源的输入引脚4.2.2 芯片输出端口功能 本设计中利用了单片机的P0、P1、P2、P3端口。其中,P0端口作用于LCD常规引脚D端口,P1端口主要用于外接独立键盘的引脚输入,P2端口总共引用了单片机的三个控制引脚P2.0、P2.1、P2.2分别对LCD的RS、RW、E控制线端口相连,P3端口P3.3主要实现外部中断功能,实时反映霍尔传感器的输入信号,起到一个脉冲检测输入功能。同时,另外四个引脚P3.4到P3.
14、7分别引接与步进电机驱动模块的INT脚,实现对电机的控制。4.3 子程序设计模块 以下分别是各子程序模块的流程图: 开始传感器检测到信号?功能设置命令定时器,计数器模块运行LCD,定时器模块无任何反应LCD实现计数以及实时显示电机速度等参数 是 否 图4-2 扫描模块流程图 传感器主要以电机是否受感应以脉冲的方式对电机状态进行实时的检测,同时将信号及时地传给单片机核心部分进行处理。 开始接收到由单片机发来的传感器信号? 是 否仍保持原有显示没有实时显示显示电机转数,以及时间、频率 图4-3 LCD显示模块LCD显示模块在正常烧写成功,电机尚未启动的情况下,已实现了部分功能,即显示了字符型指示语
15、言。当单片机接收到由霍尔传感器传来的脉冲信号后,单片机指示计时模块进行对电机实时速度及工作状态的一个很好显示。4.4、本章小结本章着重介绍了该设计的总流程以及相关子程序的工作流程,为后续设计告成的硬件连接奠定一定的基础。五、系统调试 该程序的功能模块先后实现的顺序为:主程序初始化函数模块扫描函数模块显示函数模块。每完成一个模块就与前一个已完成的模块结合起来调试,直至实现相应功能,再编写下一模块程序。在与主程序衔接时,主程序和各子程序也需作相应的改动,以便与子程序更好的衔接,特别是显示子程序需作较大改动,以便对不同内容进行显示。 程序用Keil uVision2进行程序创建、录入、编辑,用Eas
16、y 51Pro软件进行程序的烧写。详细烧写过程本设计将不做重要介绍,重点分析介绍硬件电路连接图以及调试运行等相关动作。5.1 硬件电路的安装与连接1、 首先检查自己所需实验器材是否齐全。 电路板两块,电焊笔一支,杜邦线数根,5V直流电源一部,4相步进电机一个,霍尔传感器一个,独立按键7个,AT89S51单片机主芯片一块儿,LCD1602液晶显示器一块,L298N电机驱动一个,以及若干引线等备用辅助工具。2、 连接硬件 参考硬件原理图,在没有上电的情况下对硬件进行合理有序安装。安装过程中务必保证线无断、松、漏、交叉等情况,确保线的有序合理接引。5.2 硬件的调试及操作方法介绍5.2 1、电机正转
17、 启动电源检查AT89S51电路板是否上电上电后,按下按键K1即正转按钮电机正转 按下K4停机按钮 按下K7按钮,LCD清零关断电源 5.2.2、电机正转情况下加、减速运行 启动电源检查AT89S51电路板是否上电上电后,按下按键K1即正转按钮电机正转 按下K5加速按钮电机加速运行继续另一次按下,电机继续加速按下K6按钮电机减速按下K4停机按钮 按下K7按钮,LCD清零关断电源5.2.3、电机刹停启动电源检查AT89S51电路板是否上电上电后,按下按键K1即正转按钮电机正转 按下K3按钮电机刹停需要说明的是电机的反转与正转的原理可谓是大同小异,在此仅简单介绍正转情况下电机的控制方式。另外,在做
18、实验时请时刻注意观察LCD的显示。通过调节芯片板上的可调电阻,可对显示屏的明暗程度进行调换。在做实验的过程中请务必在所有硬件设备的额定工作电压等其他安全规定要求下操作。系统接线电路是最为重要的部分,请务必在确保电路接法无误的情况下在通电进行试验。同时,遇到一些常见性的问题可以检查以下部分:1、LCD不能实时显示或者不能显示解决办法:(1)、检查LCD是否工作正常,最好有备用 (2)、霍尔传感器部分是否在正常有效的范围内检测电机转速等参数,或者霍尔传感器是否接好 (3)、LCD部分电压不足,导致显示不清晰,此时可以调解可调电阻 (4)、有效电源输入是否正常稳定等2、霍尔传感器不能有效测速解决办法
19、:(1)、安装在电机端的磁性材料是否磁性过大或者过小,可以更换检查 (2)、霍尔传感器有效接入端是否出现接触不良、断线、松接(3)、霍尔传感器距离电机太远,大于其有效测速距离等试验中还会遇到许多诸如此类的问题,以上问题较为普遍。至此本设计安装调试部分就到此为止,以上即为一般调试的常见方法。 结束语经过两个多月的工作,基于单片机的DC5V4相步进电机的变频调速的设计已经完成。经试验验证,满足设计要求。本次设计主要涉及了单片机原理及接口技术的相关知识和C语言编程的诸多要领。设计中涉及的许多问题,更是对以前所学的知识的回顾及在过去的三年中学到知识的系统总结,这次设计对我们将来的工作有很大的帮助。在此
20、次设计中,我积极查阅资料,细心钻研各个细节,完成了对四相步进电机的开发与调试,也让我们明白了在设计中考虑问题应该全面。在设计中既锻炼了我的动手能力,又学会查阅资料,提炼需要的信息。 由于本人水平有限,文中难免出现错误与不足之处,恳请各位老师批评指正。附录A:实验板原理图附录B:程序清单#include#define uchar unsigned char#define uint unsigned int/LCD口线sbit E=P22;sbit RW=P21;sbit RS=P20;unsigned char dpbl,dpbl_1,gw,sw,bw,sw1,gw1,t01s,t11s,js1
21、s,js10s;unsigned char bdata myflag,b,rate,s;unsigned int bzw=0,bzw1=0,bzw2=0,bzw3=0,bzw4=0,bzw5=0,bzw6=0,bzw7=0,bzw_jia=0,bzw_jian=0,bzw11=0,bzw22=0;uchar code FFW8=0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f;uchar code REV8=0x9f,0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f;sbit K1=P10; /正转sbit K2=P11; /反转sbit K3
22、=P12; /刹车sbit K4=P13; /停止sbit K5=P14; /加速sbit K6=P15; /减速sbit K7=P16; /清零sbit L1=P34; /电机Asbit L2=P35; /电机Bsbit L3=P36; /电机Csbit L4=P37; /电机Dvoid time0(void);void Delay1(unsigned int t);void SendCommandByte(unsigned char ch);void SendDataByte(unsigned char ch);void dispdpbl_1(void);void dispdpbl_2(v
23、oid);void dispdpbl_3(void);void dispdpbl_4(void);void dispdpbl_5(void);void InitLcd(void);void Delay(unsigned int t);void delay() uchar k; uint s; k = rate; do for(s = 10 ; s 0; s-) ; while(-k); /调节转向与速度的子程序/void motor_ffw() uchar i; for (i=0; i8; i+) /一个周期转30度 P3 = FFWi; /取数据 delay(); /调节转速 void mo
24、tor_rev() uchar i; for (i=0; i999) dpbl_1=000; if (K1=0) bzw2=1; /启动计时器/电机正转/ bzw3=1; bzw4=0; bzw5=0; bzw6=0; bzw7=0; if (bzw3=1) motor_turn_z(); /电机反转/ if (K2=0) bzw4=1; bzw3=0; bzw5=0; bzw6=0; bzw7=0; if(bzw4=1) motor_turn_f(); /电机刹停/ if (K3=0) bzw4=0; bzw3=0; bzw5=1; bzw6=0; bzw7=0; if (bzw5=1) m
25、otor_turn_st(); /电机停止/if (K4=0) bzw4=0; bzw3=0; bzw5=0; bzw6=1; bzw7=0; if (bzw6=1) motor_turn_t(); /清零/if(K7=0) bzw4=0; bzw3=0; bzw5=0; bzw6=0; bzw7=1; if(bzw7=1) motor_turn_ql(); /加速/ if(K5=0) bzw_jia=1; bzw22=0; if(bzw_jia=1&bzw11!=1) b-; bzw_jia=0; if(b=16) bzw11=1; /减速/ if(K6=0) bzw_jian=1; bzw
26、11=0; if(bzw_jian=1&bzw22!=1) b+; bzw_jian=0; if(b=99) bzw22=1; js10s=(dpbl%100)/10)|0x30; js1s=(dpbl%10)|0x30; sw1=(100-b)%100)/10)|0x30; gw1=(100-b)%10)|0x30; dispdpbl_1(); bw=(dpbl_1/100)|0x30; sw=(dpbl_1%100)/10)|0x30; gw=(dpbl_1%10)|0x30; dispdpbl_2(); /外部中断1服务子程序(用来对电机的转速计数用)/void intersvrl ()
27、 interrupt 3 bzw=1; /定时器T0服务子程序(用来作为时间的标准量)/void time0() interrupt 1 TH0=0xee; TL0=0x00; t01s-; if(bzw2=1&t01s=0x00) t01s=0xc8; dpbl+; if(dpbl60) dpbl=60; bzw1=1; /定时器T1服务子程序(用来显示电机的圈数)/void Delay1(unsigned int t) / delay 40us for(;t!=0;t-) ;/=void SendCommandByte(unsigned char ch) RS=0; RW=0; P0=ch
28、; E=1; Delay1(1); E=0; Delay1(100); /delay 40us/-void SendDataByte(unsigned char ch) RS=1; RW=0; P0=ch; E=1; Delay1(1); E=0; Delay1(100); /delay 40us/-void InitLcd(void) SendCommandByte(0x30); SendCommandByte(0x30); SendCommandByte(0x30); SendCommandByte(0x38); /设置工作方式 SendCommandByte(0x0c); /显示状态设置
29、 SendCommandByte(0x01); /清屏 SendCommandByte(0x06); /输入方式设置void dispdpbl_1(void) SendCommandByte(0xc6); SendDataByte(js10s); SendDataByte(js1s); SendDataByte(s); SendDataByte( ); SendDataByte(sw1); SendDataByte(gw1); SendDataByte(h); SendDataByte(z); void dispdpbl_2(void) SendCommandByte(0x86); SendD
30、ataByte(bw); SendDataByte(sw); SendDataByte(gw); SendDataByte(r); SendDataByte(-); SendDateByte(-); if(bzw3=1&bzw4=0&bzw5=0&bzw6=0) SendDateByte(z); if(bzw4=1&bzw5=0&bzw6=0) SendDataByte(f); if(bzw5=1&bzw4=0&bzw6=0) SendDataByte(s); if(bzw6=1&bzw5=0&bzw4=0) SendDataByte(t); 参考文献1 胡汉才.单片机原理及接口技术M.北京:
31、清华大学出版社,1996.2 李庭贵.单片机应用技术及项目化训练.成都.西南交通大学出版社2009.3 胡健.单片机原理及接口技术M.北京:机械工业出版社,2004.4 胡健.单片机实用教程M.北京:兵器工业出版社,2001.5 周行慈.单片机应用程序设计基础M.北京:北京航空航天大学出版社,1991.6 李广弟.单片机基础M.修订本,北京:北京航空航天大学出版社,2001.7 李朝青.单片机原理及接口技术M,简明修订版.北京:北京航空航天大学出版社,1999.8 李叶紫.MCS-51单片机应用教程M.北京:清华大学出版社,2004.9 朱定华.单片机原理及接口技术M.北京:电子工业出版社,2001.10 AT89S52芯片资料(译文),Atmel公司.11 实验板资料,.