1、基于89C52步进电机调速、细分、测速系统 课程设计报告单 位: 小组成员: PengSir 专 业: 班 级: 指导老师: 成 绩: 目 录摘要1一 系统简介1 1.1步进电机工作原理简介1 1.1.1步进电机基本参数2 1.1.2步进电机细分简介3二 系统方案4 2.1控制器的选择4 2.2电子驱动电路与细分的方案选择4 2.3显示器的选择方案5 2.4转速信号采集方案5 2.5开发软件的选择5三 模块介绍5 3.1 STC89C52RC型单片机最小系统5 3.2 TB6560AHQ驱动电路6 3.3 电源模块7 3.4 ADC0804模块8 3.5光电开关模块10四 程序设计及流程10
2、4.1 系统电路示意图10 4.2 程序设计11五 实物图12六 心得体会12参考文献14附录15摘要:在电气时代的今天,电动机在工农业生产与人们日常生活中都起着十分重要的作用。步进电机作为最常见的一种电机,作为一种数字伺服执行元件,步进电机具有结构简单、运行可靠、控制方便、控制性能好等优点,广泛应用在数控机床、机器人、自动化仪表等领域。为了实现步进电机的简易运动控制,一般以单片机作为控制系统的微处理器,通过步进电机专用驱动芯片实现步进电机的速度和位置定位控制。本系统采用STC公司STC89C52RC芯片为核心进行设计,并配合THB6016H驱动芯片,合理利用了该芯片上丰富的资源,采用ADC0
3、804做数据采集,作为输入指定转速。在数码管上対实时数据进行显示。单片机与74LS14用光耦连接,提高了抗干扰性,并且可以保护单片机。本系统完成了题目的全部基本要求和发挥部分要求,在整体上保证了设计任务的超额完成。关键词:步进电机 PWM 光电开关 STC89C52RC THB6016H ADC0804一 系统简介1.1 步进电机工作原理简介 步进电机属于实用的典型的机电一体化组件。它是一种将电脉冲信号转化为角位移或直线位移的执行机构。又可称脉冲电机或阶跃电机,国外常称为Step motor、Stepping motor、Stepper motor等等。当不见电机驱动器接收到一个脉冲信号,它就
4、驱动步进电机按照设定的方向转动一个固定的角度(称为“步据角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到确定的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有累积误差的特点,广泛运用于各种开环控制。步进电机问世以后,很快确定了自己的应用领域,应用发展己有约30年的历史。步进电机的种类根据自身的结构不同,可分为三大类:反应式(t,也称磁阻式)、永磁式(PM)和混合式(HB)。 永磁式步进电机一般为两项,转矩和体积较小,步进角一般为7.5度或15度; 反应式步进电机一般为三相,
5、可以实现大转矩输出,步进角一般为1.5度,但是噪声和震动较大。反应式步进电机的转子磁路由软磁材料制成,定子上面有许多相磁力绕组,利用磁导的变化产生转矩。 混合式步进电机兼有反应式和永磁式的双重优点,其自身阻尼作用较好,运行平稳,噪音低、低频振动小,目前混合式步进电机是应用最广泛的电机之一。步进电机的优缺点如下: (1)在不失步的前提下步进电机的角位移与输入脉冲数严格的成正比,因此不存在累计误差,具有良好的跟随性。 (2)步进电机的动态响应快、易于启停、正反转及变速。 (3)可用数字信号直接进行开环控制,容易构成简单廉价但可靠的数字控制系统。同时,在要求高时它也可以与角度反馈环节组成高性能的闭环
6、数控系统。 (4)停止时具有自锁能力。 (5)速度可在相当宽范围内平滑调节。 (6)无刷,电机本体部件少,可靠性高。 (7)一般可以不用减速器而直接驱动负载。 (8)带惯性负载的能力较差。 (9)由于步进电机存在振荡和失步现象,因此必须对控制系统和机械负载采取相应的措施。 (10)步进电机只能通过脉冲电源供电才能运行,它不能直接使用普通的交直流电源驱动。 1.1.1 步进电机基本参数 (1)电机固有步进角 它表示控制系统每发出一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0.9/1.8(表示半步工作时为0.9度,整步工作时为1.8度),
7、这个步踞角可以称为“电机固有步踞角”,它不一定是电机实际工作时的真正步进角,真正的步进角和驱动器有关。 (2)步进电机的相数 它是指电机内部的线圈组数,目前常用的有二相、三相、四项、五相步进电机。电机相数不同,其步进角也不同,一般二相步进电机步进角为0.9/1.8、三相为0.75/1.5、无相为0.36/0.72.在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步进角的要求。如果使用细分驱动器,则“相数”将变得没有意义,用户只需要在驱动器上改变细分数,就可以改变步进角。 (3)保持转矩 它是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最为重要的参数之一,通常步进电
8、机在低速时的力矩接近保持力矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持力矩就成为衡量步进电机最重要的参数之一。1.2 步进电机细分简介 随着步进电机在数控机械、自动化领域中的应用越来越广泛,对小步距、低振动和低噪声的步进电机要求愈来愈迫切。步距角公式式中一转子齿数; 一运行拍数,通常等于定子相数或相数的整数倍,即; 一定子相数; 一电机驱动方式。由上式看出,步距角的大小由电机自身参数m、,和电机驱动方式k决定,受电机制造工艺的限制,靠增加m和,来减小步距角受到一定限制,此时必须通过增大k来获得更小的步距角。当步进电机工作于整步工作方式时,k=l;当步
9、进电机工作于半步工作方式时,k=2;为了获得更大的k,就必须采用细分控制方法。细分驱动技术可以大幅度减小步进电机的步距角,并且步距角越小,进入稳定区域越容易,这样就增加了电机运行的平稳性,还可以减弱甚至消除电机的低频振荡和噪声,提高起动频率和高速下的转矩,同时也可以提高电机的定位分辨率和精度。二 系统方案2.1控制器的选择方案一:采用CPLD为控制核心,适合复杂逻辑控制和高速运算系统;方案二:使用51单片机为核心,适合系统控制。综合分析,本系统采用STC89C52RC单片机,STC89C52RC单片机与51单片机兼容同时可以通过下载线下载程序,方便了程序的调试和运行。2.2电子驱动电路与细分的
10、方案选择方案一:由分立元件制作TA8435h驱动电路。优点是成本低廉、易于控制。缺点是电路体积大,TA8435H在实体店很难购买,再者网购的TA8435H大多数是拆机件很难保证芯片的可用性和可靠性。方案二:使用THB6016H做驱动电路简单,性能稳定,调试方便,而且芯片很容易购买,可靠性强。根据电路要求分析,本系统采用THB6016H做驱动电路2.3显示器的选择方案方案一:选用LED数码管显示电机转速的各种信息,LED显示信息量小、功耗大,同时还需要制作相应硬件驱动电路。显示效果明显。方案二:选用字符点阵LCD模块显示小车的各种信息,LCD信息量大、功耗低,它提供标准的并行或者串行接口,驱动简
11、单,使用方便。显示要求明显且显示的信息量不大,所以采用方案一。2.4转速信号采集方案方案一:使用光译码盘。优点;测量比较精确。缺点:调试很负载,程序量大。方案二:采用光电开关。有点:调试简单,只需要MCU在单位时间内计算输入MCU的脉冲数,就能通过简便的程序计算出转速。缺点:误差较大,码盘的缺口很难控制宽度。综上,采用光电开关进行转速信号采集较为合理。2.2.4开发软件的选择方案一:汇编语言。比较直接、简洁,不适合复杂运算。不易读。方案二:C语言。比较灵活,适合复杂判断和运算。根据实际,选择用KEIL C 进行编程。三 模块介绍3.1 STC89C52RC型单片机最小系统单片机主要擅长系统控制
12、,而不适合做复杂的数据处理,在设计单片机最小系统时我们选用STC89C52 8位DIP-40封装的单片机作为MCU,本系统的单片机最小系统由时钟电路、复位电路、电源电路、外围总线接口等部分组成。图1为单片机最小系统结构框图。 图 13.2 TB6560AHQ驱动电路 THB6016H两相混合式步进电机驱动芯片,内置双全桥MOSFET驱动、温度保护及过流保护,采用HZIP25封装(尺寸:36.517mm),耐压40V、电流3.5A(峰值)、16细分,外围电路简单。适配57mm机座及其以下所有两相混合式步进电机。 TB6560AHQ驱动芯片的优势:(1)电机振动小噪音低:因为芯片自带2、8、16细
13、分可选,足够满足每分钟从几到近千转的应用要求。(2)嵌入式驱动器发热少:芯片自带的散热面积足以单独支持小电流驱动的散热要求。(3)支持各种步进电机选型:客户可选择力矩稍大的混合式或永磁式步进电机,使电机工作在允许最大转矩的百分之30至50之间,电机成本几乎不变;芯片提供多档电流设置和电流衰减模式,支持相同动力指标下各种不同参数的步进电机。总之,因TB6560AHQ芯片集成度很高,外围电路极其简单,可靠性极高,支持57和部分86步进电机从每分钟几十到近千转的宽调速应用,可使数控设备研发成本和生产成本双双下降。实物如图2: 图 2工作电流设置表3: 表 3静止时自动半流如表4: 表 4细分设置如表
14、5 表 5衰减设置如表6: 表 63.3 电源模块 本系统要求有5V的电源输入,因此我们选用了LM317作为电源芯片。LM317作为输出电压可变的集成三端稳压块,是一种使用方便、应用广泛的集成稳压块。其应用电路如图7所示。图8为电源滤波电路。 图 7 图 8稳压电源的输出电压可用下式计算,Vo=1.25(1+R2/R1)。本系统中取R1为240n,R2取5K的可调电位器。通过调节R2的阻值大小,进而可以改变输出电压的大小,实现电压可调,其可调范围是Vo=1.25V37V。在应用中,为了电路的稳定工作,在一般情况下,还需要接二极管作为保护电路,防止电路中的电容放电时的高压把317烧坏。3.4 A
15、DC0804 ADC0804是一个早期的A/D转换器,因其价格低廉而在要求不高的场合得到广泛应用。ADC0804是一个8位、单通道、低价格A/D转换器,主要特点是:摸数转换时间大约100us;方便的TTL或CMOS标准接口;可以满足差分电压输入;具有参考电压输入端;内含时钟发生器;单电源工作时(0V5V)输入信号电压范围是0V5V;不需要调零,等等。ADC0804是一个20引脚的芯片,引脚排列如图9所示。 图 9CLK_R,CLK,GND之间用电阻和电容组成RC震荡电路,用来给ADC0804提供工作所需的脉冲,其脉冲频率为1/(1.1RC)。端用两个的电阻分压得到电压,即2.5v,将该电压作为
16、AD芯片工作时内部参考电压。其电路图如图10: 图 103.5 光电开关模块 光电开关模块采用简易的连接方式,在调节的时候注意将R2和R4的电阻调的尽可能小这样才能是产生的信号能够达到TTl电平,从而让单片机识别。其电路如图11: 图 11 其整形电路,采用的是74LS14,74LS14是集成的施密特触发器,通过预设阀值将输入的正弦波整形为方波这样才能是MCU的外部中断能更好的识别下降沿,从而使计数达到准确。其内部电路如图12: 图 12四 程序设计4.1 系统电路示意图 本次设计的“步进电机控制“这一套系统,主要利用ADC0890实现数据采集,数据为0-5V电压,转换为0255的数字量,使单
17、片机产生相应的脉冲,数码管前2位显示步进电机的理想转速。单片机读取的数字量改变步进电机的转速,光电开关和74LS14采集由码盘旋转产生的信号量,并将其转换为方波,输入MCU,经过MCU的计算将实际转速用数码管的后2位显示出来。其系统的电路示意图如下: 图 134.2 程序设计 脉冲的产生有T0和T1定时中断产生,之说以要用两个定时中断是为了是产生的脉冲频率尽可能的低,因为步进电机只有在低速旋转时才具备它区别与直流电机的意义,如果用一个定时器,就不能很好的和前面的电位器和ADC0804相结合,其大致的程序如下,让TI滞后于T1定时器25ms,之后在使他们自动装载的时间相等,这样就能产生较理想的脉
18、冲。 TMOD=0x01; TH0=(65536-50000)/256; /设置PWM波周期 TL0=(65536-50000)%256; TH1=(65536-52500)/256; /脉宽调节 TL1=(65536-52500)%256; ET0=1; /开定时器0中断 ET1=1; /开定时器1中断 TR0=1 ; /启动定时器0 TR1=1 ; /启动定时器1void timer0() interrupt 1 TR0=0 ;TH0=(15536+180*adval)/256; TL0=(15536+180*adval)%256; CLK1 = 1 ; TR0=1 ; void time
19、r1() interrupt 3 TR1=0 ; TH1=(15536+180*adval)/256; /重新装载 TL1=(15536+180*adval)%256; CLK1=0 ; /结束输出 TR1=1 ; 计数是由外部中断0来实现的,设置外部中断0下降沿触发,这样每来一个下降沿,num就自加,已达到对码盘空位的计数。 实际测速显示程序是由52单片机独有的T2定时器来实现的,在规定的时间内产生中断,以计算此时码盘转过的空隙数,来计算实际的转速。由于我们只采用T2定时器的计时功能,故自需对RCAP2H和RCAP2L进行赋值就可以了。因为52单片机在上电后自动默认T2OMD和T2CON为0
20、,故不用在去设置。在T2中断处必须要求TF2进行软件清零,因为这个标志位是硬件不能清零的。其程序大致如下:void timer2() interrupt 5 / a+; TF2 = 0; / 复位中断标志位 if(a=10) a = 0; TRU = (num*12)/35; num = 0; 五 实物图 图 14六 心的体会本次综合设计是基于单片机的步进电机调速、细分、测速实验。步进电机本是我从来没有接触过的电机,本着挑战的心态我选择来了这个从未做过的实验,通过为期几个星期设计还真的使我受益匪浅。所谓“纸上谈兵终觉浅,觉知此事要躬行。”这句话还真的不假,从开始的设计实验的框架就让我头疼,因为
21、不了解怎么样通过AD和电位器给步进电机给定速度,整个实验就无从下手,现在后头看看以前的想法还真的比较幼稚,因为但是思考问题是分开考虑的,没有将整个设计综合考虑,给定速度是通过调节输出脉冲的个数,而输出脉冲个数是通过单片机来调节的,而单片机是通过I/O收集来的8位数据来进行运算从未通过中断来产生脉冲。其次到后来的稳压电路的制作,简简单单的一个电路我却花费的两天都没有调节出来,最后通过挨着排查才发现问题所在,为了防止稳压电路的输入端正负极接错,我特意增加了一个发光二极管,然而发光二极管在导通是电阻特别的大,以至于分担了很多电压使输出电压始终达不到5V,说明设计电路的时候不能想当然,而是要通过理论的
22、推敲。再到后来就是细分的实现出现了很大的问题,最主要是因为以前没有接触过步进电机不知道怎么去控制它,最开始我使用了TA8435h去控制它,然而TA8435h这块芯片在市面上很少,而且在网上购买都不能买到新的,且都是拆机的,可靠性不能得到保障,以至于后来没有焊接成功驱动板,其实这些都应该归结于对细分原理没有完全的搞清楚,概念没有吃透,导致选择芯片的失误。后来通过老师的指导才找到了合适的芯片。调节程序还不叫顺利,就是在测量实际转速是,因为我采用了两个定时器去产生低频脉冲,以至于不能找到一个基准时间去衡量转速,最后还好是使用的52单片机,其内部有一个特殊的T2定时器,这样才解决这个问题。尚未解决的就
23、是在实际测量转速的时候,由于步进电机在整步运行时,每走一步会产生抖动,这样就使得买盘没转动一个小格,本应产生一个脉冲即一个下降沿,却因为抖动产生多个脉冲,通过示波器观察的到,最多的时候产生9个脉冲,即外部中断就多计算了很多次使得实际转速的现实很不准。经过专业设计,使我学到了很多知识,同时也锻炼了我的动手能力。以前自己总是对动手操作这方面很忧心。可是经过了几周的调试使我自己深深喜欢上了这一项活动。知识是无穷的,只有我们不畏艰辛,坚信学无止境的念头,努力拼搏我们才能取得更优异的成绩。当然也同时让我感觉到了不认真就会出错,我们要以精益求精的态度要求自己。让我感到很充实,我努力了,我付出了,我也得到了
24、回报,因为我们组的实验成功了。感谢队友的合作,感谢老师的指导。参考文献1 张洪润,蓝清华. 单片机应用技术教程M . 北京:清华大学出版社,1997.2 秦曾煌. 电工学M . 北京:高等教育出版社,1999.3 常斗南,等. 可编程序控制器原理、应用、实验M . 北京:机械工业出版社,1998.4 于海生,等. 微型计算机控制技术M . 北京:清华大学出版社,1999.5 王福瑞,等. 单片机微机测控系统设计大全M . 北京:北京航空航天大学出版社,1998.6 陈理壁. 步进电机及其应用M . 上海: 上海科学技术出版社,1989.7 刘保延,等. 步进电机及其驱动控制系统M . 哈尔滨:
25、哈尔滨工业大学出版社,1997.8 郭敬枢,庄继东,孔峰. 微机控制技术M . 重庆:重庆大学出版社,1994.9 刘国荣. 单片微型计算机技术M . 北京:机械工业出版社,1996.10 王福瑞. 单片微机测控系统设计大全M . 北京:北京航空航天大学出版社,199811 潘新民等: 单片微型计算机实用系统设计1 北京: 人民邮电出版社, 1992.12 何立民. 单片机应用技术选编M . 北京:北京航空航天大学出版社,1993.13 潘新民等: 单片微型计算机实用系统设计1 北京: 人民邮电出版社, 1992.14 翟玉文 梁伟 艾学忠 施云贵编著,电子设计与实践,中国电力出版社,2005
26、附录#include#include /调用intrins.h中得函数#define uchar unsigned char#define uint unsigned intsbit CLK1 = P31;sbit wei1 = P00; sbit wei2 = P01;sbit wei3 = P02;sbit wei4 = P03; sbit CSAD_ = P05;sbit RD_ = P06;sbit WR_ = P07; uchar a,b,adval,num,TRU;uchar code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0
27、x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 ;void delayms(uint xms)uint i,j;for(i = xms;i 0;i-) for(j = 110;j 0;j-);void display(uchar qian,uchar bai,uchar shi,uchar ge) wei1 = 1;wei2 = 1;wei3 = 1;wei4 = 0; P2 = tableqian; delayms(1); wei1 = 1;wei2 = 1;wei3 = 0;wei4 = 1; P2 = tablebai; delayms(1); wei1 =
28、 1;wei2 = 0;wei3 = 1;wei4 = 1; P2 = tableshi; delayms(1); wei1 = 0;wei2 = 1;wei3 = 1;wei4 = 1; P2 = tablege; delayms(1); void main() uchar A1,A2,A3,A4,Est,num; num = 0; a = 0; /计算实际显示所用时间计数 TRU = 0;/用于实际显示 TMOD=0x01; TH0=(65536-50000)/256; /设置PWM波周期 TL0=(65536-50000)%256; TH1=(65536-52500)/256; /脉宽调
29、节 TL1=(65536-52500)%256; EX0 = 1; /打开外部中断0 IT0 = 1; / 下降沿触发 ET0=1; /开定时器0中断 ET1=1; /开定时器1中断 TR0=1 ; /启动定时器0 TR1=1 ; /启动定时器1 PX0=1;/外部中断0优先级高 CLK1=1; CSAD_ = 0;/ad转换使能 RCAP2H=(65536-50000)/256; RCAP2L=(65536-50000)%256; /reload msb_value重载值 TH2=RCAP2H; TL2=RCAP2L; / 填入初始化值 ET2=1; / enable timer2 inte
30、rrupt 允许T2中断 TR2=1; / timer2 run 开始计时 EA=1; / interupt enable 中断允许 while(1) WR_ = 1;_nop_(); WR_ = 0;/启动AD转换 _nop_(); WR_ = 1; P1 = 0xff; _nop_(); RD_ = 1; _nop_(); RD_ = 0; _nop_(); adval = P1; RD_ = 1; Est =(1530+54*adval)/255; A1 = Est/10; A2 = Est%10; A3 = TRU/10; A4 = TRU%10; display(A1,A2,A3,A
31、4); ;void timer0() interrupt 1 TR0=0 ; TH0=(15536+180*adval)/256; /重新装载,如果时间能够满足要求,最好自动装载的模式 TL0=(15536+180*adval)%256; CLK1 = 1 ; TR0=1 ; void timer1() interrupt 3 TR1=0 ; TH1=(15536+180*adval)/256; /重新装载 TL1=(15536+180*adval)%256; CLK1=0 ; /结束输出 TR1=1 ;void ISR0_Key() interrupt 0 using 1 num+;void timer2() interrupt 5 a+; TF2 = 0; / 复位中断标志位 if(a=10) a = 0; TRU = (num*12)/35; num = 0;