电涡流式金属板材测厚仪的设计.docx
《电涡流式金属板材测厚仪的设计.docx》由会员分享,可在线阅读,更多相关《电涡流式金属板材测厚仪的设计.docx(17页珍藏版)》请在冰豆网上搜索。
![电涡流式金属板材测厚仪的设计.docx](https://file1.bdocx.com/fileroot1/2022-11/25/31f85bc8-984c-48df-85b6-d3adf508d513/31f85bc8-984c-48df-85b6-d3adf508d5131.gif)
电涡流式金属板材测厚仪的设计
目录
0前言····················································1
1总体方案设计············································1
2硬件电路设计············································2
3软件设计················································6
4调试分析················································6
5结论及进一步设想········································7
6参看文献················································7
7课设体会················································8
8附录Ⅰ··················································9
9附录Ⅱ··················································10
电涡流式金属板材测厚仪的设计
苑庆爽沈阳航空航天大学自动化学院
摘要:
本设计是基于电涡流传感器测量厚度的设计。
电涡流传感器,具有灵敏度高、频响范围宽、可实现非接触式测量及适用性强等特点。
此种传感器在金属镀层、板材厚度测量及材质鉴别中应用广泛。
电涡流传感器有两种类型:
低频透射式和高频反射式。
其中低频透射式适于测量较薄的金属镀层或板材的厚度。
高频反射式适于测量较厚板材的厚度。
关键词:
89C52单片机,电涡流传感器,测量厚度
0前言
从结构上来看,电涡流传感器就是一个线圈,在线圈内通以交流电,则在线圈周围将产生交变磁场。
金属导体置于变化着的磁场中,导体内就会产生感应电流,这种电流象水中漩涡那样在导体内转圈,所以称为电涡流,这种现象称为电涡流效应
在金属板材、带材的轧制过程中成品的厚度是最重要的物理指标之一。
目前国内的钢铁和有色金属行业多采用非接触式的测厚系统,如射线式、电容式等等其中,射线测厚系统有一定的应用,但其存在着射线管的老化和易损问题,高压发生器的准确度和稳定性以及整套设备造价过于昂贵等。
而电容式测厚系统则受引线电容,寄生电容的干扰较大,不易消除。
以单片机系统为核心,利用电涡流式传感器对钢板厚度进行在线检测,通过实时数据采集,由单片机进行数据处理分析,并发出相应控制指令的系统建立在电涡流效应原理上的测量技术,具有结构简单、频率响应带宽、灵敏度高、线性范围大、体积小等优点,在冷轧钢板生产过程中,采用高频反射式涡流传感器对钢板厚度作测量,应用前景广泛。
电涡流传感器是建立在电磁场理论的基础上工作的。
拥有如此广阔前景的电涡流式传感器,如果能够更好的开发以及利用,必定给我们的生活和
1总体方案设计
针对本课题的设计任务,进行分析得到:
本次设计用电涡流传感器进行厚度测量,将测得的距离变化转换为电信号,通过A/D转换,转换为能供单片机直接识别的数字信号。
单片机将得到的信号进行处理,如果满足测量范围,正常输出信号,通过LED显示。
如果不满足,则通过发光二极管显示来表示具体情况。
该电涡流测厚度的设计,总体上大致可分为一下几个部分组成:
电涡流检测部分,A/D转化部分,单片机处理部分,LED显示部分,键盘输入部分,不同颜色二极管发光报警部分。
数码管显示
单片机
机
电涡流传感器
A/D转换电路
二极管发光报警超量程
图1系统框图
2硬件电路设计
2.1电涡流传感器
如图2所示,在金属板一侧的电感线圈中通以高频激励电流I1时线圈将产生高频磁场由于集肤效应高频磁场作用于金属板表面薄层并在这薄层中产生涡流涡流I2会产生交变磁通Φ2反过作有于线圈使得线圈中的磁通Φ1发生变化而引起自感量变化在线圈中产生感应电势电感的变化随涡流而变而涡流又随线圈与金属板间距X而变化因此可以用高频反射式涡流传感器来测量位移X的变化
图2涡流传感器基本原理
图2为涡流效应等效电路R1为线圈电阻L1为线圈电感R2为短路电阻L2为短路环电感U1为激励电压M为线圈与短路环间的互感
回路方程:
受涡流影响后线圈的等效阻抗为:
线圈阻抗只与L1L2M有关而L1L2M都与J有关即Z=fJ因此如固定传感器的位置当间距J发生变化时Z就发生变化从而达到以传感器阻抗变化值来检测被测金属位移量的值。
图3涡流效应等效电路
2.2单片机最小工作系统
89C52系列单片机的复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,单片机最小系统容值越大需要的复位时间越短。
89C52单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,52单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。
52单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好。
P0口为开漏输出,作为输出口时需要加上拉电阻,阻值一般为10K。
其他接口内部有上拉
电阻,作为输出口时不需要外加上拉电阻。
即最小系统包含晶振电路、复位电路、电源电路。
图4单片机最小系统电路
2.3A/D转换电路
采用芯片ADC0804。
工作电压:
+5V,即VCC=+5V。
模拟输入电压范围:
0~+5V,即0≤Vin≤+5V。
分辨率:
8位,即分辨率为1/2=1/256,转换值介于0~255之间。
转换时间:
100us(fCK=640KHz时)。
转换误差:
±1LSB。
参考电压:
2.5V,即Vref=2.5V。
ADC0804是属于连续渐进式的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。
CS、RD、WR(引脚1、2、3):
是数字控制输入端,满足标准TTL逻辑电平。
其中CS和WR用来控制A/D转换的启动信号。
CS、RD用来读A/D转换的结果,当它们同时为低电平时,输出数据锁存器DB0~DB7各端上出现8位并行二进制数码。
CLKI(引脚4)和CLKR(引脚19):
ADC0801~0805片内有时钟电路,只要在外部“CLKI”和“CLKR”两端外接一对电阻电容即可产生A/D转换所要求的时钟,其振荡频率为fCLK≈1/1.1RC。
其典型应用参数为:
R=10KΩ,C=150PF,fCLK≈640KHZ,转换速度为100μs。
若采用外部时钟,则外部fCLK可从CLKI端送入,此时不接R、C。
允许的时钟频率范围为100KHZ~1460KHZ。
INTR(引脚5):
INTR是转换结束信号输出端,输出跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。
如果将CS和WR端与INTR端相连,则ADC0804就处于自动循环转换状态。
CS=0时,允许进行A/D转换。
WR由低跳高时A/D转换开始,8位逐次比较需8×8=64个时钟周期,再加上控制逻辑操作,一次转换需要66~73个时钟周期。
在典型应用fCLK=640KHZ时,转换时间约为103μs~114μs。
当fCLK超过640KHZ,转换精度下降,超过极限值1460KHZ时便不能正常工作。
图5A/D转换电路
2.4报警电路
报警电路采用发光二极管报警。
由于二极管一段接在+5V电源上,即二极管低电平有效,在开始给P2.3口和P2.4口使能为1,程序中设定当二极管负极为高电平时为灭,低电平有效,即发光。
两种颜色,红色二极管为低于下限报警,绿色二极管为超出上限报警。
3软件设计
根据设计方案,应用Protuse软件进行仿真。
设计的主要思想是模块化设计,总体分为主程序模块、数据采集模块、数据显示(数码管显示)模块、键盘扫描模块、阈值比较模块、报警模块。
程序通过主程序调用子程序来完成所需要的各种功能。
图7程序总体流程图
4调试分析
将生产的Hex文件拷入单片机后,数码管正常显示采集到的数据,然后通过键盘设定0~5mm之间任意的阈值范围。
当采集到的数据不在设定范围之内的时候,发光二极管点亮,既是启动了报警系统。
程序及硬件都正常运行。
5结论及进一步设想
设计的电涡流式金属板材测厚仪正常运行,表明设计的初步结果取得成功。
电涡流的另外一方面既是测量厚度较薄的物体,如对材料表面保护、装饰形成的覆盖层,如涂层、镀层、敷层、贴层、化学生成膜等,在有关国家和国际标准中称为覆层(coating)。
覆层厚度测量已成为加工工业、表面工程质量检测的重要一环,是产品达到优等质量标准的必备手段。
为使产品国际化,我国出口商品和涉外项目中,对覆层厚度有了明确的要求。
覆层厚度的测量方法主要有:
楔切法,光截法,电解法,厚度差测量法,称重法,X射线荧光法,ȕ射线反向散
射法,电容法、磁性测量法及涡流测量法等。
这些方法中前五种是有损检测,测量手段繁琐,速度慢,多适用于抽样检验。
X射线和ȕ射线法是无接触无损测量,但装置复杂昂贵,测量范围较小。
因有放射源,使用者必须遵守射线防护规范。
X射线法可测极薄镀层、双镀层、合金镀层。
ȕ射线法适合镀层和底材原子序大于3的镀层测量。
电容法仅在薄导电体的绝缘覆层测厚时采用。
随着技术的日益进步,特别是近年来引入微机技术后,采用磁性法和涡流法的测厚仪向微型、智能、多功能、儈精度、实用化的方向进了一步。
测量的分辨率已达0.1微米,精度可达到1%,有了大幅度的提儈。
它适用范围广,量程宽、操作简便且价廉,是工业和科研使用最广泛的测厚仪器。
采用无损方法既不破坏覆层也不破坏基材,检测速度快,能使大量的检测工作经济地进行。
6参考文献
[1].刘利秋《基于电涡流传感器测厚及材质鉴别的研究》沈阳航空工业学院自动控制系,辽宁沈阳
[2].吴蓉《反射式涡流传感器金属测厚研究》[期刊论文]-兰州交通大学学报2002(6)
[3].胡乾斌,李光斌《单片微型计算机原理与应用》1996
[4].袁希光《传感器技术手册》1986
[5].余席桂,赵燕《测试技术》1996
[6].黄长艺,严普强《机械工程测试技术基础》机械工业出版社,1995
[7].刘金环,任玉田《机械工程测试技术》北京理工大学出版社,1999
课设体会
在本次课程设计中,通过上网查资料,到图书馆借阅图书等方法了解了单片机电路的设计方法,并通过使用Protuse软件成功仿真出来了。
总体设计方案是模块化的,在做计数显示电路的时候,通过将以前学习的数字电路的知识应用其中,从而方便的解决了这一问题,在仿真过程中,通过自己调试,将电路连接成果并且成功仿真出来了。
在课程设计这段时间里,使我对以前的知识有了更加深刻的了解,将以前学习的数字电路和智能仪器联系起来,并且将他们都应用于实际当中,最终完成了设计任务。
通过本次课设,让我了解到要完成一个设计任务,可以将任务分成几个功能模块,分开完成。
这样可以提高设计效率,并且将设计难度简化了。
当所有功能模块都能达到预定的功能时,再将其组合在一起,最终完成我所要完成的设计任务。
在课设过程中,通过不同功能的电路组合在一起就可以实现我所想要得到的功能,这些都使我受益匪浅。
在仿真过程中,通过自己连接电路图,使用仿真软件,使我对Keil、proteus和protel等软件的运用更加熟练了,找寻各种器件也更加的快速,这样可以更加快速的完成电路图,并且对如何测量各种数据也都有了了解。
在上网查资料和阅读相关书籍的时候,使我学到了很多在课堂上没有学到的知识,并且将这些知识应用与实际中了,这次课程设计给了我一次很好的实践
会,给我再下学期做毕设设计奠定了基础。
课程设计期间遇到了很多问题,老师给与了我极大的帮助,我相信老师的付出得到了回报,我按时完成了指定的任务,并且学到了许多知识,受益匪浅。
最后,感谢老师的付出!
[2012年7月20日完成]
附录Ⅰ电路原理图
附录Ⅱ程序
/*沈阳航空航天大学自动化学院*/
/*电涡流式金属板材测厚仪的设计*/
/**Yuanshuang.c2012.7.9**/
#include"reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
/********主函数**********/
voidmain()
{
LED1=1;
LED2=1;
for(;;)
{
read_keys();//读上限值
read_keyx();//读下限值
ADC();
display();//送显
if(ad_result>=warn_valuex)//判断是否超上限
LED1=0;
else
LED1=1;
if(ad_result<=warn_values)//判断是否低于下限
LED2=0;
else
LED2=1;
}
}
/********端口定义********/
sbitdula=P2^6;//段选端子
sbitwela=P2^7;//位选端子
sbitadrd=P3^7;//读信号端
sbitadwr=P3^6;//写信号端
sbitLED1=P1^0;//超上限报警
sbitLED2=P1^5;//低于下限报警
uintad_result;//存放ad转换结果
uintwarn_values=260;//报警上限值
uintwarn_valuex=0;//报警下限值
/********函数声明*******/
voiddisplay();//显示
voiddelay(intms);//延时
uintkey_scan();//扫描
voidread_key();//读键值
voidADC();//转换
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};//段选码
uintkey_value,key_value1,key_value2,key_value3,ok,t=100;
/******延时函数********/
voiddelay(intms)
{
inti,j;
for(j=ms;j>0;j--)
for(i=5;i>0;i--)
;
}
/******键盘扫描函*********/
uintkey_scan()
{
inti,temp,key=16;
for(i=0;i<4;i++)
{
switch(i)
{
case0:
P3=0xfe;break;
case1:
P3=0xfd;break;
case2:
P3=0xfb;break;
case3:
P3=0xf7;break;
}
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);//延时去抖动
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)//确定有按键按下
{
temp=P3;
switch(temp)
{
case0xee:
key=0;break;
case0xde:
key=1;break;
case0xbe:
key=2;break;
case0x7e:
key=3;break;
case0xed:
key=4;break;
case0xdd:
key=5;break;
case0xbd:
key=6;break;
case0x7d:
key=7;break;
case0xeb:
key=8;break;
case0xdb:
key=9;break;
case0x77:
key=15;break;
}
while(temp!
=0xf0)//等待按键释放
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
returnkey;
}
/*****读上限值键值函数*****/
voidread_keys()
{
key_value1=key_scan();
if(key_value1<=4)
{
while
(1)
{
key_value2=key_scan();
if(key_value2>=10)
key_value=key_value1*100+ad_result%100;
else
key_value=key_value1*100+key_value2*10+ad_result%10;
ad_result=key_value;
display();
if(key_value2<10)
break;
}
while
(1)
{
key_value3=key_scan();
if(key_value3>=10)
key_value=key_value1*100+key_value2*10+ad_result%10;
else
key_value=key_value1*100+key_value2*10+key_value3;
ad_result=key_value;
display();
if(key_value3<10)
break;
}
while
(1)
{ok=key_scan();
warn_values=key_value;
display();
if(ok==15)break;
}
ad_result=warn_values;
while(t--)
display();
t=100;
}
}
/*****读下限值键值函*******/
voidread_keyx()
{
key_value1=key_scan();
if(key_value1<=4)
{
while
(1)
{
key_value2=key_scan();
if(key_value2>=10)
key_value=key_value1*100+ad_result%100;
else
key_value=key_value1*100+key_value2*10+ad_result%10;
ad_result=key_value;
display();
if(key_value2<10)
break;
}
while
(1)
{
key_value3=key_scan();
if(key_value3>=10)
key_value=key_value1*100+key_value2*10+ad_result%10;
else
key_value=key_value1*100+key_value2*10+key_value3;
ad_result=key_value;
display();
if(key_value3<10)
break;
}
while
(1)
{ok=key_scan();
warn_valuex=key_value;
display();
if(ok==15)break;
}
ad_result=warn_valuex;
while(t--)
display();
t=100;
}
}
/*******ad转换函数*******/
voidADC()
{
uintdigital_value;
floatanalag_value;
adwr=1;//启动ad
delay
(1);
adwr=0;
delay
(1);
adwr=1;
delay
(1);//延时等待转换完成
P1=0xff;//读P1前先写1
adrd=1;
delay
(1);
adrd=0;
delay
(1);
digital_value=P1;//读取ad数字量
adrd=1;
analag_value=digital_value*500/256;//转化为模拟电压值
ad_result=analag_value;//取整
}
/****数码管显示函数*******/
voiddisplay()
{
uintbai,shi,ge;
bai=ad_result/100;
shi=ad_result%100/10;
ge=ad_result%10;
P0=(table[bai]|(0x80));//显示百位(显示小数点)
dula=1;
dula=0;
P0=0x7e;
wela=1;
wela=0;
delay(80);
P0=table[shi];//显示十位
dula=1;
dula=0;
P0=0x7d;
wela=1;
wela=0;
delay(80);
P0=table[ge];//显示个位
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay(80);
}