实验报告 范本

研究生实验报告(范本)

实验课程: 新型传感器技术

实验名称: 聚苯胺复合薄膜气体传感器的制备与测试

实验地点: 光电420

学生姓名: (范本)

学 号: (范本)

指导教师: (范本)

实验时间: 年 月 日

一、实验目的

熟悉电阻型气体传感器结构及工作原理,进行基于聚苯胺敏感薄膜的气体传感器的结构设计、材料制作、材料表征、探测单元制作与测试、实验结果分析,通过该实验获得气体传感器从设计到性能测试完整的实验流程,锻炼同学学习能力、动手能力和分析问题能力。

二、实验内容

1、理解电阻式气体传感器工作原理

2、进行传感器结构设计

3、进行敏感材料的合成与测试

4、开展气体传感器制作

5、器件性能测试与分析讨论

三、实验原理

气体传感器是化学传感器的一大门类,是气体检测系统的核心,通常安装在探测头内。从本质上讲,气体传感器是一种将某种气体体积分数转化成对应电信号的转换器。根据气敏特性来分类,主要分为半导体气体传感器、固体电解质气体传感器、接触燃烧式气体传感器、光学式气体传感器、石英谐振式气体传感器、表面声波气体传感器等。

气体传感器的检测原理一般是利用吸附气体与高分子半导体之间产生电子授受的关系,通过检测相互作用导致的物性变化从而得知检测气体分子存在的信息,大体上可以分为:

(l)气体分子的吸附引起聚合物材料表面电导率变化

(2)p型或n型有机半导体间结特性变化

(3)气体分子反应热引起导电率变化

(4)聚合物表面气体分子吸、脱附引起光学特性变化

(5)伴随气体吸附脱附引起微小量变化

对于电阻型气体传感器,其基本的机理都是气体分子吸附于膜表面并扩散进体内,从而引起膜电导的增加,电导变化量反应了气体的浓度情况。

四、实验器材

电子天平BS2245:北京赛多利斯仪器系统有限公司

KSV5000自组装超薄膜设备:芬兰KSV设备公司

Keithley2700数据采集系统:美国Keithley公司

KW-4A 型匀胶机:Chemat Technologies Inc.

85-2 型恒温磁力热搅拌机:上海司乐仪器公司

优普超纯水制造系统:成都超纯科技有限公司

动态配气装置 北京汇博隆仪器

S-450型扫描电镜:日本日立公司

UV1700紫外一可见分光光度计:北京瑞利分析仪器公司

BSF-GX-2型分流式标准湿度发生器:国家标准物质研究中心、北京耐思达新技术发展公司

五、实验步骤

1、电阻型气体探测器工作原理认识(见三、实验原理)

2、器件结构设计

电阻型气体探测器基于敏感薄膜电阻变化来进行气体浓度测定,因此电阻是探测器件的一个重要参数。叉指电极结构测量出的电导可由下式表示:

其中L和W为叉指电极基底的长度和宽度,N为叉指电极的数目对数,d为两相邻电极之间的间距,σ为薄膜的本征电导率。结合基底尺寸、材料电导率和工艺能力可以设计出结构优化的叉指 结构,获得较显著的电学输出信号。

图1、基于敏感膜的气体传感器结构设计意图

图1为设计的电阻型气体传感器结构,在绝缘衬底上制作叉指电极,然后在叉指电极上制作敏感薄膜,通过测试两个叉指电极间的电学信号,可获得敏感薄膜的电阻信息。设计完成的整个气体传感器的制作流程示意图如图2所示。

图2、气体传感器制作工艺流程示意图

详细流程可表述为:硅片清洗—硅片表面氧化—溅射生长NiCr合金—溅射生长金—匀胶、显影、曝光、去胶—刻蚀金属层(Kl、硫酸)—中测—划片一测试在器件的制作中,所使用的基片是电阻率为0.7-1?cm的n型单晶硅片([100]取向)。其上氧化生长二氧化硅作为绝缘层,然后溅射镍铬合金(200-300 Å),以提高金电极的附着性。其后再在镍铬合金上溅射导电的金层(400~500Å),采用负胶光刻,电极间距和宽度相等,为50μm,整个器件尺寸大小为8*5mm2,该设计由自己完成,工艺由成都亚光电子股份有限公司加工。

3、聚苯胺复合薄膜制备

(1) 基片预处理

本实验采用表面抛光的石英玻片和平面叉指金电极作为成膜基片。将表面抛光的石英基片先后放在:(l)表面活性剂和水的混合液;(2)去离子水;(3)乙醇;(4)丙酮中分别超声清洗0.5h,以除去表面污垢和油溃。然后将清洗过的石英基片放入7:3浓硫酸/过氧化氢溶液及1:1:5氨水/过氧化氢/水溶液中各超声清洗0.5h使得表面清洁,同时通过这一步使基片表面亲水。处理后的石英基片存放在超纯水中待用。

将清洗好的石英基片及平面叉指电极式器件浸入1%PDDA水溶液15min,取出后用去离子水洗涤,再用氮气吹干,此时基片表面呈正电性;再将基片浸入Pss溶液(2mg/inl,盐酸调节PH=1~2)中15min,取出后用去离子水洗涤并吹干,此时基片表面呈负电性。

(2)聚苯胺PANI/TiO2复合薄膜制备方法

对于经过聚电解质(PSS)处理后的基片,聚电解质自组装膜在基片表面引入了极性基团,在聚合反应的开始阶段,基片上-SO-3基团与酸性条件下苯胺单体和聚苯胺低聚合物上的N+通过静电吸引作用形成离子对,将其吸附在基片表面,形成均匀的聚合中心,进行链生长。同时,混合液中的TiO2纳米粒子起着原位吸附聚合载体的作用,苯胺单体吸附在TiO2纳米粒子表面,氧化剂(NH4)2S2O8引发单体在TiO2纳米粒子表面进行聚合,这导致了聚合物围绕TiO2粒子的受限生长,从而获得TiO2纳米粒子表面覆盖PANI的复合薄膜。

用移液管取0.2 ml TiO2溶胶,加去离子水稀释至0.lwt%;超声15min备用。室温下,将超声过的TiO2溶胶加入到20mL 2.0mol/L的盐酸溶液中,在适度的搅拌下,将0.1mL苯胺单体加入其中。为了避免苯胺单体快速氧化,边搅拌边将适量的(NH4)2S2O8的盐酸溶液缓慢逐滴滴入到混合液中,体系的颜色由透明逐渐加深,变为浅蓝,最终转变为墨绿色。适度搅拌5min后,用0.45um的有机过滤器过滤。(NH4)2S2O8和苯胺单体物质的量之比为1:1。运用芬兰KSV公司的自组装系统制备HCI掺杂PANI/TIO2自组装纳米复合薄膜。将预处理后的基片浸入到PANI/TiO2滤液中,反应20min,取出基片,在空气中自然晾干后放置在纯净的氮气中保存。

(3)HCI和PTSA掺杂PANI/TiO2复合薄膜制备方法

HCI和对甲苯磺酸(PTSA)是常见的聚苯胺质子酸掺杂剂。HCl掺杂PANI/TiO2复合薄膜制备同前所述。PTSA掺杂PANI/TiO2复合薄膜制备工艺如下:

取1.9g对甲苯磺酸,溶于10ml去离子水中;再配置0.1254g (NH4)2S2O8溶于10ml盐酸溶液中,待用;用移液管取0.2ml TiO2溶胶,加去离子水稀释至0.lwt%;将10ml对甲苯磺酸溶液与TiO2溶胶溶液混合,超声15min备用。室温下,在超声过的对甲苯磺酸溶液和TiO2溶胶混合溶液中,将0.1mL苯胺单体加入其中。为了避免苯胺单体快速氧化,边搅拌边将适量的(NH4)2S2O8的水溶液缓慢逐滴滴入到混合液中,体系的颜色由透明逐渐加深,最终转变为墨绿色。适度搅拌5min后,用0.45um的有机过滤器过滤。(NH4)2S2O8和苯胺单体物质的量之比为1:1。运用芬兰KSV公司的自组装系统制备PTSA掺杂PANI/TiO2自组装纳米复合薄膜。将预处理后的基片浸入到PANI/TiO2滤液中,反应20min,取出基片,在空气中自然晾干后放置在纯净的氮气中保存。

对三种复合薄膜微观形貌进行SEM测试表征如图3所示。

PANI/TiO2复合薄膜 HCl掺杂PANI/TiO2复合薄膜 PTSA掺杂PANI/TiO2复合薄膜

图3 三种复合薄膜微观形貌进行SEM测试

(4)聚苯胺复合薄膜气体探测器制备与测试

采用自主装或者喷涂的方法将复合薄膜制备到带有叉指电极的衬底上,并在室温下进行干燥24小时,获得气体传感器器件。

图4 器件测试引线示意图

图5 气体探测测试系统的搭建示意图

因叉指电极无法直接连接到测试仪器,需要设计外部电极连接,如图4所示。在制作完成敏感薄膜,并进行干燥后,可以进行气体敏感性能的测试,测试系统的搭建示意图如图5所示。

六、实验结果(数据和图表)

PANI/TiO2复合薄膜传感器响应恢复性能 纯PANI薄膜传感器响应恢复性能

图6 PANI/TiO2复合薄膜及纯PANI薄膜相应性能测试结果

室温条件下,将制备好的PANI/TiO2复合薄膜和PANI薄膜气体传感器放入测试腔中,通入不同浓度的NH3气体(本实验分别通入23ppm, 47ppm, 70ppm, 94ppm, 117ppm,141ppm),测试其响应恢复特性,如图6所示。实验发现,当NH3气体通入时,PANI/TiO2复合薄膜和PANI薄膜传感器的电阻均急剧上升,响应很快,这是由于气体在薄膜表面发生了吸附效应。随着时间的增加,电阻增大速度降低,这是由于气体在薄膜内发生了较慢的体扩散。随着时间的延长,薄膜的电阻趋于稳定。而刚脱离气体环境时,电阻立即下降,恢复较快。测试同时发现,PANI/TiO2复合薄膜传感器对NH3的响应趋近于稳定,而PANI薄膜传感器对NH3的响应一直呈现上升趋势,很难达到稳定。

图7 PANI/TiO2复合薄膜及纯PANI薄膜传感器灵敏度对比结果

PANI/TiO2复合薄膜传感器对NH3有较好的灵敏度,灵敏度随气体浓度的增大而增大,且比PANI薄膜传感器的灵敏度要高的多。PANI/TiO2复合薄膜传感器和PANI传感器对NH3的响应时间随着气体浓度的增大而减小,对14lppm NH3的响应时间最小。而总体而言,PANI/TiO2复合薄膜传感器对不同浓度NH3气体的响应及恢复均比PANI薄膜传感器要快,在高浓度响应时间达到1s,详细结果如表格1所示。

表1 PANI/TiO2复合薄膜及纯PANI薄膜传感器对不同浓度氨气的相应时间(T1)及恢复时间(T2)

室温条件下,将制备好的盐酸掺杂和对甲苯磺酸掺杂PANI/TiO2复合薄膜气体传感器放入测试腔中,通入不同浓度的NH3气体(本实验分别通入23ppm, 47ppm, 70ppm, 94ppm, 117ppm,141ppm),测试其响应恢复特性,如图8所示。

图8 不同掺杂的PANI/TiO2复合薄膜传感器对氨气的响应-恢复特性

当NH3气体通入时,盐酸掺杂和对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器的电阻均急剧上升,随着时间的增加,经过一段时间逐渐达到稳定值。当刚脱离被测气体环境,暴露在空气中时,电阻立即下降,恢复较快。因此盐酸掺杂和对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器对NH3均表现出较好的响应恢复特性。

盐酸掺杂和对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器对不同浓度NH3的灵敏度与气体浓度之间的关系曲线见图9。从图中可以看出,盐酸掺杂PANI/TiO2复合薄膜传感器对不同浓度的NH3气体的灵敏度普遍比对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器更高些。

图9 不同掺杂的PANI/TiO2复合薄膜传感器对氨气的灵敏度对比特性

表2 不同掺杂PANI/TiO2复合薄膜传感器对不同浓度氨气的相应时间(T1)及恢复时间(T2)

室温下,盐酸掺杂PANI/TiO2复合薄膜和对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器对不同浓度NH3气体的响应时间(Tl)及恢复时间(T2),如表2所示。由表可知,总体而言,盐酸掺杂PANI/TiO2复合薄膜传感器对NH3气体的响应及恢复均比对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器要快,尤其恢复时间要快得多。

七、结果分析与结论

针对实验的测试结果的分析讨论在前一节实验结果中已经进行了对比和分析,详见前一节。其中重要的结论如下:

TiO2掺杂的聚苯胺薄膜相对单纯的聚苯胺薄膜传感器在探测氨气时的灵敏度有了近一倍的增加,同时响应时间和恢复时间加快,在高浓度响应时间达到1s。

盐酸掺杂和对甲苯磺酸掺杂PANI/TiO2复合薄膜传感器对NH3均表现出较好的响应恢复特性,其中盐酸掺杂PANI/TiO2复合薄膜传感器对不同浓度的NH3气体的灵敏度更高些。

八、实验心得体会和建议

通过聚苯胺复合薄膜气体传感器课题的实验课程的学习,掌握了气体传感器的工作原理、结构设计、敏感薄膜制备方法与器件性能测试方法,形成了完整的电阻式气体传感器的认识,激发了对气体传感器的研究兴趣,同时通过该课程锻炼了自己的针对目标的学习能力、分析能力和动手能力。

实验评分:

指导教师签字:

年 月 日

 

第二篇:白盒测试实验报告范本

实验一:白盒软件测试

一、实验目的

通过简单程序白盒测试,熟悉测试过程,对软件测试行程初步了解,并养成良好的测试习惯。熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析。

二、实验内容

背景:

被测测试程序功能:计算被输入日期是星期几;

程序定义:已知公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几;

测试环境:Windows vista、Dev C++;

说明:本次测试采用插桩测试法,由于程序简单,手动输入测试用例。

程序说明:

A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数

B闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)

(1)分析各种输入情况,结合程序输出结果,并给出详细测试用例;

(2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例;

(3)决策表测试法;

①列出输入变量month、 day、 year的有效等价类;(条件桩)

②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩)

③画出决策表(简化);

④根据决策表,给出详细测试用例。

代码:(被测部分为while循环内部语句)

#include <iostream>

using namespace std;

int main()

{

int x=1,year, month, day;

while(x)

{

1.int i, num=0,total, total1, total2;

2.cout<<"请输入年份: ";

3.cin>>year;

4.cout<<"请输入月份: ";

5.cin>>month;

6.cout<<"请输入日期: ";

7.cin>>day;

//求得输入年份之前一年末的总天数

8.for(i=1; i<year; i++)

{

9.if((i%4==0)&&(i%100!=0)||(i%400==0))

10.num++;

}

11.total1 = 365*(year-num-1) + 366*num;

//求得输入年份的总天数

12.if((year%4==0)&&(year%100!=0)||(year%400==0))

{

//求得输入月份之前一月末的总天数

13.switch(month)

{

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 60;break;

case 4:total2 = 91;break;

case 5:total2 = 121;break;

case 6:total2 = 152;break;

case 7:total2 = 182;break;

case 8:total2 = 213;break;

case 9:total2 = 244;break;

case 10:total2 = 274;break;

case 11:total2 = 305;break;

case 12:total2 = 335;break;

}

}

else

{

14.switch(month)

{

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 59;break;

case 4:total2 = 90;break;

case 5:total2 = 120;break;

case 6:total2 = 151;break;

case 7:total2 = 181;break;

case 8:total2 = 212;break;

case 9:total2 = 243;break;

case 10:total2 = 273;break;

case 11:total2 = 304;break;

case 12:total2 = 334;break;

}

}

//在加上输入的日,求其总和可得到从公元1年1月1日到输入日期当天的总天数

15.total = total1 + total2 + day;

16.int week;

17. week = total % 7;

18.cout<<"您输入的日期是";

19.switch(week)

{

case 0:cout<<"星期天"<<endl;break;

case 1:cout<<"星期一"<<endl;break;

case 2:cout<<"星期二"<<endl;break;

case 3:cout<<"星期三"<<endl;break;

case 4:cout<<"星期四"<<endl;break;

case 5:cout<<"星期五"<<endl;break;

case 6:cout<<"星期六"<<endl;break;

}

cout<<"**********退出程序请输入0,否则任一输入继续**********"<<endl;

cin>>x;

}

}

2、测试用例设计

1)控制流图

2)环路复杂度计算

由图可知,图中的环路有六条,故环路复杂度为六。

3)基本路径集设计

基本路径集为:

A.1、2、3、4、5、6、7、8、11、12、14、15、16、17、18、19

B.1、2、3、4、5、6、7、8、9、11、12、14、15、16、17、18、19

C.1、2、3、4、5、6、7、8、9、10、11、12、13、15、16、17、18、19

D.1、2、3、4、5、6、7、8、9、10、11、12、14、15、16、17、18、19

注:由源程序代码可知,未走路径10则必定不通过路径13,故省去两条检测路径。

4)测试用例集设计

测试用例集为:

A路径:1-2-26 预期输出:星期一

B路径:2-2-2 预期输出:星期六

C路径:2010-11-16 预期输出:星期二

D路径:2008-8-6 预期输出:星期三

3、插桩后源程序清单与判定覆盖率分析结果

#include <iostream>

using namespace std;

int main()

{

int x=1,year, month, day;

int m1=0,m2=0,m3=0,m4=0,m=15,n=0,f=0;

while(x)

{

n++;

cout<<"=====请输入测试用例====="<<endl;

int i, num=0,total, total1, total2,qw;

cout<<"请输入年份: ";

cin>>year;

cout<<"请输入月份: ";

cin>>month;

cout<<"请输入日期: ";

cin>>day;

cout<<"请输入预期输出结果(星期一到星期天,对应输入1~7):";

cin>>qw;

cout<<"程序运行路径: 1->2->3->4->5->6->7->8";

for(i=1; i<year; i++)

{

if((i%4==0)&&(i%100!=0)||(i%400==0))

num++;

}

if(i>1)

{

cout<<"->9";

if(m1==0){m++;m1=1;}

}

if(num>0)

{

cout<<"->10";

if(m2==0){m++;m2=1;}

}

total1 = 365*(year-num-1) + 366*num;

cout<<"->11->12";

if((year%4==0)&&(year%100!=0)||(year%400==0))

{

cout<<"->13";if(m3==0){m++;m3=1;}

switch(month)

{

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 60;break;

case 4:total2 = 91;break;

case 5:total2 = 121;break;

case 6:total2 = 152;break;

case 7:total2 = 182;break;

case 8:total2 = 213;break;

case 9:total2 = 244;break;

case 10:total2 = 274;break;

case 11:total2 = 305;break;

case 12:total2 = 335;break;

}

}

else

{

cout<<"->14";if(m4==0){m++;m4=1;}

switch(month)

{

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 59;break;

case 4:total2 = 90;break;

case 5:total2 = 120;break;

case 6:total2 = 151;break;

case 7:total2 = 181;break;

case 8:total2 = 212;break;

case 9:total2 = 243;break;

case 10:total2 = 273;break;

case 11:total2 = 304;break;

case 12:total2 = 334;break;

}

}

cout<<"->15->16->17->18->19"<<endl;

total = total1 + total2 + day;

int week;

week = total % 7;

cout<<"-----该测试用例测试结果-----"<<endl;

cout<<endl;

cout<<"测试用例"<<n<<" : 输入"<<year<<"."<<month<<"."<<day<<", 预期输出为:";

switch(qw%7)

{

case 0:cout<<"星期天, ";break;

case 1:cout<<"星期一, ";break;

case 2:cout<<"星期二, ";break;

case 3:cout<<"星期三, ";break;

case 4:cout<<"星期四, ";break;

case 5:cout<<"星期五, ";break;

case 6:cout<<"星期六, ";break;

}

cout<<"实际输出为:";

switch(week)

{

case 0:cout<<"星期天, ";break;

case 1:cout<<"星期一, ";break;

case 2:cout<<"星期二, ";break;

case 3:cout<<"星期三, ";break;

case 4:cout<<"星期四, ";break;

case 5:cout<<"星期五, ";break;

case 6:cout<<"星期六, ";break;

}

if(week==qw%7) cout<<"成功!"<<endl;

else

{

cout<<"失败!"<<endl;

f++;

}

cout<<endl;

cout<<"=====本次测试用例测试已结束,退出测试请输入0,否则任一输入继续测试====="<<endl;

cin>>x;

}

cout<<"最终对main函数中while内循环语句单元测试结果统计:"<<endl;;

cout<<"共执行"<<n<<"个测试用例, 总的路径覆盖率:"<<m*100/19<<"%, 其中通过"<<n-f<<"个, 失败"<<f<<"个"<<endl;

}

测试截图见附录

三、总结与体会

实验中对于路径测试有了更深的理解,可以更好、更迅速的去划分路径,设计测试用例。通过实验,我对软件测试有了进一步的认识和学习,对白盒测试流程有了较清楚的了解,收获很多。

白盒测试实验报告范本

相关推荐