1.基本原理
主体电路:即直流电机PWM控制模块。这部分电路主要由单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小和了解电机的转向,能够很方便的实现电机的智能控制。通过单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:设计输入部分:这一模块主要是利用带中断的独立式键盘来实现。设计控制部分:主要由单片机的外部中断扩展电路组成。设计显示部分:包括LED数码显示部分。数码显示部分由4个8位数码管显示模块组成。直流电机PWM控制实现部分:主要由一些二极管、电机和LM298直流电机驱动模块组成。
2.总体设计框图
系统组成:直流电机PWM调速方案如图9.4所示:
图9.4 直流电机PWM调速方案
方案说明:直流电机PWM调速系统以STC89C52单片机为控制核心,由命令输入模块、数码管显示模块及电机驱动模块组成。采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转控制;同时单片机不停的将从键盘读取的数据送到数码管显示模块去显示。
3.硬件设计
系统采用STC89C52控制输出数据,由PWM信号发生电路产生PWM信号,送到直流电机,从而实现对电机速度和转向的控制,达到直流电机调速的目的。
4.PWM
(1)PWM简介。
PWM(脉冲宽度调制)是按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。
(2)PWM占空比。
如图9.5,设电机始终接通电源时,电机转速最大为Vmax,设占空比D=t1/T,则电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度。由上面的公式可见,当我们改变占空D=t1/T时,就可以得到不同的电机平均速度Va,从而达到调速的目的。
图9.5 电机平均速度与PWM占空比关系图
(3)PWM调速软件实现。
可采用定时器做为脉宽控制的调速方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。
(4)PWM控制电路。
常见PWM控制电路如图9.6所示。
图9.6 常见PWM控制电路
(5)PWM控制流程图。
PWM控制流程图如图9.7所示。
图9.7 PWM控制流程图
5.硬件连接
直流申机PWM控制硬件仿真图如图9.8所示。
6.软件设计
直流电机控制程序。
图9.8 直流申机PWM控制硬件仿真图
二、单片机控制超声波测距
1.超声波测距原理
超声波测距原理如图9.9所示。
(2)模块自动发送8个40kHz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
图9.9 超声波测距原理图
2.超声波测距的程序流程图:
图9.10 超声波测距的程序流程图
3.程序如下:
三、单片机测温电路的设计
单片机系统除了可以对电信号进行测量外,还可以通过外接传感器对温度信号进行测量。传统的温度检测大多以热敏电阻为传感器,但热敏电阻可靠性差、测量的温度不够准确,且必须经专门的接口电路转成数字信号后才能被单片机处理。DS18B20是一种集成数字温度传感器,采用单总线与单片机连接即可实现温度的测量。本节内容在先介绍DS18B20的工作原理、时序和指令后,然后设计完成一个数字温度计。温度计功能要求采用数码管显示温度,小数点后2位有效数字,实际温度高于某个值时用蜂鸣器报警。
1.DS18B20工作原理
DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供单片机处理,可实现温度的精度测量与控制。DS18B20性能特点见表9.1所示。
表9.1 DS18B20性能指标
(1)封装外形。
根据应用领域不同,DS18B20有常见的引脚TO-92小体积封装和SOP8封装,见图9.11所示,表9.2给出了TO-92封装的引脚功能,其中DQ引脚是该传感器的数据输入/输出端(I/O),该引脚为漏极开路输出,常态下呈高电平。DQ引脚是该器件与单片机连接进行数据传输单一总线,单总线技术是DS18B20的一个特点。
图9.11 DS18B20的外形及引脚排列
表9-2 DS18B20引脚功能描述
(2)工作原理。
DS18B20的内部主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速贮存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验码发生器等7部分。
高速寄存器RAM由9个字节的存储器组成。见表9.3所示。其中,第0、1字节是温度转换有效位,第0字节的低3位存放了温度的高位,高5位存放温度的正负值;第1字节的高4位存放温度的低位,后4位存放温度的小数部分;第2和第3个字节是DS18B20的与内部E2PROM的有关的TH和TL,用来存储温度上限和下限,可以通过程序设计把温度的上下限从单片机中读到TH和TL中,并通过程序再复制到DS18B20内部E2PROM中,同时TH和TL在器件加电后复制E2PROM的内容;第4个字节是配置寄存器,第4个字节的数字也可以更新;第5,6,7三个字节是保留的。
表9-3 高速寄存器RAM
续表
(3)硬件连接。
DS18B20是单片机外设,单片机为主器件,DS18B20为从器件。图9.12的接法是单
片机与一个DS18B20通信,单片机只需要一个I/O口就可以控制DS18B20,为了增加单片机I/O口驱动的可靠性,总线上接有上拉电阻。对如果要控制多个DS18B20进行温度采集,只要将所有DS18B20的DQ全部连接到总线上就可以了,在操作时,通过读取每个DS18B20内部芯片的序列号来识别。
图9.12 单片机与一个DS18B20通信(www.xing528.com)
①DS18B20工作时序
单总线协议规定一条数据线传输串行数据,时序有严格的控制,对于DS18B20的程序设计,必须遵守单总线协议。DS18B20操作主要分初始化、写数据、读数据。下面分别介绍操作步骤。
初始化
图9.13 DS18B20初始化时序
初始化是单片机对DS18B20的基本操作,时序见图9.13,主要目的是单片机感知DS18B20存在并为下一步操作做准备,同时启动DS18B20,程序设计根据时序进行。DS18B20初始化操作步骤为:
·先将数据线置高电平1,然后延时(可有可无)。
·数据线拉到低电平0。然后延时750μs(该时间范围可以在480~960μs),调用延时函数决定。
·数据线拉到高电平1。如果单片机P1.0接DS18B20的DQ引脚,则P1.0此时设置高电平,称为单片机对总线电平管理权释放。此时,P1.0的电平高低由DS18B20的DQ输出决定;
·延时等待。如果初始化成功则在15~60ms总线上产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断。
·若单片机读到数据线上的低电平0后,说明DS18B20存在并相应,还要进行延时,其延时的时间从发出高电平算起(第5步的时间算起)最少要480μs。
·将数据线再次拉到高电平1,结束初始化步骤。
从单片机对DS18B20的初始化过程来看,单片机与DS18B20之间的关系如同有人与人之间对话,单片机要对DS18B20操作,必须先证实DS18B20的存在,当DS18B2响应后,单片机才能进行下面的操作。
②对DS18B20写数据。
图9.14 18B20的写时序
·数据线先置低电平0,数据发送的起始信号,时序见图9.14
·延时确定的时间为15μs;
·按低位到高位顺序发送数据(一次只发送一位)。
·延时时间为45μs,等待DS18B20接收;
·将数据线拉到高电平1,单片机释放总线;
·重复①~⑤步骤,直到发送完整个字节;
·最后将数据线拉高,单片机释放总线。
③DS18B20读数据。
图9.15 18B20的读时序
·将数据线拉高,时序图见图9.15所示;
·延时2μs,
·将数据线拉低到0,
·延时6μs,延时时比写数据时间短;
·将数据线拉高到1,释放总线
·延时4μs
·读数据线的状态得到一个状态位,并进行数据处理。
·延时30μs。
·重复前七个步骤,直到读取完一个字节。
只有在熟悉了DS18B20操作时序后,才能对器件进行编程,由于DS18B20有器件编号、温度数据有低位高位、另外还有温度的上线限,读取的数据较多,所以DS18B20提供了自己的指令。
2.DS18B20指令
(1)ROM操作指令
DS18B20指令主要有ROM操作指令、温度操作指令两类。ROM操作指令主要针对DS18B20的内部ROM。每一个DS18B20都有自己独立的编号,存放在DS18B20内部64位ROM中,ROM内容见表9.4所示。64位ROM中的序列号是出厂前已经固化好,它可以看做该DS18B20的地址序列码。其各位排列顺序是,开始8位为产品类型标号,接下来48位是该DS18B20自身的序列号,最后8位是前面56位的CRC循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一条总线上挂接多个DS18B20的目的。ROM操作指令见表9.5。
表9.4 64位ROM定义
表9.5 ROM操作指令
在实际应用中,单片机需要总线上的多个DS18B20中的某一个进行操作时,事前应将每个DS18B20分别与总线连接,先读出读出其序列号;然后再将所有的DS18B20连接到总线上,当单片机发出匹配ROM命令(55H),紧接着主机提供的64位序列,找到对应的DS18B20后,之后的操作才是针对该器件得。
如果总线上只存在一个DS18B20,就不需要读取ROM编码以及匹配ROM编码了,只要跳过ROM(CCH)命令,就可进行如下温度转换和读取操作。
(2)温度操作指令
温度操作指令见表9.6所示,DS18B20在出厂时温度数值默认为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,依次从高速寄存器第0、1地址读2字节共16位,读完后将低11位的二进制数转转换为实际温度值。0地址对应的1个字节的前5个数字为符号位,这5位同时变化,前5位为1时,读取的温度为负值;前5位为0时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。
表9.6 温度操作指令
3.硬件连接
STC89C51单片机和DS18B20的硬件连接图如图9.16所示,单片机的P10和DS18B20的数据口相连接。单片机通过P10口对DS18B20进行初始化,DS18B20将转换后的数字温度值通过P10口传给单片机。
图9.16 DS18B20硬件连接图
4.程序设计
编程思路:首先单片机通过I/O口调用初始化函数Init_DS18B20()对DS18B20按照初始化时序进行初始化,启动温度的转换,再将转换后的数字传给单片机,单片机通过计算将数字温度转换成实际的温度值,通过数码管显示出来,数码管显示采取在定时器0中动态显示,P0端驱动共阳七段数码管,P20~P25端通过非门接共阳数码管的公共端,应用程序清单如下:
三、仿真
程序运行效果图如下图9.17所示
图9.17 用DS18B20显示当前温度的效果图
1.单片机开发系统的功能有哪些?
2.常用的单片机开发系统有哪些类型?各有什么特点?
3.单片机应用系统的设计原则是什么?软、硬件设计的步骤是什么?
4.通常采用硬件抗干扰的措施有哪些?软件抗干扰的措施有哪些?
5.试设计一个单片机温度控制系统,要求:
①温度分三档:第一档为室温,第二档为40℃,第三档为50℃。温度控制误差≤±2℃。
②升温由3台1000W电炉实现。已知3台电炉同时工作,可保证在3分钟内将温室温度提高到60℃以上。
③要求实时显示温室温度,显示位数3位。
④当不能保证所有要求的温度范围时,应发出报警信号。
⑤对升温和降温过程的时间不作要求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。