(1)
0≤t<850℃Rt=R0(1+At+Bt2)
(2)
第二章硬件部分
温度传感器的电路模块
(1)参考电源。
(2)恒流源测温电路。
(3)信号放大电路。
(4)低通滤波电路。
一、参考电源电路:
对于整个设计而言,首要问题就是解决系统的供电问题。
要求电源模块稳定可靠。
在本课程设计中,电源供电模块的电源可以通过一个TL431和一个电位器VR1(502)调节产生一个3.3v的稳定的参考电源。
图1为参考电源电路。
TL431是可控精密稳压源。
它的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。
该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替稳压二极管,例如,数字电压表,运放电路,可调压电源,开关电源等。
TL431是由德州仪器生产,所谓TL431就是一个有良好的热稳定性能的三端可调分流基准源。
它的输出电压用两个电阻就可以任意地设置到从Vref(2.5V)到36V范围内的任何值(如图1)。
该器件的典型动态阻抗为0.2Ω,在很多应用中可以用它代替齐纳二极管,例如,数字电压表,运放电路、可调压电源,开关电源等等。
图1参考电源电路
2、恒流源测温电路:
恒流源式测温的典型应用电路如图3所示。
测温原理:
通过运放U1A将基准电压3.3V转换为恒流源,电流流过Pt100时在其上产生压降,再通过运放U1B将该微弱压降信号放大(图中放大倍数为10),即输出期望的电压信号,该信号可直接连AD转换芯片。
根据虚地概念“工作于线性范围内的理想运放的两个输入端同电位”,运放U1A的“+”端和“-”端电位V+=V-=3.3V;假设运放U1A的输出脚1对地电压为Vo,根据虚断概念,(0-V-)/R1+(Vo-V-)/RPt100=0,因此电阻Pt100上的压降VPt100=Vo-V-=V-*RPt100/R1,因V-和R1均不变,因此图3虚线框内的电路等效为一个恒流源流过一个Pt100电阻,电流大小为V-/R1,Pt100上的压降仅和其自身变化的电阻值有关。
其中R1=3.3K欧,故VPt100=RPT100/1000,再经过放大电路,放大倍数为10倍得到最终的V=RPT100/100,即RPT100=V*100,再根据PT100温度和电阻的近似关系T=(RPT100-100)*2.56,得到T=(V-1)*256,这就是最终输出电压和温度的关系式。
恒流源接法
三、信号放大电路
电桥的压差信号经过运放LM358放大后输出期望大小的电压信号,该信号可直接连AD转换芯片。
差动放大电路中R2=R3、R4=R5、放大倍数=R5/R3=R4/R2=10,运放采用单一5V供电。
在本次课程设计中,差动放大电路采用负反馈电路。
电路图如图:
(4)低通滤波电路。
通过一个低通滤波电路,过滤掉其中的交流成分。
IN4733是一个稳压二极管,可以稳定输出电压。
使电压保持稳定。
第三章软件部分
#include"delay.h"
#include"sys.h"
#include"usart.h"
#include"timer.h"
#include"adc.h"
intmain(void)
{
u16adcx;
floattemp,t;
SystemInit();
delay_init(72);//延时初始化
NVIC_Configuration();
uart_init(9600);
Adc_Init();
while
(1)
{
adcx=Get_Adc(ADC_Channel_0);
//printf("%d\n",adcx);
temp=(float)adcx*(3.3/4096);
t=(temp-1.0)*256;
printf("%f\n",t);
delay_ms(250);
}
}
#include"adc.h"
voidAdc_Init(void)
{
ADC_InitTypeDefADC_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//72M/6=12,ADC最大时间不能超过14M
//PA0/1/2/3作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟输入引脚
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_DeInit(ADC1);//将外设ADC1的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
//ADC工作模式:
ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode=DISABLE;/
//模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
//模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
//ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel=1;
//顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1,&ADC_InitStructure);
//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
ADC_ResetCalibration(ADC1);//重置指定的ADC1的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));
//获取ADC1重置校准寄存器的状态,设置状态则等待
ADC_StartCalibration(ADC1);
//开始指定ADC1的校准状态
while(ADC_GetCalibrationStatus(ADC1));
//获取指定ADC1的校准程序,设置状态则等待
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
//使能指定的ADC1的软件转换启动功能
}
//获得ADC值
//ch:
通道值0~3
u16Get_Adc(u8ch)
{
//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC1,ADC通道3,规则采样顺序值为1,采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
//使能指定的ADC1的软件转换启动功能
while(!
ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待转换结束
returnADC_GetConversionValue(ADC1);
//返回最近一次ADC1规则组的转换结果
}
#include"delay.h"
staticu8fac_us=0;//us延时倍乘数
staticu16fac_ms=0;//ms延时倍乘数
voiddelay_init(u8SYSCLK)
{
//SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
//选择外部时钟HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
voiddelay_ms(u16nms)
{
u32temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL=0x00;//清空计数器
SysTick->CTRL=0x01;//开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!
(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00;//关闭计数器
SysTick->VAL=0X00;//清空计数器
}
//延时nus
//nus为要延时的us数.
voiddelay_us(u32nus)
{
u32temp;
SysTick->LOAD=nus*fac_us;//时间加载
SysTick->VAL=0x00;//清空计数器
SysTick->CTRL=0x01;//开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!
(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00;//关闭计数器
SysTick->VAL=0X00;//清空计数器
}
第四章总结
一、设计及调试的注意点
1.电压基准源可以采用TL431按图1的电路产生可调的。
2.等效恒流源输出的电流不能太大,以不超过1mA为准,以免电流大使得Pt100电阻
自身发热造成测量温度不准确,试验证明,电流大于1.5mA将会有较明显的影响。
3.运放采用单一5V供电,如果测量的温度波动比较大,将运放的供电改为±15V双电源供电会有较大改善。
4.电阻R2、R3的电阻值取得足够大,以增大运放的U1B的输入阻抗。
二、收获
我们这次课程设计则选用了热电阻pt100,第一次我采用了桥电路的接法,但是电路很难达到平衡,而且其中一个电阻要用100欧德精密电阻,我只是用了一般的100欧电阻,到最后一直调不出来,误差一直在几度,最后选用了恒流源接法,通过调节3.3v基准电压,来获得一个恒流源,并且得到电阻,输出电压以及温度的公式。
同时,经过这些天的实际动操作,使我认识到看似简单的问题,真正做起来的时候,如果不认真、不按照确定的步骤进行,会产生很多问题比如在做的时候,忽视了人家说的100欧的精密电阻的作用,没有深入分析为什么使用精密电阻,现在知道公式T=(RT100-100)*2.56,即PT100的阻值每变化1欧,温度输出就会变化2.56摄氏度,而一般的电阻都有5%的误差,即100欧的就会产生5欧的误差,而5欧的误差就会使温度相差10℃左右,因此必须选用精密电阻。
根据在动手操作时必须弄清每一部的原理和方法,一定要养成良好的做事风格和习惯。
参考文献:
1.陈书旺,张秀清,董建彬编,传感器应用及电路设计,北京,化学工业出版社,2008。
2.陈杰,黄鸿编,传感器与检测技术,北京,高等教育出版社,2002。
3.曾光宇,杨洪,李博,王浩全编,现代传感器技术与应用基础,北京,北京理工大学出版社,2006。
附录
附录1原理图
附录2实物图