江西现代职业技术学院
毕业设计(论 文)
课题名称单片机控制直流电机调速系统
姓 名 罗烨
学 院 信息工程学院 专 业 机电一体化 班 级 09机电一化(2)班 指导 教师 刘铁生 提交 时间 年 月 日
- 1 -
论文题目:单片机控制直流电机调速系统
姓 名:罗烨
班 级:09机电(2)班
指导教师:刘铁生
摘要:在现代电子产品中,自动控制系统,电子仪器设备、家用电器、
电子玩具等等方面,直流电机都得到了广泛的应用。大家熟悉的录音机、电唱机、录相机、电子计算机等,都不能缺少直流电机。所以直流电机的控制是一门很实用的技术。直流电机,大体上可分为3类:几相绕组的步进电机、永磁式换流器直流电机、伺服电机、
直流电机具有良好的启动性能和调速特性,它的特点是启动转矩大,最大转矩大,能在宽广的范围内平滑、经济地调速,转速控制容易,调速后效率很高。与交流调速相比,直流电机结构复杂,生产成本高,维护工作量大。适用范围:直流调速器在数控机床、造纸印刷、纺织印染、光缆线缆设备、包装机械、电工机械、食品加工机械、橡胶机械、生物设备、印制电路板设备、实验设备、焊接切割、轻工机械、物流输送设备、机车车辆、医疗设备、通讯设备、雷达设备、卫星地面接受系统等行业广泛应用。
关键词:现代电子产品 直流电机 广泛应用
- 2 -
Abstract: In modern electronics, automatic control systems,
electronic equipment, household appliances, electronic toys, etc., DC have been widely used. The familiar tape recorder, record player, VCRs, computer, etc., can not do without DC. Therefore, DC motor control is a very practical technology. DC motor, can be divided into three categories: a few windings of the stepper motors, permanent magnet DC motor inverter, servo motor,
DC motor has a good start-up performance and speed characteristics, it is characterized by a large starting torque, maximum torque, in a wide range of smooth, economical speed, speed control is easy, after a very efficient speed. Compared with AC variable speed, DC motor complex structure, high production costs, maintenance workload.
Application: DC converter in CNC machine tools, paper and printing, textile printing and dyeing, fiber cable equipment, packaging machinery, electrical machinery, food processing machinery, rubber machinery, bio-devices, printed circuit board equipment, laboratory equipment, welding and cutting , light industry, logistics and transport equipment, locomotives, medical equipment, communications equipment, radar equipment,
- 3 -
satellite ground receiving system, widely used in industry.
Keywords: modern electronic products widely used in DC motor
- 4 -
目录
第一章 总体设计方案 ························ 6 1.1方案选取····························· 6 1.1.1方案一:PWM波调速 ······················· 6 1.1.2方案二:晶闸管调速······················· 7 第二章 单元模块设计 ························· 8 2.1 H桥电路方案设计························· 8 2.2 调速设计方案 ·························· 9 2.3系统硬件电路设计·························10
2.3.1电源电路 ··························10 2.4 H桥驱动电路···························11 2.5基于霍尔传感器的测速模块 ····················11 2.6 LCD显示模块 ··························12 2.7 调速设计模块 ··························13 2.8测速软件设计·························- 15 - 第三章 系统功能调试 ····················· - 17 - 3.1调试软件介绍···························17 3.2直流电机的调速功能仿真·············· 错误!未定义书签。 3.3电机速度的测量并显示功能仿真 ················ - 19 - 3.4系统的电路原理图 ······················ - 19 - 设计总结 ······························20 参考文献 ····························- 21 - 附录 ······························- 22 -
- 5 -
第一章 总体设计方案
1.1方案选取
1.1.1方案一:PWM波调速
采用由达林顿管组成的H型PWM电路(图1—1)。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。我采用了脉宽调频方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM脉冲的软件实现上比较方便。且对于直流电机,采用软件延时所产生的定时误差在允许范围。
图1-1 PWM波调速电路
其结构图如图1—2所示:
单片机(PID运算控制器、 PWM模拟发生器) 图1-2 电机调速系统框图
- 6 -
显示器 键 盘 单片机(速度的测量计算、输入 设定及系统控制) 速度采集电路 电机 电机驱动电路
1.1.2方案二:晶闸管调速
采用闸流管或汞弧整流器的离子拖动系统是最早应用静止式变流装置供电的直流电动机调速系统。1957年,晶闸管(俗称“可控硅”)问世,到了60年代,已生产出成套的晶闸管整流装置,并应用于直流电动机调速系统,即晶闸管可控整流器供电的直流调速系统(V-M系统)。如图1-3,VT是晶闸管可控整流器,通过调节触发装置GT的控制电压Uc来移动触发脉冲的相位,即可改变整流电压Ud,从而实现平滑调速。晶闸管整流装置不仅在经济性和可靠性上都有很大提高,而且在技术性能上也显示出较大的优越性;晶闸管可控整流器的功率放大倍数在104以上,其门极电流可以直接用晶体管来控制,不再像直流发电机那样需要较大功率的放大器。因此,在60年代到70年代,晶闸管可控整流器供电的直流调速系统(V-M系统)代替旋转变流机组直流电动机调速系统(G-M系统),得到了广泛的应用。但是由于晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难;晶闸管对过电压、过电流和过高的dudt与didt都十分敏感,若超过允许值会在很短的时间内损坏器件。另外,由谐波与无功功率引起电网电压波形畸变,殃及附近的用电设备,造成“电力公害”,因此必须添置无功补偿和谐波滤波装置。
图1-3 晶闸管可控整流器供电的直流调速系统(V-M系统)
兼于方案一调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案一。
- 7 -
第二章 单元模块设计
2.1 H桥电路方案设计
图2-1所示的H桥式电机驱动电路包括4个三极管和一个电机,电路得名于“H桥驱动电路”是因为它的形状酷似字母H。如图2-1所示,要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。
图2-1 H桥驱动电路
要使电机运转,必须使对角线上的一对三极管导通。例如,如图2-2所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经 Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。
图2-2 H桥驱动电机顺时针转动
- 8 -
图2-3所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。
图2-3 H桥驱动电机逆时针转动
2.2 调速设计方案
调速采用PWM(Pulse Width Modulation)脉宽调制,工作原理:通过产生矩形波,改变占空比,以达到调整脉宽的目的。PWM的定义:脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V,5V}这一集合中取值。
模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。
尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电
- 9 -
路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。
2.3系统硬件电路设计
2.3.1电源电路 (1)芯片介绍
78XX,XX就代表它所输出的电压值,能降低电压4-5V
电子产品中常见到的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC是指这种稳压用的集成电路只有三条引脚输出,分别是输入端、接地端和输出端。
用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。
有时在数字78或79后面还有一个M或L,如78M12或79L24,用来区别输出电流和封装形式等,其中78L系列的最大输出电流为100mA,78M系列最大输出电流为1A,78系列最大输出电流为1.5A。在实际应用中,应在三端集成稳压电路上安装足够大的散热器(当然小功率的条件下不用)。当稳压管温度过高时,稳压性能将变差,甚至损坏。
(2)电路原理图
电源电路采用78系列芯片产生+5V、+15V。电路图如图2-4:
图2-4 78系列的电源电路
- 10 -
2.4 H桥驱动电路
基于三极管的使用机理和特性,在驱动电机中采用H桥功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动。永磁步进电机或混合式步进电机的励磁绕组都必须用双极性电源供电,也就是说绕组有时需正向电流,有时需反向电流,这样绕组电源需用H桥驱动。直流电机控制使用H桥驱动电路(图2-5),当PWM1为低电平,通过对PWM2输出占空比不同的矩形波使三极管Q1、Q6同时导通Q5截止,从而实现电机正向转动以及转速的控制;同理,当PWM2为高电平,通过对PWM1输出占空比不同的矩形波使三极管Q1、Q6同时导通,Q5截止,从而实现电机反向转动以及转速的控制。
图2-5 H桥的电机驱动电路
2.5基于霍尔传感器的测速模块
2.5.1霍尔传感器的工作原理
霍尔效应:在一块半导体薄片上,其长度为l,宽度为b,厚度为d,当它被置于磁感应强度为B的磁场中,如果在它相对的两边通以控制电流I,且磁场方向与电流方向正交,则在半导体另外两边将产生一个大小与控制电流I和磁感应强度B乘积成正比的电势UH,即UH=KHIB,其中kH为霍尔元件的灵敏度。该电势称为霍尔电势,半导体薄片就是霍尔元件。
工作原理:霍尔开关集成电路中的信号放大器将霍尔元件产生的幅值随磁场强度变化的霍尔电压UH放大后再经信号变换器、驱动器进行整形、放大后输出幅值相等、频率变化的方波信号。信号输出端每输出一个周期的方波,代表转过了一个齿。单位时间内输出的脉冲数N,因此可求出单位时间内的速度V=NT。
- 11 -
2.5.2霍尔传感器的电路原理图
图2-6 霍尔传感器的测速电路
2.6 LCD显示模块
2.6.1 1602芯片介绍
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。1602采用标准的16脚接口,其中:
第1脚:VSS为电源地 第2脚:VDD接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“阴影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
- 12 -
第6脚:E(或EN)端为使能(enable)端。 第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 2.6.2电路原理图
图2-7 LCD显示电路
2.7 调速设计模块
PWM波软件软件设计程序流程图:
开始 初始化 按键查询 OPEN是否按下 时 是 Add_speed是否按下 Sub_speed是否按下 Swap或close是否按下 是 是 改变转向或关闭电机 定时器T0开始计时 产生矩形波 增大矩形波占空减小矩形波占空
- 13 -
图2-8 软件电机控制的方框图
通过控制总中断使能EA控制电机的开关,同时使能对霍尔传感器输出的方波在单位时间内脉冲个数的计数。其中定时器T0,T1分别对脉冲的宽度、霍尔元件输出的数对应的1秒时间定时。对脉冲宽度的调整是通过改变高电平的定时长度,由变量high控制。变量change、 sub_speed 、add_speed分别实现电机的转向、加速、减速。
/***********通过按键实现对电机开关、*****************/
void motor_control() {
if(open == 1)
EA = 1;
if(close == 1)
EA = 0;
if(swap == 1)
{
change = ~change; while(swap != 0)
{}
}
if(sub_speed == 1)
{ high++; if(high == 30) EA=0;
while(sub_speed != 0)
{}
}
- 14 -
调速、转向的控制的程序
if(add_speed == 1) { high--; if(high == 5) high = 5;
while(add_speed != 0) 脉冲 }
}
2.8测速软件设计
开始 初始化 OPEN是否按下 定时器T1开始计时 对单位时间内的脉冲计数 N 根据公式计算出电机的速度 液晶显示电机速度
图2-9 软件测速的方框图
- 15 -
/****T1中断服务程序********单位时间(S)方波的个数*************/ void time1_int(void) interrupt 3 {
count_speed++; if(count_speed == 20) { count_speed = 0;
num_display = num_medium; num_medium = 0; }
- 16 -
第三章 系统功能调试
3.1调试软件介绍
Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。按照系统功能来划分,Protel99se主要包含6个功能模块:电路工程设计部分、印刷电路板设计系统、自动布线系统、电路模拟仿真系统、可编程逻辑设计系统、高级信号完整性分析系统。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KEIL C51编译器由uVision2集成开发环境与编辑器和调试器以及C51编译器组成。其中uVision2集成开发环境中的工程(project)是由源文件、开发工具选项以及编程说明三部分组成的;编辑器和调试器包括源代码编辑器、断点设置、调试函数语言、变量和存储器。 Proteus软件是一种低投资的电子设计自动化软件,提供可仿真数字和模拟、交流和直流等数千种元器件和多达30多个元件库。Proteus软件提供多种现实存在的虚拟仪器仪表。此外,Proteus还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能减少仪器对测量结果的影响,Proteus软件提供丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。提供Schematic Drawing、SPICE仿真与PCB设计功能,同时可以仿真单片机和周边设备,可以仿真51系列、AVR、PIC等常用的MCU,并提供周边设备的仿真,例如373、led、示波器等。Proteus提供了大量的元件库,有RAM、ROM、键盘、马达、LED、LCD、AD/DA、部分SPI器件、部分IIC器件,编译方面支持Keil和MPLAB等编译器。一台计算机、一套电子仿真软件,在加上一本虚拟实验教程,就可相当于一个设备先进的实验室。以虚代实、以软代硬,就建立一个完善的虚拟实验室。在计算机上学习电工基础,模拟电路、数字电路、单片机应用系统等课程,并进行电路设计、仿真、调试等。当电路设计完成之后,
- 17 -
为了减少在电路板上调试时的难度,保证电路设计的正确性,将Keil c51编译
生成的*.HEX 文件载入Proteus软件,实现电路仿真。
3.2直流电机的调速功能仿真
当按下open键时,电机开始工作。若需要加快电机的转速,则按下add_speed键,直到电机转速适中;相反,需要减慢电机的转速时,则按下sub_speed键,待转速满意后,放开按键。当然,在某种特定的环境下,还需改变电机的转速,此时,你可以按一下swap键,以达到改变电机转向的目的。当电机不工作时,则按下close键。
图3-1 直流电机调速系统的Proteus仿真图
1.调速前的波形图
图3-2 电机启动时的脉冲波形占空比
2.调速后的波形图
- 18 -
图3-3 电机减速后的脉冲波形占空比
3.3电机速度的测量并显示功能仿真
对电机转速的显示,为使用者提供了更为直观的界面。用户可以根据液晶显示屏上的数字,调整电机的转速,为调速提供了方便。从显示数字的稳定程度,也可以判断电机转速的稳定性。若显示数字几乎不变,则说明电机工作十分稳定;与之相反,显示数字不停地变化,则说明电机工作非常不稳定。
3.4系统的电路原理图
图3-5 直流电机调速系统的Protel原理图
由电源模块、单片机控制单元、电机驱动电路、LCD显示电路、霍尔传感器电路构成。
- 19 -
设计总结
经过2个月的课程设计,我的毕业设计终于完成。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次的毕业设计留给我印象最深的是要设计一个成功的电路,必须要有扎实的理论基础,还要有坚持不懈的精神。
通过了这次的做设计,自己收获很大,王老师对我的指导也起到了很大的作用,在此先谢谢老师对我的指导。还有这次对直流电机的调速,个人感觉其中还有许多不够完善的地方,例如:对电机的控制采用的是独立按键,而非矩阵键盘;电机的驱动电路的设计也不是很成熟。
此次的设计并不奢望一定能成功,但一定要对已学的各种电子知识能有一定的运用能力,我做设计的目的是希望能检查下对所学知识的运用能力的好坏,并且开始慢慢走上创造的道路,这是非常可贵的一点。
这次设计我感觉把大学学的东西都柔和了进去。不止单片机方面有所提升,别的方面也有了很大的收获,自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
- 20 -
参考文献
[1] 傅丰林.模拟电子线路基础 [M]. 西安:西安电子科技大学出版社,2001.1
[2] 江志红.51单片机技术与应用系统开发案列精选 [M]. 北京:清华大学出版社,2008.12 [3] 王选民 智能仪器原理及设计 [M]. 北京:清华大学出版社,2008.7 [4] 文东 孙鹏飞 C语言程序设计 [M]. 北京:中国人民大学出版社,2009.2 [5] 杨加国 单片机原理与应用及C51程序设计 [M]. 北京:清华大学出版社,2008.3
- 21 -
附录
#include #define uchar unsigned char #define uint unsigned int sbit open = P2^0; sbit close = P2^1; sbit swap = P2^2; sbit sub_speed = P2^3; sbit add_speed = P2^4; sbit PWM1 = P3^0; sbit PWM2 = P3^1; /************************液晶显示*************/ sbit E=P3^7; sbit RW = P3^6; sbit RS = P3^5; sbit test = P3^4; int time = 0; int high = 20; int period = 30; int change = 0; int flag = 0; int num_medium = 0; int num_display = 0; int count_speed = 0; uchar wword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; - 22 - /*******************延时t毫秒****************/ void delay(uchar t) { uint i; while(t) { /*对于11.0592MHz时钟,延时1ms*/ for(i=0;i<125;i++); t--; } } //写命令函数LCD void wc51r(uchar j) { RS=0; RW=0; P1=j; } //写数据函数LCD void wc51ddr(uchar j) { RS=1; RW=0; E=1; E=0; delay(3); - 23 - P1=j; E=1; } //初始化函数LCD void init() { wc51r(0x01); //清屏 wc51r(0x38); //使用8位数据,显示两行,使用5*7的字型 wc51r(0x0c); //显示器件,光标开,字符不闪烁 wc51r(0x06); //字符不动,光标自动右移一格 } E=0; delay(2); /***********8T0中断服务程序************PWM波的生成**********/ void time0_int(void) interrupt 1 { time++; TH0 = 0xec; TL0 = 0x78; if(change == 0) { PWM2 = 1; - 24 - if(time == high) PWM1=0; else if(time == period) PWM1 = 1; } } } else { PWM1 = 1; if(time == high) PWM2=0; else if(time == period) { time = 0; } PWM2 = 1; time = 0; } /***************************************************************/ /****T1中断服务程序********单位时间(S)方波的个数*************/ void time1_int(void) interrupt 3 { count_speed++; if(count_speed == 20) { count_speed = 0; num_display = num_medium; - 25 - } num_medium = 0; /***************************************************************/ /************************速度显示的数据处理*********************/ void datamade() { uint data MM,NN; wc51r(0xc2); wc51ddr('S'); wc51ddr('p'); wc51ddr('e'); wc51ddr('e'); wc51ddr('d'); wc51ddr(0x3a); NN = num_display%100; MM = num_display/100; wc51ddr(wword[MM]); MM = NN/10; NN = NN%10; wc51ddr(wword[MM]); wc51ddr(wword[NN]); } /*****************************************************************/ /**********通过按键实现对电机开关、调速、转向的控制***************/ void motor_control() - 26 - { if(open == 1) EA = 1; if(close == 1) EA = 0; if(swap == 1) { change = ~change; while(swap != 0) {} } if(add_speed == 1) { high--; if(high == 5) high = 5; if(sub_speed == 1) { high++; if(high == 30) EA=0; while(sub_speed != 0) {} } while(add_speed != 0) {} - 27 - } } /******************************************************************/ /***************************主函数*********************************/ void main() { P2 = 0x00; ET0 = 1; ET1 = 1; TMOD = 0x11; TH0 = 0xec; // TL0 = 0x78; TH1 = 0x3c; // TL1 = 0xb0; TR0 = 1; TR1 = 1; init(); // while(1) { wc51r(0x84); wc51ddr('H'); wc51ddr('e'); 定时器T0设置参数 定时器T1设置参数 液晶显示初始化程序 - 28 - wc51ddr('l'); wc51ddr('l'); wc51ddr('o'); if(test == 0) num_medium++; datamade(); motor_control(); } } - 29 - 因篇幅问题不能全部显示,请点此查看更多更全内容