1、XXXXXXXXXXXXXX嵌入式系统原理及应用实践智能家居控制系统(无操作系统) 学生姓名XXX学 号XXXXXXXXXX所在学院XXXXXXXXXXX专业名称XXXXXXXXXXX班 级XXXXXXXXXXXXXXXXX指导老师XXXXXXXXXXXX成 绩 XXXXXXXXXXXXX二XX年XX月综合实训任务书学生姓名XXX学生学号XXX学生专业XXX学生班级XXX设计题目智能家居控制系统(无操作系统)设计目标:巩固AD转换模块应用光照采集掌握PWM驱动蜂鸣器产生不一样频率声音方法巩固SSI模块控制数码管动态显示方法掌握定时器控制数码管实现动态扫描思想掌握DS18B20检测温度程序设计方
2、法掌握一个完整项目标分析、计划、硬件设计、软件设计、汇报撰写步骤方法。具体任务:1、编写(或改写)发光二极管、按键、继电器、定时器、数码管、ADC、PWM、温度传感器DS18B20等模块初始化程序及基础操作程序。2、为确保数码管显示稳定性,使用定时器定时扫描各个数码管,可避免处理器在实施其它程序时,数码管停止扫描而使得显示不正常。3、经过ADC模块采集开发板上光敏电阻(CH3),并在数码管低四位显示采集值,将光照强度分为5级,亮度最亮时开发板上4颗LED全部熄灭,亮度越来越低时,分别点亮1颗、2颗、3颗,完全黑暗时点亮4颗LED。4、经过DS18B20检测环境温度,并在数码管高三位显示(两位整
3、数、一位小数),当环境温度低于设定下限温度时,蜂鸣器报警,同时打开空调制热(继电器);当环境温度高于上限温度时,蜂鸣器报警,同时打开空调制热(继电器)。5、经过开发板上三个按键KEY1、KEY2、KEY4(KEY3引脚和DS18B20共用,在此项目中不使用)设定上下限温度:KEY1按一次设定上限温度(同时数码管显示上限温度),按两次设定下限温度(同时数码管显示下限温度),按三次,设定完成(同时数码管显示实时温度);KEY2按一次,上限或下限温度加1;KEY3该引脚被DS18B20占用,不可使用!KEY4按一次,上限或下限温度减1。目 录前 言11 硬件设计11.1 ADC转换31.2 SSI控
4、制数码管显示31.3 按键和LED模块51.4 PWM驱动蜂鸣器62 软件设计72.1 ADC模块72.1.1 ADC模块原理描述72.1.2 ADC模块程序设计步骤图82.2 SSI 模块82.2.1 SSI模块原理描述92.2.2 SSI模块程序设计步骤图102.3 定时器模块102.3.1 定时器模块原理描述102.3.2 定时器模块步骤图112.4 DS18B20模块112.4.1 DS18B20模块原理描述112.4.2 DS18B20模块程序设计步骤图122.5 按键模块132.5.1 按键模块原理描述132.5.2 按键模块程序设计步骤图132.6 PWM模块132.6.1 PW
5、M模块原理描述142.6.2 PWM模块程序设计步骤图142.6 主函数模块142.6.1 主函数模块原理描述142.6.2主函数模块程序设计步骤图153验证结果15操作步骤和结果描述15总结16智能家居控制系统设计前 言目前,伴随科学技术发展,计算机、嵌入式系统和网络通信技术逐步深入到各个领域,使得住宅和家用电器设备网络化和智能化,智能家居已经开始出现在大家生活中。智能家居控制系统(smarthome control systems,简称SCS)。它以住宅为平台,家居电器及家电设备为关键控制对象,利用综合布线技术、网络通信技术、 安全防范技术、自动控制技术、音视频技术将家居生活相关设施进行高
6、效集成,构建高效住宅设施和家庭日程事务控制管理系统,提升家居智能、安全、便利、舒适,并实现环境保护节能综合智能家居网络控制系统平台。智能家居控制系统是智能家居关键,是智能家居控制功效实现基础。经过家居智能化技术,实现家庭中多种和信息技术相关通讯设备、家用电器和家庭安防装置网络化,经过嵌入式家庭网关连接到一个家庭智能化系统上进行集中或异地监控和家庭事务管理,并保持这些家庭设施和住宅环境友好和协调。家居智能化所提供是一个家居智能化系统高度安全性、生活舒适性和通讯快捷性信息化和自动化居住空间,从而满足二十一世纪新秀社会中大家追求便利和快节奏工作方法,和和外部世界保持安全开放舒适生活环境。本文以智能家
7、居宽广市场需求为基础,选择智能家居控制系统为研究对象。1 硬件设计本系统是经典嵌入式技术应用于测控系统,以嵌入式为开发平台,系统以32位单片机LM3S8962为主控制器对各传感器数据进行采集,经过分析后去控制各实施设备。硬件电路部分为:微控制器最小系统电路、数据采集电路(光敏电路、温度传感器、霍尔传感器)、输出控制电路(继电器、蜂鸣器、发光二极管)和八位LED数码管显示组成。LM3S8962布局图1-1所表示,LM3S8962关键板外围电路图1-2所表示。图1.1 LM3S8962布局图 图1-2 LM3S8962关键板外围电路1.1 ADC转换数模转换(ADC)外设用于将连续模拟电压转换成离
8、散数字量。StellsrisADC模块转换分辨率为10位,并最多可支持8个输入通道和一个内部温度传感器。ADC模块含有一个可编程序列发生器,它可在无需控制器干扰情况下对多个模拟输入进行采样。Stellaris系列ARM集成有一个10位ADC模块,支持8个输入通道,和一个内部温度传感器,ADC模块含有一个可编程序列发生器,可在无需控制器干涉情况下对多个模拟输入源进行采样。每个采样序列队完全可配置输入源、触发事件、中止产生和序列优先级提供灵活编程。如输入源和输入模式,采样结束时中止产生,和指示序列最终一个采样指示符。图1.1-1为ADC输入测试电路示意图。Stellaris系列MCUADC模块采取
9、模拟电源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格式使用特殊
10、主-从消息技术。在该模式中,帧开始时向片外从机发送8位控制消息。在发送过程中,SSI没有接收到输入数据。在消息已发送以后,片外从机对消息进行译码,并在8位控制消息最终一位也已发送出去以后等候一个串行时钟,以后以请求数据来响应。返回数据在长度上能够是416位,使得在任何地方整个帧长度为1325位。图1.2-1显示了一次传输Texas Instruments同时串行帧格式。 在该模式中,任何时候当SSI空闲时,SSICLK和SSIFss被强制为低电平,发送数据线SSITx为三态。一旦发送FIFO底部入口包含数据,SSIFss变为高电平并连续一个SSICLK周期。立即发送值也从发送FIFO传输到发送
11、逻辑串行移位寄存器中。在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试验板上数码管经过SS
12、I端口连接电路原理图。图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按键一
13、端和公共地相接,另一端和接有高电平上拉电阻和MCUPB4PB7相接。当按键断开时,PB4PB7读取到是高电平,当有按键闭合时,对应引脚便会读到低电平,以判定出被按下键,再有MCU作出对应对应。图1.3-1 KEY电路原理图 图1.3-2 LED电路原理图1.4 PWM驱动蜂鸣器PWM,脉冲宽度调制,是一项功效强大技术,它是一个对模拟信号电平进行数字化编码方法。在脉冲调制中使用高分辨率计数器来产生方波,而且能够经过调整方波占空比来对模拟信号电平进行编码。PWM发生器模块产生两个PWM信号,这两个PWM信号能够是独立信号,也能够是一对插入了死区延迟互补信号。PWM发生器模块输出信号在传输到器件管脚
14、之前由输出模块管理。LM3S8962试验板驱动直流电机和步进电机电路原理图图1.4-1所表示,在本电路图中,引出了LM3S8962处理器六路PWM输出,其中PWM0PWM3用于驱动四相八拍步进电机,PWM4驱动直流电机,PWM5驱动无源蜂鸣器。图1.4-1 蜂鸣器电路原理图2 软件设计软件设计关键控制光敏电阻电压采集处理和控制部分、温度采集处理和控制部分、霍尔传感器报警部分和辅助指示部分。2.1 ADC模块数模转换(ADC)外设用于将连续模拟电压转换成离散数字量。StellsrisADC模块转换分辨率为10位,并最多可支持8个输入通道和一个内部温度传感器。ADC模块含有一个可编程序列发生器,它
15、可在无需控制器干扰情况下对多个模拟输入进行采样。该StellsrisADC提供下列特征:最多可支持8个模拟输入通道。单端和差分输入配置。内部温度传感器。最高能够达成1M/秒采样率。4个可编程采样序列,入口长度18,每个序列均带有对应转换结果GPIO。灵活触发方法:控制器(软件触发)、定时器触发、模拟比较器触发、GPIO触发、PWM触发。硬件可对多达64个采样值进行平均计算,方便提升ADC转换精度。使用内部3V作为ADC转换参考电压。模拟电源和模拟地跟数字电源和数字地分开。2.1.1 ADC模块原理描述Stellaris系列ARM集成有一个10位ADC模块,支持48个输入通道,和一个内部温度传感
16、器。ADC模块含有一个可编程序列发生器,可在无需控制器干涉情况下对多个模拟输入源进行采样。每个采样序列均对完全可置输入源、触发事件、中止产生和序列优先级提供灵活编程。函数ADCSequenceEnable()和ADCSequenceDisable()用来使能和严禁一个ADC采样序列。函数ADCSequenceDataGet()用来读取ADC结果FIFO里数据。函数ADCIntEnable()和ADCIntDisable()用来使能和严禁一个ADC采样序列中止。函数ADCIntStatus()用来获取一个采样序列中止状态。程序中经过配置ADC,采集光传感器光照强度并转换,ADC采样完成后触发中止
17、,在中止中修改采样结束控制变量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、主机输出/从机输入数
18、据线MOSI和低电平有效从机选择线SS(有SPI接口芯片带有中止信号线INT或INT、有SPI接口芯片没有主机输出/从机输入数据线MOSI)。SSI接口关键应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SSI接口是在CPU和外围低速器件之间进行同时串行数据传输,在主器件移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达成几Mbps。 SSI接口是以主从方法工作,这种模式通常有一个主器件和一个或多个从器件。2.2.1 SSI模块原理描述Stellaris系列ARMSSI(Synchronou
19、s Serial Interface,同时串行接口)是和含有Freescale SPI(飞思尔半导体)、MicroWire(美国国家半导体)、Texas Instruments(德国仪器,TI)同时串行接口外设器件进行同时串行通信主机或从机接口。SSI含有以下特征:主机或从机操作。时钟位速率和预分频可编程。独立发送和接收FIFO,16位宽,8个单元深。接口独立可编程,以实现Freescale SPI、MicroWire或TI串行接口。数据帧大小可编程,范围416位。内部回环测试模式,可进行诊疗/调试测试。SSI模块配置由SSIConfigSetExpClk()函数来管理,它关键设置SSI协议、
20、工作模式、位速率和数据宽度。但为了实际方便,常见函数SSIConfig()替换。函数SSIDataPut()将把提供数据放置到特定SSI模块发送FIFO中。函数SSIDataGet()将指定SSI模块接收FIFO获取接收到数据。函数SSIIntEnable()使能单独一个或多个SSI中止源。函数SSIIntStatus()获取SSI目前中止状态。在使用SSI可经过置位RCGC1寄存器SSI位来使能SSI外设时钟。针对不一样帧格式,SSI可经过以下步骤进行配置:确保在对任何配置进行更改之前先将SSICR1寄存器中SSE位严禁。SSI引脚配置。确定SSI为主机还是从机。经过写SSICR0寄存器来配
21、置时钟预分频除数。写SSICR0寄存器,实现串行时钟率、协议模式、数据长度配置。经过置位SSICR1寄存器SSE位来使能SSI。经过SSIDR进行读写操作。2.2.2 SSI模块程序设计步骤图SSI总线初始化接口模块编写开始下限显示模块上限显示模块光照强度显示模块温度显示模块2.3 定时器模块2.3.1 定时器模块原理描述定时器工作原理全部是对某一特定时钟进行计数。如系统时钟为6MHz,则定时器每计一次数则为6M分之一秒,假如定时一秒钟,则定时器需要计数6M次。定时器API分成3组函数,分别实施以下功效:处理定时器配置和控制、处理定时器内容和实施中止处理。Timer模块功效在总体上能够分为32
22、位模式和16位模式两大类。在32位模式下,TimerA和TimerB被连在一起形成一个完整32位计数器,对于Timer各项操作,如装载初值、运行控制、中止控制等。在32位模式下,对TimerA操作作为整体上32位控制,而对TimerB操作无任何效果。在16位模式下,对TimerA操作仅对TimerA有效,对TimerB操作仅对TimerB有效,即对二者操控是完全独立进行。函数TimerConfig()用于配置Timer模块工作模式,即32位或16位工作模式。函数TimerIntEnable()使能Timer中止。函数TimerLoadSet()设置装载值。函数TimerEnable()使能Ti
23、mer计数。函数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 定时器模块步骤图开始设置系统时钟使能定时器调用定时器
24、中止结束2.4 DS18B20模块利用DS18B20检测温度。若指令成功地使DS18B20完成温度测量,数据存放在DS18B20存放器。一个控制功效指挥指示DS18B20演出测温。测量结果将被放置在DS18B20内存中,并能够让阅读发出记忆功效指挥,阅读内容片上存放器。温度报警触发器TH和TL全部有一字节EEPROM 数据。假如DS18B20不使用报警检验指令,这些寄存器可作为通常用户记忆用途。在片上还载有配置字节以理想处理温度数字转换。写TH,TL指令和配置字节利用一个记忆功效指令完成。经过缓存器读寄存器。全部数据读,写全部是从最低位开始。2.4.1 DS18B20模块原理描述DS18B20
25、1、2、3引脚分别是Vcc(电源正)、DQ(数据输出)和GND(电源地)。DS18B20经过引脚2将采集到数据传输给MCUPB6引脚,交由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,完成了对
26、上限温度加操作,按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触发选择器。而控制模块
27、决定了PWM信号极性,和将哪个信号传输到管脚。PWM发生器模块产生两个PWM信号,这两个信号能够是独立信号,也能够是一对插入了死区延迟互补信号。PWM发生器模块输出信号在传输到器件管脚之前由输出控制模块管理。Stellsris系列ARMPWM特征:4个PWM发生器,产生8路PWM信号。灵活PWM产生方法。自带死区发生器。灵活可控输出控制模块。安全可靠错误保护功效。丰富中止机制和ADC触发。2.6.1 PWM模块原理描述脉冲宽度调制(PWM,Pulse-Width Modulation),也简称为脉宽调制,是一项功效强大技术,它是一个对模拟信号电平进行数字化编码方法。在脉宽调制中使用高分辨率计数
28、器来产生方波,而且能够经过调整方波占空比来对模拟信号电平进行编码。PWM通常使用在开关电源和电机控制中。2.6.2 PWM模块程序设计步骤图开始模块初始化上下限判定蜂鸣器发出响声继电器工作蜂鸣器发出另一频率响声继电器工作假如高于上限假如低于下限2.6 主函数模块2.6.1 主函数模块原理描述每一个程序里面全部必需要有一个主函数存在。开始从主函数开始,结束也在主函数结束。主函数关键功效是能够调用各个模块函数从而进行程序运行,当完成各个模块程序后,从主函数中结束。2.6.2 主函数模块程序设计步骤图开始全部模块初始化ADC模块调用PWM模块调用If判定按键显示调用温度显示调用Count=1|cou
29、nt=2其它3验证结果操作步骤和结果描述编写完源程序后,编译源文件,并修改,直至编译经过。用D型USB线连接TF-LM3S8962开发板,按下电源开关,并在Keil软件中点击download按钮,将编译经过后可实施文件烧写到开发板中,按一下关键板上复位按键,程序开始运行。程序运行后,数码管低三位显示目前室内温度,显示位数为3位,并带一位小数位。当我们用手捏住DS18B20后,我们发觉,目前显示温度快速增加,不过达成一定值时,温度将维持一定幅度,基础不再发生改变;松开手后,温度直线下降,最终将保持在室内温度水平,而基础不再发生改变。当温度达成28度时,蜂鸣器报警,继电器开始工作,以模拟空调制热;
30、当温度达成31度时,蜂鸣器也开始报警,不过发出声音和之前声音不一样,同时,继电器开始工作,以模拟空调制冷。经过ADC模块采集开发板上光敏电阻(CH3),并在数码管低四位显示采集值,将光照强度分为5级,当光照强度小于300时,四颗发光二极管同时点亮;光照强度小于500时,点亮了三颗发光二极管;光照强度小于700时,点亮了两颗发光二极管;光照强度小于900时,点亮一颗发光二极管;大于900时,四颗发光二极管全部处于熄灭状态。即亮度最亮时开发板上4颗LED全部熄灭,亮度越来越低时,分别点亮1颗、2颗、3颗,完全黑暗时点亮4颗LED。经过开发板上三个按键KEY1、KEY2、KEY4(KEY3引脚和DS
31、1820共用,在此项目中不使用)设定上下限温度:KEY1按一次设定上限温度(同时数码管显示上限温度),按两次设定下限温度(同时数码管显示下限温度),按三次,设定完成(同时数码管显示实时温度);KEY2按一次,上限或下限温度加1;KEY3该引脚被DS18B20占用,不可使用!KEY4按一次,上限或下限温度减1。同时,数码管显示目前实时温度。总结经过此次综合实训,我发觉了自己存在很多不足,即使以前也做过这么设计,但这次设计真让我长进了很多,我对智能家居控制系统有了深入了解,经过这次设计,我将本学期所学嵌入式知识贯穿起来,我不仅仅只学到了嵌入式理论知识,我还将它利用到了实际中,我真真正正意识到,在以后学习中,要理论联络实际,把我们所学理论知识用到实际当中,学习嵌入式更是如此,技术只有在常常实际利用过程中才能提升,这就是我在这次课程设计中最大收获。当然,这次智能家居控制系统设计能够圆满完成,首先要感谢老师细心指导,为我们指导方向;其次感谢我同学们在我迷茫时,帮助我理清思绪。