嵌入式课程设计解读Word文档下载推荐.docx

上传人:b****6 文档编号:16628610 上传时间:2022-11-24 格式:DOCX 页数:26 大小:1.30MB
下载 相关 举报
嵌入式课程设计解读Word文档下载推荐.docx_第1页
第1页 / 共26页
嵌入式课程设计解读Word文档下载推荐.docx_第2页
第2页 / 共26页
嵌入式课程设计解读Word文档下载推荐.docx_第3页
第3页 / 共26页
嵌入式课程设计解读Word文档下载推荐.docx_第4页
第4页 / 共26页
嵌入式课程设计解读Word文档下载推荐.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

嵌入式课程设计解读Word文档下载推荐.docx

《嵌入式课程设计解读Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计解读Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。

嵌入式课程设计解读Word文档下载推荐.docx

6.2.2批量系统成本19

7.设计总结20

8.参考文献21

1.引言

当今社会,大学生是一个独立的群体,也是很有特色的群体,他们的日常生活开始得到了越来越多的关注。

随着智慧家居概念的提出,人们越来越多地向往着科幻片中才该存在的生活。

本设计从大学生的宿舍生活出发,采用目前最流行最主流的安卓手机作为控制终端,实现对宿舍内的设施(如风扇,台灯等)遥控操作,真正实现宿舍智能化,可以极大地方便大学生的宿舍生活。

本作品采用手机控制,方便快捷,易于推广,很好的迎合了当下大学生对智能手机的要求;

整个体统都具有低功耗的特点,掉电保护避免了电能的不必要浪费;

同时本设计具有许多智能化的功能,温湿度报警,托管模式,定时开关等等,这些设计让产品更加人性化,智能化。

随着社会的发展,越来越多的大学生追求方便而又高效的生活。

随着现代信息技术和Internet技术的飞速发展,各种各样的数字化产品得到普及;

嵌入式系统已经渗透于现代生活的各个角落——手机、微波炉、取款机、智能玩具、电子商务、工控设备、通信设备、医疗器械、航天航空、军事装备等等。

这些技术而得来的产品进入大学宿舍只是早晚问题。

本作品立足于大学宿舍,目的在于另大学宿舍生活更加方便,更具有趣味性。

本作品操作方便,功能多且实用,非常适合应用于大学生宿舍。

首先控制终端在手机上,任何一款安卓手机在安装了相应的应用程序后即可对实物控制部分进行遥控操作和实时的读取和校正数据。

方便快捷,体现了作品的科学性;

同时控制终端自身具备许多实用的功能,如温湿度报警,风扇,台灯的定时开关,掉电保护,托管模式等等,贴近大学生宿舍生活,更具人性化,很好的体现了作品的先进性。

整套作品选取安卓手机作为控制终端,被控制对相象为Mega16电路板,手机通过蓝牙与单片机进行通信,下达命令,单片机通过驱动电路板上的外设来驱动台灯和风扇,进而达到控制的目的。

不仅方便实用,而且很受欢迎。

其中有广大大学生深深喜爱的掉电保护功能,有更加动人的手机主板同步显示功能,令大学宿舍生活更具有趣味性,更加方便。

2.基本方法

2.1主电路部分

本设计主控芯片采用mega16单片机,编程软件为ICCAVR8。

编程中时序非常重要,故在以后的介绍中将附上各个芯片的时序图。

图2.1为作品功能图。

作品具有时间校正显示,温湿度检测及手机数码管同步显示温湿度。

可通过手机调节灯的亮暗和风扇转速的大小。

以及定时关闭,温度检测报警等功能。

这些只是初步的功能,未来我们将加上更多功能,立志于做出大大方便广大大学生宿舍生活的作品。

图2.1功能总览图

2.2上位机部分

本设计上位机采用Android系统手机。

Android系统是Google在2007年发布的基于Linux平台的开源手机操作系统。

近年来,基于此平台的手机市场占有率不断提高,加上其良好的开放性和丰富的API接口,可以很方便地开发各种应用程序。

1)Android系统结构简介

Android系统架构见图1.1,它建立于Linux内核之上,包含了各种设备驱动和管理模块,囊括了非常齐全的类库和框架,包括轻量级数据库SQLite、浏览器Webkit等。

整个系统建立在Dalvik虚拟机上,应用程序使用Java语言编写。

Android系统提供了丰富的框架(活动管理、位置管理等)来管理系统的软、硬件资源,整合了常用的应用程序(联系人、电话本等),并开放了很全面的API供用户使用,整个平台具有良好的开放性和扩展性。

图1.1Android系统架构图

2)Activity生命周期

Android系统上运行的应用程序一般包含一个或多个Activity,主要由活动管理器进行管理,Activity是Android系统分配和管理资源的基本单位。

每个Activity都有其对应的生命周期,如图1.2。

图1.2Activity的生命周期

onCreate()方法在活动开始时调用,并依次调onStart()方法和onResume()方法,Activity处于运行状态,如有新活动启动,则调用onPause(),活动转入后台;

如内存不足,活动进程则被关闭。

退出程序则会依次调用onStop()和onDestroy()。

活动管理器对Activity的管理体现在不同生命周期对以上几个方法的调用上,用户可根据自己的需要重载这几个方法。

一般来讲,主程序类继承Activity类,用户的功能代码在重载这些方法中实现。

3.硬件设计及嵌入式操作系统

3.1硬件设计

3.1.1微控制器选取方案

在该系统的两个组成部分中,都存在着MCU的选取问题,MCU的性能及其成本决定着整个系统的性能和成本。

在异地监控站部分,MCU主要是对温度传感器和湿度传感器进时监控、记录宿舍内的安防情况以及当警报发生时通过手机完成人机交互的的目的,因此可以有三种主控单元的选择方案。

方案一:

选用FPGA(现场可编程门阵列)作为系统的控制器。

FPGA作为新一代的可编程器件使得其应用较为灵活,功能从简单到复杂都可以实现,但是在该系统中,若使用FPGA则会提高系统的成本,同时由于增加的FPGA,也会给电路的维修工作带来不可必要的麻烦。

方案二:

选用ATMEL公司生产的AT89C51单片机。

AT89C51单片机是8位的单片机,有32个I/0构成[1],对于该系统来说端口不够使用,而且如果从机更多的话,单片机内部存储空间不够。

方案三:

ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。

由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。

它编程简单,操作容易。

它用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 

封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。

工作于空闲模式时CPU停止工作,而USART、两线接口、A/D 

转换器、SRAM、T/C、SPI端口以及中断系统继续工作。

综上,将ATmega16单片机作为主控单元的最终选取方案。

作品中mega16芯片的外部供电电压为5V。

用电源适配器产生12V电压,同过稳压芯片是电压稳定在5V,用于主控制器的供电。

Mega16的工作电压:

--ATmega16L:

2.7–5.5V

--ATmega16:

4.5-5.5V

3.1.2最小系统

作品设计的最小系统为以主控制器mega16核心的外部有源晶振,供电电源、复位电路、ISP下载器电路组成。

作品中需要三个供电电压,其一是电子继电器的供电电压,为12V。

控制器的供电电压,为5V,以及灯和电扇的供电电压,为可调电压在0~12V之间。

考虑到作品稳定性,振荡产生使用有源晶振,振荡频率为16MHz。

大大提高系统运行速度。

由于mega16为高电位复位,因此使用了电容端接地复位方式。

图3.1主控芯片

3.1.3电源及继电器模块

作品采用12V直接供电,用稳压器将12V稳压到5V,用于主控器供电。

继电器用于断电保护,断电又来电之后PD2电位发生变化,进而触发mega16外部中断,此时控制PA1端口电位可以通过NPN三极管控制继电器关闭使台灯保持灭的状态。

图3.2电源及继电器模块

3.1.4温湿度检测模块

本作品选用DHT11温湿度传感器。

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

通过主控芯片PA0对温湿度进行读数操作。

其通信方式为单总线传输。

部分调试程序如下:

UINT8DHT11Start(void)//dht11开始标志

{

SINT16counter=WAIT_TIME;

DHT11_OUT;

//DATA设置为输出

DHT11_DATA_LOW;

//主机拉低50ms

Delay_ms(25);

DHT11_DATA_HIGH;

//总线由上拉电阻拉高主机延时20~40us选30us

Delay_us(40);

DHT11_IN;

//主机设为输入判断从机响应信号

Delay_us(10);

counter=WAIT_TIME;

while(!

BitIsSet(DHT11_PIN,DHT11_DATA)&

&

counter-->

0);

if(counter<

1)

return1;

counter=WAIT_TIME;

while(BitIsSet(DHT11_PIN,DHT11_DATA)&

//判断从机是否发出80us?

的低电平响应信号是否结束

return2;

}

for(i=0;

i<

8;

i++)

{

while(!

0);

if(counter<

Delay_us(30);

//延时30S后再进行判断是不是高电平,从而确定传输的数据是0还是1

if(BitIsSet(DHT11_PIN,DHT11_DATA))

databyte<

<

=1;

databyte|=0x01;

//持续高电平超过30us说明是1

}

else

counter=WAIT_TIME;

while(BitIsSet(DHT11_PIN,DHT11_DATA)&

return3;

以上程序的作用是:

主板向DHT11发出开始信号,芯片开始工作。

DHT11数据的读取及判断也在其中有所体现,读取的值将在数码管上显示出来。

图2.5.1为读取数据的时序图:

图3.3DHT11时序图

图3.4温湿度模块图

3.1.5蓝牙模块

本作品通过蓝牙与手机通信实现数据传输。

蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。

能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。

利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。

蓝牙与主控芯片之间用串口通信。

图3.5为蓝牙模块图。

3.5蓝牙模块图

部分程序如下:

voiduart0_init(void)

CLI();

UCSRB=0x00;

//disablewhilesettingbaudrate

UCSRA=0x00;

UCSRB|=(1<

3)|(1<

4)|(1<

7);

UCSRC|=(1<

1)|(1<

2);

UBRRL=0x33;

//setbaudratelo

UBRRH=0x00;

//setbaudratehi

SEI();

#pragmainterrupt_handleruart0_rx_isr:

iv_USART0_RXC

voiduart0_rx_isr(void)

receive=UDR;

ReceiveYaokong();

以上程序的功能是:

蓝牙开始串口通信,以及一个相关外部中端,以控制接收数据。

3.1.6数码管及移位寄存器

移位寄存器采用74HC595芯片,用两个74HC595将主控器的3个管教引申为16个管脚,分别控制数码管的段选及位选,从而让数码管显示相应图案。

移位寄存器与主控芯片之间的通信方式为SPI通信。

图2.7.1为移位寄存器功能表,部分程序如下:

voidDataSendTo74HC595(UINT8data_send)

UINT8i,data_temp=0;

data_temp=data_send;

for(i=0;

i<

8;

i++)

{

if(BitIsSet(data_temp,(7-i)))

HC595_DATA_HIGH;

HC595_DATA_LOW;

HC595_SCLK_HIGH;

//给一个上升沿

HC595_SCLK_LOW;

voidHC595_Display_Bit(UINT8bit,UINT8data)

HC595_LCLK_LOW;

DataSendTo74HC595(~(1<

bit));

//发送位选

DataSendTo74HC595(data);

//发送段选

HC595_LCLK_HIGH;

//上升沿实现刚移入的十六位数据的输出及锁存

voidShowTemperatureHumidity(UINT8temperature,UINT8humidity)

display_data[0]=0;

display_data[1]=0;

display_data[2]=seg_num[temperature/10];

display_data[3]=seg_num[temperature%10];

display_data[4]=0;

display_data[5]=0;

display_data[6]=seg_num[humidity/10];

display_data[7]=seg_num[humidity%10];

voidShowDate(UINT16year,UINT8month,UINT8day)

year=2012;

display_data[0]=seg_num[year/1000];

display_data[1]=seg_num[(year%1000)/100];

display_data[2]=seg_num[(year%100)/10];

display_data[3]=seg_num[year%10]+0x80;

display_data[4]=seg_num[month/10];

display_data[5]=seg_num[month%10]+0x80;

display_data[6]=seg_num[day/10];

display_data[7]=seg_num[day%10];

voidShowTime(UINT8hour,UINT8minute,UINT8second)

display_data[0]=seg_num[hour/10];

display_data[1]=seg_num[hour%10];

display_data[2]=seg_num[16];

display_data[3]=seg_num[minute/10];

display_data[4]=seg_num[minute%10];

display_data[5]=seg_num[16];

display_data[6]=seg_num[second/10];

display_data[7]=seg_num[second%10];

上段程序的作用是将一个八位的数送给移位寄存器,显示所发送的数,以及显示年月日,时分秒等功能。

图3.6为移位寄存器模块图。

图3.6移位寄存器功能表

图3.7移位寄存器模块图

3.1.7灯及风扇模块

灯和风扇的电路原理差不多,这里以灯为例说明他们的电路原理。

灯的供电都是由适配器得到的12V直接供电,通过10K电阻和数字适配器的串联进行分压,从而控制灯两端电压,进而控制灯的亮暗。

图3.8为灯模块。

图3.8灯模块图

3.1.8数字电位器

数字电位器选用MCP41010芯片,MCP41010是Microchip公司生产的一种集成数字电位器。

它在单一芯片上集成一个10kΩ数字电位器,电位器的滑动端共有256个离散的调节节点,并有一个8b的E2PROM数据寄存器,直接控制滑刷在电位器上滑动端的位置。

用户可以通过相应指令往数据寄存器写8位字,调节精度可达256。

MCP41010芯片具有工业标准的SPI同步串口,可以实现寄存器操作,从而改变滑刷的位置。

对其操作部分程序如下:

voidMCPSendDataToLamp(UINT8data)

UINT8i=0,command_temp=command;

data=data*0.25+75;

if(data>

100)data=100;

data=230-data<

1;

MCP410_2_CS_LOW;

if((command_temp&

0x80)==0)

MCP410_2_SDI_HIGH;

MCP410_2_SDI_LOW;

MCP410_2_SCK_HIGH;

Delay_us(5);

MCP410_2_SCK_LOW;

command_temp<

=1;

if((data&

data<

MCP410_2_CS_HIGH;

以上程序的作用是发送数据给与灯连接的数字电位器,让电位器的阻值为自己调整的值。

3.1.9时钟模块

时钟芯片选用DS1302,DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

采用5V供电。

可用电池对其进行供电。

图3.9为时钟模块图。

图3.9时钟模块图

对时钟芯片DS1302的操作部分程序如下:

UINT8ReadDS1302(UINT8address)

UINT8i=0,data=0;

DS1302_RST_L;

DS1302_IO_OUT;

DS1302_SCLK_L;

DS1302_RST_H;

for(i=0;

i++)//address

if(address&

0x01)DS1302_IO_H;

elseDS1302_IO_L;

address>

>

=1;

DS1302_SCLK_H;

DS1302_IO_IN;

i++)//readdata

data>

if(DS1302_IO_PIN&

(1<

DS1302_IO))

data|=0x80;

returndata;

voidWriteDS1302(UINT8address,UINT8data)

UINT8i=0;

if(data&

Delay_us

(1);

voidDS1302SetYear(UINT16year)

UINT16data=0;

data=year-2000;

data=(year%100)/10*16+year%10;

WriteDS1302(DS1302_YEAR_WRITE,data);

voidDS1302SetMonth(UINT8month)

UINT8data=0;

data=month/10*16+month%10;

WriteDS1302(DS1302_MONTH_WRITE,data);

voidDS1302SetDay(UINT8day)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1