时间:2024-09-03
桂林市房产档案馆 欧肇成
基于PIC单片机的档案保存仓储运输领域的温度记录仪设计
桂林市房产档案馆 欧肇成
随着大数据概念的提出,近年来,各类数据如何精确采集与处理,成为了热点课题,在档案保存、食品药品的仓储运输等领域也不例外。在档案保存、食品药品领域,温度数据是一个十分重要的数据,它直接影响着档案防虫、纸张变质、食品药品的安全。因此开发出一种低成本,高精度,自由的设置记录温度时间间隔,且能快速方便的用计算机读出数据的环境温度记录产品是很有必要的。而PIC单片机作为一种功能强,稳定,低功耗的单片机已经广泛应用到了电子产品的设计当中,所以本设计以PIC单片机,LCD驱动,AD转换,SPI协议,串口通信等技术为基础的温度记录仪设计。
温度记录;PIC单片机;AD转换;SPI协议
根据纸质档案保存原则与查阅的便利性以及经过成本计算后,经常查阅的纸质档案应当保存在温度14℃-24℃之间,湿度在45%-60%。这一类温度测试记录,对精度要求不是特别高,而对测试长时间的稳定性,因为测试时间长,几个月到几年都有可能,如1小时差10秒,一年之后可能差1天,所以时间的精确度要求较高。为了真实准确的记录面积较大档案室中各个位置的数据,且能快速查看当前温度要求测试仪体积小,带LCD显示。根据以上实际情况,制定以下技术规格:温度测试范围:-30℃~ 70℃。其中-20℃ ~ 40℃范围内±0.5℃,其他±1.0℃。记录数据最大量为:32000个。记录间隔:10秒至24小时可设置,分辨率1秒。时间精度:每1000秒,±3秒。根据以上描初期设计的参数指标,经过一系列的方案验证,为了实现集LCD驱动,AD转换,SPI,串口通信各种功能于一体的的温度记录仪且体积小大小接近U盘。这里选用了PICLF1939单片机,这款单片机低功耗,自带LCD驱动,片内64K EEPROM,10位AD转换,有SPI接口和串口接口。完全满足设计要求。此外,为了实现USB接口与电脑通讯,需要CH340USB串口翻译芯片,512K的片外EEPROM M95512存储温度数据以及电源管理芯片等。
在温度精度要求不高的情况下,这里采用负温度系数的热敏电阻,图1是各个温度的误差百分比。从图上不难看出,该热敏电阻在-30℃-40℃误差小,其中20℃左右误差最小,是符合被测试环境要求的。
图1
电路采用与10K高精度电阻串联分压后连接PICLF1939模拟输入端,在热敏电阻于GND之间并联104电容,过滤干扰信号,PICLF1939的 模数转换器可以将模拟输入信号转换为该信号的 10 位二进制表示。该器件使用模拟输入,这些输入通过多路开关连接到一个采样保持电路。采样保持电路的输出与转换器的输入相连。该转换器通过逐次逼近法生成 10 位二进制数并将转换结果存储到ADC 结果寄存器(ADRESH:ADRESL寄存器对)。与AD转换相关的寄存器:TRISA:端口PORTA的方向寄存器,把被转换的电压连接的模拟输入口设置为输入。
ADCON0,
CHS<4:0>:模拟通道选择,选择通道0,00000 = AN0。
GO/DONW:1 = A/D转换正在进行。将该位置 1 可启动A/ D转换周期。 当 A/D 转换完成以后,该位由硬件自动清零。 0 = A/D转换完成 /未进行。
ADON:ADC使能位,1=ADC被使能,0=ADC 被禁止且不消耗工作电流。为了节能,只用在AD转换时才开启。结束后关闭。
ADCON1,
ADFM:1 =右对齐。
ADCS<2:0>:AD转换时钟选择位。本次选择111=FRC由专用RC振荡器提供时钟。FRC在睡眠模式依然可以工作。
ADNREF:0 = VREF- 与VSS 连接。
ADPREF:00 = VREF+与VDD 连接。
ANSELA:PORTA 模拟选择寄存器,设置为0x03把RA0,RA1设置为模拟输入位。
这里在温度采样时,标准电压与系统的电源和GND相连。因为计时与通讯模块都需要用到中断,而AD转换是定时进行不存在不确定突发事件,所以本次INTCON PIE1 PIR1等寄存器关于AD转换的中断,全部关闭,采用查询修改GO/DONW位来控制和判断AD的状态。
如下图2所示阻值与温度的关系,是非线性的,为了综合考虑精确度和程序空间利用微分原理,把该曲线每5摄氏度分段,每段用一个直线方程表示。
图2
程序中,把AD转换的值转换成电阻值代入直线方程救可得出温度值。
例如:
11℃的中心阻值是19500Ω,15℃的中心阻值15600Ω。假设直线方程为Y=KX+B X=11,15;Y=19500,15600;计算结果不需要小数,所以放大10倍以后,得出的直线方程为:X=(30225-Y)/98
ADCON1=0b11110000;//右对齐,FRC为AD时钟。
ADCON0=0b00000000;//模拟通道0;标准电压连接电压与GND。
FVRCON=0b00000000;//内部标准电压关闭。
ANSELA = 0x03; //RA0,RA1,设为模拟通道
ADCON0bits.ADON=1; //使能AD转换
DelayUs(100);
ADCON0bits.GO_nDONE=1;//GO_nDONE置1,AD开始
DelayUs(50);
if(!ADCON0bits.GO_nDONE)//查询GO_nDONE,为0时AD转换结束
{short Advaule;
unsigned long Adteko,Adfx;
gTestH=ADRES; //取出AD转换的结果
Adteko=gTestH*10000;
Adteko=Adteko/(1023-gTestH);//还原阻值。
if((Adteko<19500)&&(Adteko>=15600))//例:还原阻值后,阻值代入直线方程
{ Adfx=30225-Adteko;
Advaule=Adfx/98;
Advaule+=gSet.Ver; //得出温度值,加减校准值进一步调整
…… 以下省略
return Advaule; }
(1)根据《JJF 1366-2012温度数据采集仪校准规范》标准的要求,选用标准恒温箱与标准温度计进行验证,对实验环境的要求如下:a) 环境温度 (20 土 5)t;b) 相对湿度=不超过 85 Yo;c) 当电测仪器对环境条件另有要求时,应满足其规定要求。
主要检测设备
测温设备:标准铂电阻温度计,技术要求二等;
恒温设备:恒温槽,温度均匀性不超过 0.01 ℃,温度波动性不超过 0.02 ℃/10 min;
专用恒温箱:温度范围为( -50~+150)℃温度均匀度不超过0.05 ℃,温度波动度不超过士 0.02 ℃/10 min 。
把代校准待测试的温度记录仪和标准的铂电阻温度计的测温部分一同放在专用恒温箱中,用标准温度计的读书与温度记录仪的读数作比较,经过多个产品多次测试校准,利用直方图,散布图以及工程能力计算等手段,把程序中各条温度计算曲线调到最接近测试结果中心值的状态。
(2)与保证时间精度一样,因为每一个热敏电阻都有个体误差,为保证每个温度记录仪的温度准确,需要在恒温箱中,测出被测产品与标准温度计某一点的温差,再利用上位PC机把温差换算成补偿温度值,由USB发给产品的单片机,单片机把补偿值记录在片内的EEPROM中,程序上每次测试温度都要跳出补偿值加在结果上。
因为温度数据是一个-300至+700的有符号数据,所以每一个温度数据都要2个字节保存,想要存到32000个数据片内EEPROM是不够的,这里利用512Kbit的片外EEPROM M95512,不需要串口通信控制,利用SPI总线就可以进行数据读写。512Kbit 64K字节,符合32000个数据,保存空间需要64000个字节的要求的。SPI总线,SPI 总线可以允许有一个主器件和一个或多个从器件同时工作。这里单片机作为主器件,只需要一个从器件M95512就足够保存数据了。M95512的工作方式,由主器件发出命令,从器件做出相应的回答,所以只用控制主器件的发射接收。控制方式主要有两种第一种设置SSPCON1、SSPSTAT等寄存器,对SSPBUF进行读写来与从器件通讯。第二种不设置寄存器,可以用任何I/O口来实现S位选,SCK时钟,SDO输出数据,SDI输入数据。发送方法如下:
for(tmp=0;tmp<8;tmp++)//根据发送长度,改变循环次数或调用次数
{if(cmd &0x80)// 把发送内容存入cmd
SDO_H; //判断最高位,最高位为1输出置1
Else
SDO_L; //最高位为0输出置0
SCK_H; //时钟高
DelayUS(1); //延时
SCK_L; //时钟低把当前位数据发向从器件
cmd <<= 1; } //左移,判断下一位
接收方法如下:
for(tmp=0;tmp<8;tmp++)
{ SCK_H; //时钟高再低读回一位数据
DelayUS(1);
SCK_L;
if(!SDI)
readout &= 0xFE;//输入数据存入中间变量
else
readout |= 0x01;
if(tmp != 7) readout <<=1;}
return readout; //返回数据
例如要在0x0001地址中写入 0x55数据,流程是片选S置0选中该存储器,时钟和输出都置0,向存储器发送0x06写使能命令,再发送0x02写操作命令,接下来先发地址0x0001,再发数据0x55,就把0x55写入到了0x0001地址中。同样为了节能SPI的片选使能都是平时关闭,要用时开启。
PIC16LF1939器件中,该模块最多能驱动 4 个公共端和 24段的面板。可以直接驱动液晶模块不需要液晶自带驱动和操作程序,这样就大大降低的显示的成本,原来几十上百的液晶驱动模块现在加上接触用的斑马条只需要2块钱左右。通过设置LCDCON LCDCST LCDPS LCDREF LCDRL LCDSE等寄存器就可以驱动LCD,通过给LCDDATA赋值,就可改变LCD显示。平时关闭LCDEN=0,以降低能耗。
把温度记录仪插上PC USB接口,可以立即读取记录仪的记录数据,并生成时间温度的曲线图。还可以将数据用Execl文件形式导出。用户界面中可以设置温度测量的时间间隔,报警上下限延时启动时间,同步时间等等。都是通过PC与单片机之间的自制串口协议进行通讯的。
在各种信息数据大爆炸的物联网时代,人们更关心数据的多样性与准确性,以及通过数据分析出的对生活生产有价值的结果。而单片机也在飞速发展,集成度越来越高,体积越来越小,专用通用的各种功能越来越强。因此单片机势必会在数据采集的末端大放异彩。
[1]《PIC16F1939 data sheet》.
[2]《JJF 1366-2012温度数据采集仪校准规范》.
[3]《M95512 data sheet》.
[4]《CH340 data sheet》.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!