找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6360|回复: 0
收起左侧

基于51单片机PID电机测速系统论文下载

[复制链接]
ID:201380 发表于 2017-5-16 15:20 | 显示全部楼层 |阅读模式

重庆邮电大学
毕业设计(论文)



设计(论文)题目:



  名  称

学  生  姓  名 :

专          业 :

班          级 :

学          号 :

指  导  教  师 :

答辩组  负责人 :


填表时间:
重庆邮电大学教务处制
1.001.jpg


摘  要
在工业自动控制系统和各种智能产品中常常会应用到电动机进行驱动、传动和控制,而现代智能控制系统中,对电机的控制要求越来越精确和迅速,对环境的适应要求越来越高。
本设计以AT89C51单片机为核心,完成了直流电机的转速自动测量及转速调节功能。在设计中采用PWM技术对电机进行控制,并且利用LCD1602液晶屏设计的人机界面系统显示转速的设定值及实际值,通过应用PID算法对占空比的计算达到精确调速的目的。
1.002.jpg 1

目  录
第一章 前言              4
1.1 直流电机闭环调速系统背景              4
1.2 本设计实现的基本功能              4
1.3设计目的及意义              4
第二章 总体设计规划              2
2.1 直流电机的基本工作原理              5
2.2 直流电机控制原理及特点              5
2.3 直流电机调速控制方式选择              5
2.4 PWM脉宽调制方式              5
2.5 电机实际转速的获取              6
2.6总体设计框图              7
第三章 硬件设计              8
3.1 AT89C51芯片介绍              8
3.1.2电源滤波电路              12
3.1.3 系统时钟的设计              12
3.1.4 系统复位方式              13
3.2 L293D芯片介绍              14
3.2.1 驱动电路设计              14
3.3 脉冲信号的获取              15
3.3.1 LM393芯片介绍              16
   3.3.2 测速电路设计              16
   3.4 LCD1602液晶屏介紹              18
   3.4.1 LCD显示模块设计              25
3.5按键模块设计              26
第四章 软件设计              19
4.1 主程序              19
4.2 系统原理图              28
参考文献              29
致 谢              30
       第一章  前 言
1.1 直流电机闭环调速系统背景
对直流电机转速的控制即可采用开环控制,也可采用闭环控制。与开环控制相比,速度控制闭环系统的机械特性有以下优越性:闭环系统的机械特性与开环系统机械特性相比,其性能大大提高;理想空载转速相同时,闭环系统的静差率(额定负载时电机转速降落与理想空载转速之比)要小得多;当要求的静差率相同时, 闭环调速系统的调速范围可以大大提高。
1.2 本设计实现的基本功能
(1)按键设定并显示转速,实时显示实际转速。
(2)按键控制电机起停、正反转。
(3)PWM转速闭环控制。
1.3 设计目的及意义
本课程是机械电子工程本科专业的重要实践课程,是《单片机原理与应用》课程的一个综合性、设计性的实践环节。通过这门课程的学习与实践,能够提出基于单片机的机电系统的设计思路、论证设计方案;熟悉单片机系统开发、研制的过程,软硬件设计方法和设计步骤;初步学会设计单片机系统软硬件设计及调试的方法,具备技术实现能力;基本上能够处理实践过程中出现的问题并提出解决办法;提高理论付诸于实践的能力,提高工程设计能力和处理实际问题的能力,开发和创新能力。
1.003.jpg 1



               第二章  总体设计规划
2.1 直流电机的基本工作原理

一 直流电机的用途

直流电动机的优点:

1 调速范围广,易于平滑调节

2 过载、启动、制动转矩大

3 易于控制,可靠性高

4 调速时的能量损耗较小

缺点:  换向困难,容量受到限制,不能做的很大。

应用:  轧钢机、电车、电气铁道牵引、造纸、纺织拖动。

直流发电机用作电解、电镀、电冶炼、充电、交流发电机励磁等的直流电源。


二、直流电机的工作原理

原理:任何电机的工作原理都是建立在电磁感应和电磁力这个基础上。为了讨论直流电机的工作原理,我们把复杂的直流电机结构简化为工作原理图。

(一)直流发电机的工作原理

1.工作原理:导体在磁场中运动时,导体中会感应出电势e 。

                     e=Blv。

B:磁密l:导体长度; v:导体与磁场的相对速度。

正方向:用右手定则判断。电势e正方向表示电位升高的方向,与U相反。如果同一元件上e和U正方向相同时,e= -U。

1.004.jpg 1.005.jpg

理解:电磁感应原理的变形(变化的磁通产生感应电动势)

1.006.jpg

2 发电机工作过程分析:两磁极直流发电机的工作原理图

  • 构成:

磁场:图中 N和 S是一对静止的磁极,用以产生磁场,其磁感应强度沿圆周为正弦分布。

励磁绕组——容量较小的发电机是用永久磁铁做磁极的。容量较大的发电机的磁场是由直流电流通过绕在磁极铁心上的绕组产生的。用来形成N极和S极的绕组称为励磁绕组,励磁绕组中的电流称为励磁电流If。

电枢绕组:在N极和 S极之间,有一个能绕轴旋转的圆柱形铁心,其上紧绕着一个线圈称为电枢绕组(图中只画出一匝线圈),电枢绕组中的电流称为电枢电流Ia。

换向器:电枢绕组两端分别接在两个相互绝缘而和绕组同轴旋转的半圆形铜片——换向片上,组成一个换向器。换向器上压着固定不动的炭质电刷。

电枢:铁心、电枢绕组和换向器所组成的旋转部分称为电枢。

1.007.jpg

(2)工作过程:

P1:电动势产生

当电枢被原动机以恒速驱动,按逆时针方向转动时,用右手定则可以判定,线圈ab和cd边切割磁力线产生的感应电动势的方向,则在负载与线圈构成的回路中产生电流Ia,其方向与电动势方向相同。电流由电刷A流出,由电刷B流回。

电动势与电流关系:同向

1.008.jpg

P2:换向

当电枢转到上图b所示位置时,ab边转到了S极下,cd边转到了N极下。这时线圈中感应电动势的方向发生了改变,但由于换向器随同一起旋转,使得电刷 A总是接触 N极下的导线,而电刷B总是接触S极下的导线,故电流仍由A流出 B流回,方向不变。

1.009.jpg


虽然有换向器的作用,将线圈内的交变电动势在两电刷间变换为方向不变的电动势,但它的大小仍然是脉动的。欲获得在方向和量值上均为恒定的电动势,则应把电枢铁心上的槽数和线圈匝数增多,同时换向器上的换向片数也要相应地增加。

(3) 电磁转矩与能量转换分析 :

电磁转矩:电枢电流 Ia与磁场相互作用而产生的电磁力形成了电磁转矩 T。

用左手定则可以判定,电磁转矩 T的方向与电枢旋转方向相反。因此,在电枢等速旋转时,原动机的驱动转矩 T1必须与发电机的电磁转矩 T和空载损耗转矩 T0相平衡( T0是发电机轴上的转矩),即T1=T+ T0

*电磁转矩方向与转速方向关系:反向

能量转换:

原动机(机械能)->电磁转矩->发电机负载(电能)

当发电机的负载(即电枢电流)增加时,电磁转矩和输出功率也随之增加,这时原动机的驱动转矩所供给的机械功率亦必须相应增加,以保持转矩之间和功率之间的平衡。可见,发电机向负载输出电功率的同时,原动机却向发电机输出机械功率,发电机起着将机械能转换为电能的作用。

(二)直流电动机的工作原理

1.工作原理:电磁力定律

载流导体在磁场中将会受到力的作用,若磁场与载流导体互相垂直,作用在导体上的电磁力大小为:      f = B·l·i     

力的方向用左手定则确定

1.010.jpg 1.011.jpg

理解:电流产生磁场原理的变形(电流产生磁场)

一个通电线圈相当于一个具有NS极的磁体。形成电磁力。

2电动机工作过程分析:直流电动机的工作原理图

(1)构成:

磁场:图中 N和 S是一对静止的磁极,用以产生磁场,其磁感应强度沿圆周为正弦分布。

励磁绕组——容量较小的发电机是用永久磁铁做磁极的。容量较大的发电机的磁场是由直流电流通过绕在磁极铁心上的绕组产生的。用来形成N极和S极的绕组称为励磁绕组,励磁绕组中的电流称为励磁电流If。

电枢绕组:在N极和 S极之间,有一个能绕轴旋转的圆柱形铁心,其上紧绕着一个线圈称为电枢绕组(图中只画出一匝线圈),电枢绕组中的电流称为电枢电流Ia。

换向器:电枢绕组两端分别接在两个相互绝缘而和绕组同轴旋转的半圆形铜片——换向片上,组成一个换向器。换向器上压着固定不动的炭质电刷。

电枢:铁心、电枢绕组和换向器所组成的旋转部分称为电枢。

1.012.jpg

(2)工作过程:

P1:电磁转矩产生

电枢绕组通过电刷接到直流电源上,绕组的旋转轴与机械负载相联。电流从电刷 A流入电枢绕组,从电刷B流出。电枢电流Ia与磁场相互作用产生电磁力F,其方向可用左手定则判定。这一对电磁力所形成的电磁转矩T,使电动机电枢逆时针方向旋转。

*电磁转矩与电枢旋转方向关系:同向

1.013.jpg

P2:换向

当电枢转到上图b所示位置时,ab边转到了S极下,cd边转到了N极下。这时线圈电磁转矩的方向发生了改变,但由于换向器随同一起旋转,使得电刷 A总是接触 N极下的导线,而电刷B总是接触S极下的导线,故电流流动方向发生改变,电磁转矩方向不变。

(3) 电动势与能量转换分析 :

电动势:电枢转动时,割切磁力线而产生感应电动势,这个电动势(用右手定则判定)的方向与电枢电流Ia和外加电压U的方向总是相反的,称为反电动势Ea。

它与发电机的电动势 E的作用不同。发电机的电动势是电源电动势,在外电路产生电流。而Ea是反电动势,电源只有克服这个反电动势才能向电动机输入电流。

可见,电动机向负载输出机械功率的同时,却向电动机输入电功率,电动机起着将电能转换为机械能的作用。

*电动势方向与电流方向关系:反向

能量转换:

电源(电能)->电磁转矩->负载(机械能)

比较:

发电机和电动机两者的电磁转矩T、电动势的作用是不同的。

发电机的电磁转矩是阻转矩,它与原动机的驱动转矩T1的方向是相反的。电动机的电磁转矩是驱动转矩,它使电枢转动。电动机的电磁转矩T必须与机械负载转矩T2及空载损耗转矩T0相平衡,即T=T2十T0。

发电机的电动势是电源电动势。电动机的电动势是反电动势,电源只有克服这个反电动势才能向电动机输入电流。

直流电机作发电机运行和作电动机运行时,虽然都产生电动势和电磁转矩,但两者作用截然相反。 

 

第二节  直流电机的结构

目的:了解它们各主要部件的名称、作用、相互组装及动作关系。以利正确选用和使用。

电机的结构要求:

1 电磁要求:  产生磁场,感应出电动势,通过电流,产生电磁转矩

2机械要求:传递转矩,保持坚固稳定,冷却的要求,检修,运行可靠。

1.014.jpg

从电机的基本工作原理知道,电机的磁极和电枢之间必须有相对运动,因此,任何电机都有固定不动的定子和旋转的转子两部分组成,在这两部分之间的间隙叫空气隙。

一、定子

定子的作用是产生磁场和作为电机机械支撑。它由主磁极、换向磁极、电刷、机座、端盖和轴承等组成。

(一)主磁极——产生主磁通φ。

主磁极铁心包括极心和极掌两部分。极心上套有励磁绕组,各主磁极上的绕组一般都是串联的。直流电机的磁极如图所示。极掌的作用是使空气隙中磁感应强度分布最为合适。

    改变励磁电流If的方向,就可改变主磁极极性,也就改变了磁场方向。

1.015.jpg

(二)换向磁极——产生附加磁场,改善电机的换向,减小电刷与换向器之间的火花,不致使换向器烧坏。

在两个相邻的主磁极之间中性面内有一个小磁极,这就是换向磁极。它的构造与主磁极相似,它的励磁绕组与主磁极的励磁绕组相串联。

主磁极中性面内的磁感应强度本应为零值,但是,由于电枢电流通过电枢绕组时所产生的电枢磁场,使主磁极中性面的磁感应强度不能为零值。于是使转到中性面内进行电流换向的绕组产生感应电动势,使得电刷与换向器之间产生较大的火花。

用换向磁极的附加磁场来抵消电枢磁场,使主磁极中性面内的磁感应强度接近于零,这样就改善了电枢绕组的电流换向条件,减小了电刷与换向器之间的火花。

1.016.jpg

(三)电刷装置

电刷装置主要由用碳一石墨制成导电块的电刷、加压弹簧和刷盒等组成。固定在机座上(小容量电机装在端盖上)不动的电刷,借助于加压弹簧的压力和旋转的换向器保持滑动接触,使电枢绕组与外电路接通。

电刷数一般等于主磁极数,各同极性的电刷经软线汇在一起,再引到接线盒内的接线板上,作为电枢绕组的引出端。

1.017.jpg

(四)机座——用来固定主磁极、换向磁极和端盖,是电机磁路的一部分。

机座用铸钢或铸铁制成。机座上的接线盒有励磁绕组和电枢绕组的接线端,用来对外接线。

(五)端盖

    端盖由铸铁制成,用螺钉固定在底座的两端,盖内有轴承用以支撑旋转的电枢。

二、转子

转子又称电枢,是电机的旋转部分。它由电枢铁心、绕组、换向器等组成。如右图所示。

(一)电枢铁心

电枢铁心由硅钢片冲制迭压而成,在外圆上有分布均匀的槽用来嵌放绕组。铁心也作为电机磁路的一部分。

1.018.jpg

(二)绕组

绕组是产生感应电动势或电磁转矩,实现能量转换的主要部件。它是由许多绕组元件构成,按一定规则嵌放在铁心槽内和换向片相连,使各组线圈的电动势相加。绕组端部用镀锌钢丝箍住,防止绕组因离心力而发生径向位移。

1.019.jpg

(三)换向器

换向器由许多铜制换向片组成,外形呈圆柱形,片与片之间用云母绝缘。 1.020.jpg

三、铭牌和额定值

为了使电机安全而有效地运行,制造厂对电机的工作条件都加以技术规定。按照规定的工作条件进行运行的状态叫做额定工作状态。电机在额定工作时的各种技术数据叫做额定值,一般加下标 e表示。这些额定值都列在电机的铭牌上,使用电机前,应熟悉铭牌。使用中的实际值,一般不应超过铭牌所规定的额定值。

    (一)型号:它表示电机的类别。例如:Z2--12         

              Z:直流;2:设计序号;1:铁心长度;2:机座号

    (二)额定电流Ie

    这是指发电机长期运行时电枢输出给负载的允许电流。对于电动机则是指电源输入到电动机的允许电流。

    (三)额定电压Ue

    这是指发电机输出的允许端电压。对于电动机则指输入到电动机端钮上的允许电压。

    (四)额定转速ne

    这是指电机在额定工作状态时,应达到的转速。

    (五)额定功率(额定容量) Pe

对于发电机来说,这是指在额定电压下,输出额定电流时,向负载提供的电功率Pe,Pe=UeIe

    对于电动机来说,则是指在额定电压,额定电流和额定转速下,电动机轴上输出的机械功率Pe=UeIeηe

    (六)额定效率ηe

    额定功率与输入功率之比,称为电机的额定效率,即ηe=(额定功率/输入功率)×100 %

四、电枢绕组

1 有关术语

1)极轴线——主磁极的中轴线。

2) 几何中性线——相邻两个主磁极之间的几何分界线。

3) 极距τ:

相邻两磁极中心线间的距离称为极距τ,常用槽数表示,

τ =z/2p

其中z为槽数,p为极对数。

4)绕组元件——两端分别与两个换向器片联接的单匝或多匝线圈,每个元件由两个放在电枢槽中可以产生感应电动势的有效边,叫元件边。槽外部分只起连接作用,叫端接部分。

5)节距——绕组元件的宽度和元件之间的连接规律。

第一节距: 一个线圈的两个边所跨定子圆周上的距离称为节距,用 y1 表示,一般用槽数计.

线圈可范围分为:

     整距绕组: y1 = τ

     短距绕组: y1 < τ

长距绕组: y1 > τ

换向节距: 一个元件的两个边在换向器上的距离称为换向节距,用 yk 表示.

第三节  直流电机的磁场

一、直流电机的励磁方式

按励磁方式不同,电机可分为

(一)他励直流电机   电枢和励磁绕组由两个独立的直流电源供电。

(二)并励直流电机   电枢和励磁绕组并联后由一个独立的直流电源供电。

(三)串励直流电机   电枢和励磁绕组串联后由一个独立的直流电源

                    供电

(四)复励直流电机   复励电机有两个绕组,一个并励绕组,一个串励

                   绕组,并励绕组和电枢并联,和串励绕组串联后由

                    一个独立的直流电源供电。

直流发电机的主要励磁方式是他励式、并励式和复励式  

二、直流电机的空载磁场 

磁场的基本物理量

(1)  磁路:磁通经过的路径。

(2)  磁通:  磁场中穿过某一截面积的总磁感线数称为通过该面积的磁通

                   单位韦伯Wb。

(3)  磁感应强度B:  描述磁介质中实际的磁场强弱和方向的物理量,矢量,

           有大小和方向,单位特斯拉T。B= /A(磁通除以截面积)

(4) 磁场强度 H:   是计算磁场时常用的物理量,也是矢量。它与磁感应强度矢量的关系为  H=B/

(5)  磁通势:某一线圈的电流I与其匝数N的乘积。磁通势F的方向由产生    它的线圈电流按右手定则确定。单位:(A)

1.直流电机的磁场构成

   直流电机工作时的磁场是由各绕组的总磁动势共同产生的(包括励磁

   绕组,电枢绕组,换向极绕组,补偿绕组等)。励磁绕组的磁动势起

   最主要的作用。

1)主磁通 Φm  所有那些由N极经过气隙到转子,再由另一个气隙返回S极的磁通,同时与励磁绕组和电枢绕组相交链,是直流电机中起有效作用的磁通,称为主磁通,它能够在旋转的电枢绕组中感应出电动势,并和电枢绕组的磁动势相互作用产生电磁转矩。

2)漏磁通 Φ1σ 交链励磁绕组本身,不和电枢绕组相交链,只能增加磁极和定子磁轭的饱和程度,不产生电动势和转矩。

2.直流电机的空载磁场  

直流电机的空载是指电枢电流等于零或者很小,且可以不计其影响

        的一种运行状态。

磁场的计算

1.021.jpg 全电流定律:在磁路中,沿任一闭合路径,磁场强度的线积分等于与该闭和路径交链的电流的代数和。

1.022.jpg

上式左侧为磁场强度矢量沿闭合回线的线积分;右侧是穿过由闭合回线所围面积的电流的代数和。电流的符号规定为:闭合回线的围绕方向与电流成右旋系时为正,反之为负。

    由励磁磁通势单独建立的磁场,以一台四极直流电机空载时为例,由励磁电流单独建立的磁场分布如图。


1.023.jpg

  •          空载磁密分布

不计齿槽影响,直流电机空载时,其气隙磁场(主磁场)的磁密分布波形如图所示

1.024.jpg

三.直流电机负载时的磁场和电枢反应

1.负载时磁场

电机带上负载以后,电枢绕组内流过电流,还会形成磁通势,该磁通称为电枢磁通势。 所以,负载时电机中气隙磁场是由励磁磁通势和电枢磁通势共同建立。

由此可知,在直流电机中,从空载到负载,其气隙磁场是变化的  

2.电枢反应  

1)电枢磁通势

电枢磁通势对励磁磁通势所产生气隙磁场的影响称为电枢反应。

为画图简单起见,元件边只画一层,认为电枢是光滑的, 并考虑某一极性下元件中流过电流同一方向, 得电枢磁场分布。

1.025.jpg

电枢反应磁通势轴线的位置与电刷轴线重合,当电刷处于几何中性线时,电枢反应磁通势与磁极轴线互相垂直 。

  • 电枢反应使气隙磁场发生了畸变

电枢磁场使主磁场一半削弱,另一半加强,并使电枢表面磁密等于零处(物理中心线)离开了几何中性线。

  • 电磁反应呈去磁作用

* 在磁路不饱和时 主磁场削弱的量与加强的量恰好相等。

* 在磁路临界饱和时

增磁会使半个极下饱和程度提高,铁心磁阻增大,另外半个极下饱和程度减小,铁心磁阻减小 ,因磁路临界饱和,从而使实际的合成磁场曲线要比不饱和时略低 。增加的磁通数量就会小于磁通减少的数量 。

第四节 感应电动势和电磁转矩的计算

一.感应电动势的计算

1.运行时感应电动势始终存在

直流电机无论作电动机运行还是作发电机运行,电枢绕组内都感应产生电动势。这个感应电动势是指一条支路的电动势。

2.如何计算感应电动势

要计算支路电动势,可先求出每个元件电动势的平均值,然后乘上每条支路串联元件数,就可得出支路电动势。

元件平均电势

B为每一个磁极下的平均磁感应强度,等于每极磁通除以每极的面积l, B= /l

电磁感应定律:  e=Blv

式中:v为导体切割磁力线的线速度v=2Rn/60= 2pn/60(2R= 2p)

n - 电枢的转速(r/min)

p - 极对数

 - 极距

每条支路总导体数2N,则电枢感应电动势的平均值为:

E=2Ne=2NBlv=4pNn/60  如果令4pN/60=CE  则

E= CE n

Ce 称为电动势常数

磁通的单位为 Wb,转速 n 的单位为 rpm,感应电动势的单位为 V

感生电动势的方向由磁场的方向和转子的旋转方向决定。

在直流电动机中,电动势的方向与电枢电流的方向相反,为反电动势;

在直流发电机中,电动势的方向与电枢电流的方向相同,为电源电动势。

二.电磁转矩的计算

1.元件边所受切线方向电磁力

设气隙中某处的径向磁密为 Bdx ,元件数为 Ny ;元件边中电流为ia

根据电磁力定律,此处元件边所受的切线方向的电磁力为:

fx = Blia

B为每一个磁极下的平均磁感应强度,等于每极磁通除以每极的面积l, Bdx= /l

2.元件边所产生电磁转矩

设电枢的直径2R ,因为2R=2p,所以R=p/.

元件数为N, a为并联支路对数,则电枢表面共有元件边数为 4aN ,则电磁力产生的电磁转矩为:

Te = 4aNfxR= 4aNBdx·l·iaR=2pN ia/

若令 CT= 2pN /, 则

Te=  CTia

电磁转矩由磁场的方向和电枢电流的方向决定。

在直流电动机中,电磁转矩的方向与转子的旋转方向相同,为拖动转矩

在直流发电机中,电磁转矩的方向与转子的旋转方向相反,为制动转矩

第四节直流电动机运行分析

教学目的              掌握直流电动机的励磁方式

掌握直流电动机的方程

教学重点              直流电动机的励磁方式

教学难点              直流电动机的电路方程

一、直流电动机的基本方程

    在这里我们将讨论直流电动机的电压、功率和转矩的平衡方程,说明其能量关系。

(一)电枢电路电压平衡方程

1.电动机的反电势   

在电机工作原理的讨论中,我们知道电枢旋转时,电枢中的载流导体割切磁力线产生感应电动势Ea=Ceφn。这个电动势的方向与电枢电流的方向相反,抵制电枢电流的流入,故称为反电动势。因此,电源要向电枢输入电流,就必须克服反电动势的作用,即必须使加在电枢绕组两端的电压U>Ea。l

2.电压平衡方程

                            Ea=U–IaRa                                    式中,Ia为电枢电流(A); Ra为电枢绕组电阻(Ω)

      上式改写后即得电压平衡方程为

                                   U=Ea+IaRa                                     上式表明,电枢绕组两端的电压U可分为两部分,一部分用来平衡反电动势Ea,另一部分就是电枢绕组的电阻压降IaRa。

3.电枢电流    由U=Ea+IaRa可导出电枢电流公式,即

1.026.jpg    

(二)功率平衡方程

1.027.jpg

(三)转矩平衡方程

1.028.jpg

直流无刷电机
使用的是直流电 仅仅是没有电刷而已 至于具体 是靠电子线路实现了电刷的功能。当然 有些种类的直流无刷电机的机械部分 和交流电机几乎一样 这种类型 就可以认为是先用电子线路把直流电变成交流电 再通给电机
直流电机虽然是供直流电  但转子内部的线圈还在交流电路的。带电刷的直流电机是通过电刷换向。而无刷电机是通过逆变电路把直流变成交流,然后共给线圈。常见的是12V散热风扇等。在电脑主机里常用。交流电机 不需要换向片(电刷)。
直流无刷电机的定子绕组是星形连接的,他的转子是永磁体做成的并且转子上有一个位置传感器用于检测转子位置反馈给控制器,控制器 是直流电源,它根据位置传感器反馈的 信号分别使定子绕组通电,形成旋转磁场,直流无刷电机的机械特性比较硬。

2.2直流电机控制原理及特点对直流电机转速的控制即可采用开环控制,也可采用闭环控制。与开环控制相比,速度控制闭环系统的机械特性有以下优越性:闭环系统的机械特性与开环系统机械特性相比,其性能大大提高;理想空载转速相同时,闭环系统的静差率(额定负载时电机转速降落与理想空载转速之比)要小得多;当要求的静差率相同时, 闭环调速系统的调速范围可以大大提高。直流电机的速度控制方案如图1所示。
1.029.jpg 1.030.jpg

1.031.jpg 1.032.jpg 1.033.jpg 1.034.jpg 1.035.jpg 1.036.jpg 1.037.jpg 1.038.jpg 1.039.jpg 1.040.jpg 1.041.jpg 1.042.jpg               +            

1.043.jpg     -

1.044.jpg   

1.045.jpg 1.046.jpg

图 2-1 直流电机速度控制方案



2.3 直流电机调速控制方式选择
2.3.1电阻网络或数字电位器
采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
2.3.2 继电器
采用继电器对电动机的开或关进行控制,通过开关的切换对电机的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。
2.3.3 H桥组成的高电压大电流双全桥式驱动芯片
              L293D是德州仪器公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动芯片,即内含二个H桥的高电压大电流双全桥式驱动器,兼容所有的TTL信号输入。每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源,可驱动4.5V至36V、1A以下的电机。桥型电路保证了可以简单地实现转速和方向的控制;响应的速度很快,性能稳定性好,是一种广泛采用的PWM调速控制芯片。兼于上述三种方案调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三。

2.4 PWM脉宽调制方式

方案一:双极性工作制。双极性工作制是在一个脉冲周期内,单片机两控制口各输出一个控制信号,两信号高低电平相反,两信号的高电平时差决定电动机的转向和转速。

方案二:单极性工作制。单极性工作制是单片机控制口一端置低电平,另一端输出PWM信号,两口的输出切换和对PWM的占空比调节决定电动机的转向和转速。

由于单极性工作制中,应用相对简单易于实现与操作,所以我们采用了单极性工作制。

2.5电机实际转速获取
在Proteus中只有一种直流电机集成了测速传感器,在搜索栏里搜索motor-encoder,即可得到这种电机模型。本设计中设置电机转一圈发出60个脉冲。根据实际运转情况及结合所编写程序,确定转速公式为:
1.047.jpg
V=N*15;V:速度 R/min N:每秒采样的脉冲个数
如右图所示,为带测速功能的直流电机模型

                                                   

                                                   图 2-3 Proteus电机模型                             

2.6 总体设计框图
本系统采用AT89C51作为控制核心,用按键来调节电机转速和LCD1602液晶屏来显示设定转速和测量转速。由上述提供的方案和最后选择结果,则用H桥组成的高电压大电流双全桥式驱动芯片L293D作为本系统的驱动电路,采用光电传感器和20线码盘来读取电机的实际转速。
1.048.jpg 1.049.jpg
1.050.jpg 1.051.jpg 1.052.jpg
1.053.jpg
1.054.jpg
1.055.jpg 1.056.jpg
1.057.jpg
1.058.jpg 1.059.jpg



      图2-4 直流电机控制系统总体框图
1.060.jpg


第三章 硬件设计
3.1 单片机的选型3.1.1 AT89C51介绍   

AT89C51是美国ATMEL公司生产的AT89系列单片机中的一种,它与MCS-51系列的许多机种都具有兼容性,并具有广泛的代表性。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51的特点

  • 与MCS-51 兼容
  • 4K字节可编程闪烁存储器
  • 寿命:1000写/擦循环
  • 数据保留时间:10年
  • 全静态工作:0Hz-24MHz
  • 三级程序存储器锁定
  • 128×8位内部RAM
  • 32可编程I/O线
  • 两个16位定时器/计数器
  • 个中断源
  • 可编程串行通道
  • 低功耗的闲置和掉电模式
  • 片内振荡器和时钟电路

引脚定义及功能

AT89C51有40条引脚,与其他51系列单片机引脚是兼容的。这40条引脚可分为I/O端口线、电源线、控制线、外接晶体线四部分。其封装形式有两种:双列直插封装(DIP)形式和方形封装形式,如图5所示。

          1.061.jpg                                                                                                                            图 3-1 AT89C51管脚图   

主电源引脚

VCC:电源正(+5V)。

GND:电源负。

I/O端口功能

P0口: P0口有八条端口线,命名为P0.0~P0.7,其中P0.0为低位,P0.7为高位。每条线的结构组成如图3-2所示。它由一个输出锁存器,两个三态缓冲器,输出驱动电路和输出控制电路组成。P0口是一个三态双向I/O口,它有两种不同的功能,用于不同的工作环境。P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

    1.062.jpg

                   图3-2 P0口位结构图   


P1口:P1口有八条端口线,命名为P1.0~P1.7,每条线的结构组成如图3-3所示。P1口是一个准双向口,只作普通的I/O口使用,其功能与P0口的第一功能相同。作输出口使用时,由于其内部有上拉电阻,所以不需外接上拉电阻;作输入口使用时,必须先向锁存器写入“1”,使场效应管T截止,然后才能读取数据。P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

1.063.jpg

               图3-3  P1口位结构图

P2口:P2口有八条端口线,命名为P2.0~P2.7,每条线的结构如图3-4所示。P2口也是一个准双向口,它有两种使用功能:一种是当系统不扩展外部存储器时,作普通I/O口使用,其功能和原理与P0口第一功能相同,只是作为输出口时不需外接上拉电阻;另一种是当系统外扩存储器时,P2口作系统扩展的地址总线口使用,输出高8位的地址A7~A15,与P0口第二功能输出的低8位地址相配合,共同访问外部程序或数据存储器(64 KB),但它只确定地址并不能像P0口那样还可以传送存储器的读写数据。P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口有八条端口线,命名为P3.0~P3.7,每条线的结构如图3-1所示。P3口是一个多用途的准双向口。第一功能是作普通I/O口使用,其功能和原理与P1口相同。第二功能是作控制和特殊功能口使用,这时八条端口线所定义的功能各不相同,如表3-4所示。

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口同时为闪烁编程和编程校验接收一些控制信号。

1.064.jpg

           图3-4  P2口位结构图


         1.065.jpg
      图3-5  P3口位结构图

                         表1 P3口各位的第二功能

引脚

第二功能

功 能 说 明

P3.0

RXD

串行数据输入端

P3.1

TXD

串行数据输出端

P3.2

INT0

外部中断0中断请求信号输入端

P3.3

INT1

外部中断1中断请求信号输入端

P3.4

T0

定时/计数器0外部计数脉冲输入端

P3.5

T1

定时/计数器1外部计数脉冲输入端

P3.6

WR

片外RAM写选通信号输出端

P3.7

RD

片外RAM读选通信号输出端













3.1.2电源滤波电路

  由于平时使用的5V电源并不是完全是直流成分,其中还包含了交流信号部分,为了剔除这部分噪声,在电源正极与负极之间并联了两个电容,其中104小电容可滤除高频信号,47uF电容可滤除低频信号,保证了流入单片机的电流基本上为直流电。
此外,在滤波电路旁并联一个LED,作为电源指示灯。其中5.1K电阻起到限流作用,防止LED被烧毁。


1.066.jpg












                                 图3-6 系统时钟






3.1.2 系统时钟的设计

时钟电路是用来产生AT89C51单片机工作时所必须的时钟信号,AT89C51本身就是一个复杂的同步时序电路,为保证工作方式的实现,AT89C51在唯一的时钟信号的控制下严格的按时序执行指令进行工作 ,时钟的频率影响单片机的速度和稳定性。通常时钟由于两种形式:内部时钟和外部时钟。

我们系统采用内部时钟方式来为系统提供时钟信号。AT89C51内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器。

电路中的C3、C4的选择在22PF左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。为了提高稳定性我们采用温度稳定性好的NPO电容,采用的晶振频率为11.592MHZ。  

1.067.jpg





                               图3-7 系统时钟
1.068.jpg


3.1.3 系统复位方式

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。

根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。图中电容C5和电阻R9对电源+5V来说构成微分电路。上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R9,也能达到上电复位的操作功能,如图 (3-7)中所示。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容C5的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行过程中时,按下复位键S0后松开,也能使RST为一段时间的高电平,从而实现上电复位或开关复位的操作。

1.069.jpg












                          图3-8手动复位电路
3.2.L293D芯片介绍
L293D是德州仪器公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动芯片,即内含二个H桥的高电压大电流双全桥式驱动器,兼容所有的TTL信号输入。每个输出都是推拉式驱动电路,与达林顿三极管和伪达林源,可驱动4.5V至36V、1A以下的电机。桥型电路保证了可以简单地实现转速和方向的控制;响应的速度很快,性能稳定性好,是一种广泛采用的PWM调速控制芯片。L293D的逻辑功能如表3-1所示∶


EN A(B)
IN1(IN3)
电机运行情况
H
H
正转
H
L
反转
H
同IN2(IN4)
快速停止
L
X
停止

                         图 3-9 L293D真值表            

3.2.1驱动电路设计
单片机输出的PWM电机控制信号接到L293D EN1端口,IN1和IN2端口控制电机正反转,启动和停止。对应的OUT1和OUT2输出接到直流电机B1两端。

1.070.jpg




                      图 3-10 L293D电机驱动电路
  3.3 脉冲信号的获取
     光电传感器是应用非常广泛的一种器件,有各种各样的形式,如透射式、反射式等,基本的原理就是当发射管光照射到接收管时,接收管导通,反之关断。以透射式为例,如图3-10所示,当不透光的物体挡住发射与接收之间的间隙时,开关管关断,否则打开。为此,可以制作一个遮光叶片如图3-11所示,安装在转轴上,当扇叶经过时,产生脉冲信号。当叶片数较多时,旋转一周可以获得多个脉冲信号。


1.071.jpg
     

        
        

       图3-11光电传感器的原理图

1.072.jpg


             图3-12遮光叶片


3.3.1 LM393芯片介绍

LM393主要特点如下:

●工作电源电压范围宽,单电源、双电源均可工作,单电源:2~36V,双电源:±1~±18V;

●消耗电流小,Icc=0.8mA;

●输入失调电压小,VIO=±2mV

●共模输入电压范围宽,Vic=0~Vcc-1.5V;

●输出与TTL,DTL,MOS,CMOS 等兼容;

●输出可以用开路集电极连接“或”门;


1.073.jpg






                         图3-13 LM393内部结构图


1.074.jpg                          图3-13 LM393引脚功能表

3.3.2 测速电路设计
1.075.jpg







                       图3-14 电机测速电路


测速电路主要由红外发射和接收电路组成,在电动机上安装一对红外发射和接收管, 当电动机转动时,根据电机的转速红外光线透过码盘栅格,因此产生的红外光脉冲信号经LM393电压比较器提供给单片机一个计数脉冲信号。
3.4 LCD1602液晶屏介紹
在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
显示质量高
由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。
数字式接口
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻
液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低
相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介
①液晶显示原理
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:
线段的显示
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH




的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。
字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
汉字的显示
汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。
10.8.2 1602字符型LCD简介
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图3-15:














1.076.jpg
1.077.jpg

图3-15 1602字符型液晶显示器实物图
1602LCD的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:
1.078.jpg

图3-16 16021602LCD尺寸图
1602LCD主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-17所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
图3-17:引脚接口说明表
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
10.8.2.3 1602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令。
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0

1
清显示
0
0
0
0
0
0
0
0
0
1

2
光标返回
0
0
0
0
0
0
0
0
1
*

3
置输入模式
0
0
0
0
0
0
0
1
I/D
S

4
显示开/关控制
0
0
0
0
0
0
1
D
C
B

5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*

6
置功能
0
0
0
0
1
DL
N
F
*
*

7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容

图3-18控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置。
指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。
指令11:读数据。
与HD44780相兼容的芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出

图3-19控制命令表
读写操作时序如图3-20和3-21所示:
1.079.jpg
图3-20 读操作时序
1.080.jpg
图3-21 写操作时序
10.8.2.4 1602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。
1.081.jpg
图3-22 1602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
1.082.jpg
图3-23 字符代码与图形对应图
1602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:显示模式设置
写指令08H:显示关闭
写指令01H:显示清屏
写指令06H:显示光标移动设置
写指令0CH:显示开及光标设置


3.4 .1显示电路图设计
用1602LCD液晶屏实时显示电机的速度,以AT89C51单片机的P0.0-P.07口做八位数据线,P1.0-P1.2为1062的控制端。

1.083.jpg









                          图3-15 显示模块电路


3.5 按键电路设计
运行方式的设置主要有P1口外接按键来完成,判断按键是否按下的方法:然后从P1.4到P1.7逐个检测引脚的电平,如果某个引脚为低电平表示该键按下,此时不需要做相应的处理实现键盘功能,如果引脚为高电平则不做处理。采用4个独立的按键来控制电机的正反转,启停,加减速。


1.084.jpg









                            图3-16 键盘扫描电路







                 第四章 软件的设计

4.1 (程序清单)及系统原理图(附件中)











4.2 系统原理图
1.085.jpg








参 考 文 献

[1] 王兆安等.电力电子技术[M]. 北京.机械工业出版社.2000年.

[2] 周渊深.交直流调速系统与MATLAB仿真[M].北京.中国电力出版社,2007年.

[3] 陈伯时.运动控制系统[M]. 北京.机械工业出版社.2003年.

[4] 黄家善等.电力电子技术[M]. 北京.机械工业出版社.2007年.

[5]孙立志.PWM与数字化电动机控制技术应用[M].北京.中国电力出版社.2008年.

[6] 杨素行.模拟电子技术基础[M].高等教育出版社. 2003年.

[7] 陈明荧. 8051单片机基础教程[M].科学出版社. 2003年.     

[8] 康华光.电子技术基础数字部分[M].高等教育出版社. 2004年.

[9] 李广第.单片机基础 [M].北京航空航天大学出版社. 1999年.



  1. #include
  2. #include "LCD1602.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. bit flag;             //定义标志位,确定是否到了1s
  6. unsigned long x,x1;
  7. uint T0count;        //从T0的计数单元中读取计数的数值
  8. uint timecount;
  9. unsigned char Motor_Count,Set_Count;
  10. sbit KEY1 = P1^4;//按键1
  11. sbit KEY2 = P1^5;//按键2
  12. sbit KEY3 = P1^6;//按键3
  13. sbit KEY4 = P1^7;//按键4
  14. sbit IN1 = P2^5;//电机控制端1
  15. sbit IN2 = P2^6;//电机控制端2
  16. sbit EN = P2^7;              //电机使能端
  17. void Timer(void);
  18. //延时函数
  19. void Delay_ms(uint jj) //延时1毫秒
  20. {
  21.               uint ii;
  22.               while(jj--)
  23.                             for(ii=0;ii<116;ii++);
  24. }
  25. void Motor_Speed(unsigned char Speed) //电机状态
  26. {
  27.               if(Speed==0)  {IN1=0;IN2=0;}//停止
  28.               if(Speed==1)  {IN1=0;IN2=1;}//正转
  29.               if(Speed==2)  {IN1=1;IN2=0;}//反转
  30. }
  31. void main()                 //函数功能:主函数
  32. {               
  33.               unsigned char  Data[3];
  34.                  unsigned int  i,j;
  35.               unsigned char Set_x;
  36.             
  37.               Timer(); //定时器初始化
  38.     LCD1602_init();//液晶初始化
  39. //////////////////////////0123456789ABCDEF
  40.     LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16);//显示实时速度
  41.                                                                                          //0123456789ABCDEF
  42.     LCD1602_Disp_ZF(0x80+0X40,"Set:   r/s      ",16); //设置速度
  43.               //LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
  44.               //LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
  45.               LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
  46.               Motor_Speed(0);//停止
  47.               Set_Count=1;
  48.               Set_x=15;
  49.               Data[0]='0'+Set_x/100;               //显示设置速度
  50.               Data[1]='0'+(Set_x/10)%10; //显示设置速度
  51.               Data[2]='0'+Set_x%10;      //显示设置速度
  52.               LCD1602_Disp_ZF(0x84+0x40,Data,3);              //显示设置速度
  53.               while(1)
  54.               {
  55.             
  56.                             if(flag==1)                  
  57.                             {
  58.                                           flag=0;                        //清标志位
  59.                                           x=T0count*65536+TH0*256+TL0;   //取得时间宽度参数
  60.                                           x=x*2;     //计算速度
  61.                                           timecount=0;
  62.                                           T0count=0;
  63.                                           TH0=0;
  64.                                           TL0=0;
  65.                                           TR0=1;         //TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数
  66.                                           Data[0]='0'+x/100;               //显示当前速度
  67.                                           Data[1]='0'+(x/10)%10; //显示当前速度
  68.                                           Data[2]='0'+x%10;      //显示当前速度
  69.                                           LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16); //显示当前速度
  70.                                           LCD1602_Disp_ZF(0x8a,Data,3); //显示当前速度
  71.                
  72.                                          
  73.                             }
  74.                                                                          if(x>Set_x)//速度调节
  75.                                           {
  76.                                                         if(Set_Count==0)Set_Count=1;
  77.                                                         Set_Count--;
  78.                                                         Delay_ms(50);            
  79.                                           }
  80.                                           if(x<set_x) 速度调节
  81.                                           {
  82.                                                         Set_Count++;
  83.                                                         if(Set_Count==200)Set_Count=199;
  84.                                                         Delay_ms(50);            
  85.                                           }
  86.                             if(!KEY1) //开始停止按键
  87.                             {
  88.                                           Delay_ms(10);
  89.                                           if(!KEY1) //开始停止按键
  90.                                           {
  91.                                                         i++;
  92.                                                         if(i%2==0)
  93.                                                         {
  94.                                                                       Motor_Speed(1);//开始
  95.                                                                       LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
  96.                                                         }
  97.                                                         if(i%2==1)
  98.                                                         {
  99.                                                                       Motor_Speed(0);//停止
  100.                                                                       LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
  101.                                                         }
  102.                                                         while(!KEY1);
  103.                                           }                           
  104.                             }
  105.                             if(!KEY2)              //正转反转按键
  106.                             {
  107.                                           Delay_ms(10);
  108.                                           if(!KEY2)
  109.                                           {
  110.                                                         j++;
  111.                                                         if(j%2==0)//正转
  112.                                                         {            
  113.                                                                       Motor_Speed(1);
  114.                                                                       LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
  115.                                                         }
  116.             
  117.                                                         if(j%2==1)//反转
  118.                                                         {
  119.                                                                       Motor_Speed(2);
  120.                                                                       LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
  121.                                                         }
  122.                                                         while(!KEY2);
  123.                                           }                           
  124.                             }
  125.                             //////////////////////////////////
  126.                             if(!KEY3) //设置加速
  127.                             {
  128.                                           Delay_ms(50);
  129.                                           if(!KEY3)//设置加速
  130.                                           {
  131.                                                         Set_x ++;
  132.                                                         if(Set_x>30)Set_x=30;
  133.                                                         Data[0]='0'+Set_x/100;//显示设置速度
  134.                                                         Data[1]='0'+(Set_x/10)%10;//显示设置速度
  135.                                                         Data[2]='0'+Set_x%10;  //显示设置速度
  136.                                                         LCD1602_Disp_ZF(0x84+0x40,Data,3);//显示设置速度            
  137.                                           }                           
  138.                             }
  139.                             if(!KEY4)//设置减速
  140.                             {
  141.                                           Delay_ms(50);
  142.                                           if(!KEY4)//设置减速
  143.                                           {
  144.                                               if(Set_x==0)Set_x=1;
  145.                                                         Set_x --;
  146.                                                         Data[0]='0'+Set_x/100;//显示设置速度
  147.                                                         Data[1]='0'+(Set_x/10)%10;//显示设置速度
  148.                                                         Data[2]='0'+Set_x%10;  //显示设置速度
  149.                                                         LCD1602_Disp_ZF(0x84+0x40,Data,3);//显示设置速度            
  150.                                           }                           
  151.                             }
  152.                             /////////////////////////////////
  153.                             /////////////////////
  154.                             ///////////////////////////
  155.               }
  156.                  
  157.   }
  158. void t0() interrupt 1 using 0      //T0中断服务
  159. {
  160. T0count++;                      //对P3。4口的脉冲进行计数
  161. }
  162. void t1(void) interrupt 3 using 0       //T1中断服务
  163. {   
  164.     TH1=(65536-368)/256;               //计数初值重装载
  165.     TL1=(65536-368)%256;
  166.     timecount++;
  167.               Motor_Count++;
  168.               if(Motor_Count==Set_Count)              //调节速度
  169.               {
  170.                             EN=0;
  171.               }
  172.               if(Motor_Count==200)  //调节速度
  173.               {
  174.                             EN=1;
  175. ……………………

  176. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整论文下载(word格式 可编辑):
基于51单片机PID电机测速系统论文.doc (1.02 MB, 下载次数: 73)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表