基于arm的温度传感器

合集下载

基于ARM芯片s3c2410的简易测温系统设计

基于ARM芯片s3c2410的简易测温系统设计

基于ARM芯片s3c2410的简易测温系统设计本系统利用DS18B20进行测温,基于s3c2410开发板进行温度控制,具有硬件电路简单,控温精度高、功能强,体积小,简单灵活等优点,可以应用于控制温度在-55℃到+125℃之间的各种场合,可以实现温度的实时采集、显示功能。

温度是一种最基本的环境参数之一,日常生活和工农业生产中经常要检测温度。

传统的方式是采用热电偶或热电阻,但是由于模拟温度传感器输出为模拟信号,必须经过A/D转换环节获得数字信号后才能与s3c2410开发板等微处理器接口,使得硬件电路结果复杂,制作成本较高。

美国DALLAS公司生产的DS18B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于仓库管理、工农业生产制造、气象观测、科学研究以及日常生活中。

本文提出用DALLAS公司生产的DS18B20数字温度传感器和89S52s3c2410开发板构成的多路测温系统,采用单总线的方式(一根数据线,在一个I/O口上),可以在单总线上挂接多个18B20,在s3c2410开发板控制下巡回检测多点温度,并可以设置高、低温度超限报警等功能实习内容:本次校内实习我们会用到的主要器件是51s3c2410开发板和DS18B20温度传感器以及数码管,主要就是通过温度传感器的检测,把实际测得的温度值转换成二进制,再传回s3c2410开发板处理,然后通过数码管显示出温度值。

Ds18b201》概述:DS18b20是一款支持“一线总线”接口的数字化温度传感器,它通过一个单线接口发送或者接受信息,用于读写和温度转换的电源可以从数据线本身获得,无需外部电源。

DS18B20 有三只引脚,VCC,DQ,和VDDDS18B20 的温度操作是使用16 位,也就是说分辨率是0.06252》开发板访问DS18B20:DS18B20 一般都是充当从机的角色,而开发板就是主机。

开发板通过一线总线访问DS18B20需要经过以下几个步骤:1.DS18B20 复位。

一种基于ARM核处理器的嵌入式网络温度传感器设计

一种基于ARM核处理器的嵌入式网络温度传感器设计

线T 3模 块无 线 上 网 ,近距 离 采用 n4 1 计 的无 线 C5 F 0设 模 块无 线上 网 。硬 件 连接 可 用标 准 的R 2 2 S3 电平转 换 模 块 与MC U进行 通 信 , 对MC 设 置相 应 的 串 口控制 并 U 寄 存器 。 。
C U操 作频 率 可达 6MHz双 电源 。P 操 作 电压 范 围 P 0 , CU
的P WM单元 ,实时 时钟 ,看 门狗定 时器 ,通 用I / O口 ,
12 网络 接 口设 计 .
以R 2 2 为 网络 接 口, 理层 使用 通 用 的R 2 2 S3 作 物 S 3 标 准协议 , 数据 链路 层 可用简 单 的S I协议 。 于与通 LP 便
用 的MO E D M连 接 . 用 电话 线 远 程拨 号 上 网 , 可 或用 无
R 2 2 ̄ 网络 接 口的 网络 温度 传 感 器 的 设计 , S 3 4 并在 软 件上 采 用 2  ̄ t / S I。 , r O —I . C
【 关键词 】 网络传感器
A M核处理嚣 R
嵌入式
 ̄ lsI co —I
【 中图分类号】 T 22I P 1. I
【 文献标识码】 B
L C 1 4 基 本 特性 : R T MI S 理 器 。2 K 片 P 20的 A M7 D — 处 18 B
内Fah ls程序 存储 器( S  ̄IP 带IP I 功能 ,ls编程 时 间为 A Fah lm 可 编 程 52 节 ,扇 区擦 除 和 整 片擦 除 只 需40 s l字 0
【 编号 】 10—7X 20 ) —0 30 文章 0373 [060 09—2 3
引 言

1% , 0 )两个低功耗模式( 空闲和掉电) , 通过外部 中断将

arm实验报告——温度传感

arm实验报告——温度传感

实验四温度传感器实验一、实验目的1、了解温度传感器的基本知识,熟悉温度传感器的使用;2、掌握基于IIC总线通信的温度传感器LM92的使用;3、巩固在ADS下S3C2410芯片IIC总线的使用方法。

二、实验内容1、掌握温度传感器LM92的使用;2、在ADS开发环境下建立工程,配置LM92芯片,读取现场温度。

三、实验设备1、硬件:DM2410B十实验系统;PC机;JTAG仿真器;串口线2、软件:PC机操作系统(WINDOWS 2000);ARM Developer Suite v1.2;Multi-ICE V2.2.5;DNW2410(或超级终端)四、在读写程序中首先对IIC总线用到的端口进行初始化,使之工作在IIC模式下:随后调用WrLM 92扮函数,将Pointer寄存器的值写入,我们程序中写入的是0x0,也就是读取丁EMPERA丁URE寄存器中的温度。

然后调用RdLM92()读出温度值。

下面是WrLM92()和RdLM92()函数,其中调用的Run_IicPoIIQ与IIC 实验中调用的liclnt函数所实现的功能基本相同,这里不再赘述。

本节实验指导针对查询模式讲解,附录光盘上给出了中断模式的程序,请自行分析和验证。

需要注意的是RdLM92()读取两次数据每次8位,共16位数据,其中高13位是温度。

我们将高8位放到data[0]低8位放到data[1 ]。

下面给出了读取换算温度的程序(这里仅仅换算零上温度,请自行设计读取全部温度范围的程序。

五、实验步骤1、仔细阅读实验说明部分,熟悉LM92温度传感器的使用;2.将实验系统光盘中“ADS实验指导\温度传感器实验”目录拷贝到本地硬盘,用ADS组件中的CodeWarrior for ARM Developer Sui七e 工具软件打开其中的TEMPERTUER.mcp工程文件。

用实验一中的方法选用相对地址中的:cat. scf文件。

3、在DebugRel目标路径下编译源文件。

基于ARM7和数字温度传感器的多点测温系统设计

基于ARM7和数字温度传感器的多点测温系统设计

温度检测是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。

传统的温度检测是基于模拟传感。

模拟信号易受干扰,不稳定、价格高、体积大。

随着科学技术的发展,由单片集成电路构成的温度传感器的种类越来越多,测量的精度越来越高,数字温度传感器具有价格低、精度高、适于微型封装、能工作在宽温度范围内等优点。

在很多应用中,数字温度传感器正开始替代传统的模拟温度传感器,如DSl8B20、DS18B21和DS16B20等。

本文提出了一种基于DSl8B20数字化传感器的温度采集系统。

多点测温系统通过键盘设置,利用数字温度传感器DS18B20检测不同环境、不同要求下的各点或多点的温度,然后LPC2114读取温度值,通过USB接口将数据传输给上位机,在上位机的显示界面上显示,以提示相关人员对所检测的环境作出相应措施。

本系统由ARM处理器模块、LCD显示键盘设置模块、n个DS18B20组成的测温模块、USB通行模块组成。

本系统结构如图1所示。

2.1LPC2114处理器模块基于ARM7和数字温度传感器的多点测温系统设计DesignofMulti-pointTemperatureCollectingSystemBasedonARM7andDigitalThermometerSensor邓智坚倪远平昆明理工大学信息工程与自动化学院(昆明650051)摘要:本文介绍了一种数字温度采集系统,详细分析其测温原理,给出其硬件系统和软件系统的设计。

本系统以ARM7处理器LPC2114、实时嵌入式操作系统C/OS-Ⅱ)and digital temperature sensor18B20,achieve the collecting of multi-channel temperature.When the temperature oversteps natural scale,it munications can be made through the USB bus with the main computer,it overcomes the weakness of the former data acquisition card and incre-ases the speed of the data transmission.关键词:数字温度采集DS18B20USBARM7LPC2114C/OS-Ⅱ1引言2系统硬件设计ARM处理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、Intel的Xscale、StrongARM等几个系列。

基于ARM和DS18B20设计网络化的智能温度传感器

基于ARM和DS18B20设计网络化的智能温度传感器

基于ARM和DS18B20设计网络化的智能温度传感器
于数据总线,总线本身也可以向所挂接的DS18B20 供电,而无需额外电
源。

DS18B20 集温度测量、A/D 转换于一体,可根据实际要求通过简单的编
程实现9~12 位的数字值读数方式,具有体积小、接口方便、传输距离远等特点。

DS18B20 与微处理器LPC2210 的连接图如图3 所示。

注意,应加入一
个阻值为5.1 kΩ的上拉电阻。

2.4 网络接口
网络接口采用的是目前比较常用的lO Mbps 嵌入式以太网控制芯片RTL8019。

它是一种高度集成的以太网控制芯片,内部集成了DMA 控制器、
ISA 总线控制器、16 KB SRAM 和网络PHY 收发器。

用户可以通过DMA 方式
把需要发送的数据写入片内SRAM 中,让芯片自动将数据发送出去;而芯片在
接收到数据后,用户也可以通过DMA 方式将其读出。

RTL8019AS 与LPC2210 一般通过外部总线进行连接,其连接关系如表
1 所列。

由表1 可知,RTL8019AS 使用LPC2210 外部存储控制的Bank2 部分,
而RTL8019AS 的I/O 地址为0x00300~Ox0031F,所以RTL8019AS 在
SA8=l、SA5=O 时选通,其数据地址为0x83400000~Ox83400001F。

NET_RST 为LPC2210 输出引脚,RTL8019AS 中断信号为中断输入信号,且为外部中断。

RTL8019AS 的SDO~SDl5 串了一个470 Ω电阻连接到LPC2210 的D0~D15。

此外,该系统还加入了LCM 接口,可以直接支持。

基于ARM的温度监测系统设计与实现

基于ARM的温度监测系统设计与实现

基于ARM的温度监测系统设计与实现作者:郭志恒来源:《计算机光盘软件与应用》2011年第12期摘要:提出基于ARM的温度监测系统的设计实现。

采用数字温度传感器DSl8B20作为温度检测元件,单片机控制温度采集,通过单根总线将采集的数据传送到ARM主机S3C2410上。

在嵌入式Linux操作系统,利用Qt作为GUI,实现对温度数据进行实时显示及存储。

关键词:嵌入式Linux;DS18B20;温度监测;Qt中图分类号:TP274+.2 文献标识码:A文章编号:1007-9599 (2011) 12-0000-01ARM-Based Temperature Monitoring System Design and ImplementationGuo Zhiheng(University of Electronic Science and Technology of China,Zhongshan Institute,Zhongshan University,Zhongshan528402,China)Abstract:In this paper,a system design for monitoring temperature based on ARM platform.the DS18B20 temperature sensors are used to collect temperature data,the microcontroller controls temperature acquisition and send data to the ARM host through the RS-485 bus protocol.TheS3C2410 as the core with Qt GUI,carry out displaying of temperature and storing data for real-time. Keywords:Embedded Linux;DS18B20;Temperature monitoring;Qt一、引言在工农业生产环境以及公共场所、家庭环境中,温度数据作为主要监测因素显得越来越重要,温度的远程监控问题尤其应用领域越来越广泛。

基于arm的温度传感器

#include<absacc.h>#include<reg51.h>#include<intrins.h>#define uintunsigned int#define uchar unsigned char#define D_OUT=P1^0//输入电压信号#define D_IN=P1^1#define _CS=P1^2#define CLOCK=P1^3//脉冲的位选信号sbit led_1=P1^4;//数码管1(红灯)的位选信号sbit led_2=P1^5;//数码管2(绿灯)的位选信号sbit led_3=P1^6;//数码管3(黄灯)的位选信号sbit BUZZER=P1^7;//定义蜂鸣器的控制引脚uint read1543(uchar port) //从TLC1543读取采样值,形参port是采样的通道号{ uint data ad;uint data i;uchar data al=0,ah=0;CLOCK=0;_CS=0;port<<=4;for (i=0;i<4;i++) //把通道号打入1543{ D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;port<<=1; }for (i=0;i<6;i++) //填充6个CLOCK{ CLOCK=1;CLOCK=0; }_CS=1;_nop_();_nop_();_CS=0; //等待AD转换for (i=0;i<2;i++) //取D9,D8{ D_OUT=1; CLOCK=1; ah<<=1; if (D_OUT) ah|=0x01;CLOCK=0; }for (i=0;i<8;i++) //取D7--D0{ D_OUT=1; CLOCK=1; al<<=1;if (D_OUT) al|=0x01; CLOCK=0; }_CS=1; ad=(uint)ah;ad<<=8;ad|=al; //得到AD值return (ad); }void delay(int t)// 控制报警器的程序{if(p1<0X56) { p1^4=1;p1^7=1; }else {if(p1>0x6F){p1^5=1; }else {p1^6=1;p1^7=1; } }void delay(uint v)//蜂鸣器的程序{ while(v!=0) v--; }main(){ delay(100);while(1){ BUZZER=1;//蜂鸣器关闭delay(100);BUZZER=0;//蜂鸣器发声delay(100); }}#include "config.h"#define KEY 1<<5uint8 digitable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uint8 selectable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uint8 DATA0[8];uint8 Disp =0;uint16 ADC_Data[8]={0}; //AD转换结果寄存器uint16 ADC_Result;uint16 pwm_value = 5;uint8 TEM=30;uint8 DATA0[8];uint8 T0Flag=0;uint8 SF=0,M=0,R=0,W=0,TK=0x09,PAGE=0;uint32 ui_Ad_Cnl=0;fp32 ui_Kp=1.2;fp32 ui_Kd=0.01;fp32 i_Ki = 0.56;int8 i_pid_result;/*========================delay==========================*/void delay(void){uint16 i,j;for(i=100;i>0;i--)for(j=5000;j>0;j--);}/*========================timer0youguan=====================*/void Timer0_Init(void){T0TC = 0; //定时器设置为0 T0PR = 0; // 时钟不分频T0MCR = 0x03;//复位T0TC,并产生中断标志T0MR0 = Fpclk/1000;//T0TCR = 0x01; //1毫秒定时}void __irq Timer0Int(void){T0Flag = 1;Disp++; // T0中断标志置位T0IR = 0x01; // 清除中断标志VICVectAddr = 0; // 向量中断处理结束}void IRQ_Init(void){VICIntSelect = 0x00; // 设置所有的通道为IRQ中断VICVectCntl0 = 0x20 | 4; // Timer0分配到IRQ slot1VICVectAddr0 = (uint32)Timer0Int; // 设置Timer0向量地址VICIntEnable = (1 << 4) ; // 使能Timer0和Timer1中断}/*========================conbit==========================*/void CONVBIT0(uint16 num,uint8 hor){DA TA0[hor+3] = num/1000;DA TA0[hor+2] = num%1000/100;DA TA0[hor+1] = num%100/10;DA TA0[hor+0] = num%10/1;}/*========================spi==========================*/void MSPI_Init(void){SPI_SPCCR = 0x10; // 设置SPI时钟分频SPI_SPCR = (0 << 3) | //在SCK 第一个时钟沿采样(1 << 4) | // CPOL = 1, SCK 为低有效(1 << 5) | // MSTR = 1, SPI 处于主模式(0 << 6) | // SPI 数据传输MSB (位7)在先(0 << 7); // SPIE = 0, SPI 中断被禁止}uint8 MSPI_SendData(uint8 data){SPI_SPDR = data;while( 0 == (SPI_SPSR & 0x80)); // 等待数据发送完毕return(SPI_SPDR);}/*========================ADCaiyang==========================*/void ADC_Init(void){uint32 ADclk=(Fpclk / 1000000 - 1),h=0;AD0CR = (1 << 3) | // SEL=8,选择通道3(ADclk << 8)| // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz(0 << 16) | // BURST=0,软件控制转换操作(0 << 17) | // CLKS=0, 使用11clock转换(1 << 21) | // PDN=1,正常工作模式(0 << 22) | // TEST1:0=00,正常工作模式(1 << 24) | // START=1,直接启动ADC转换(0 << 27);delay();h= AD0DR;}uint16 ADC(void){uint32 ADC_R;uint16 ADC_R1;AD0CR |= 1 << 24; // 进行第一次转换while ((AD0DR & 0x80000000) == 0); // 等待转换结束AD0CR |= 1 << 24; // 再次启动转换while ((AD0DR & 0x80000000) == 0); // 等待转换结束ADC_R = AD0DR; // 读取ADC结果ADC_R1 = (ADC_R >> 6) & 0x3FF;ADC_R1 = ADC_R1 * 2480/ 1024;return (ADC_R1);}/*========================PINinit==========================*/void pininit(){PINSEL1 = (PINSEL1 & (~(0x03<<28)))|(0x01<<28); //P0.30选择AD0.3通道PINSEL0 = (PINSEL0 & (~(0xFF<<8)))|(0x55<<8); // 选择SPI功能}/*========================Pwminit==========================*/void PWMinit(){PINSEL0 = (PINSEL0 & (~(0x03<<14)))|(0x02<<14);PWMPR = 0;PWMTC = 0;PWMMR0 = Fpclk / 1;PWMMR2 = PWMMR0 * pwm_value /100;PWMPCR = (1 << 10);PWMLER = 0x05;PWMTCR = 0x02;PWMTCR = 0x09;}/*========================Pwminit==========================*/void TempraPid(uint8 tem){uint32 i_R_value;int32 i_last_deviation;int32 i_then_deviation;int32 i_now_deviation;i_R_value =(uint32) (1+ 952 * tem - 1.06 * tem * tem);ui_Ad_Cnl = (30200 *2540) / (30200 + i_R_value);//ui_Ad_Cnl = ui_Ad_Cnl ;i_now_deviation = ui_Ad_Cnl-5 - ADC_Result;i_pid_result = (int)(i_pid_result+ ui_Kp * (i_now_deviation - i_then_deviation)+ i_Ki * i_now_deviation+ ui_Kd * (i_now_deviation - 2* i_then_deviation + i_last_deviation)-8);i_last_deviation = i_then_deviation;i_then_deviation = i_now_deviation;if(i_pid_result > 0){//pwm_value = pwm_value + 5;//if(pwm_value>100)pwm_value = 90;i_pid_result=i_pid_result+10;if(i_pid_result>100)i_pid_result = 90;PWMMR2 = PWMMR0 * i_pid_result / 100;}if(i_pid_result < 0){//pwm_value = pwm_value - 10;//i_pid_result= (- i_pid_result)-10;i_pid_result = 1;//if(pwm_value<5)pwm_value = 5;PWMMR2 = (PWMMR0 * i_pid_result) / 100;}if(i_pid_result == 0){//pwm_value = pwm_value;PWMMR2 = PWMMR0 * i_pid_result / 100;}PWMLER = 0x05;PWMTCR = 0x09;}/*==========================================================*/ /*==========================================================*/ int main (void){uint8 s=0,x=0,k=4,i=0;Timer0_Init();IRQ_Init();MSPI_Init();ADC_Init();pininit();PWMinit();T0TCR = 0x01;IRQEnable();while(1){if(Disp==240){Disp=0;ADC_Data[s]=ADC();if(s==4){ //ADC_Result=0;for(s=0;s<5;s++)ADC_Result=ADC_Result + ADC_Data[s];ADC_Result=ADC_Result/5;s=0;}elses++;//TempraPid(TEM);}/*if(T0Flag==1){T0Flag=0;TempraPid(TEM);CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);x=DA TA0[k];MSPI_SendData(digitable[x]);MSPI_SendData(~selectable[k]);if(k==7)k=0;elsek++;}*/if(T0Flag==1){T0Flag=0;TempraPid(TEM);W++;if(W==80){W=0;if(M==0){switch(PAGE){case 0:{CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);}break;case 1:{CONVBIT0(TEM,0);CONVBIT0(0,4);}break;}}//M==0if(SF)SF=0;elseSF=1;}//W==80if(M==0){x=DATA0[k];}else{if(k==R){if(SF==0)x=10;elsex=DATA0[k];}elsex=DATA0[k];}MSPI_SendData(digitable[x]);MSPI_SendData(~selectable[k]);if((IO0PIN & KEY) !=0){if(TK==k){switch(TK){case 0:{if(M==2)M=1;elseM++;switch(M){case 1:{CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);}break;case 2:{CONVBIT0(TEM,0);CONVBIT0(0,4);}break;}}break;case 1:{if(R==3)R=0;elseR++;}break;case 2:{if(M==2){if(DATA0[R]==9)DATA0[R]=0;elseDATA0[R]++;}}break;case 3:{if(!M==0){TEM=DA TA0[3]*1000 + DA TA0[2]*100 + DA TA0[1]*10 + DATA0[0];M=0;R=0;}}break;case 4:{if(PAGE==1)PAGE = 0;elsePAGE = 1;}break;}//tkTK = 0x09;}}//if((IO0PIN & KEY) ==0){for(i=0;i<230;i++);if((IO0PIN & KEY) ==0)TK = k;}if(k==7)k=0;elsek++;}//disp==1}return 0;}/*****************************************************************/。

基于arm的智能温控系统设计

基于arm的智能温控系统设计
1 前言
随着科技的进步,智能温控系统也逐渐受到人们的重视,以arm 技术为基础搭建智能温控系统越来越流行。

本文将结合arm技术对智能温控系统进行功能及结构上的设计。

2 arm基础介绍
arm是arm技术有限公司发展的芯片技术,其特点就是高性价比,性能良好,体积小,功耗低。

易于设计更便捷,更方便移植,可以满足智能温控设计的需要。

3 系统设计
1.系统的硬件分为arm处理器板,温度传感器,这些传感器信号连接处理器板,IO口连接驱动电机和继电器,状态灯,按键。

2.系统的软件分为arm处理器板的操作系统,嵌入式的C语言程序,使用keil编译器进行编译,识别温度传感器的值,根据值进行调节,控制驱动电机和继电器,改变状态灯,依据按键记录设定温度。

4 测试
通过使用温度传感器和标准温度仪,多次重复测试,比较设定温度和温度仪测得的温度,确保温度实际输出和设定温度之间的误差理论小于±2℃,确保此智能温控系统的准确性。

5 结论
经过以上的设计和测试,我们基于arm的智能温控系统可以实现准确调温,而且操作便捷,性能卓越。

此设计将已被广泛应用于气候控制系统,机房温控系统,温湿度监测系统等。

基于ARM的热敏电阻温度计的设计

基于ARM的热敏电阻温度计的设计1 引言随着半导体技术的不断发展,热敏电阻作为一种新型感温元件应用越来越广泛。

他具有体积小、灵敏度高、重量轻、热惯性小、寿命长以及价格便宜等优点。

传统的热敏电阻温度计硬件上大多采用普通单片机(MCS-51系列)+A/D转换器以及LED显示模块构成,分立元件多、功耗大、设计复杂且难以调试;软件上也多采用冗长繁琐的汇编语言来实现,设计效率低、可移植性差、性能难以保证。

目前,嵌入式系统的应用已经进入到一个高、低端并行发展的阶段,其标志就是32位微控制器的发展。

ARM(Advanced RISC Machines)是嵌入式系统应用比较广泛的一种32位微处理器核,具有体积小、功耗低、集成度高、硬件调试方便和可移植操作系统等优点。

为智能仪器向轻便化、智能化、微机一体化等方向发展提供了必要条件。

由于电子技术的飞速发展,电子元器件的性价比不断得到提高。

本文采用32位的ARM7 TDMI-S微处理器核MC14489进行温度的实时显示。

2 热敏电阻温度的转换原理热敏电阻是温度传感器的一种,他由仿陶瓷半导体组成。

热敏电阻(NTC)不同于普通的电阻,他具有负的电阻温度特性,即当温度升高时,其电阻值减小。

图1为热敏电阻的特性曲线。

热敏电阻的阻值~温度特性曲线是一条指数曲线,非线性较大,因此在使用时要进行线性化处理。

线性化处理虽然能够改善热敏电阻的特性曲线,但是比较复杂。

为此,在要求不高的一般应用中,常做出在一定的温度范围内温度与阻值成线性关系的假定,以简化计算。

使用热敏电阻是为了感知温度,给热敏电阻通以恒定的电流,电阻两端就可测到一个电压,然后通过公式下面的公式可求得温度:T为被测温度;T0为与热敏电阻特性有关的温度参数;K为与热敏电阻特性有关的系数;VT为热敏电阻两端的电压。

根据这一公式,如果能测得热敏电阻两端的电压,再知道参数T0和K,则可以计算出热敏电阻的环境温度,也就是被测的温度,这样就把电阻随温度的变化关系转化为电压随温度变化的关系了。

基于ARM的嵌入式温度监测系统设计

毕业设计说明书基于ARM的嵌入式温度监测系统摘要随着科技的发展,嵌入式系统的发展也异常迅速,同时,嵌入式系统已经应用于各个方面,给人们的生产和生活带来了极大的便利。

目前嵌入式系统的应用已经发展到了嵌入式处理器与操作系统相结合的阶段,本设计就是将ARM处理器与Linux操作系统相结合实现的。

嵌入式温度监测系统由温度监测硬件系统和温度监测软件两部分组成。

其中硬件系统包括SBC2410开发套件,温度检测电路、信号放大电路及信号显示终端,论文中按模块对各部分硬件的设计进行了详细的介绍。

温度监测软件系统的设计过程如下,本设计首先为温度监测系统构建Linux环境,其次在Linux下编写并加载系统驱动程序,然后编写应用程序,编译并下载到ARM开发板中。

经过反复调试,实现了温度监测的功能。

关键词:ARM;linux;内核;驱动;温度监测Embedded System of Temperature Testing Based on ARMAbstractWith the development of science, embedded system develops at a fast speed. Embedded system has been applied to all aspects, which has brought great convenience to people's production and daily life. At present, the application of embedded system have been developed to the stage of combining embedded processor with operating system, and the design comes true based on combining the ARM processor with linux operating system.Embedded temperature measurement system includes temperature monitoring hardware and software systems. Hardware system includes SBC2410 system development kit, temperature detection circuit, signal amplifier circuit and signal display terminal. This paper, in detail, introduces the hardware design according to modules.The process of the design of temperature measurement software system is as follows: First,the design construct Linux environment for temperature measurement the system .Secondly, the design compiles and loads driver program in Linux; At last, the design writes, compiles and downloads the application program to ARM development board. After repeated debugging, the design achieves the purpose of the temperature measurement.Key words: Linux ; ARM ; Kernel ; Drivert ; Emperature measurement目录摘要 (II)Abstract (III)第一章嵌入式系统简介 (1)1.1 嵌入式系统的概念 (1)1.2 嵌入式系统的结构 (1)1.3 嵌入式系统与普通单片机开发的不同之处 (2)1.3.1 交叉编译 (2)1.3.2 交叉调试 (3)第二章设计用嵌入式模块 (5)2.1 ARM处理器 (5)2.2 Flash模块 (5)2.3 SDRAM模块 (6)2.4 JTAG调试器 (8)第三章温度监测电路设计 (10)3.1 AD590的室温补偿电路 (10)3.1.1 性能 (10)3.1.2 误差校正 (10)3.1.3 AD590的补偿电路设计 (11)3.2 热电偶的测温电路 (12)3.2.1 热电偶的测温原理 (12)3.2.2 热电偶的测温电路设计 (14)第四章温度监测系统的Linux构建 (17)4.1 构建交叉编译器 (17)4.1.1 交叉编译器 (17)4.1.2 设置共享文件夹,并解压linux开发包 (17)4.1.3 安装交叉编译器 (18)4.2 Linux操作系统 (19)4.2.1 引导加载程序 (20)4.2.2 内核 (21)4.2.3 文件系统 (23)4.3 烧写 (24)4.3.1 Windows下烧写vivi (24)4.3.2 分区格式化Flash及重新下载vivi (25)4.3.3 烧写linux内核 (27)4.3.4 下载文件系统 (27)第五章温度监测系统的软件编程 (28)5.1 编写Linux下的ADC驱动程序 (28)5.1.1 Linux设备 (29)5.1.2 驱动程序的编写说明 (32)5.1.3 驱动程序编写的具体内容 (34)5.1.4 ADC驱动程序具体函数的分析 (36)5.1.5 ADC驱动程序的加载和删除 (39)5.2 编写应用程序 (41)5.2.1 线性化部分 (41)5.2.2 A/D转换速率的计算 (44)5.2.3 主程序的编写 (45)第六章温度监测的调试 (47)6.1 编译ad驱动程序 (47)6.2 运行应用程序 (48)6.2.1 为ARM开发板更新内核和文件系统 (48)6.2.2 编译main.c应用程序 (48)6.2.3 运行main 主程序 (49)总结 (51)参考文献 (52)附录 (54)附录A:程序源代码 (54)附录B:测温原理图 (68)附录C:ARM板电路图 (69)致谢 (70)第一章嵌入式系统简介1.1嵌入式系统的概念嵌入式系统是不同于常见计算机系统的一种计算机系统,它不以独立设备的物理形态出现,即它没有一个统一的外观,它的部件根据主体设备以及应用需要嵌入在设备的内部,发挥着运算、存储、以及控制的作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<absacc.h>#include<reg51.h>#include<intrins.h>#define uintunsigned int#define uchar unsigned char#define D_OUT=P1^0//输入电压信号#define D_IN=P1^1#define _CS=P1^2#define CLOCK=P1^3//脉冲的位选信号sbit led_1=P1^4;//数码管1(红灯)的位选信号sbit led_2=P1^5;//数码管2(绿灯)的位选信号sbit led_3=P1^6;//数码管3(黄灯)的位选信号sbit BUZZER=P1^7;//定义蜂鸣器的控制引脚uint read1543(uchar port) //从TLC1543读取采样值,形参port是采样的通道号{ uint data ad;uint data i;uchar data al=0,ah=0;CLOCK=0;_CS=0;port<<=4;for (i=0;i<4;i++) //把通道号打入1543{ D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;port<<=1; }for (i=0;i<6;i++) //填充6个CLOCK{ CLOCK=1;CLOCK=0; }_CS=1;_nop_();_nop_();_CS=0; //等待AD转换for (i=0;i<2;i++) //取D9,D8{ D_OUT=1; CLOCK=1; ah<<=1; if (D_OUT) ah|=0x01;CLOCK=0; }for (i=0;i<8;i++) //取D7--D0{ D_OUT=1; CLOCK=1; al<<=1;if (D_OUT) al|=0x01; CLOCK=0; }_CS=1; ad=(uint)ah;ad<<=8;ad|=al; //得到AD值return (ad); }void delay(int t)// 控制报警器的程序{if(p1<0X56) { p1^4=1;p1^7=1; }else {if(p1>0x6F){p1^5=1; }else {p1^6=1;p1^7=1; } }void delay(uint v)//蜂鸣器的程序{ while(v!=0) v--; }main(){ delay(100);while(1){ BUZZER=1;//蜂鸣器关闭delay(100);BUZZER=0;//蜂鸣器发声delay(100); }}#include "config.h"#define KEY 1<<5uint8 digitable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uint8 selectable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uint8 DATA0[8];uint8 Disp =0;uint16 ADC_Data[8]={0}; //AD转换结果寄存器uint16 ADC_Result;uint16 pwm_value = 5;uint8 TEM=30;uint8 DATA0[8];uint8 T0Flag=0;uint8 SF=0,M=0,R=0,W=0,TK=0x09,PAGE=0;uint32 ui_Ad_Cnl=0;fp32 ui_Kp=1.2;fp32 ui_Kd=0.01;fp32 i_Ki = 0.56;int8 i_pid_result;/*========================delay==========================*/void delay(void){uint16 i,j;for(i=100;i>0;i--)for(j=5000;j>0;j--);}/*========================timer0youguan=====================*/void Timer0_Init(void){T0TC = 0; //定时器设置为0 T0PR = 0; // 时钟不分频T0MCR = 0x03;//复位T0TC,并产生中断标志T0MR0 = Fpclk/1000;//T0TCR = 0x01; //1毫秒定时}void __irq Timer0Int(void){T0Flag = 1;Disp++; // T0中断标志置位T0IR = 0x01; // 清除中断标志VICVectAddr = 0; // 向量中断处理结束}void IRQ_Init(void){VICIntSelect = 0x00; // 设置所有的通道为IRQ中断VICVectCntl0 = 0x20 | 4; // Timer0分配到IRQ slot1VICVectAddr0 = (uint32)Timer0Int; // 设置Timer0向量地址VICIntEnable = (1 << 4) ; // 使能Timer0和Timer1中断}/*========================conbit==========================*/void CONVBIT0(uint16 num,uint8 hor){DA TA0[hor+3] = num/1000;DA TA0[hor+2] = num%1000/100;DA TA0[hor+1] = num%100/10;DA TA0[hor+0] = num%10/1;}/*========================spi==========================*/void MSPI_Init(void){SPI_SPCCR = 0x10; // 设置SPI时钟分频SPI_SPCR = (0 << 3) | //在SCK 第一个时钟沿采样(1 << 4) | // CPOL = 1, SCK 为低有效(1 << 5) | // MSTR = 1, SPI 处于主模式(0 << 6) | // SPI 数据传输MSB (位7)在先(0 << 7); // SPIE = 0, SPI 中断被禁止}uint8 MSPI_SendData(uint8 data){SPI_SPDR = data;while( 0 == (SPI_SPSR & 0x80)); // 等待数据发送完毕return(SPI_SPDR);}/*========================ADCaiyang==========================*/void ADC_Init(void){uint32 ADclk=(Fpclk / 1000000 - 1),h=0;AD0CR = (1 << 3) | // SEL=8,选择通道3(ADclk << 8)| // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz(0 << 16) | // BURST=0,软件控制转换操作(0 << 17) | // CLKS=0, 使用11clock转换(1 << 21) | // PDN=1,正常工作模式(0 << 22) | // TEST1:0=00,正常工作模式(1 << 24) | // START=1,直接启动ADC转换(0 << 27);delay();h= AD0DR;}uint16 ADC(void){uint32 ADC_R;uint16 ADC_R1;AD0CR |= 1 << 24; // 进行第一次转换while ((AD0DR & 0x80000000) == 0); // 等待转换结束AD0CR |= 1 << 24; // 再次启动转换while ((AD0DR & 0x80000000) == 0); // 等待转换结束ADC_R = AD0DR; // 读取ADC结果ADC_R1 = (ADC_R >> 6) & 0x3FF;ADC_R1 = ADC_R1 * 2480/ 1024;return (ADC_R1);}/*========================PINinit==========================*/void pininit(){PINSEL1 = (PINSEL1 & (~(0x03<<28)))|(0x01<<28); //P0.30选择AD0.3通道PINSEL0 = (PINSEL0 & (~(0xFF<<8)))|(0x55<<8); // 选择SPI功能}/*========================Pwminit==========================*/void PWMinit(){PINSEL0 = (PINSEL0 & (~(0x03<<14)))|(0x02<<14);PWMPR = 0;PWMTC = 0;PWMMR0 = Fpclk / 1;PWMMR2 = PWMMR0 * pwm_value /100;PWMPCR = (1 << 10);PWMLER = 0x05;PWMTCR = 0x02;PWMTCR = 0x09;}/*========================Pwminit==========================*/void TempraPid(uint8 tem){uint32 i_R_value;int32 i_last_deviation;int32 i_then_deviation;int32 i_now_deviation;i_R_value =(uint32) (1+ 952 * tem - 1.06 * tem * tem);ui_Ad_Cnl = (30200 *2540) / (30200 + i_R_value);//ui_Ad_Cnl = ui_Ad_Cnl ;i_now_deviation = ui_Ad_Cnl-5 - ADC_Result;i_pid_result = (int)(i_pid_result+ ui_Kp * (i_now_deviation - i_then_deviation)+ i_Ki * i_now_deviation+ ui_Kd * (i_now_deviation - 2* i_then_deviation + i_last_deviation)-8);i_last_deviation = i_then_deviation;i_then_deviation = i_now_deviation;if(i_pid_result > 0){//pwm_value = pwm_value + 5;//if(pwm_value>100)pwm_value = 90;i_pid_result=i_pid_result+10;if(i_pid_result>100)i_pid_result = 90;PWMMR2 = PWMMR0 * i_pid_result / 100;}if(i_pid_result < 0){//pwm_value = pwm_value - 10;//i_pid_result= (- i_pid_result)-10;i_pid_result = 1;//if(pwm_value<5)pwm_value = 5;PWMMR2 = (PWMMR0 * i_pid_result) / 100;}if(i_pid_result == 0){//pwm_value = pwm_value;PWMMR2 = PWMMR0 * i_pid_result / 100;}PWMLER = 0x05;PWMTCR = 0x09;}/*==========================================================*/ /*==========================================================*/ int main (void){uint8 s=0,x=0,k=4,i=0;Timer0_Init();IRQ_Init();MSPI_Init();ADC_Init();pininit();PWMinit();T0TCR = 0x01;IRQEnable();while(1){if(Disp==240){Disp=0;ADC_Data[s]=ADC();if(s==4){ //ADC_Result=0;for(s=0;s<5;s++)ADC_Result=ADC_Result + ADC_Data[s];ADC_Result=ADC_Result/5;s=0;}elses++;//TempraPid(TEM);}/*if(T0Flag==1){T0Flag=0;TempraPid(TEM);CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);x=DA TA0[k];MSPI_SendData(digitable[x]);MSPI_SendData(~selectable[k]);if(k==7)k=0;elsek++;}*/if(T0Flag==1){T0Flag=0;TempraPid(TEM);W++;if(W==80){W=0;if(M==0){switch(PAGE){case 0:{CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);}break;case 1:{CONVBIT0(TEM,0);CONVBIT0(0,4);}break;}}//M==0if(SF)SF=0;elseSF=1;}//W==80if(M==0){x=DATA0[k];}else{if(k==R){if(SF==0)x=10;elsex=DATA0[k];}elsex=DATA0[k];}MSPI_SendData(digitable[x]);MSPI_SendData(~selectable[k]);if((IO0PIN & KEY) !=0){if(TK==k){switch(TK){case 0:{if(M==2)M=1;elseM++;switch(M){case 1:{CONVBIT0(ui_Ad_Cnl,0);CONVBIT0(ADC_Result,4);}break;case 2:{CONVBIT0(TEM,0);CONVBIT0(0,4);}break;}}break;case 1:{if(R==3)R=0;elseR++;}break;case 2:{if(M==2){if(DATA0[R]==9)DATA0[R]=0;elseDATA0[R]++;}}break;case 3:{if(!M==0){TEM=DA TA0[3]*1000 + DA TA0[2]*100 + DA TA0[1]*10 + DATA0[0];M=0;R=0;}}break;case 4:{if(PAGE==1)PAGE = 0;elsePAGE = 1;}break;}//tkTK = 0x09;}}//if((IO0PIN & KEY) ==0){for(i=0;i<230;i++);if((IO0PIN & KEY) ==0)TK = k;}if(k==7)k=0;elsek++;}//disp==1}return 0;}/*****************************************************************/。

相关文档
最新文档