湿度传感器由于其工作原理的限制,必须采取非密封封装形式,即要求封装管壳留有和外界连通的接触孔或者接触窗,让湿敏芯片感湿部分和空气中的湿汽能够很好的接触。同时,为了防止湿敏芯片被空气中的灰尘或杂质污染,需要采取一些保护措施。目前,主要手段是使用金属防尘罩或者聚合物多孔膜进行保护。下面介绍几种湿度传感器的不同封装形式 。
1.晶体管外壳(TO)封装
封装结构示意图见图1[1];目前,用TO型封装技术封装湿敏元件是一种比较常见的方法。TO型封装技术有金属封装和塑料封装两种。金属封装先将湿敏芯片固定在外壳底座的中心,可以采用环氧树脂粘接固化法;然后在湿敏芯片的焊区与接线柱用热压焊机或者超声焊机将Au丝或其他金属丝连接起来;最后将管帽套在底座周围的凸缘上,利用电阻熔焊法或环形平行焊法将管帽与底座边缘焊牢。金属管帽的顶端或者侧面开有小孔或小窗,以便湿敏芯片和空气能够接触。根据不同湿敏芯片和性能要求,可以考虑加一层金属防尘罩,以延长湿度传感器的使用寿命 。
2.单列直插封装(SIP)封装
单列直插封装(SIP)也常用来封装湿度传感器。湿敏芯片的输出引脚数一般只有数个[1],因而可以将基板上的I/O引脚引向一边,用镀Ni、镀Ag或者镀Pb-Sn的“卡式”引线(基材多为Kovar合金)卡在基板的I/O焊区上,将卡式引线浸入熔化的Pb-Sn槽中进行再流焊,将焊点焊牢。根据需要,卡式引线的节距有2.54 mm和1.27 mm两种,平时引线均连成带状,焊接后再剪成单个卡式引线。通常还要对组装好元器件的基板进行涂覆保护,最简单的是浸渍一层环氧树脂,然后固化。最后塑封保护,整修毛刺,完成封装 。
单列直插封装的插座占基板面积小,插取自如,SIP工艺简便易行,适于多品种,小批量生产,且便于逐个引线的更换和返修 。
3.小外形封装(SOP)
小外形封装(SOP)法是另一种封装湿度传感器的方法。SOP是从双列直插封装(DIP)变形发展而来的,它将DIP的直插引脚向外弯曲成90°,变成了适于表面组装技术(SMT)的封装。SOP基本全部是塑料封装,其封装工艺为:先将湿敏芯片用导电胶或环氧树脂粘接在引线框架上,经树脂固化,使湿敏芯片固定,再将湿敏芯片上的焊区与引线框架引脚的键合区用引线键合法连接。然后放入塑料模具中进行膜塑封装,出模后经切筋整修,去除塑封毛刺,对框架外引脚打弯成型。塑料外壳表面开有与空气接触的小窗,并贴上空气过滤薄膜,阻挡灰尘等杂质,从而保护湿敏芯片。相较于TO和SIP两种封装形式,SOP封装外形尺寸要小的多,重量比较轻。SOP封装的湿度传感器长期稳定性很好,漂移小,成本低,容易使用。同时适合SMT,是一种比较优良的封装方法 。
4.其它封装形式
外部支撑框架是由高分子化合物形成,用预先设计的模子浇铸而成,其设计充分考虑了空间结构,保证湿敏芯片和空气能充分接触。湿敏芯片沿着滑道直接插入外框架,然后固定。从外框架另一端插入外引线,与湿敏芯片的焊区相接(也可以悬空),然后用导电胶热固法将湿敏芯片和外引线连接起来。最后,外框架的正反两面都贴上空气过滤薄膜。过滤薄膜由聚四氟乙烯制成的多孔膜,能够允许空气渗透进入传感器而能阻挡灰尘和水滴 。
这种湿度传感器的封装有别于传统的湿度传感器封装,它不采用传统的引线键合的方法连接外引线和湿敏芯片,而是直接将湿敏芯片外引线连接,从而避免了因为内引线的原因而导致的失效问题。同时,它的封装体积较小,传感器性能稳定,能够长时间工作。不过,它对外框架制作要求较高,工艺相对比较复杂 。
5.湿度传感器和其它传感器混合封装
很多时候,湿度传感器并不是单独封装的,而是和温度传感器、风速传感器或压力传感器等其它传感器以及后端处理电路集成混合封装,以满足相应的功能需求。其封装工艺为:先将湿敏芯片用导电胶或环氧树脂粘接在基板上,经树脂固化,使湿敏芯片固定。再将湿敏芯片上的焊区与基板键合区用引线键合法连接。然后封盖外壳(材料可选择水晶聚合物)。外壳的表面开有与空气接触的小窗,使湿度敏感元件和温度敏感元件芯片和空气充分接触,而其他部分与空气隔离,密封保护。小窗贴有空气过滤薄膜,以防止杂质的沾污 。
LCC封装由于没有引脚,所以寄生电容和寄生电感均较小。同时它还具有电性能和热性能优良,封装体积小,适合SMT等优点 。
原理图很简单 就是把sht11的数据口和时钟口就到单片机的两个端口,关键是编程啊,下面一段是我之前写的一段关于sht11的程序,希望能帮到你,有问题交流下的
#include <reg52.h> //头文件
#include <intrins.h>
#include <stdio.h> //
#include <math.h> //Keil library
//**************************************
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int //定义一下方便使用
#define ulong unsigned long //定义一下方便使用
#define TEMP_ML 0x03 //000 0001 1 温度命令
#define HUMI_ML 0x05 //000 0010 1 温度命令
unsigned char error ;//全局错误变量
unsigned char ack ;//全局应答变量
//float temp_zi ;//全局应答变量
//float humi_zi ;//全局应答变量
unsigned char temp_h ;//全局应答变量
unsigned char temp_LL ;//全局应答变量
unsigned int xianzhi_t=0;//温度显值
unsigned int xianzhi_h=0;//湿度显值
uchar setzhi_h,setzhi_l;
bit setbz_h,setbz_l,setkey;
sbit DATA =P2^6;//数据
sbit SCK=P2^7;//时钟
sbit hot =P2^0;// 加热
sbit motor =P2^1;// 电机
sbit speek =P2^2;// 声音
sbit set =P0^0;// 设置
sbit setup =P0^1;// 设置+
sbit setdown =P0^2;// 设置-
sbit gwei =P3^4;//个位
sbit swei =P3^3;//十位
sbit bwei =P3^2;//百位
sbit qwei =P3^1;//千位
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳
//*******************************基本驱动程
/////////////////
//////////////////////
char read() //读一个字节 返回应答信号
//----------------------------------------------------------------------------------
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
{
unsigned char i,val=0;
temp_LL=0;
temp_h=0;
DATA=1; //释放数据总线
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿读入
if (DATA) val=(val | i); //确定值
SCK=0;
}
DATA=0; //读应答信号,有应答为1,为应答为0 通过CPU下拉为应答
SCK=1; //第9个脉冲
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //释放数据总线
temp_h=val;
val=0;
////低8位/////////////////////////////
DATA=1; //释放数据总线
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿读入
if (DATA) val=(val | i); //确定值
SCK=0;
}
DATA=1;//0; //不需要应答 通过CPU下拉为应答
SCK=1; //第9个脉冲
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //释放数据总线
temp_LL=val;
}
////////////
char write(unsigned char value) //写一个字节 返回应答信号
//---------------------------------------------------------
{
unsigned char i ;
ack=0;
for (i=0x80;i>0;i/=2) //释放数据总线
{ if (i & value) DATA=1; //写入值
else DATA=0;
SCK=1; //上升沿写入
_nop_(); _nop_(); _nop_(); //延时
SCK=0;
}
DATA=1; //释放数据总线
SCK=1; //第9个脉冲
if (DATA==1) ack=1;
//读应答信号
SCK=0;
return ack; //error=1 表示没有应答
}
////////
void start_sht11(void) //启动
//--------------------------------------------------------
{
DATA=1; SCK=0; //数据为1,SCK=0
_nop_();
SCK=1; //第一个脉冲
_nop_();
DATA=0; //数据跌落
_nop_ ();
SCK=0; //完成一个脉冲
_nop_(); _nop_(); _nop_();
SCK=1; //再一个脉冲
_nop_();
DATA=1; //数据变为1
_nop_();
SCK=0; //完成该脉冲
}
//////////////////////////////////
void sht_rest(void) //复位
{
unsigned char i;
DATA=1; SCK=0; //数据为1 时钟为0
for(i=0;i<9;i++) //9 个脉冲为 复位
{ SCK=1;
SCK=0;
}
start_sht11(); //启动
}
////////////////////////////////
//测量温度或者是温度,返回校验值
text_a(unsigned char ml)
{
unsigned int i;
start_sht11(); //启动
write(ml);//写入测温度
if (ack==1)
{
sht_rest() ;//复位
write(ml);//写入测温度
}
//判断是否处于忙
// DATA=1;//释放数据总线
//for (i=0;i<65535;i++) if(DATA==0) break;
for (i=0;i<55535;i++){ if(DATA==0) break;else {xianshi();} }
read();//读温度
}
/////////温湿度处理//////
text_jishuan_temp11()
{
error=0;
ack=0;
sht_rest() ;//复位
text_a(TEMP_ML);
text_jishuan_temp();
key();
text_a(HUMI_ML);
text_jishuan_humi();
}
/////
//////////计算温度////
text_jishuan_temp()
{
float aa=0,bb=0,temp_zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
//
if (temp_zi<0)
{
temp_zi=0;
}
temp_zi=temp_zi*10;
xianzhi_t=(int)temp_zi;//给显示值
}
///////计算湿度//////
text_jishuan_humi()
{
float aa=0,bb=0,humi_zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
bb=aa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=aa;
//
humi_zi=humi_zi*10;
xianzhi_h=(int)humi_zi;
}
///////延时///////
delay(int i)
{
while(--i);
}
///////显示处理///////
xianshi()
{
int abcd=0;
int i;
for (i=0;i<1;i++)
{
abcd=xianzhi_h;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/100];
qwei=0;
delay(40);
qwei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
bwei=0;
delay(40);
bwei=1;
if(setbz_h^setbz_l)
{
if(setbz_h) abcd=setzhi_h;
if(setbz_l) abcd=setzhi_l;
P1=dispcode[abcd/10];
swei=0;
delay(40);
swei=1;
P1=dispcode[abcd%10];
gwei=0;
delay(40);
gwei=1;
}
else
{
abcd=xianzhi_t;
P1=dispcode[abcd/100];
swei=0;
delay(40);
swei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
gwei=0;
delay(40);
gwei=1;
}
}
}
doing()
{
char xianzhi_mi;
xianzhi_mi=xianzhi_t/10;
if((xianzhi_mi<setzhi_h)&(xianzhi_t>setzhi_l)) { motor=0;hot=0;speek=0;}
if(xianzhi_mi>setzhi_h) { motor=1;hot=0;speek=1;}
if(xianzhi_mi<setzhi_l) { motor=0;hot=1;speek=1;}
}
key()
{
if(set&setkey)
{
setkey=0;
if(setbz_l) {setbz_l=0;setbz_h=0;}
else
{ if(!setbz_h) setbz_h=1;
else {setbz_h=0;setbz_l=1;}
}
}
if(!set) setkey=1;
if(setup==0)
{
if(setbz_h==1)
{ if (setzhi_h<=99) setzhi_h++;}
if(setbz_l==1)
{ if ((setzhi_l<setzhi_h)&(setzhi_l<=99)) setzhi_l++;}
}
if(setdown==0)
{
if(setbz_h==1)
{ if ((setzhi_h>setzhi_l)&(setzhi_h>=1)) setzhi_h--;}
if(setbz_l==1)
{ if (setzhi_l>=1) setzhi_l--;}
}
}
//系统初始化///
csh()
{
P0=0XFF;
P1=1;
P2=0;
P3=0XFF;
}
/////////////////////////////////
///////////////////////
main()
{
setzhi_h=22;//设置高温
setzhi_l=20;//设置低温
csh();//系统初始化
while(1)
{
text_jishuan_temp11();//测温湿度
//xianshi();//显示
doing();//处理
key();//键处理
// xianshi();//显示
}
}