课程设计(论文)-基于单片机的直流电机测速、调速及显示系统设计.doc_第1页
课程设计(论文)-基于单片机的直流电机测速、调速及显示系统设计.doc_第2页
课程设计(论文)-基于单片机的直流电机测速、调速及显示系统设计.doc_第3页
课程设计(论文)-基于单片机的直流电机测速、调速及显示系统设计.doc_第4页
课程设计(论文)-基于单片机的直流电机测速、调速及显示系统设计.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江西理工大学创新实践报告课程设计报告题目:基于单片机的直流电机测速、调速及显示系统设计学 院: 机电工程学院专业班级: 测控071班学 号: 16姓 名:指导教师:设计地点: 机电实验中心同组人员: 设计时间:2010-10-082010-10-25摘要本文主要研究了利用quick51系列单片机控制pwm信号从而实现对直流电机转速进行控制的方法。单片机具有体积小、功能强、成本低、应用面广泛等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮在全社会大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文用8051单片机自制了一个采用了专门的芯片组成了pwm信号的发生系统,并且对pwm信号的原理、产生方法以及如何通过软件编程对pwm信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。还对直流电机的速度进行了测量和显示。关键词:单片机、 pwm、调速、测速、显示系统 目录摘要1目录2第一章概述31.1概述31.2 quick51的技术简介和发展前景31.2.1 smartsopc与quick5131.2.2 quick51特性4第二章 总体方案设计52.1 8051单片机简介62.2 pwm信号发生电路设计122.2.1 pwm的基本原理122.3 128*64液晶显示13第三章 硬件设计与连接143.1传感器电路设计143.2 信号处理电路设计163.3存储器电路设计173.3.1 i2c总线概述173.3.2 存储器电路183.4 显示电路设计183.5 pwm信号发生电路设计19第四章 软件设计204.1系统软件总流程图204.2程序清单21第五章 结论与展望31附录32附一 速度控制子程序32附二 电路图35参考文献36答辩问题37第一章 概述1.1 概述本文主要研究了利用quick51系列单片机,通过pwm方式控制直流电机调速的方法。冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。pwm控制技术就是以该结论为理论基础,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。pwm控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,pwm控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,pwm控制技术获得了空前的发展。到目前为止,已经出现了多种pwm控制技术。pwm控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为pwm控制技术发展的主要方向之一。本文就是利用这种控制方式来改变电压的占空比实现直流电机速度的控制。1.2 quick51的技术简介和发展前景1.2.1 smartsopc与quick51 smartsopc教学实验开发平台集众多功能于一体,是sopc、dsp、eda、arm、arm7 soc以及8051教学实验、科研开发的最佳选择。开发平台采用“主板核心板”的模式,更换不同的核心板即可实验不同平台的功能。 quick51正是跟smartsopc相配套的8051单片机核心板。quick51是一款自由的、开放全部系统资源的单片机实验板。单片机芯片采用philips最新推出的拥有64kb flash的增强型8052内核单片机p89lv51rd2,工作电压3.3v(3v逻辑是大趋势)。quick51与smartsopc配合,可以做各种单片机教学实验,如led点阵扫描显示、键盘检测、动态数码管、液晶屏、电机驱动、i2c总线、红外收发、蜂鸣器、数字温度计、电子钟,等等。1.2.2 quick51特性l 采用philips半导体新型单片机p89lv51rd2,增强型intel 8052 cpu内核。具有许多增强功能,如内置64kb用户程序flash,8kb引导flash(用来支持isp和iap功能),1kb片内静态ram,双倍速模式,双dptr,4个中断优先级,进入掉电模式后外部中断可唤醒(8052只有复位,不方便),硬件spi,增强型uart,等等。 l 配备的p89lv51rd2单片机支持isp(在系统可编程)方式下载用户程序。quick51只需要一根普通电脑rs-232通信电缆(该电缆已经随smartsopc实验箱标配)就能实现isp下载,不需要制作专门的下载线。l 配备1片专门的仿真芯片。在目前最流行的8051内核单片机windows环境软件开发工具keil c51的支持下,能够方便地进行硬件在线仿真,而且并不需要安装特别的驱动程序。该仿真芯片能够全面支持单步、全速、断点、跳出、变量观察、外围设备访问等仿真功能。l 晶振(默认11.0592mhz)采用插座式安装,为用户替换成其它频点的晶振来做实验提供了方便。l 复位方式可选:rc复位、按键复位、看门狗复位。此外,看门狗芯片还内置有256b的eeprom。l 单片机的4组i/o端口全部用双排插针引出,方便用户做实验。l 扩展32kb静态ram。l 扩展512kb大容量flash存储器,可以用作程序flash或者大容量数据存储。l 扩展1个8位并行高阻输入端口、1个8位并行推挽输出端口。l 采用pld器件作为译码器。提供8组输出,地址范围已经印在pcb上,一目了然。在产品光盘里提供译码器内部结构的等效电路原理图。第二章 总体方案设计本速度表由信号预处理电路、8051单片机、lcd显示电路、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机接口的ttl 信号;通过单片机的设置可使int0 引脚能够对内部定时器t0 的工作进行控制,这样能精确地测出加到int0 引脚的正脉冲宽度(即测出脉冲信号的周期);速度显示部分采用数码显示模块, 所得的数据采用i2c总线, 并通过e2prom来存储, 因而节省了所需单片机的口线和外围器件, 同时也简化了显示部分的软件编程。系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/ 命令子模块、数据显示模块以及实时中断服务模块等。该设计能实时地将所测的速度显示出来。该速度表能将传感器输入到单片机的脉冲信号的宽度(传感器将车速转变成相应宽度的脉冲信号) 实时地测量出来,然后通过单片机计算出速度, 再将所得的数据存储到串口数据存储器, 并由动态数码显示模块实时显示出所测速度。本设计用两个按键来控制显示速度。考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形, 然后再输入到单片机进行测速。系统方框图如图2-1所示。8051单片机pwm方波信号直流电机测速发电机lcd显示图2-1 系统方框图2.1 8051单片机简介一、8051单片机的基本组成 8051单片机由cpu和8个部件组成,它们都通过片内单一总线连接,其基本结构依然是通用cpu加上外围芯片的结构模式,但在功能单元的控制上采用了特殊功能寄存器的集中控制方法。二、cpu及8个部件的作用功能介绍如下中央处理器cpu:它是单片机的核心,完成运算和控制功能。内部数据存储器:8051芯片中共有256个ram单元,能作为存储器使用的只是前128个单元,其地址为00h7fh。通常说的内部数据存储器就是指这前128个单元,简称内部ram。特殊功能寄存器:是用来对片内各部件进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的ram区,位于内部ram的高128个单元,其地址为80hffh。内部程序存储器:8051芯片内部共有4k个单元,用于存储程序、原始数据或表格,简称内部rom。并行i/o口:8051芯片内部有4个8位的i/o口(p0,p1,p2,p3),以实现数据的并行输入输出。串行口:它是用来实现单片机和其他设备之间的串行数据传送。定时器:8051片内有2个16位的定时器,用来实现定时或者计数功能,并且以其定时或计数结果对计算机进行控制。中断控制系统:该芯片共有5个中断源,即外部中断2个,定时/计数中断2个和串行中断1个。振荡电路:它外接石英晶体和微调电容即可构成8051单片机产生时钟脉冲序列的时钟电路。系统允许的最高晶振频率为12mhz。三、8051单片机引脚图 四、单片机系统中所用其他芯片简介1 地址锁存器74ls37374ls373片内是8个输出带三态门的d锁存器。其结构如下图所示:当使能端g呈高电平时,锁存器中的内容可以更新,而在返回低电平的瞬间实现锁存。如果此时芯片的输出控制端为低,也即是输出三态门打开,锁存器中的地址信息便可以通过三态门输出。以下是其引脚图: 2程序存储器27128(1)芯片引脚 (2)功能表 引脚 工作方式(片选)(允许输出)vpp(编程控制)输出读llvcch数据输出维持h*vcc*高阻编程lhvppl数据输入编程校验llvpph数据输出编程禁止h*vpp*高阻3数据存储器6264(1)芯片引脚 (2)芯片功能表 引脚工作方式i/o0i/o7未选中h*高阻未选中*l*高阻输出禁止lhhh高阻读lhlh数据输出写lhhl数据输入写lhll数据输入五、8051单片机扩展电路及分析接线分析p0.7-p0.0:这8个引脚共有两种不同的功能,分别使用于两种不同的情况。第一种情况是8051不带片外存储器,p0口可以作为通用i/o口使用,p0.7-p0.0用于传送cpu的i/o数据。第二种情况是8051带片外存储器,p0.7-p0.0在cpu访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送cpu对片外存储器的读写数据。p2.7-p2.0:这组引脚的第一功能可以作为通用的i/o使用。它的第二功能和p0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但是并不能像p0口那样还可以传送存储器的读写数据。p3.7-p3.0:这组引脚的第一功能为传送用户的输入/输出数据。它的第二功能作为控制用,每个引脚不尽相同,如下表所示:p3口的位第二功能注释p3.0rxd串行数据接收口p3.1txd串行数据发送口p3.2外中断0输入p3.3外中断1输入p3.4t0计数器0计数输入p3.5t1计数器1计数输入p3.6外部ram写选通信号p3.7外部ram读选通信号vcc为+5v电源线,vss为接地线。ale/:地址锁存允许/编程线,配合p0口引脚的第二功能使用,在访问片外存储器时,8051cpu在p0.7-p0.0引脚线上输出片外存储器低8位地址的同时还在ale/线上输出一个高电位脉冲,其下降沿用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出p0.7-p0.0引脚线去传送随后而来的片外存储器的读写数据。在不访问片外存储器时,8051自动在ale/线上输出频率为1/6 fosc的脉冲序列。该脉冲序列可以用作外部时钟源或者作为定时脉冲源使用。 / vpp:允许访问片外存储器/编程电源线,可以控制8051使用片内rom还是片外rom。如果=1,那么允许使用片内rom;如果=0,那么允许使用片外rom。:片外rom选通线,在执行访问片外rom的指令movc时,8051自动在线上产生一个负脉冲,用于片外rom芯片的选通。其他情况下,线均为高电平封锁状态。rst/vpd:复位备用电源线,可以使8051处于复位工作状态。xtal1和xtal2:片内振荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接8051片内osc的定时反馈电路。石英晶振起振后,应能在xtal2线上输出一个3v左右的正弦波,以便于8051片内的osc电路按石英晶振相同频率自激振荡,电容c1、c2可以帮助起振,调节它们可以达到微调fosc的目的。2.2 pwm信号发生电路设计2.2.1 pwm的基本原理pwm(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。pwm可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。在pwm驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,pwm又被称为“开关驱动装置”。如下图所示: 设电机始终接通电源时,电机转速最大为vmax,设占空比为d= t1 / t,则电机的平均速度为va = vmax * d,其中va指的是电机的平均速度;vmax 是指电机在全通电时的最大速度;d = t1 / t是指占空比。由上面的公式可见,当我们改变占空比 d = t1 / t时,就可以得到不同的电机平均速度vd,从而达到调速的目的。严格来说,平均速度vd 与占空比d并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。2.3 128*64液晶显示lcd显示器工作原理就是利用液晶的物理特性;通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过,说简单点就是让液晶如闸门般地阻隔或让光线穿透。 lcd的好处有:与crt显示器相比,lcd的优点主要包括零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。其接口信号说明如下:第三章 硬件设计与连接3.1传感器电路设计在信号脉冲发生源上,本系统采用的是开关型霍尔传感器。以磁场作为媒介,利用霍尔传感器可以检测多种物理量,如位移、振动、转速、加速度、流量、电流、电功率等。它不仅可以实现非接触测量,并且采用永久磁铁产生磁场,不需附加能源。另外霍尔传感器尺寸小、价格便宜、应用电路简单、性能可靠,因而获得极为广泛的应用。除了直接利用霍尔传感器外,还利用它开发出各种派生的传感器。金属或半导体薄片的两个端面通以控制电流ic,并在薄片的垂直方向上施加磁感应强度为b的磁场,则在垂直于电流和磁场的方向上将产生电势uh,称为霍尔电势或霍尔电压(如图l所示)。霍尔电势uh=khicb(其中kh为霍尔元件灵敏度,它与所用的材料及几何尺寸有关)。这种现象称为霍尔效应,而用这种效应制成的元件称为霍尔元件。由于霍尔元件输出的电压信号较小,并且有一定温度误差,目前已较少直接使用霍尔元件作传感器。霍尔传感器原理图如图3-6所示。图3-6 霍尔传感器磁场效应本系统采用开关型霍尔传感器a04e。开关型霍尔传感器是一种集成传感器,它内部含有霍尔元件、放大器、稳压电源、带一定滞后特性的比较器及集电极开路输出部分等,如图3-7所示。开关型霍尔传感器的工作特性如图3-8 所示。 图3-7 开关型霍尔传感器内部结构图图3-8 开关型霍尔传感器工作特性当外加的磁感应强度超过动作点bop时,传感器输出低电平,但磁感应强度降到动作点bop以下时,传感器输出电平不变,一直要降到释放点bre时,传感器才由低电平跃变为高电平。bop与bre之间的滞后(或称为回差)使开关动作更为可靠。 图3-9 霍尔传感器检测转速示意图霍尔传感器检测转速示意图3-9如下。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率,就可以得出圆盘的转速。同样道理,根据圆盘(车轮)的转速,再结合圆盘的周长就是计算出物体的位移。如果要增加测量位移精度,可以在圆盘(车轮)上多增加几个磁钢。由于传感器内部为集电极开路输出,所以需外接一个上拉电阻,其阻值与电源电压大小有关,一般取12k,如图3-10所示。图3-10 传感器输出电路3.2 信号处理电路设计 系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5v的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器dm74ls14来把放大器生成的单相脉冲转换成与coms电平相兼容方波信号,同时将输出信号加到单片机的p3.4口上。利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于vt+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。从传感器得到的矩形脉冲经传输后往往发生波形畸变。当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。无论出现上述的那一种情况,都可以通过用施密特反相触发器整形而得到比较理想的矩形脉冲波形。只要施密特触发器的vt+和vt-设置得合适,均能受到满意的整形效果。信号预处理电路如图3-11所示。 图3-11 信号预处理电路图3.3存储器电路设计 3.3.1 i2c总线概述i2c总线是一种用于ic器件之间连接的二线制总线。它通过sda(串行数据线)及scl(串行时钟线)两根线在连到总线上器件之间传送信息,并根据地址识别每个器件,不管是单片机、存储器、lcd驱动器还是键盘接口。采用i2c总线标准单片机或ic器件,其内部不仅有i2c接口电路,而且将内部各单元电路按功能划分为若干相对独立模块,通过软件寻址实现片选,减少了器件片选线连接。cpu不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。i2c总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。i2c总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。i2c总线的数据传送格式是:在i2c总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(r/w)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(r/w)确定。3.3.2 存储器电路图3-12 at24co2与单片机的接口电路3.4 显示电路设计3.5 pwm信号发生电路设计pwm波可以由具有pwm输出的单片机通过编程来得以产生,也可以采用pwm专用芯片来实现。当pwm波的频率太高时,它对直流电机驱动的功率管要求太高,而当它的频率太低时,其产生的电磁噪声就比较大,在实际应用中,当pwm波的频率在18khz左右时,效果最好。在本系统内,采用了两片4位数值比较器4585和一片12位串行计数器4040组成了pwm信号发生电路。两片数值比较器4585,即图上u2、u3的a组接12位串行4040计数输出端q2q9,而u2、u3的b组接到单片机的p1端口。只要改变p1端口的输出值,那么就可以使得pwm信号的占空比发生变化,从而进行调速控制。12位串行计数器4040的计数输入端clk接到单片机c51晶振的振荡输出xtal2。计数器4040每来8个脉冲,其输出q2q9加1,当计数值小于或者等于单片机p1端口输出值x时,图中u2的(ab)输出端保持为低电平,而当计数值大于单片机p1端口输出值x时,图中u2的(ab)输出端为高电平。随着计数值的增加,q2q9由全“1”变为全“0”时,图中u2的(ab)输出端又变为低电平,这样就在u2的(ab)端得到了pwm的信号,它的占空比为(255 -x / 255)*100%,那么只要改变x的数值,就可以相应的改变pwm信号的占空比,从而进行直流电机的转速控制。第四章 软件设计4.1系统软件总流程图开始设堆栈清标志清暂存清显示t0初始化串行口初始化cpu开中断扫描键盘速度采样显示图4.1 系统软件主程序流程图4.2程序清单/*lcd.c12864 lcd驱动程序头文件*/#ifndef lcd_h_#define lcd_h_#include/定义背光控制信号sbit lcd_bl=p14;/点亮背光灯void lcdlighton();/熄灭背光灯void lcdlightoff();/清屏void lcdclear();/初始化void lcdinit();/显示asc码void lcdputchar(unsigned char c);/显示字符串void lcdputs(unsigned char*s);#endif /lcd_h_/*lcd.c12864 lcd驱动程序*/#include #include /#include lcd.h/定义屏幕光标(取值063,光标本身不可见)unsigned char lcdcursor;int i,j;/*函数:lcdlighton()功能:点亮背光灯*/void lcdlighton()lcd_bl = 1;/*函数:lcdlightoff()功能:熄灭背光灯*/void lcdlightoff()lcd_bl = 0;/*函数:lcdgetbf()功能:读出状态位bf返回:bf=1,表示忙,不可进行任何操作bf=0,表示不忙,可以进行正常操作*/bit lcdgetbf()unsigned char dat;dat = xbyte0xd002;/xbyte的定义见return (bit)(dat & 0x80);/*函数:lcdwritecmd()功能:向lcd发送命令参数:cmd:命令字,详见器件的数据手册*/void lcdwritecmd(unsigned char cmd)while ( lcdgetbf() );xbyte0xd000 = cmd;/*函数:lcdwritedat()功能:向lcd写入数据参数:dat,要写入的数据说明:目标地址由地址计数器ac隐含指定,写完后ac自动加1*/void lcdwritedat(unsigned char dat)while ( lcdgetbf() );xbyte0xd001 = dat;/*函数:lcdreaddat()功能:从lcd读出数据返回:读出的数据*/*unsigned char lcdreaddat()volatile unsigned char dat;while ( lcdgetbf() );dat = xbyte0xd003;dat = xbyte0xd003;/需要连续执行两次才能够读出真正的数据return dat;*/*函数:lcdsetac()功能:设置ddram(显示数据ram)的ac(地址计数器)值参数:ac:地址计数器值,范围063*/void lcdsetac(unsigned char ac)ac &= 0x3f;ac |= 0x80;lcdwritecmd(ac);/*函数:lcdclear()功能:lcd清屏,并使光标回到0*/void lcdclear()lcdwritecmd(0x01);/清屏命令lcdcursor = 0;/*函数:lcddelay()功能:延时(t*100)个机器周期*/void lcddelay(unsigned char t)unsigned char n;don = 49;while ( -n != 0 ); while ( -t != 0 );/*函数:lcdinit()功能:lcd初始化*/void lcdinit()lcdwritecmd(0x30);/设置基本指令集lcddelay(3);lcdwritecmd(0x30);/设置基本指令集(需要再执行一次)lcddelay(1);lcdwritecmd(0x0c);/开启显示lcddelay(3);lcdclear();/清屏lcddelay(250);lcdwritecmd(0x06);/设置进入点lcddelay(10);/*函数:lcdcheckac()功能:根据光标位置调整ac*/void lcdcheckac()switch ( lcdcursor )case 16:lcdsetac(16);break;case 32:lcdsetac(8);break;case 48:lcdsetac(24);break;case 64:lcdcursor = 0;lcdsetac(0);break;default:break;/*函数:lcdputchar()功能:显示ascii码参数:c为可显示的ascii码(0x200x7f)*/void lcdputchar(unsigned char c)lcdwritedat(c);lcdcursor+;lcdcheckac();/*函数:lcdputhz()功能:显示汉字参数:ch,cl:汉字编码*/void lcdputhz(unsigned char ch, unsigned char cl)if ( lcdcursor & 0x01 )/显示汉字时,必须偶地址对准,即光标位置不能是奇数lcdputchar( );/额外输出一个空格lcdwritedat(ch);lcdwritedat(cl);lcdcursor += 2;lcdcheckac();/*函数:lcdputs()功能:显示字符串参数:*s:要显示的字符串(可同时包含ascii码和汉字)*/void lcdputs(unsigned char *s)unsigned char ch, cl;for (;)ch = *s+;if ( ch = 0 ) break;if ( ch 0x80 )lcdputchar(ch);elsecl = *s+;lcdputhz(ch,cl);/*显示主程序*/#includelcd.h#include/#include delay.h /* 包含延时函数的头部文件delay_us();delay_ms(); */ /*函数:delay()延时1ms 65.53st0时,延时(t*0.001)st=0时。延时65.53s*/*/unsigned char sd4=1,2,3,4;/速度设定unsigned char fk4=2,2,3,4;/速度反馈int d=0;/方向控制中间变量unsigned int pwm=0;/速度产生中间变量 unsigned int p=0; unsigned int value=0; unsigned int pwm_value=0; unsigned int m; /unsigned int a,b,c,d;sbit key1=p20;sbit key2=p21;sbit key3=p22;sbit motora=p16;sbit motorb=p17; bit swtr;bit swtf;unsigned int swtv; #define pwm_max 255void delay(unsigned int t)swtv=t;swtr=1;while(!swtf);swtr=0;swtf=0;void key()if(key1=0)value=value+1;if(key2=0)value=value-1;if(key3=0)if(d=0)d=1; else d=0; void pwm_init() staticunsigned char t=0;t+; if(tpwm_max)t=0;if(t=pwm_value) pwm=1;else pwm=0;if(d=0)motora=0;motorb=pwm;elsemotora=pwm;motorb=0; void show_value(unsigned char ch) int i; for(i=0;ivalue) pwm_value=pwm_value-1;if(mvalue) pwm_value=pwm_value+1;fk3=(m%10)+48;fk2=(m/10%10)+48;fk1=(m/100%10)+48;fk0=(m/1000%10)+48;sd3=(value%10)+48;sd2=(value/10%10)+48;sd1=(value/100%10)+48;sd0=(value/1000%10)+48;void main() unsigned char i; motora=0; motorb=0;ea=0; t_int(); delay(50); lcdinit();/lcd初始化/*/ for(i=0;i2;i+)lcdlightoff();delay(660);lcdlighton();delay(660); delay(660); lcdclear(); delay(660);/*/ea=1; show_init(); delay(20);value=200; pwm_value=value; for(;) key();/按键处理measurespeed();lcdwritecmd(0x94);show_value(fk);lcdwritecmd(0x84);show_value(sd);lcdwritecmd(0x8c); if(d=0)lcdputs(正向);if(d=1)lcdputs(反向);void t1zd() interrupt 3tr1=0;/key();/按键处理pwm_init();if(swtr) /延时 if(-swtv=0) swtf=1;tr1=1;第五章 结论与展望本设计以8051为核心,利用单片机的运算和控制功能,并采用系统化lcd显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。传感器也是实现测量与控制不可缺少的环节,是测控系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。本方案基本实现了直流电机的速度即时显示,并可通过控制按键显示速度,并通过pwm方波对直流电机的速度与转向进行控制。这一方案可以在很多领域有很好的应用,例如我们现在交通不可缺少的代步工具电动车的车速表,采用数字式显示不仅一目了然,还很精确。随着科技的不断发展,传感器的广泛应用,各种智能仪表都会采用数字式显示,不仅读取方便,而且精度更高,更可靠。 附录附一 速度控制子程序void t_int();/定时器初始化tmod=0x00;tmod=0x25;th1=tl1=0xa4;th0=tl0=0;void delay(unsigned int t)swtv=t;swtr=1;while(!swtf);swtr=0;swtf=0void measurespeed();/速度计算int m;th0=tl0=0tr0=1delay(2500);tr0=0;tf0=0;m=th0*255+th0;/已知速度不吵过100a=m%10;b=m/10%10;c=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论