资源描述
XXXXXXXXXXXXXX嵌入式系统原理及应用实践智能家居控制系统(无操作系统) 学生姓名XXX学 号XXXXXXXXXX所在学院XXXXXXXXXXX专业名称XXXXXXXXXXX班 级XXXXXXXXXXXXXXXXX指导教师XXXXXXXXXXXX成 绩 XXXXXXXXXXXXX二XX年XX月综合实训任务书学生姓名XXX学生学号XXX学生专业XXX学生班级XXX设计题目智能家居控制系统(无操作系统)设计目的:巩固AD转换模块的应用光照采集掌握PWM驱动蜂鸣器产生不同频率声音的方法巩固SSI模块控制数码管动态显示的方法掌握定时器控制数码管实现动态扫描的思想掌握DS18B20检测温度的程序设计方法掌握一个完整项目的分析、规划、硬件设计、软件设计、报告撰写的流程方法。具体任务:1、编写(或改写)发光二极管、按键、继电器、定时器、数码管、ADC、PWM、温度传感器DS18B20等模块的初始化程序及基本操作程序。2、为保证数码管显示的稳定性,使用定时器定时扫描各个数码管,可避免处理器在执行其他程序时,数码管停止扫描而使得显示不正常。3、通过ADC模块采集开发板上的光敏电阻(CH3),并在数码管低四位显示采集的值,将光照强度分为5级,亮度最亮时开发板上的4颗LED全部熄灭,亮度越来越低时,分别点亮1颗、2颗、3颗,完全黑暗时点亮4颗LED。4、通过DS18B20检测环境温度,并在数码管高三位显示(两位整数、一位小数),当环境温度低于设定的下限温度时,蜂鸣器报警,同时打开空调制热(继电器);当环境温度高于上限温度时,蜂鸣器报警,同时打开空调制热(继电器)。5、通过开发板上的三个按键KEY1、KEY2、KEY4(KEY3引脚与DS18B20共用,在此项目中不使用)设定上下限温度:KEY1按一次设定上限温度(同时数码管显示上限温度),按两次设定下限温度(同时数码管显示下限温度),按三次,设定完成(同时数码管显示实时温度);KEY2按一次,上限或下限温度加1;KEY3该引脚被DS18B20占用,不可使用!KEY4按一次,上限或下限温度减1。目 录智能家居控制系统设计前 言当前,随着科学技术的发展,计算机、嵌入式系统和网络通信技术逐步深入到各个领域,使得住宅和家用电器设备网络化和智能化,智能家居已经开始出现在人们的生活中。智能家居控制系统(smarthome control systems,简称SCS)。它以住宅为平台,家居电器及家电设备为主要控制对象,利用综合布线技术、网络通信技术、 安全防范技术、自动控制技术、音视频技术将家居生活有关的设施进行高效集成,构建高效的住宅设施与家庭日程事务的控制管理系统,提升家居智能、安全、便利、舒适,并实现环保节能的综合智能家居网络控制系统平台。智能家居控制系统是智能家居核心,是智能家居控制功能实现的基础。通过家居智能化技术,实现家庭中各种与信息技术相关的通讯设备、家用电器和家庭安防装置网络化,通过嵌入式家庭网关连接到一个家庭智能化系统上进行集中或异地的监控和家庭事务管理,并保持这些家庭设施与住宅环境的和谐与协调。家居智能化所提供的是一个家居智能化系统的高度安全性、生活舒适性和通讯快捷性的信息化与自动化居住空间,从而满足21世纪新秀社会中人们追求的便利和快节奏的工作方式,以及与外部世界保持安全开放的舒适生活环境。本文以智能家居广阔的市场需求为基础,选取智能家居控制系统为研究对象。1 硬件设计本系统是典型的嵌入式技术应用于测控系统,以嵌入式为开发平台,系统以32位单片机LM3S8962为主控制器对各传感器数据进行采集,经过分析后去控制各执行设备。硬件电路部分为:微控制器最小系统电路、数据采集电路(光敏电路、温度传感器、霍尔传感器)、输出控制电路(继电器、蜂鸣器、发光二极管)和八位LED数码管显示组成。LM3S8962布局如图1-1所示,LM3S8962核心板外围电路如图1-2所示。图1.1 LM3S8962布局图 图1-2 LM3S8962核心板外围电路1.1 ADC转换数模转换(ADC)外设用于将连续的模拟电压转换成离散的数字量。StellsrisADC模块的转换分辨率为10位,并最多可支持8个输入通道以及一个内部温度传感器。ADC模块含有一个可编程的序列发生器,它可在无需控制器的干扰的情况下对多个模拟输入进行采样。Stellaris系列ARM集成有一个10位的ADC模块,支持8个输入通道,以及一个内部温度传感器,ADC模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列队完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。如输入源和输入模式,采样结束时的中断产生,以及指示序列最后一个采样的指示符。图1.1-1为ADC输入测试电路示意图。Stellaris系列MCU的ADC模块采用模拟电源VDDA/GNDA供电。RW1是音频电位器,输出电压在0V3.3V之间,并带有手动旋钮,便于操作。R1和C1组成简单的RC低通滤波电路,能够滤除寄生在由RW1产生的模拟信号上的扰动。图1.1-1 A/D转换电路原理图1.2 SSI控制数码管显示SSI模块驱动数码管显示,对于Texas Instruments同步串行帧格式,在发送每帧之前,每遇到SSICLK的上升沿开始的串行时钟周期时,SSIFss管脚就跳动一次。在这种帧格式中,SSI和片外从器件在SSICLK的上升沿驱动各自的输出数据,并在下降沿锁存来自另一个器件的数据。 不同于其它两种全双工传输的帧格式,在半双工下工作的MICROWIRE格式使用特殊的主-从消息技术。在该模式中,帧开始时向片外从机发送8位控制消息。在发送过程中,SSI没有接收到输入的数据。在消息已发送之后,片外从机对消息进行译码,并在8位控制消息的最后一位也已发送出去之后等待一个串行时钟,之后以请求的数据来响应。返回的数据在长度上可以是416位,使得在任何地方整个帧长度为1325位。图1.2-1显示了一次传输的Texas Instruments同步串行帧格式。 在该模式中,任何时候当SSI空闲时,SSICLK和SSIFss被强制为低电平,发送数据线SSITx为三态。一旦发送FIFO的底部入口包含数据,SSIFss变为高电平并持续一个SSICLK周期。即将发送的值也从发送FIFO传输到发送逻辑的串行移位寄存器中。在SSICLK的下一个上升沿,416位数据帧的MSB从SSITx管脚移出。同样地,接收数据的MSB也通过片外串行从器件移到SSIRx管脚上。 然后,SSI和片外串行从器件都提供时钟,供每个数据位在每个SSICLK的下降沿进入各自的串行移位器中。在已锁存LSB之后的第一个SSICLK上升沿上,接收数据从串行移位器传输到接收FIFO。 图1.2-1 TI同步串行帧格式(单次传输) 图1.2-2 TI同步串行帧格式(连续传输) 图1.2-2显示了背对背(back-to-back)传输时的Texas Instruments同步串行帧格式。 图1.2-3为LM3S8962实验板上数码管通过SSI端口连接的电路原理图。图1.2-3 SSI端口的数码管电路原理图1.3 按键和LED模块图1.3-1和图1.3-2分别为LM3S8962实验板上的LED和KEY电路原理图,当有按键按下去时,与KEY对应的端口输出低电平,在程序中,当读取到对应的端口输入低电平时,表示有键被按下了,然后将与之关联的LED输出高电平。图1.3-1为LED灯模块。此模块中有4颗LED灯,阳极分别通过四个保护电阻连接电源正极,阴极分别和PB0PB3相接,当需要点亮某颗发光二极管时,只需要给相应的引脚写低电平就行了。四颗发光二极管的供电经过了一个跳线帽J3,使用此模块前需要将此跳线帽盖上。图1.3-2为按键模块的原理图。K1K4按键一端与公共地相接,另一端与接有高电平的上拉电阻以及MCU的PB4PB7相接。当按键断开时,PB4PB7读取到的是高电平,当有按键闭合时,对应的引脚便会读到低电平,以判断出被按下的键,再有MCU作出相应的相应。图1.3-1 KEY电路原理图 图1.3-2 LED电路原理图1.4 PWM驱动蜂鸣器PWM,脉冲宽度调制,是一项功能强大的技术,它是一种对模拟信号电平进行数字化编码的方法。在脉冲调制中使用高分辨率计数器来产生方波,并且可以通过调整方波的占空比来对模拟信号电平进行编码。PWM发生器模块产生两个PWM信号,这两个PWM信号可以是独立的信号,也可以是一对插入了死区延迟的互补信号。PWM发生器模块的输出信号在传递到器件管脚之前由输出模块管理。LM3S8962实验板驱动直流电机和步进电机的电路原理图如图1.4-1所示,在本电路图中,引出了LM3S8962处理器的六路PWM输出,其中PWM0PWM3用于驱动四相八拍步进电机,PWM4驱动直流电机,PWM5驱动无源蜂鸣器。图1.4-1 蜂鸣器电路原理图2 软件设计软件设计主要控制光敏电阻电压采集处理与控制部分、温度采集处理与控制部分、霍尔传感器报警部分和辅助指示部分。2.1 ADC模块数模转换(ADC)外设用于将连续的模拟电压转换成离散的数字量。StellsrisADC模块的转换分辨率为10位,并最多可支持8个输入通道以及一个内部温度传感器。ADC模块含有一个可编程的序列发生器,它可在无需控制器的干扰的情况下对多个模拟输入进行采样。该StellsrisADC提供下列特性:最多可支持8个模拟输入通道。单端和差分输入配置。内部温度传感器。最高可以达到1M/秒的采样率。4个可编程采样序列,入口长度18,每个序列均带有相应的转换结果GPIO。灵活的触发方式:控制器(软件触发)、定时器触发、模拟比较器触发、GPIO触发、PWM触发。硬件可对多达64个采样值进行平均计算,以便提高ADC转换精度。使用内部3V作为ADC转换参考电压。模拟电源和模拟地跟数字电源和数字地分开。2.1.1 ADC模块原理描述Stellaris系列ARM集成有一个10位的ADC模块,支持48个输入通道,以及一个内部温度传感器。ADC模块含有一个可编程的序列发生器,可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。函数ADCSequenceEnable()和ADCSequenceDisable()用来使能和禁止一个ADC采样序列。函数ADCSequenceDataGet()用来读取ADC结果FIFO里的数据。函数ADCIntEnable()和ADCIntDisable()用来使能和禁止一个ADC采样序列中断。函数ADCIntStatus()用来获取一个采样序列的中断状态。程序中通过配置ADC,采集光传感器的光照强度并转换,ADC采样完成后触发中断,在中断中修改采样结束控制变量ADC_EndFlag。2.1.2 ADC模块程序设计流程图开始ADC初始化ADC采样及分级ADC中断服务程序判断Case1:熄灭所有二极管Case2:点亮一颗Case3:点亮二颗Case4:点亮三颗Case5:点亮四颗2.2 SSI 模块SSI总线系统是一种同步串行接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。SSI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SSI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 SSI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件。2.2.1 SSI模块原理描述Stellaris系列ARM的SSI(Synchronous Serial Interface,同步串行接口)是与具有Freescale SPI(飞思尔半导体)、MicroWire(美国国家半导体)、Texas Instruments(德国仪器,TI)同步串行接口的外设器件进行同步串行通信的主机或从机接口。SSI具有以下特征:主机或从机操作。时钟位速率和预分频可编程。独立的发送和接收FIFO,16位宽,8个单元深。接口独立可编程,以实现Freescale SPI、MicroWire或TI的串行接口。数据帧大小可编程,范围416位。内部回环测试模式,可进行诊断/调试测试。SSI模块的配置由SSIConfigSetExpClk()函数来管理,它主要设置SSI协议、工作模式、位速率和数据宽度。但为了实际的方便,常用函数SSIConfig()代替。函数SSIDataPut()将把提供的数据放置到特定的SSI模块发送FIFO中。函数SSIDataGet()将指定SSI模块的接受FIFO获取接收到的数据。函数SSIIntEnable()使能单独的一个或多个SSI中断源。函数SSIIntStatus()获取SSI当前的中断状态。在使用SSI可通过置位RCGC1寄存器的SSI位来使能SSI外设时钟。针对不同的帧格式,SSI可通过以下步骤进行配置:确保在对任何配置进行更改之前先将SSICR1寄存器中的SSE位禁止。SSI引脚配置。确定SSI为主机还是从机。通过写SSICR0寄存器来配置时钟预分频除数。写SSICR0寄存器,实现串行时钟率、协议模式、数据长度配置。通过置位SSICR1寄存器的SSE位来使能SSI。通过SSIDR进行读写操作。2.2.2 SSI模块程序设计流程图SSI总线初始化接口模块的编写开始下限显示模块上限显示模块光照强度显示模块温度显示模块2.3 定时器模块2.3.1 定时器模块原理描述定时器的工作原理都是对某一特定的时钟进行计数。如系统时钟为6MHz,则定时器每计一次数则为6M分之一秒,如果定时一秒钟,则定时器需要计数6M次。定时器API分成3组函数,分别执行以下功能:处理定时器配置和控制、处理定时器内容和执行中断处理。Timer模块的功能在总体上可以分为32位模式和16位模式两大类。在32位模式下,TimerA和TimerB被连在一起形成一个完整的32位计数器,对于Timer的各项操作,如装载初值、运行控制、中断控制等。在32位模式下,对TimerA的操作作为整体上的32位控制,而对TimerB的操作无任何效果。在16位模式下,对TimerA的操作仅对TimerA有效,对TimerB的操作仅对TimerB有效,即对两者的操控是完全独立进行的。函数TimerConfig()用于配置Timer模块的工作模式,即32位或16位工作模式。函数TimerIntEnable()使能Timer中断。函数TimerLoadSet()设置装载值。函数TimerEnable()使能Timer计数。函数TimerIntStatus()获取当前Timer的中断状态。程序中使用定时器模块,设置为32位周期定时器,每隔10ms扫描一次数码管: TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER); TimerLoadSet(TIMER0_BASE, TIMER_A, 60000); TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); / 超时中断对数码管的动态显示,是通过定时器中断的方式来扫描的。因此,涉及到中断服务例程和定时器中断的设置。2.3.2 定时器模块流程图开始设置系统时钟使能定时器调用定时器中断结束2.4 DS18B20模块运用DS18B20检测温度。若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。2.4.1 DS18B20模块原理描述DS18B20的1、2、3引脚分别是Vcc(电源正)、DQ(数据输出)和GND(电源地)。DS18B20通过引脚2将采集到的数据传输给MCU的PB6引脚,交由MCU处理。如图2.4.1-1所示:图2.4.1-1 DS18B20原理图2.4.2 DS18B20模块程序设计流程图开始初始化DS18B20复位DS18B20启动DS18B20结束读取温度2.5 按键模块当有按键按下去时,与KEY对应的端口输出低电平,在程序中,当读取到对应的端口输入低电平时,表示有键被按下了,然后将与之关联的LED输出高电平,即可达到实验内容的要求。2.5.1 按键模块原理描述按键可用于调控温度上下限的数值。按一下key1键,再按key2,完成了对上限温度的加操作,按key4,完成对下限温度的减操作。按两下key1键,再按key2,完成对上限的减操作,按key4,完成对下限的减操作。当处于上下限温度调节时,数码管前三位显示的不是当前温度,而是上下限温度的数值。2.5.2 按键模块程序设计流程图开始按键模块初始化获取中断状态判断Case 0x10:设定温度Case 0x20:温度加一Case 0x80:温度减一2.6 PWM模块Stellsris系列ARM提供4个PWM发生器模块和一个控制块。每个PWM发生器模块包含1个定时器(16位递减或先递增后递减计数器)、2个比较器、1个PWM信号发生器、1个死区发生器,以及一个中断/ADC触发选择器。而控制模块决定了PWM信号的极性,以及将哪个信号传递到管脚。PWM发生器模块产生两个PWM信号,这两个信号可以是独立的信号,也可以是一对插入了死区延迟的互补信号。PWM发生器模块的输出信号在传输到器件管脚之前由输出控制模块管理。Stellsris系列ARM的PWM特性:4个PWM发生器,产生8路PWM信号。灵活的PWM产生方法。自带死区发生器。灵活可控的输出控制模块。安全可靠的错误保护功能。丰富的中断机制和ADC触发。2.6.1 PWM模块原理描述脉冲宽度调制(PWM,Pulse-Width Modulation),也简称为脉宽调制,是一项功能强大的技术,它是一种对模拟信号电平进行数字化编码的方法。在脉宽调制中使用高分辨率计数器来产生方波,并且可以通过调整方波的占空比来对模拟信号电平进行编码。PWM通常使用在开关电源和电机控制中。2.6.2 PWM模块程序设计流程图开始模块初始化上下限判断蜂鸣器发出响声继电器工作蜂鸣器发出另一频率的响声继电器工作如果高于上限如果低于下限2.6 主函数模块2.6.1 主函数模块原理描述每一个程序里面都必须要有一个主函数的存在。开始从主函数开始,结束也在主函数结束。主函数主要功能是可以调用各个模块的函数从而进行程序的运行,当完成各个模块的程序后,从主函数中结束。2.6.2 主函数模块程序设计流程图开始所有模块初始化ADC模块调用PWM模块调用If判断按键显示调用温度显示调用Count=1|count=2其他3验证结果操作步骤和结果描述编写完源程序后,编译源文件,并修改,直至编译通过。用D型USB线连接TF-LM3S8962开发板,按下电源开关,并在Keil软件中点击download按钮,将编译通过后的可执行文件烧写到开发板中,按一下核心板上的复位按键,程序开始运行。程序运行后,数码管低三位显示当前室内温度,显示位数为3位,并带一位小数位。当我们用手捏住DS18B20后,我们发现,当前显示的温度快速增长,但是达到一定值时,温度将维持一定的幅度,基本不再发生变化;松开手后,温度直线下降,最后将保持在室内温度的水平,而基本不再发生变化。当温度达到28度时,蜂鸣器报警,继电器开始工作,以模拟空调制热;当温度达到31度时,蜂鸣器也开始报警,但是发出的声音与之前的声音不同,同时,继电器开始工作,以模拟空调制冷。通过ADC模块采集开发板上的光敏电阻(CH3),并在数码管低四位显示采集的值,将光照强度分为5级,当光照强度小于300时,四颗发光二极管同时点亮;光照强度小于500时,点亮了三颗发光二极管;光照强度小于700时,点亮了两颗发光二极管;光照强度小于900时,点亮一颗发光二极管;大于900时,四颗发光二极管都处于熄灭状态。即亮度最亮时开发板上的4颗LED全部熄灭,亮度越来越低时,分别点亮1颗、2颗、3颗,完全黑暗时点亮4颗LED。通过开发板上的三个按键KEY1、KEY2、KEY4(KEY3引脚与DS1820共用,在此项目中不使用)设定上下限温度:KEY1按一次设定上限温度(同时数码管显示上限温度),按两次设定下限温度(同时数码管显示下限温度),按三次,设定完成(同时数码管显示实时温度);KEY2按一次,上限或下限温度加1;KEY3该引脚被DS18B20占用,不可使用!KEY4按一次,上限或下限温度减1。同时,数码管显示当前的实时温度。总结通过本次综合实训,我发现了自己存在很多不足,虽然以前也做过这样的设计,但这次设计真的让我长进了很多,我对智能家居控制系统有了深入的了解,通过这次设计,我将本学期所学的嵌入式知识贯穿起来,我不仅仅只学到了嵌入式的理论知识,我还将它运用到了实际中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习嵌入式更是如此,技术只有在经常的实际运用过程中才能提高,这就是我在这次课程设计中的最大收获。当然,这次智能家居控制系统设计能够圆满完成,首先要感谢老师的细心指导,为我们指引方向;其次感谢我的同学们在我迷茫时,帮助我理清思路。
展开阅读全文