嵌入式课程设计温度传感器课程设计.docx
《嵌入式课程设计温度传感器课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计温度传感器课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
![嵌入式课程设计温度传感器课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/30/516cd4d4-2ab2-4928-8f18-684e31cc9947/516cd4d4-2ab2-4928-8f18-684e31cc99471.gif)
嵌入式课程设计温度传感器课程设计
嵌入式系统原理与应用
课程设计
—基于ARM9的温度传感器
学号:
2012180401**
班级:
**************1班
姓名:
李*
指导教师:
邱*
课程设计任务书
班级:
*************
姓名:
*****
设计周数:
1学分:
2
指导教师:
邱选兵
设计题目:
基于ARM9的温度传感器
设计目的及要求:
目的:
1.熟悉手工焊锡的常用工具的使用及其维护与修理。
2.基本掌握手工电烙铁的焊接技术,能够独立的完成简单电子产品的安装与焊接。
熟悉电子产品的安装工艺的生产流程。
3.熟悉印制电路板设计的步骤和方法,熟悉手工制作印制电板的工艺流程,能够根据电路原理图,元器件实物设计并制作印制电路板。
4.熟悉常用电子器件的类别、型号、规格、性能及其使用范围,能查阅有关的电子器件图书。
5.能够正确识别和选用常用的电子器件,并且能够熟练使用普通万用表和数字万用表。
6.掌握和运用单片机的基本内部结构、功能部件、接口技术以及应用技术。
7.各种外围器件和传感器的应用;
8.了解电子产品的焊接、调试与维修方法。
要求:
1.学生都掌握、单片机的内部结构、功能部件,接口技术等技能;
2.根据题目进行调研,确定实施方案,购买元件,并绘制原理图,焊接电路板,调试程序;
3.焊接和写汇编程序及调试,提交课程设计系统(包括硬件和软件);.
4.完成课程设计报告
设计内容和方法:
使用温度传感器PT1000,直接感应外部的温度变化。
使用恒流源电路,保证通过PT1000的电流相等,根据PT1000的工作原理与对应关系,得到温度与电阻的关系,将得到的电压放大20倍。
结合ARM9与LCD,将得到的参量显示在液晶屏上。
第一章绪论
温度是表征物体冷热程度的物理量、是自然界中和人类打交道最多的两个物理参数,无论是在生产实验场所,还是在居住休闲场所,温湿度的采集或控制都十分频繁和重要,而且,网络化远程采集温湿度并报警是现代科技发展的一个必然趋势。
温度的测量及控制对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。
由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位,约占50%。
温度传感器是通过物体随温度变化而改变某种特性来间接测量的。
不少材料、元件的特性都随温度的变化而变化,所以能作温度传感器的材料相当多。
温度传感器随温度而引起物理参数变化的有:
膨胀、电阻、电容、而电动势、磁性能、频率、光学特性及热噪声等等。
随着生产的发展,新型温度传感器还会不断涌现。
铂电阻温度传感器是用来测量空气、土壤和水的温度传感器。
该传感器由精密级铂热电阻元件和经特殊工艺处理的防护套组成,并用四芯屏蔽信号电缆线从敏感元件引出用于测量,通常可以采用四线测量法测量,以减少导线电阻引起的测量误差。
本次实验使用PT1000铂热电阻直接感应外部环境的温度,PT1000根据温度与电阻的对应关系,通过STM32单片机对数据进行AD转换并且在LCD上显示数据。
第2章系统总体结构
2.1硬件框图
本次实验包括的温度传感器主要由两个模块组成:
数据采集模块和数据处理模块(硬件框图如图1)。
数据采集模块由恒流源电路和放大电路组成,采集到与温度有对应关系的电压值。
数据处理模块将数据模块的输出作为输入,使用STM32的AD转换,将数据转换为数字量显示在LCD上。
恒流源(0.3mA)
放大器(5倍)
STM32(ARM9)
AD转换
LCD显示
数据采集模块
数据处理模块
图1:
传感器硬件框图
数据采集
2.2器件选用
在本次设计中,数据采集模块采用了PT1000铂热电阻、稳压二极管、电阻若干、以及运放四大类器件。
数据处理模块使用了STM32单片机和LCD显示屏2大部分。
本次设计的实物图见附录一。
第3章硬件结构
3.1数据采集模块
数据采集模块主要负责采集温度的信息,根据温度为与电阻的对应关系,通过恒流源电路图,转化成温度与电压的关系。
最后经过放大器,将得到的电压值进行放大,作为数据处理模块的输入值。
电路图如图2所示:
(实物图见附录一)。
图2数据采集模块电路图
3.11PT1000铂热电阻
设计原理
pt1000是铂热电阻,它的阻值会随着温度的变化而改变。
PT后的1000即表示它在0℃时阻值为1000欧姆,在300℃时它的阻值约为2120.515欧姆。
它的工业原理:
当PT1000在0摄氏度的时候他的阻值为1000欧姆,它的的阻值会随着温度上升它的阻值是成匀速增涨的。
电阻与温度的关系:
应用范围
医疗、电机、工业、温度计算、阻值计算等高精温度设备,应用范围非常之广泛。
技术参数
输入响应时间(模块内数据更新率)为1秒同步测量
1路隔离的485,MODBUSRTU通讯协议
采用RS-485二线制输出接口时,具有+15kV的ESD保护功能
速率(bps)可在1200、2400、4800、9600、19200、38400、57600、115200中选择
精度等级:
0.2级
供电电源:
+7.5~30V
功耗小于0.1W
主机工作温度范围为-40℃~+85℃
测量范围为-200℃~+200℃
存贮条件为-40℃~+85℃(RH:
5%~95%不结露)
铂电阻RT曲线图表
PT1000分度表
3.12稳压二极管IN4728
工作原理
稳压二极管的伏安特性曲线的正向特性和普通二极管差不多,反向特性是在反向电压低于反向击穿电压时,反向电阻很大,反向漏电流极小。
但是,当反向电压临近反向电压的临界值时,反向电流骤然增大,称为击穿,在这一临界击穿点上,反向电阻骤然降至很小值。
尽管电流在很大的范围内变化,而二极管两端的电压却基本上稳定在击穿电压附近,从而实现了二极管的稳压功能。
特性曲线
特性参数
1.Uz—稳定电压:
指稳压管通过额定电流时两端产生的稳定电压值。
该值随工作电流和温度的不同而略有改变。
由于制造工艺的差别,同一型号稳压管的稳压值也不完全一致。
2.Iz—额定电流:
指稳压管产生稳定电压时通过该管的电流值。
低于此值时,稳压管虽并非不能稳压,但稳压效果会变差;高于此值时,只要不超过额定功率损耗,也是允许的,而且稳压性能会好一些,但要多消耗电能。
3.Rz—动态电阻:
指稳压管两端电压变化与电流变化的比值。
该比值随工作电流的不同而改变,一般是工作电流愈大,动态电阻则愈小。
4.Pz—额定功耗:
由芯片允许温升决定,其数值为稳定电压Vz和允许最大电流Izm的乘积。
3.13LM324
LM324系列器件带有真差动输入的四运算放大器,具有真正的差分输入。
与单电源应用场合的标准运算放大器相比,它们有一些显著优点。
该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。
共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。
应用
LM324是四运放集成电路,它采用14脚双列直插塑料封装,外形如图所示。
它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
3.2数据处理模块
本模块将数据采集模块的输出作为输入,STM32将输入值的模拟量转化为数字量,显示在LCD上。
实物图见附录二:
电路图见附录三:
3.21STM32
开发板资源:
◆CPU:
STM32F103RCT6,LQFP64,FLASH:
256K,SRAM:
48K;
◆1个标准的JTAG/SWD调试下载口
◆1个电源指示灯(蓝色)
◆2个状态指示灯(DS0:
红色,DS1:
绿色)
◆1个红外接收头,配备一款小巧的红外遥控器
◆1个IIC接口的EEPROM芯片,24C02,容量256字节
◆1个SPIFLASH芯片,W25Q64,容量为8M字节(即64Mbit)
◆1个DS18B20/DS1820温度传感器预留接口
◆1个标准的2.4/2.8/3.5/4.3/7寸LCD接口,支持触摸屏
◆1个OLED模块接口(与LCD接口部分共用)
◆1个USB串口接口,可用于程序下载和代码调试
◆1个USBSLAVE接口,用于USB通信
◆1个SD卡接口
◆1个PS/2接口,可外接鼠标、键盘
◆1组5V电源供应/接入
◆1组3.3V电源供应/接入口
◆1个启动模式选择配置接口
◆1个2.4G无线通信接口
◆1个RTC后备电池座,并带电池
◆1个复位按钮,可用于复位MCU和LCD
◆3个功能按钮,其中WK_UP兼具唤醒功能
◆1个电源开关,控制整个板的电源
◆3.3V与5V电源TVS保护,有效防止烧坏芯片。
◆独创的一键下载功能
◆除晶振占用的IO口外,其余所有IO口全部引出,其中GPIOA和GPIOB按顺序引。
特点
1)小巧。
整个板子尺寸为8cm*10cm*2cm(包括液晶,但不计算铜柱的高度)。
2)灵活。
板上除晶振外的所有的IO口全部引出,特别还有GPIOA和GPIOB的IO口是按顺序引出的,可以极大的方便大家扩展及使用,另外板载独特的一键下载功能,避免了频繁设置B0、B1带来的麻烦,直接在电脑上一键下载。
3)资源丰富。
板载十多种外设及接口,可以充分挖掘STM32的潜质。
4)质量过硬。
沉金PCB+全新优质元器件+定制全铜镀金排针/排座+电源TVS保护,坚若磐石。
5)人性化设计。
各个接口都有丝印标注,使用起来一目了然;接口位置设计安排合理,方便顺手。
资源搭配合理,物尽其用。
3.22TFT-LCD
TFT-LCD即薄膜晶体管液晶显示器。
其英文全称为:
ThinFilmTransistor-LiquidCrystalDisplay。
TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。
TFT-LCD也被叫做真彩液晶显示器。
特点:
1,2.4’/2.8’/3.5’/4.3’/7’5种大小的屏幕可选。
2,320×240的分辨率(3.5’分辨率为:
320*480,4.3’和7’分辨率为:
800*480)。
3,16位真彩显示。
4,自带触摸屏,可以用来作为控制输入。
流程:
3.23ADC控制寄存器
ADC_CR1的各位描述
ADC_CR1的SCAN位,该位用于设置扫描模式,由软件设置和清除,如果设置为1,则使用扫描模式,如果为0,则关闭扫描模式。
在扫描模式下,由ADC_SQRx或ADC_JSQRx寄存器选中的通道被转换。
如果设置了EOCIE或JEOCIE,只在最后一个通道转换完毕后才会产生EOC或JEOC中断。
AD转换,其详细设置步骤如下:
开启PA口时钟,设置PA1为模拟输入。
STM32F103RCT6的ADC通道1在PA1上,所以,我们先要使能PORTA的时钟,然后设置PA1为模拟输入。
2)使能ADC1时钟,并设置分频因子。
要使用ADC1,第一步就是要使能ADC1的时钟,在使能完时钟之后,进行一次ADC1的复位。
接着我们就可以通过RCC_CFGR设置ADC1的分频因子。
分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。
3)设置ADC1的工作模式。
在设置完分频因子之后,我们就可以开始ADC1的模式配置了,设置单次转换模式、触发方式选择、数据对齐方式等都在这一步实现。
4)设置ADC1规则序列的相关信息。
接下来我们要设置规则序列的相关信息,我们这里只有一个通道,并且是单次转换的,所以设置规则序列中通道数为1(ADC_SQR1[23:
20]=0000),然后设置通道1的采样周期(通过ADC_SMPR2[5:
3]设置)
5)开启AD转换器,并校准。
在设置完了以上信息后,我们就开启AD转换器,执行复位校准和AD校准,注意这两步是必须的!
不校准将导致结果很不准确。
读取ADC值。
在上面的校准完成之后,ADC就算准备好了。
接下来我们要做的就是设置规则序列1里面的通道(通过ADC_SQR3[4:
0]设置),然后启动ADC转换。
在转换结束后,读取ADC1_DR里面的值就是了。
ADC的操作模式
第4章软件结构
本次设计的程序如下所示:
#include"stm32f10x.h"
#include"stdio.h"
#include"chinese.h"
#include"adc.h"
#include"lcd.h"
#include"usart.h"
#include"delay.h"
uint32_tsum=0;
uint16_tvaul=0;
//初始化
voidRCC_Configuration()
{SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM2,ENABLE);
}
voidGPIO_Configuration()
{
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
//定时器初始化
voidTIM2_configuration()
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStruct;
TIM_DeInit(TIM2);
TIM_TimeBaseInitStruct.TIM_Period=2000;
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
TIM_PrescalerConfig(TIM2,7199,TIM_PSCReloadMode_Immediate);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);
}
voidTIM3_configuration()
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStruct;
TIM_DeInit(TIM3);
TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0x00);
TIM_TimeBaseInitStruct.TIM_Period=65535;
TIM_TimeBaseInitStruct.TIM_Prescaler=0;
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
}
voidNVIC_configuration()//中断初始化
{
NVIC_InitTypeDefNVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
}
intmain(void)//主函数
{
u16adcx,adcy,i=0;
floattemp,temperate;
floaty,y1;
RCC_Configuration();
delay_init(72);
GPIO_Configuration();
NVIC_configuration();
TIM2_configuration();
TIM3_configuration();
TIM_Cmd(TIM2,ENABLE);
TIM_Cmd(TIM3,ENABLE);
uart_init(9600);
LCD_Init();
Adc_Init();
POINT_COLOR=RED;
LCD_Clear(WHITE);
TEST_FONT();
LCD_ShowString(130,60,"00.0");
LCD_ShowString(130,150,"00.00%");
while
(1)
{
POINT_COLOR=BLUE;
adcy=Get_Adc(ADC_Channel_0);
i++;
sum+=adcy;
if(i==99)
{
i=0;
adcx=sum/100;
sum=0;
temp=(float)adcx/28.76;
temperate=temp;
temp-=(u8)temp;
LCD_ShowNum(130,60,(u8)temperate,2,16);
temperate-=(u8)temperate;
LCD_ShowNum(154,60,temperate*100,2,16);
}
y=(float)(487.5-vaul*5/44);
y1=y;
y-=(u8)y;
LCD_ShowNum(130,150,(u8)y1,2,16);
y1-=(u8)y1;
LCD_ShowNum(154,150,y1*100,2,16);
}
}
voidTIM2_IRQHandler()
{
TIM_Cmd(TIM2,DISABLE);
vaul=TIM_GetCounter(TIM3);
vaul=vaul*5;
TIM_SetCounter(TIM3,0x0);
TIM_SetCounter(TIM2,0x0);
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
TIM_Cmd(TIM2,ENABLE);
}
第5章总结
1、可实现的功能
可实时检测空气中的温度,并且将温度的值显示在LCD上。
方便人随时观看现在的温度。
适用于生产实验场所,居住休闲场所等地方。
2、存在的问题
由于电阻也有随温度变化而变化的特性,导致温度传感器的精度不高;
STM32的采样周期较短,得到的数据实际应用不高;
LCD显示不稳定。
3、收获
通过此次课程设计,很好的将温度传感器和ARM9联系在一起使用。
了解了STM32芯片的使用方式、AD转换的指令、PT1000的工作原理以及LM324集成运放芯片的应用。
将理论知识运用到实物的操作中,提高了动手能力和思维逻辑能力。
只有谨慎的思考和制作,才能完成任务。
本次使用的器件可以应用在生活中的各个方面。
例如:
医疗、电机、工业、温度计算、阻值计算等各个领域。
第六章参考文献
【1】常华等,嵌入式系统原理与应用,北京:
清华大学出版社,2013
【2】滕英岩,嵌入式系统开发基础—基于ARM微处理器和linux操作系统,北京:
电子工业出版社,2008
【3】黄智伟等,ARM微控制器应用设计与实践,北京:
北京航空航天大学出版社,2012
【4】戴蓉等,传感器原理与工程应用,北京:
电子工业出版社,2013
【5】宿元斌,集成温度控制器及其应用,中国仪器仪表,2006
【6】
附录一
原理图
实物图
(资料素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)