关于菜鸟用51来实现温度变送器的想法,求各路大神拍砖
快放假了,做个温度变送器来玩玩,如果有什么缺点或者不足,请各路大神拍砖......谢谢{:victory:}传感元件:18B20....(貌似好慢~!)
输出信号:0-5V/0-10V/4-20mA
操作温度0-70度
主控IC:STC12C5A60S2
精度:没有测...
系统框架:电源模块,MCU,低通滤波,显示模块
器件:STC12C5A60S2,LM324,LM2596,......
废话少说,上图!!!!!
原理图:
电源模块..........
主控模块..........
PWM输出处理...........
编程思维:{:3_52:} 如何进行0-5V输出呢?----->PWM通过RC滤波再电压跟随输出(如何用PWM变成一个电压呢)------>调节占空比------------>怎么样调节占空比------>将温度0-70的温度值(TEMP)分成256个区间,通过某一段温度就属于某一段的占空比(TEMP/29)!!!!
付上代码一段:
/*********************************************************************************************
程序名: main.c
编写人: Michael Chan
时间: 2012年11月2日
硬件支持: STC12C5A60S2 外部18.432MHz晶振
接口说明: 蜂鸣器 P20
指示灯 P11
功能键 P24
18B20 P23
液晶指示灯 P13
修改日志:
/*********************************************************************************************
说明:
对现场进行测温,对温度范围进行分割,输出PWM波
/*********************************************************************************************/
#include"stc12c5a.h"
#include"lcd.h"
#include"18b20.h"
#include"other.h"
#include"pwm.h"
#define uchar unsigned char
#define uint unsigned int
uchar tnum=0;
bit flag=1;
void timer_init();
void tem_handle();
void main()
{
uint tem;
timer_init();
LCD_init();
PWM_init ();
while(1)
{
if(flag==0)
{
flag=1;
tem_handle();
tem=getTmpValue();
if(tem>=0&&tem<=7000)
{
tem/=29;//pwm转换公式
PWM0_set(tem);
}
}
}
}
void Timer0Interrupt() interrupt 1
{
TH0 = 0x15;
TL0 = 0xa0;
tnum++;
if(tnum==20)
{
tnum=0;
flag=0;
}
}
void timer_init()
{
TMOD = 0x01;
TH0 = 0x15; //5ms
TL0 = 0xa0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void tem_handle()
{
sendChangeCmd();
write_com(0x80+0x40+6);
display(getTmpValue());
write_com(0x80+0x40+12) ;
write_str("C",1);
}
待续............................................................................. 温度变送器??? HiWorld 发表于 2012-12-29 22:06 static/image/common/back.gif
温度变送器???
对,只不过,18B20的原理图没有弄出来 18B20貌似是比较慢,但是最麻烦的还是时序要求太严格。。。。 HiWorld 发表于 2012-12-29 22:09 static/image/common/back.gif
18B20貌似是比较慢,但是最麻烦的还是时序要求太严格。。。。
时序耐心点就可以搞好了,但是这个变送器精度就不得而知了,那个算法不知道可以不? 精度
18B20测温精度不低
PWM做DAC精度不高
算法精度要高还可以通过标定来补偿
你可以另外做个模拟环路调整
rclong 发表于 2012-12-29 22:33 static/image/common/back.gif
精度
18B20测温精度不低
请问温度标定是怎么样,还有模拟环路是用来调整电压输出的吗?? 草芥风中散 发表于 2012-12-29 22:42 static/image/common/back.gif
请问温度标定是怎么样,还有模拟环路是用来调整电压输出的吗??
说来话长
标定就是拿你的测量系统跟标准值比较
例如你用一个精度更高的温度计测得你18b20处温度实际值为20摄氏度
那么根据换算应该输出多少? 实际输出多少? 误差多少?
如此进行标定
获得大量数据还可以绘制出实测曲线 再用最小二乘法修正误差或者直接查表补偿误差
模拟环路嘛 你可以找颗LM35跟你这个系统对比看看
分析一下LM35的模拟测温原理 就可以知道大致如何修正自己的系统了
页:
[1]