单片机典型案例开发(三)

控制/MCU

1877人已加入

描述

  一、基于单片机的多功能防醉驾系统装置设计

  基于ATmega16超低功耗单片机的2J2001A型数码酒精探测控制仪,探测传感器安装在汽车内,分别在主驾驶车位上的头顶上、方向盘上、每一个车门的边上安装,当驾驶人员进入驾驶座位后,可以自动对酒精浓度进行探测,当系统通过对5个酒精测试仪的数据分析后,会判定出驾驶员是否是饮酒驾车和醉酒驾车,并分别采取对应的措施,以确保行车和驾驶员的安全。系统可以根据检测到的酒精含量是否超标控制汽车点火器打开或者关闭,如果超标,则驾驶人员无法启动汽车同时安全带会自动收紧,而且系统会呼叫相应的人员过来帮助驾驶员,因此从根本上杜绝了酒后驾车的出现。该系统具有性价比高,智能化程度高,工作稳定可靠的优点。

  1 系统工作原理

  系统采用超高灵敏度酒精传感器用旁热型半导体式酒精气敏元件MQ3,超低功耗ATmega16单片机系统,自动探测酒精浓度的方法,可以防止驾驶人员逃避检测,以判断驾驶员是否是酒后开车,系统总体设计如图1所示。主机电路包括8个模块,分别是酒精传感电路模块、电源模块、GPS定位模块、键盘控制模块、液晶显示模块、声光报警模块、语音呼叫模块、继电器控制模块。该系统放置在汽车仪表盘位置,当司机打开车门时,酒精探测控制仪启动,此时发动机处于被锁状态,汽车无法启动。酒精传感器加热后,探测控制仪对酒精传感器探测的气体信号进行检测。由于酒精含量与酒精传感器检测后产生的电压信号成特定的比例关系,因而可根据电压信号进行酒精含量的判断。检测到的信号经过放大和滤波之后,通过单片机内置的12位ADC转换为数字信号,由单片机对此信号进行处理判断,假设酒精含量没有超标,LCD显示屏幕显示当前酒精浓度,同时绿色指示灯(正常)亮起,控制继电器不起作用,汽车随之启动;反之红色指示灯(不正常)亮起并进行声光报警,控制继电器切断点火装置电源,同时安全带收紧,系统启动呼叫紧急联系人装置,通过GPRS导航仪测定当前位置并以语音或短信“我现在在XX方位,我喝醉了,请速来”告诉给紧急联系人,此时驾驶人员无法启动汽车,从根本上实现控制酒后驾车。汽车启动后,控制仪随即进入低功耗状态,只有酒精浓度探测电路一直工作,一旦驾驶人员驾驶过程中饮酒,控制仪立即恢复到正常工作状态。

  单片机

  2 系统主要电路设计

  (1)主控电路

  本控制仪采用了由Atmel公司研发出的新一代高性能、低功耗、高集成化的8位微处理器,具有先进的RISC结构,大多数指令的执行时间为单个时钟周期增强型ATmega16单片机,它的工作电压为4.5~5.5 V,工作频率为0~16 MHz,支持JTAG端口仿真和编程,仿真效果比传统仿真更真实有效。它的高度集成不但大大降低了故障率,而且在成本、体积、稳定性方面都有明显优势。系统主控电路如图2所示,包含晶振电路、复位电路等。

  (2)酒精检测电路

  酒精传感器采用旁热型半导体式酒精气敏元件MQ3,探测范围为10~1000ppm。酒精检测电路由高精度酒精传感器、信号调理放大电路、滤波电路和单片机内置12位ADC等组成,主要功能是检测酒精含量,判断其是否超标,如图3所示。

  单片机

  (3)指示灯电路

  指示灯电路有红绿黄三个指示灯,红灯是电源指示灯,工作时亮;绿灯是检测提示灯,因为酒精探头需要一定时间加热,才能达到理想的灵敏度,加热时间到,绿灯亮,表示可以进行浓度探测;黄灯为报警指示灯,黄灯不亮,表示可以行车;当黄灯亮时,表示酒精浓度超标,不可以驾驶,同时黄灯闪烁的频率越高,酒精浓度越高。如图4所示。

  (4)液晶显示电路

  此系统选用的是广州瑞通科技有限公司的SED1335图形点阵LCD模块。这是一款低功耗的点阵图形式LCD,可以工作在3.3 V供电的情况下,显示格式为128(列)×64(行),具有多功能指令,内部带有中文字库,既可以工作于串行方式又可以工作于并行方式,很容易与16位的单片机相连。本系统中与单片机的连接采用并行工作模式,以液晶显示控制芯片ATmega16的异步串行通信端USART为外部数据或控制指令的输入断口,如图5所示。

  (5)GPS导航系统设置电路

  本设计在系统终端采用了GPS导航系统模块作为开发平台,当酒精检测系统发出醉酒超标信号时,该模块就会将所在地点的信息发到语音呼叫模块上。在平时无醉酒(饮酒)情况下,该模块就充当GPS实时导航系统,为驾驶员提供必要的信息。

  (6)继电器控制电路

  控制继电器有两个主要部分,一个是控制系统,另一个是被控制系统。其起动机的工作原理如图6所示。

  单片机

  (7)语音呼叫系统控制电路

  语音呼叫系统是继酒精检测电路发出超标信号后,该系统读取GPS模块传送过来的信息并通过语音呼叫系统把饮酒者所在地点信息传给其最近联系人,让他过来帮忙,如:“我现在在XX方位,我喝醉了,请速来”。其电路如图7所示。

  (8)报警和键盘电路

  利用蜂鸣器作为报警器,当酒精含量超标时,发出禁止行车警告音;不超标时发出允许行车提示音。由单片机的I/O口驱动蜂鸣器来实现。

  3 系统软件设计

  软件部分根据系统功能进行模块化编程。控制仪主程序流程图如图8所示,实现酒精含量检测、酒精含量是否超标判别、酒精含量显示、声光报警等功能。系统初始化后,对酒精传感器进行加热,自动进入测量状态,然后采集酒精含量电压信号,与设定的精度浓度进行比较,如果高于这个浓度,则显示该浓度,并进行声光报警,同时切断点火电路,驾驶人员不能发动汽车;如果低于这个浓度,则显示所测的浓度,同时启动发动机。

  单片机

  通过电路中预留的JTAG接口调试程序,依据检测系统不同功能的需要,采用模块化的设计,将程序分成几个主要的功能模块:气体检测、工作电压设置、采样数据上传。

  4 结语

  酒精监控系统是为预防或杜绝醉酒驾车引发交通事故发生而设计的。通过对各个电路功能及软件工作流程的研究与制作,基本实现了设计要求。系统具有自动测量、智能化程度高、功耗低等特点,对预防酒后驾车具有很好的效果,在实际应用中具有很好的推广价值。

  二、智能电饭煲中单片机的应用

  1 引言

  微电脑或电脑控制的智能电饭煲符合现代人的要求,人性化的界面设计,使得人们一眼看出当前工作状态,让您更安心,各种烹调过程全部由电脑自动控制,并且大多的智能电饭煲采用太空“黑晶”内胆,超硬耐磨,恒久美观,所有的这些特点符合现代人的省时、省力、耐用的观念。

  本文主要介绍利用SPMC65P2404A芯片来对电饭煲的过程进行控制,SPMC65P2404A是凌阳公司的8位元单片机,最高工作频率为8MHz,工作电压2.5V~5V,有192字节的RAM和4K字节的OTP ROM,有23个可编程IO口,8通道10位A/D转换器,2通道8位定时/计数器,2通道16位定时/计数器,1个12位PWM输出口,有低电压、上电、看门狗、外部信号、错误地址复位,并且有一个蜂鸣器输出口。

  2 总体方案介绍

  利用凌阳8位MCU设计的智能电饭煲控制系统原理框图如图2-1所示,通过按键来选择功能模式、显示电路完成显示当前状态和定时时间;通过温度传感器来对温度进行采样;通过MCU的控制最终实现对继电器的控制,从而来控制对加热盘的加热与否,电源部分完成对单片机系统和外围电路提供5V电源,并且对加热盘进行加热。

  单片机

  图2-1 控制系统构成框图

  3 系统硬件设计

  1、由单片机SPMC65P2404A控制的电饭煲的硬件原理图如图3-1所示,它包括按键输入部分,温度检测输入电路,复位和晶振电路,PA6、PA7完成对顶盖和底盘的温度的检测,PA5完成对继电器的控制,SPMC65P2404A是系统的核心部分。

  单片机

  图3-1 电饭煲的电路原理图

  芯片特性简介

  SPMC65P2404A是凌阳公司的8位元单片机,最高工作频率为8MHz,工作电压2.5V~5V,有192字节的RAM和4K字节的OTP ROM,有23个可编程IO口,8通道10位A/D转换器,2通道8位定时/计数器,2通道16位定时/计数器,1个12位PWM输出口,有低电压、上电、看门狗、外部信号、错误地址复位,并且有一个蜂鸣器输出口……。利用这些资源,能够实现电饭煲的功能。

  2、显示电路:

  显示电路由共阳极数码管和10个LED组成,通过单片机位选和所送的数据来点亮相应的LED和数码管的显示状态。其电路原理图如图3-2所示:

  单片机

  图3-2 显示电路

  3、电源电路:

  电源部分为单片机提供+5V的直流稳压源,并且通过降压、整流、滤波之后的+14V电压对继电器进行供电,通过控制三极管射极的导通与否来控制继电器的工作状态。电源电路原理图如图3-3所示

  单片机

  图3-3 电源电路

  4、温度采集部分电路图:

  J2和J3是温度传感器的两个接口,其中J2和J3分别是顶盖和底盘温度传感器的接口,单片机检测的信号实际上是与温度传感器分压的电阻的电压值,因为温度传感器的电阻值会随温度的上升而减小,所以分压电阻的电压值间接反映了某一时刻的温度,电路原理图如图3-4所示:

  单片机

  图3-4 温度传感器电路

  4 系统软件设计

  4.1 主程序流程

  从样机分析中大致设计整个系统,整个系统输入包括2个温度传感器,5个按键;输出包括2位七段数码管、10个发光二极管、继电器控制信号等。根据控制功能,将程序设计为几个主要的模块,程序主流程见图4-1所示:

  程序主流程图

  单片机

  4.2 子程序介绍

  1、 诊断子程序

  诊断程序主要进行温度采集并判断传感器是否良好,主要对2个温度传感器连续检测20次,若测到的数据不在范围内(温度范围:-10℃~160℃),则表明传感器短路或断路错误,数码显示“E”,并禁止按键操作。

  2、 键盘扫描子程序

  程序每循环一次扫描一次键盘,如果扫描到有键按下,则暂存键值,如果连续5次扫描到的键值都一样,则认为是稳定的键值。

  3、 系统共有5个按键,在不同的状态下,每个键只要轻按一次就有效。系统的五个键接于PA1 、PA3、PA2 、PA0、PA4,如果按键值有效则返回值的相应位为0,否则相应位为1。

  4、 温度采集子程序

  热敏电阻灵敏度高,为了防止干扰及其它原因导致测出的温度值变化太快,引起控制部件频繁动作,温度采集采用滑动平均值滤波方法。即在同一个通道上连续采集三个数据,取其中的中间值。

  5、 显示子程序

  系统共有2位七段数码管显示及10个发光二极管显示。数码管主要有6种状态需要显示:待机状态、出错显示、焖饭、保温、煮饭中及定时时间显示。发光二极管显示所选择的功能、开始及保温状态。功能显示需采用轮循方式,在按下开始键之前,开始灯闪烁。进入保温状态后,保温指示灯亮。LED显示程序由位码扫描子程序及数码显示状态选定子程序组成。

  三、STC单片机自动下载系统设计

  引言

  STC单片机下载程序不需要编程器烧写,可以通过串口下载。美中不足的是,STC单片机下载时必须进行冷启动,即下载信号加到单片机串口以后必须对单片机断电再上电,这给用户带来了一些不便。尤其是反复调试程序需要多次下载时,显得更加繁琐。

  为了解决这一问题,有必要研制一种STC单片机专用的自动下载系统,使系统接收到上位机发往单片机的下载信号后,自动冷启动STC单片机,完成下载任务。

  1 原理分析

  STC单片机下载时,需要使用宏晶公司提供的STCISP软件。下载开始时,上位机软件首先向单片机发出下载命令。自动下载系统收到上位机对单片机发出的下载命令后,实现对单片机的断电、上电冷启动操作。单片机经冷启动后,收到命令数据流后作出回应,开始下载程序。需要注意的是,单片机在正常工作中,串口有可能接收数据,由于自动下载系统与单片机串口连接,因而系统必须具有自动判断接收的数据流是否为下载命令的能力,保证及时冷启动目标单片机。

  为了检测下载程序的命令数据流,可以采用如下方法:从PC的串口引出连接线,接至PC的另一个串口,用串口调试助手打开;用STC-ISP软件发送下载命令,可以检测到在波特率为9 600 bps的情况下,该软件持续向单片机发送十六进制的0x80;当自动下载系统连续接收到足够数量的0x80时,即可判定接收到了下载命令数据流,从而进入冷启动程序。

  2 系统硬件设计

  2.1 主控芯片STC15F104E简介

  自动下载系统需要接收上位机发往目标单片机的下载命令程序流,并对目标单片机进行冷启动。STC15F104E是宏晶公司研发的一款单片机,具有省去一些外部电路而功能较全面的优点。

  该单片机的特点有:

  ◆内部集成了可靠复位,省去了外部复位电路。

  ◆内部集成了R/C时钟(在常温下仅有5‰温漂),省去了外部晶振。

  ◆内部集成了2个16位可重装载定时器,与普通8051单片机兼容。

  ◆为DIP8/SOP8封装,体积较小,功耗较低。

  ◆增强型8051内核,单时钟周期,信号处理速度快,实时性较好。

  由于STC15F104E可以省去传统单片机的复位电路、外部晶振电路,且采用贴片封装,因此占用电路板面积非常小,适合集成在电路板上,因而作为本系统的主控芯片。

  2.2 主控电路

  如图1所示,整个系统以STC15F104E为核心进行设计。STC15F104E的P3.0脚与目标单片机STC89C52RC的串口接收端相连,即将发往目标单片机的信号连接到自动下载系统,实现信号的获取和处理。由丁自动下载系统不需要发出任何信息,STC15F104E的P3.1引脚悬空,不与目标单片机相连。

  单片机

  对目标单片机进行冷启动,实现断电、再上电,可以用三极管作为电子开关实现。必须注意到的是,三极管的最大可通过电流不要小于单片机电路的所需电流。如果三极管仅作为单片机供电的开关,由于STC89系列单片机的正常丁作模式功耗为2~7 mA,90系列三极管通常情况下可以满足需求。但在某些情况下,单片机的串口上电后会给单片机供电,使单片机各引脚电平处于不确定的状态,因而必须对目标电路板整体进行冷启动,三极管必须满足目标电路板的总电流需求。由于三极管8550的最大可通过电流为1.5 A,可以满足绝大多数电路的供电需求。所以选择三极管8550连接到目标单片机STC89C52RC的VCC脚,作为对其冷启动的开关。

  如图1所示,D1为指示灯,其亮灭可以通过STC15F104E的P3.3脚控制。在程序中加入相应的语句即可实现灯的亮灭与闪烁,以显示系统的状态。

  3 系统软件设计

  STC单片机自动下载系统软件流程如图2所示。在初始化后,系统循环检测是否接收到下载信号;经过判断证实接收到下载信号后,就切断目标单片机电源;等待适当的时间后,再给目标单片机上电。单片机正常工作期间,系统接收到发往目标单片机串口的非下载命令程序,经自动判断后不作任何动作。

  单片机

  3.1 串口模拟程序

  由于STC15F104E没有串口,因而必须利用定时器模拟串口。其方法是,定义一个常量,根据所需要的波特率对该常量赋值,并将该常量值赋到定时所用的寄存器中。在模拟外部晶振为11.059 2 MHz、波特率为9 600 bps的情况下,设置常量BAUD为0xFE80,并将该常量赋值到TL1、TH1两个寄存器中,实现定时。每到相应时间触发定时中断程序,将外部引脚的状态读入并存入预先设定的数组中,完成模拟串口读入字节的任务。

  3.2 下载命令检测程序

  在STC上位机软件发出的下载命令中,波特率为9 600 bps时数据流为连续的0x80。由于在单片机正常工作时也有可能接收0x80,下载系统只有严格检测到连续多个0x80时,才能判断为接收到了下载命令。如果其中有一个不是0x80,则重新检测计数。这里设定为当系统连续接收到200个0x80时,判定为接收到了下载命令。

  3.3 冷启动操作和指示灯程序

  接收到下载命令后,STC15F104E首先关闭定时器中断,停止模拟串口的接收工作。之后将P3.4置1,切断目标单片机的电源。延迟1~2 s后置0,恢复对目标单片机的供电。考虑到STC上位机下载软件从发送下载命令到单片机开始下载大约需要1~2 s的时间,恢复供电后需要继续延迟5 s,保证目标单片机已经开始下载后再启动定时器中断。

  STC单片机接收到下载命令后,必须作出回应才能进行下载。上位机发出的下载信号同时发送到目标单片机和自动下载系统,自动下载系统中的单片机的P3.1脚悬空,而目标单片机的P3.1与上位机串口相连。这样,只有目标单片机能够回应下载命令实现下载,自动下载系统中的单片机不能回应下载命令,避免了对上位机的干扰。

  结语

  STC单片机自动下载系统省去了操作人员手动开关电源的不便,避免了相应的机械损耗,具有较高的实用价值。


  四、Proteus的单片机演奏系统

  当前的很多用单片机实现音乐演奏的系统都是利用开发板结合仿真器实现的,这种方法不是很复杂,实现也较方便,但是调试不是很方便,且成本也较高。 本文提出的一种基于Proteus 的单片机演奏音乐的方法,非常简单实用,且该方法基于软件来实现的,所以成本非常低,调试方便,效果也很不错,适合于爱好音乐的单片机学习者。 单片机系统的设计分两大部分:硬件设计部分和软件设计部分。

  1 硬件设计

  硬件部分比较简单,如果在开发板上做实验可仿下面图1 电路连接。

  单片机

  AT89C51 单片机的P2.5 口控制一个8550 的三极管,三极管控制电磁蜂鸣器的电源通断。

  如果用Proteus 软件来仿真的话,电路更加简单,见图2。

  单片机

  图2 在Proteus 环境下用单片机控制蜂鸣器发声的原理图。

  需要的关键元件:单片机和蜂鸣器。

  为了便于软件编程,先要了解单片机唱歌的基本原理。

  什么是声音呢?声音是空气的振荡,不同的振荡频率我们就可以听到不同声调的声音。 音的频谱范围约在几十到几千赫兹。

  其次,如何让蜂鸣器发声?蜂鸣器有很多种类,但大致分为两类:有源式(直流电就发声,但频率单一);无源式(根据输入方波频率而发出不同的声音)。 这里选择无源式蜂鸣器。

  单片机唱歌的基本原理:利用程序来控制单处机某个口线出一定频率的方波到蜂鸣器,蜂鸣器就可以发出一定音调的声音,若再利用不同的延时程序改变输出频率,就可以改变音调,进而就可让单片机发出“1”、“2”,“3”,“4”,“5”,“6”,“7”的音乐。

  2 软件设计

  通过软件延时或者定时器延时来的方式以不同频率改变口线的的高低电平状态来实现的。 如果只是让蜂鸣器发声这已经够了。 但是我们要的是唱歌,所以还有一些工作需要作。

  2.1 音调

  输出不同频率的方波,以实现1、2、3、4 等的不同音调;比如,发出200HZ 的音频,其周期为1/200s,即5ms. 这样,当 P2.5 的高电平或低电平的持续时间为2.5ms 时,就能发出200HZ 的音调。 我们可以写一个延时子程序,用R3 来提供参数,R3=1 时,延时为20us,那么R3 取2500/20=125(7DH)时,就可以发出200Hz 的音调,提供不同的R3 常数,可以得到不同的音调变化。

  利用通用发声程序可以编写乐曲演奏程序,乐曲是按照一定的高低,长短和强弱的关系组成的音调,在一首乐曲中,每音符的音高和音长与频率和节拍有关(如图3 所示)。

  单片机

  图3 音符的音高和音长与频率的关系

  图3 画出了两个音阶(一个音阶是8 个音符)的钢琴键和每个键的音符名及其频率(HZ),低音阶以低C(130.8Hz)到中C(261.7Hz)高音阶以中C 到高C(523.3Hz)黑键比它旁边的白键高半个音或低半个音。 组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个重要数据。 频率可以从图中得到,音符的持续时间可根据乐曲速度及每个音符的节拍数来确定,是可以从乐谱中得到的。

  2.2 节拍

  控制一个音符输出的时间,比如1 拍、1/4 拍。 在4/4(四四拍)中,四分音符为一拍,每小节4 拍,全音符持续4 拍,二分音符持续2 拍,四分音符持续1 拍,八分音符持续半拍。 而全音符需要1s 的时间,则二分音符持续时间为0.5s(50×10ms),四分音符的持续时间为0.25s(25×10ms),八分音符持续时间为0.125s(12.5×10ms)。

  知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的时间值和频率值。

  仅上所叙还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。 例如,一首曲子的节奏为每分种94 拍,那么一拍就为60/94=0.64s.

  音乐的节拍我们可用定时器来控制,简单的说,一个一拍的音符唱0.64s,我们就设置一个定时器定时0.64s,时间一到就换下一个音符。 但是,由于单片机的T0,在12MHz 晶振下最大定时时间只能为65ms,因此不可能直接用改变T0 的时间初值来实现不同节拍。 如何定时一个更大的时间,我们可以用T0 来产生10ms 的时间基准,然后设置 一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。

  例如对1/4 拍音符,定时时间为0.16s,相应的时间常数(中段计数器)为16(即10H);对3 拍音符,定时时间为1.92s,相应时间长数为192(即C0H)。

  2.3 电路实现

  因为一首曲子不止一个音符,我们不可能对每一个音符的音阶都去“手工”的提供时间常数,为了实现的简化,我们编制一个将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成的表格,在程序里用查表指令依次查出每一个音符的频率和对应节拍时间,产生音符并控制节奏,就可以实现演奏效果。

  此外,结束符和体止符可以分别用代码00H 和FFH 来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

  为了产生手弹的节奏感,在某些音符(例两个相同音符)音插入一个时间单位的频率略有不同的音符。

  程序框图如下图4. 本程序演奏的是民歌“八月桂花遍地开”,C 调,节奏为94 拍/min。

  用Keil 对程序进行编译,见图5,具体方法可文献[5],编译无误后生成。hex 文件,然后双击Proteus环境下的原理图中的AT89C51,找到这个。 hex 文件,然后点按钮Play,这时单片机控制的蜂鸣器就可以开始播放音乐了。

  单片机

  图4 程序流程图

  单片机

  图5 在Keil 环境下对程序进行编译

  3 结论

  以上介绍的方法已通过测试,运行良好。 对初学单片机者有一定的启示作用。 读者也可以自行找出一首歌,将乐曲翻译成码表输入单片机,而程序不变。 本实验方法简便,即使不懂音乐的人,也可方便地将一首陌生的曲子翻译成代码。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
ranguangxu 2012-07-22
0 回复 举报
不错哦。。。。 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分