基于单片机的直流电机调速、测速以及显示系统_第1页
基于单片机的直流电机调速、测速以及显示系统_第2页
基于单片机的直流电机调速、测速以及显示系统_第3页
基于单片机的直流电机调速、测速以及显示系统_第4页
基于单片机的直流电机调速、测速以及显示系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机实现直流电机调速、测速以及显示系统摘要本文主要研究了利用Quick51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。单片机具有体积小、功能强、本钱低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮在全社会大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文用8051单片机自制了一个采用了专门的芯片组成了PWM信号的发生系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。还对直流电机的速度进行了测量和显示。霍尔传感器光电传感器关键词:单片机、PWM、直流电机、测速、显示目录摘要1第一章概述3概述31.2Quick51的技术简介和开展前景31.2.1SmartSOPC与Quick5131.2.2Quick51特性41.3Quick51电路结构5第二章总体方案设计62.18051单片机简介72.2PWM信号发生电路设计132.2.1PWM的根本原理132.2.2PWM发生电路主要芯片的工作原理142.3128*64液晶显示16第三章硬件设计与连接17传感器电路设计173.2信号处理电路设计19存储器电路设计203.3.1I2C总线概述203.3.2存储器电路213.4显示电路设计223.5PWM信号发生电路设计23第四章软件设计25系统软件总流程图25程序清单26第五章结论与展望36附录37附一速度控制子程序37附二电路图40辩论41概述概述本文主要研究了利用Quick51系列单片机,通过PWM方式控制直流电机调速的方法。冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果根本相同。PWM控制技术就是以该结论为理论根底,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规那么对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。PWM控制的根本原理很早就已经提出,但是受电力电子器件开展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速开展,PWM控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的开展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,PWM控制技术获得了空前的开展。到目前为止,已经出现了多种PWM控制技术。PWM控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的开展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术开展的主要方向之一。本文就是利用这种控制方式来改变电压的占空比实现直流电机速度的控制。Quick51的技术简介和开展前景1.SmartSOPC与Quick51SmartSOPC教学实验开发平台集众多功能于一体,是SOPC、DSP、EDA、ARM、ARM7SOC以及8051教学实验、科研开发的最正确选择。开发平台采用“主板+核心板〞的模式,更换不同的核心板即可实验不同平台的功能。Quick51正是跟SmartSOPC相配套的8051单片机核心板。Quick51是一款自由的、开放全部系统资源的单片机实验板。单片机芯片采用Philips最新推出的拥有64KBFlash的增强型8052内核单片机P89LV51RD2,工作电压〔3V逻辑是大趋势〕。Quick51与SmartSOPC配合,可以做各种单片机教学实验,如LED点阵扫描显示、键盘检测、动态数码管、液晶屏、电机驱动、I2C.2Quick51特性采用Philips半导体新型单片机P89LV51RD2,增强型Intel8052CPU内核。具有许多增强功能,如内置64KB用户程序Flash,8KB引导Flash〔用来支持ISP和IAP功能〕,1KB片内静态RAM,双倍速模式,双DPTR,4个中断优先级,进入掉电模式后外部中断可唤醒〔8052只有复位,不方便〕,硬件SPI,增强型UART,等等。配备的P89LV51RD2单片机支持ISP〔在系统可编程〕方式下载用户程序。Quick51只需要一根普通电脑RS-232通信电缆〔该电缆已经随SmartSOPC实验箱标配〕就能实现ISP下载,不需要制作专门的下载线。配备1片专门的仿真芯片。在目前最流行的8051内核单片机Windows环境软件开发工具KeilC51的支持下,能够方便地进行硬件在线仿真,而且并不需要安装特别的驱动程序。该仿真芯片能够全面支持单步、全速、断点、跳出、变量观察、外围设备访问等仿真功能。晶振〔默认〕采用插座式安装,为用户替换成其它频点的晶振来做实验提供了方便。复位方式可选:RC复位、按键复位、看门狗复位。此外,看门狗芯片还内置有256B的EEPROM。单片机的4组I/O端口全部用双排插针引出,方便用户做实验。扩展32KB静态RAM。扩展512KB大容量Flash存储器,可以用作程序Flash或者大容量数据存储。扩展1个8位并行高阻输入端口、1个8位并行推挽输出端口。采用PLD器件作为译码器。提供8组输出,地址范围已经印在PCB上,一目了然。在产品光盘里提供译码器内部结构的等效电路原理图。提供丰富的实验例程。1.3Quick51电路结构Quick51的PCB元件布局如图1.1所示。Quick51的跳线设置非常重要,在做Quick51大局部实验时,跳线的接法都和表中“默认〞的接法一致。表1.1Quick51跳线设置表图1.1Quick51PCB元件分布图第二章总体方案设计本速度表由信号预处理电路、8051单片机、LCD显示电路、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路那么用来将放大的信号转换成可与单片机接口的TTL信号;通过单片机的设置可使INT0引脚能够对内部定时器T0的工作进行控制,这样能精确地测出加到INT0引脚的正脉冲宽度(即测出脉冲信号的周期);速度显示局部采用数码显示模块,所得的数据采用I2C总线,并通过E2PROM来存储,因而节省了所需单片机的口线和外围器件,同时也简化了显示局部的软件编程。系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/命令子模块、数据显示模块以及实时中断效劳模块等。该设计能实时地将所测的速度显示出来。该速度表能将传感器输入到单片机的脉冲信号的宽度(传感器将车速转变成相应宽度的脉冲信号)实时地测量出来,然后通过单片机计算出速度,再将所得的数据存储到串口数据存储器,并由动态数码显示模块实时显示出所测速度。本设计用两个按键来控制显示速度。考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形,然后再输入到单片机进行测速。系统方框图如图2-1所示。8051单片机PWM方波信号直流电机测速发电机8051单片机PWM方波信号直流电机测速发电机LCD显示图2-1系统方框图8051单片机简介一、8051单片机的根本组成8051单片机由CPU和8个部件组成,它们都通过片内单一总线连接,其根本结构依然是通用CPU加上外围芯片的结构模式,但在功能单元的控制上采用了特殊功能存放器的集中控制方法。二、CPU及8个部件的作用功能介绍如下中央处理器CPU:它是单片机的核心,完成运算和控制功能。内部数据存储器:8051芯片中共有256个RAM单元,能作为存储器使用的只是前128个单元,其地址为00H—7FH。通常说的内部数据存储器就是指这前128个单元,简称内部RAM。特殊功能存放器:是用来对片内各部件进行管理、控制、监视的控制存放器和状态存放器,是一个特殊功能的RAM区,位于内部RAM的高128个单元,其地址为80H—FFH。内部程序存储器:8051芯片内部共有4K个单元,用于存储程序、原始数据或表格,简称内部ROM。并行I/O口:8051芯片内部有4个8位的I/O口〔P0,P1,P2,P3〕,以实现数据的并行输入输出。串行口:它是用来实现单片机和其他设备之间的串行数据传送。定时器:8051片内有2个16位的定时器,用来实现定时或者计数功能,并且以其定时或计数结果对计算机进行控制。中断控制系统:该芯片共有5个中断源,即外部中断2个,定时/计数中断2个和串行中断1个。振荡电路:它外接石英晶体和微调电容即可构成8051单片机产生时钟脉冲序列的时钟电路。系统允许的最高晶振频率为12MHz。三、8051单片机引脚图四、单片机系统中所用其他芯片简介地址锁存器74LS37374LS373片内是8个输出带三态门的D锁存器。其结构如下列图所示:当使能端G呈高电平时,锁存器中的内容可以更新,而在返回低电平的瞬间实现锁存。如果此时芯片的输出控制端为低,也即是输出三态门翻开,锁存器中的地址信息便可以通过三态门输出。以下是其引脚图:2.程序存储器27128(1)芯片引脚〔2〕功能表引脚工作方式〔片选〕〔允许输出〕VPP〔编程控制〕输出读LLVCCH数据输出维持H*VCC*高阻编程LHVPPL数据输入编程校验LLVPPH数据输出编程禁止H*VPP*高阻3.数据存储器6264〔1〕芯片引脚〔2〕芯片功能表引脚工作方式I/O0—I/O7未选中H***高阻未选中*L**高阻输出禁止LHHH高阻读LHLH数据输出写LHHL数据输入写LHLL数据输入五、8051单片机扩展电路及分析接线分析P0.7P0.0:这8个引脚共有两种不同的功能,分别使用于两种不同的情况。第一种情况是8051不带片外存储器,P0口可以作为通用I/O口使用,P0.7P0.0用于传送CPU的I/O数据。第二种情况是8051带片外存储器,P0.7P0.0在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。P2.7P2.0:这组引脚的第一功能可以作为通用的I/O使用。它的第二功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但是并不能像P0口那样还可以传送存储器的读写数据。P3.7P3.0:这组引脚的第一功能为传送用户的输入/输出数据。它的第二功能作为控制用,每个引脚不尽相同,如下表所示:P3口的位第二功能注释RXD串行数据接收口TXD串行数据发送口外中断0输入外中断1输入T0计数器0计数输入T1计数器1计数输入外部RAM写选通信号外部RAM读选通信号VCC为+5V电源线,VSS为接地线。ALE/线上输出一个高电位脉冲,其下降沿用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出P0.7P0.0引脚线去传送随后而来的片外存储器的读写数据。在不访问片外存储器时,8051自动在ALE/线上输出频率为1/6fOSC的脉冲序列。该脉冲序列可以用作外部时钟源或者作为定时脉冲源使用。/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的目的。PWM信号发生电路设计2.2.1PWM的根本原理PWM〔脉冲宽度调制〕是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而到达控制要求的一种电压调整方法。PWM可以应用在许多方面,比方:电机调速、温度控制、压力控制等等。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通〞和“断开〞时间的长短。通过改变直流电机电枢上电压的“占空比〞来到达改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置〞。如下列图所示:设电机始终接通电源时,电机转速最大为Vmax,设占空比为D=t1/T,那么电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度;Vmax是指电机在全通电时的最大速度;D=t1/T是指占空比。由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而到达调速的目的。严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。PWM的根本原理PWM〔脉冲宽度调制〕是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而到达控制要求的一种电压调整方法。PWM可以应用在许多方面,比方:电机调速、温度控制、压力控制等等。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通〞和“断开〞时间的长短。通过改变直流电机电枢上电压的“占空比〞来到达改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置〞。如下列图所示:设电机始终接通电源时,电机转速最大为Vmax,设占空比为D=t1/T,那么电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度;Vmax是指电机在全通电时的最大速度;D=t1/T是指占空比。由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而到达调速的目的。严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。2.2.2PWM发生电路主要芯片的工作原理1.芯片4585〔1〕芯片4585的用途:对于A和B两组4位并行数值进行比拟,来判断它们之间的大小是否相等。〔2〕芯片4585的功能表:输入输出比拟级取A3、B3A2、B2A1、B1A0、B0A<BA=BA>BA<BA=BA>BA3>B3*****1001A3=B3A2>B2****1001A3=B3A2=B2A1>B1***1001A3=B3A2=B2A1=B1A0>B0**1001A3=B3A2=B2A1=B1A0=B0001001A3=B3A2=B2A1=B1A0=B0010010A3=B3A2=B2A1=B1A0<B0100100A3=B3A2=B2A1<B1****100A3=B3A2<B2*****100A3<B3******100〔3〕芯片4585的引脚图:2.芯片4040芯片4040是一个12位的二进制串行计数器,所有计数器位为主从触发器,计数器在时钟下降沿进行计数。当CR为高电平时,它对计数器进行清零,由于在时钟输入端使用施密特触发器,故对脉冲上升和下降时间没有限制,所有的输入和输出均经过缓冲。芯片4040提供了16引线多层陶瓷双列直插、熔封陶瓷双列直插、塑料双列直插以及陶瓷片状载体等4种封装形式。〔1〕芯片4040的极限值:—18V—VDD输入电流范围:±10mA贮存温度范围:-65°C〔2〕芯片4040引出端功能符号:CP:时钟输入端CR:去除端Q0—Q11:计数脉冲输出端VDD:正电源VSS:地端〔3〕芯片4040功能表:输入输出CPCR↑↓*LLH保持计数所有输出端均为L〔4〕芯片4040的引脚图:128*64液晶显示LCD显示器工作原理就是利用液晶的物理特性;通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过,说简单点就是让液晶如闸门般地阻隔或让光线穿透。LCD的好处有:与CRT显示器相比,LCD的优点主要包括零辐射、低功耗、散热小、体积小、图像复原精确、字符显示锐利等。其接口信号说明如下:第三章硬件设计与连接在信号脉冲发生源上,本系统采用的是开关型霍尔传感器。以磁场作为媒介,利用霍尔传感器可以检测多种物理量,如位移、振动、转速、加速度、流量、电流、电功率等。它不仅可以实现非接触测量,并且采用永久磁铁产生磁场,不需附加能源。另外霍尔传感器尺寸小、价格廉价、应用电路简单、性能可靠,因而获得极为广泛的应用。除了直接利用霍尔传感器外,还利用它开发出各种派生的传感器。金属或半导体薄片的两个端面通以控制电流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如下。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率,就可以得出圆盘的转速。同样道理,根据圆盘(车轮)的转速,再结合圆盘的周长就是计算出物体的位移。如果要增加测量位移精度,可以在圆盘(车轮)上多增加几个磁钢。由于传感器内部为集电极开路输出,所以需外接一个上拉电阻,其阻值与电源电压大小有关,一般取1~2k,如图3-10所示。图3-10传感器输出电路信号处理电路设计系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器DM74LS14来把放大器生成的单相脉冲转换成与COMS电平相兼容方波信号,同时将输出信号加到单片机的P3.4口上。利用施密特触发器状态转换过程中的正反应作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于VT+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。从传感器得到的矩形脉冲经传输后往往发生波形畸变。当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。无论出现上述的那一种情况,都可以通过用施密特反相触发器整形而得到比拟理想的矩形脉冲波形。只要施密特触发器的VT+和VT-设置得适宜,均能受到满意的整形效果。信号预处理电路如图3-11所示。图3-11信号预处理电路图存储器电路设计.1I2C总线概述I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA〔串行数据线〕及SCL〔串行时钟线)两根线在连到总线上器件之间传送信息,并根据地址识别每个器件,不管是单片机、存储器、LCD驱动器还是键盘接口。采用I2C总线标准单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为假设干相对独立模块,通过软件寻址实现片选,减少了器件片选线连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。传统的单片机串行接口发送和接收一般都各用一条线,如MCS51系列的TXD和RXD,而I2C总线那么根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。I2C总线的数据传送格式是:在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比拟,如果与主器件发送到总线上的地址一致,那么该器件即为被主器件寻址的器件,其接收信息还是发送信息那么由第8位(R/W)确定。在I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送字节后面必须跟一个认可位〔第9位〕,也叫应答位〔ACK〕。数据的传送过程如图3所示。每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时,〔例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C总线上的数据字节〕可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL线,主器件继续传送。.2存储器电路AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽〔2.5~5.5V〕、擦写次数多〔大于10000次〕、写入速度快〔小于10ms〕等特点。AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89C2051试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C2051试验开发板上和单片机的P3.5连接。第6脚SCL为串行时钟输入线,在AT89C2051试验开发板上和单片机的P3.6连接。SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。AT24C02中带有片内地址存放器。每写入或读出一个数据字节后,该地址存放器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。AT24C02是CMOS2048位串行E2PROM,在内部的组织成256×8位。AT24C02的特点是具有允许在简单的二线总线上工作的串行接口和软件协议。在本设计中用芯片AT24C02的SDA端与单片机的P3.7口相连,SCL端与单片机的P3.5口相连。因为在这个I2C总线上只有一个器件,所以把AT24C02的地址设为000,即把A0、A2、A3都接地。单片机计算出来的里程数据通过SDA、SCL向AT24C02输送数据。单片机首先向AT24C02发送写信号,当确认后从单片机内部的数据储存单元提取数据然后向AT24C02的内部地址传送数据。当显示里程时,单片机首先向AT24C02发送读信号,然后确认后,单片机从AT24C02内部的地址向单片机的读出单元字节读出数据,供显示所用。与单片机的接口如图3-12所示。图3-12AT24CO2与单片机的接口电路显示电路设计3.5PWM信号发生电路设计PWM波可以由具有PWM输出的单片机通过编程来得以产生,也可以采用PWM专用芯片来实现。当PWM波的频率太高时,它对直流电机驱动的功率管要求太高,而当它的频率太低时,其产生的电磁噪声就比拟大,在实际应用中,当PWM波的频率在18KHz左右时,效果最好。在本系统内,采用了两片4位数值比拟器4585和一片12位串行计数器4040组成了PWM信号发生电路。两片数值比拟器4585,即图上U2、U3的A组接12位串行4040计数输出端Q2—Q9,而U2、U3的B组接到单片机的P1端口。只要改变P1端口的输出值,那么就可以使得PWM信号的占空比发生变化,从而进行调速控制。12位串行计数器4040的计数输入端CLK接到单片机C51晶振的振荡输出XTAL2。计数器4040每来8个脉冲,其输出Q2—Q9加1,当计数值小于或者等于单片机P1端口输出值X时,图中U2的〔A>B〕输出端保持为低电平,而当计数值大于单片机P1端口输出值X时,图中U2的〔A>B〕输出端为高电平。随着计数值的增加,Q2—Q9由全“1”变为全“0使用这个方法时,单片机只需要根据调整量输出X的值,而PWM信号由三片通用数字电路生成,这样可以使得软件大大简化,同时也有利于单片机系统的正常工作。由于单片机上电复位时P1端口输出全为“1”第四章软件设计系统软件总流程图开始开始设堆栈清标志清暂存清显示T0初始化串行口初始化CPU开中断扫描键盘速度采样显示图4.1系统软件主程序流程图4.2程序清单/* 128×64LCD驱动程序头文件*/#ifndefLCD_H_#defineLCD_H_#include<REG51.H>//定义背光控制信号sbitLCD_BL=P1^4;//点亮背光灯voidLcdLightOn();//熄灭背光灯voidLcdLightOff();//清屏voidLcdClear();//初始化voidLcdInit();//显示ASCⅡ码voidLcdPutChar(unsignedcharc);//显示字符串voidLcdPuts(unsignedchar*s);#endif//LCD_H_/* 128×64LCD驱动程序*/#include<INTRINS.H>#include<ABSACC.H>//#include"LCD.H"//定义屏幕光标〔取值0~63,光标本身不可见〕unsignedcharLcdCursor;inti,j;/*函数:LcdLightOn()功能:点亮背光灯*/voidLcdLightOn(){ LCD_BL=1;}/*函数:LcdLightOff()功能:熄灭背光灯*/voidLcdLightOff(){ LCD_BL=0;}/*函数:LcdGetBF()功能:读出状态位BF返回: BF=1,表示忙,不可进行任何操作 BF=0,表示不忙,可以进行正常操作*/bitLcdGetBF(){ unsignedchardat; dat=XBYTE[0xD002]; //XBYTE的定义见<ABSACC.H> return(bit)(dat&0x80);}/*函数:LcdWriteCmd()功能:向LCD发送命令参数: cmd:命令字,详见器件的数据手册*/voidLcdWriteCmd(unsignedcharcmd){ while(LcdGetBF()); XBYTE[0xD000]=cmd;}/*函数:LcdWriteDat()功能:向LCD写入数据参数:dat,要写入的数据说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1*/voidLcdWriteDat(unsignedchardat){ while(LcdGetBF()); XBYTE[0xD001]=dat;}/*函数:LcdReadDat()功能:从LCD读出数据返回:读出的数据*//*unsignedcharLcdReadDat(){ volatileunsignedchardat; while(LcdGetBF()); dat=XBYTE[0xD003]; dat=XBYTE[0xD003]; //需要连续执行两次才能够读出真正的数据 returndat;}*//*函数:LcdSetAC()功能:设置DDRAM〔显示数据RAM〕的AC〔地址计数器〕值参数: ac:地址计数器值,范围0~63*/voidLcdSetAC(unsignedcharac){ ac&=0x3F; ac|=0x80; LcdWriteCmd(ac);}/*函数:LcdClear()功能:LCD清屏,并使光标回到0*/voidLcdClear(){ LcdWriteCmd(0x01); //清屏命令 LcdCursor=0;}/*函数:LcdDelay()功能:延时(t*100)个机器周期*/voidLcdDelay(unsignedchart){ unsignedcharn; do { n=49; while(--n!=0); }while(--t!=0);}/*函数:LcdInit()功能:LCD初始化*/voidLcdInit(){ LcdWriteCmd(0x30); //设置根本指令集 LcdDelay(3); LcdWriteCmd(0x30); //设置根本指令集〔需要再执行一次〕 LcdDelay(1); LcdWriteCmd(0x0C); //开启显示 LcdDelay(3); LcdClear(); //清屏 LcdDelay(250); LcdWriteCmd(0x06); //设置进入点 LcdDelay(10);}/*函数:LcdCheckAC()功能:根据光标位置调整AC*/voidLcdCheckAC(){ switch(LcdCursor) { case16: LcdSetAC(16); break; case32: LcdSetAC(8); break; case48: LcdSetAC(24); break; case64: LcdCursor=0; LcdSetAC(0); break; default: break; }}/*函数:LcdPutChar()功能:显示ASCII码参数: c为可显示的ASCII码〔0x20~0x7F〕*/voidLcdPutChar(unsignedcharc){ LcdWriteDat(c); LcdCursor++; LcdCheckAC();}/*函数:LcdPutHZ()功能:显示汉字参数: ch,cl:汉字编码*/voidLcdPutHZ(unsignedcharch,unsignedcharcl){ if(LcdCursor&0x01) {//显示汉字时,必须偶地址对准,即光标位置不能是奇数 LcdPutChar(''); //额外输出一个空格 } LcdWriteDat(ch); LcdWriteDat(cl); LcdCursor+=2; LcdCheckAC();}/*函数:LcdPuts()功能:显示字符串参数: *s:要显示的字符串〔可同时包含ASCII码和汉字〕*/voidLcdPuts(unsignedchar*s){ unsignedcharch,cl; for(;;) { ch=*s++; if(ch=='\0')break; if(ch<0x80) { LcdPutChar(ch); } else { cl=*s++; LcdPutHZ(ch,cl); } }}/* 显示主程序*///#include"LCD.H"#include<REG51.H>//#include"DELAY.H"/*包含延时函数的头部文件delay_us();delay_ms();*//*函数:Delay()t>0时,延时〔t*0.001〕s*//********************************************************/unsignedcharSD[4]={'1','2','3','4'};//速度设定unsignedcharFK[4]={'2','2','3','4'};//速度反应intD=0;//方向控制中间变量 unsignedintPwm=0;//速度产生中间变量unsignedintp=0;unsignedintValue=0; unsignedintPwm_Value=0; unsignedintm;//unsignedinta,b,c,d;sbitKEY1=P2^0;sbitKEY2=P2^1;sbitKEY3=P2^2;sbitMotorA=P1^6;sbitMotorB=P1^7; bitSWTR;bitSWTF;unsignedintSWTV;#definePwm_MAX255voidDelay(unsignedintT){SWTV=T;SWTR=1;while(!SWTF);SWTR=0;SWTF=0;}voidKEY(){ if(KEY1==0) { Value=Value+1; } if(KEY2==0) { Value=Value-1; } if(KEY3==0) { if(D==0) { D=1; } else { D=0; } }}voidPWM_Init(){static unsignedchart=0; t++; if(t>Pwm_MAX)t=0; if(t<=Pwm_Value) { Pwm=1; } else { Pwm=0; } if(D==0) { MotorA=0; MotorB=Pwm; } else { MotorA=Pwm; MotorB=0; }}voidShow_Value(unsignedcharCH[]){inti;for(i=0;i<4;i++) { LcdPutChar(CH[i]); }}voidShow_Init(){LcdWriteCmd(0x80);LcdPuts("速度设定");LcdWriteCmd(0x90);LcdPuts("速度反应");LcdWriteCmd(0x88);LcdPuts("速度方向");LcdWriteCmd(0x98);LcdPuts("测控071");LcdWriteCmd(0x9c);LcdPuts("14号");} voidT_int()//定时器初始化{TMOD&=0x00;TMOD=0x25;TH1=TL1=0xa4;TH0=TL0=0;ET1=1;TR1=1;EA=1;}voidMeasureSpeed(){TH0=TL0=0;TR0=1;Delay(2420);TR0=0;TF0=0;m=2*(TH0*255+TL0);if(m>Value){Pwm_Value=Pwm_Value-1;}if(m<Value){Pwm_Value=Pwm_Value+1;}FK[3]=(m%10)+48;FK[2]=(m/10%10)+48;FK[1]=(m/100%10)+48;FK[0]=(m/1000%10)+48;SD[3]=(Value%10)+48;SD[2]=(Value/10%10)+48;SD[1]=(Value/100%10)+48;SD[0]=(Value/1000%10)+48;}voidmain(){ unsignedchari;MotorA=0; MotorB=0;EA=0; T_int();Delay(50);LcdInit();//LCD初始化/*****************************************/for(i=0;i<2;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("反向"); } }}voidT1ZD()interrupt3{TR1=0; // KEY();//按键处理 PWM_Init();if(SWTR)//延时 { if(--SWTV==0)SWTF=1; }TR1=1;}第五章结论与展望本设计以8051为核心,利用单片机的运算和控制功能,并采用系统化LCD显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。传感器也是实现测量与控制不可缺少的环节,是测控系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和转换,一切

温馨提示

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

评论

0/150

提交评论