智能仪器设计课程设计.docx
《智能仪器设计课程设计.docx》由会员分享,可在线阅读,更多相关《智能仪器设计课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
![智能仪器设计课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/0bc6b651-ee2e-4e3c-a6ec-d8777bd40df0/0bc6b651-ee2e-4e3c-a6ec-d8777bd40df01.gif)
课程名称:
智能仪器设计课程设计
实验项目:
_设计智能仪表
专业班级:
学号:
学生姓名:
指导教师:
20 年 1 月 12 日
目 录
一、设计目的及要求 3
二、设计思路 3
三、硬件电路原理图与设计 3
3.1智能仪表基本模块硬件电路 3
3.2智能仪表基本模块的功能 8
四、测温模块设计 9
4.1热电偶 9
4.2热电偶信号调理电路 10
五、驱动双向晶闸管设计 10
六、软件设计 11
6.1主程序 11
6.2子程序 12
七、总结 16
一、设计目的及要求
实现智能数字显示仪表。
要求8位数码管显示(4位显示测量值,4位显示设定值),
4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。
适配B型(铂铑30)热电偶,测温范围为400℃~1200℃。
采用位式(两位、三位,具有滞环)控制、并用晶闸管过零驱动1000W电加热器(电源电压为AC220V)。
二、设计思路
通过B型(铂铑30)热电偶测量的答题思路为
三、硬件电路原理图与设计
3.1智能仪表基本模块硬件电路
智能仪表基本模块由单片机、输入按钮、硬件显示和通信接口组成原理图:
.
JLED
4
3
2
1
.
Jkey1
1
2
3
4
13
12
10
11
15
1
2
3
4
5
6
7
9
1312
10
11
15
1
2
3
4
5
6
7
9
SN74HC595
14
SER QHQH1
QA
RCK QB
QCSRCLRQD
SRCKQEQFQG
G
SN74HC595
14
G QA
RCK QBQC
SRCLRQD
SRCKQEQFQG
SER QHQH1
11
11
3
5
10
1
2
4
7
abcdefgh
3
5
10
1
2
4
7
abcdefgh
.
abcdefgh
.
.
510¦¸x8
SM2
LLM
RMR
SM1
LLM
RMR
n812
n79
n68
n56
n412
n39
n28
n16
.
.
.
.
.
.
.
hgf
ed
cba
+5V
510¦¸x4
Uy1
Uy2
AN1AN2AN3
AN4
Rz1510
J5951
3
2
1
data
RCKSRCK
+5V
.
(1)最小系统板电路
n8n7n6n5n4n3n2n1
(2)电源电路
(3)按键电路
(4)扬声器电路
(5)数码管电路
(6)信号调理电路
(7)功率驱动电路
(8)LED电路
3.2智能仪表基本模块的功能:
(1)具有两排8个是数码管显示,分别显示测量值与设定值,数码管由74HC595驱动,因此只需要3个单片机引脚,可以用SPI接口引脚:
PB4、PB5(MOSI)和PB7(SCK),或是采用I/O引脚搭配时序的方法驱动。
(2)具有4个按钮:
功能选择按钮、数码管选择按钮、数字加按钮、数字减按钮。
按钮直接连在单片机引脚,低电平有效。
(3)具有4个LED灯,用于显示状态,直接连到单片机引脚,低电平有效。
智能仪表的外形:
PV
SV
.
SET
ÖÇÄÜÒDZ
.
.
.
其中上排数码管显示测量值,下排数码管显示设定值,4个按钮用三个,右上侧有4个发光二极管。
四、测温模块设计
4.1热电偶
B型热电偶在热电偶系列中具有准确度最高,稳定性最好,测温温区宽,使用寿命长,测温上限高等优点。
适用于氧化性和惰性气氛中,也可短期用于真空中,但不适用于还原性气氛或含有金属或非金属蒸气气氛中。
B型热电偶一个明显的优点是不需用补偿导线进行补偿,因为在0~50℃范围内热电势小于3μV。
B型热电偶不足之处是热电势,热电势率较小,灵敏度低,高温下机械强度下降,对污染非常敏感,贵金属材料昂贵,因而一次性投资较大。
两种不同成分的导体两端接合成回路,当接合点的温度不同时,在回路中就会产生电动势,这种现象称为热电效应,而这种电动势成为热电势,也称为热电动势,热电偶就是利用这种原理进行温度测量的。
其中,直接用做测量介质温度的一端叫作工作端(称为测量端),另一端叫做冷端(称为补偿端)。
冷端与显示仪表或配套仪表连接,显示仪表会显示出热电偶所产生的热电势。
热电偶将热能转换为电能,用所产生的热电势测量温度,对于热电偶的热电势,应注
意以下问题:
(1)热电偶所产生的热电势大小,与热电偶的长度和直径无关,只与热电偶材料的成分和两端的温差有关
(2)当热电偶的两个热电偶丝材料成分确定后,热电偶电势的大小,只与热电偶的温度差有关;若热电偶冷端的温度保持一定,则热电势仅是工作端温度的单值函数
本设计要求的B型(铂铑30)热电偶测温范围如下表
热电偶分类
热电偶电极材料
温度范
围
( C)
热电动势(mV)/温度
( C)
正极
负极
B
铂铑30
铂铑6
0—1800
0/0 18.84/1800
.
.
.
D11N4001
JD1
~220V
L N
G1
JRELAY
R1
300¦¸C1
104
1
2
TLP521-1+12V
4
3
9013
Q1
R1
10k¦¸
R1
5.1k¦¸
R5
470¦¸
0.047uFC3
J1_1
J1_2
.
¼ÓÈÈÆ÷2000W
.GND12
GND12
加热器1000W
JC1
2
1
4.2热电偶信号调理电路
采用LM35的B00000000 型热电偶冷端补偿电路
B型热电偶在0度时的热电势为0mV,在1600度时的热电势为18.84mV。
若输出电压为0.2-3.3v。
因此放大器输出电压方程为:
1)0.2=m*0+b和2)3.3=m*18.84+b算出m、b的值然后根据
3)m=[R2/(R1+R2)][(Rf+Rg)/Rg]和4)b=Vref[R1/(R1+R2)][(Rf+Rg)/Rg]算出实验所需的数据
五、驱动双向晶闸管设计
本系统采用晶闸管脉冲调制驱动电路,其负载为1000W的电加热器(电源电压为
220VAC)。
单片机驱动晶闸管脉冲调制驱动器的电路如下图所示。
8
1
7
5
2
4
6
3
+12V
.
单片机驱动晶闸管脉冲调制驱动器的电路
六、软件设计
6.1主程序
#include#include
unsignedcharvadc; //vadc测得的放大电势值
unsignedintvar; //测得的温度值
Unsignintdata[8]; //全局变量unsignedcharxs[8]; //数据缓存
unsignedchardisp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,//共阳数码
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xFE,0xFF};
unsigned intweizhi[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};高电平有效*/
unsignedcharLED0,LED1,LED2,LED3;
Voidmain(void) //主函数
{
unsigncharadc_time;unsigncharsaomiao_time;unsigncharxianshi_time;
init_devices();adc_time=0;}
while
(1)
While(adc_time=1) //测温
{adc();
Charlp(); //滤波
PID();
Shuchu();adc_time=0;}
While(saomiao_time==1)
{saomiao1(); //扫描按键并存放数据
Saomiao_time=0;}while(xianshi_time==1)
{spihc(); //数码管显示
LED(); //LED灯显示
xianshi_time=0;}
}
#pragmainterrupt_handlerint_TCCR1A:
7 //定时器1的TCCR1A组比较匹配中断服务程序
{staticunsignedcharn;
n++;
If(n==20) //200ms
adc_time=1; //adc转换
Saomiao_time=1; //扫描PD口按键
xianshi_time=1; //显示数码管
}
6.2子程序
(1)ADC初始化函数
Voidadc_init(void)
{ADCSRA=0x00; //ADCSRA–ADC控制和状态寄存器
ADMAX=0x20; //选择外部参考电压,通道0,左对齐
ADCSRA=0xE2;
SFIOR=0Xa0; //SFIOR-特殊功能IO寄存器,定时器1比较匹配B
}
(2)ADC转换程序
Voidadc(void)
{staticunsignedcharn;
while(!
(ADCSRA&(1<ADH=ADCH; //8位转换
If(n<5)
Value_adc[n++]=ADH;
Else
n=0;}
(3)算术平均值滤波子函数VoidCharlp(void)
{Intsum=0;
Charcount;
For(count=0;count<5;count++)
{ sum+=Value_adc[count]; //获取ADC转换结果,计算相加
Delay();}vadc=sum/5;
}
(4)定时器初始化函数
VoidT1_init(void) //初始化定时器,产生10ms周期中断
{OCR1A=1249;TIMSK|=(1<TCCR1B=0x08; //定时器工作在CTC计数器模式
TCCR1B|=0x02; //设定定时器1的分频值为8分频
}
(5)显示LED灯子程序
VoidLED(void)
{if(LED0==1)PORTB^=0x01;If(LED1==1)
PORTB|=1<<1;If(LED2==1)PORTB|=1<<2;If(LED3==1)
PORTB|=1<<3;
}
(6)定时器1的TCCR1A组比较匹配中断服务程序
#pragmainterrupt_handlerint_TCCR1A:
7 //定时器1的TCCR1A组比较匹配中断服务程
序
{staticunsignedcharn;
n++;
If(n==20) //200ms
adc_time=1; //adc转换
Saomiao_time=1; //扫描PD口按键
xianshi_time=1; //显示数码管
}
(7)SPI初始化
VoidSPI_init(void)
SPDR=(1<<6)|(1<<4)|(1<<5)|(1<<1)|(1<<0); //使能SPI主机模式,设置时钟速率为
fck/128
}
(8)引脚初始化函数
Voidport_init(void) //引脚初始化函数
{PORTA=0x80; //AD通道PA0口输入模拟信号
DDRA=0x80;
PORTB=0xff; //PB输出LED灯
DDRB=0xff;
PORTC=0xff; //PC输出数码管
DDRC=0xff;
PORTD=0x00; //PD口输入按钮信号
DDRD=0x00;
}
(9)系统初始化函数
Voidinit_devices(void) //系统初始化
{CLI();
port_init();
adc_init;T1_init;SPI_init;SEI();
}
(10)扫描子程序
Voidsaomiao1(void)
{unsignedinti;
Staticunsignedintj,m,k;
If(j==0)
{if(PIND|=0xFE) //判断PD0引脚 功能键
for(i=0;i<<2000;i++);if(PIND|=0xFE)
while(PIND|=0xFE);
{j+=1;
if(j>3)j=0;}
else
saomiao2();shuju();
if(j==1) //LED灯亮
{LED1=1;
data[3]=data[2];} //设定并存放报警上限值
Elseif(j==2)
{LED2=1;data[4]=data[2];} //设定并存放报警下限值
Elseif(j==3)
{ED3=1;data[5]=data[2];} //设定并存放给定值
}
(11)数码管、按钮子程序
Voidsaomiao2(void) //选择数码管按钮
{unsignedintp;if(m==0)
if(PIND|=0xFD) //判断PD1引脚
for(p=0;p<<2000;p++);if(PIND|=0xFD)
while(PIND|=0xFD);
{m+=1;
if(m>4)m=0;}
else
saomiao3();
}
(12)判断数据增减子程序
Voidsaomiao3(void) //判断数据增减
{unsignedintq;
If(0if(PIND|=0xFB) //判断PD2引脚
for(q=0;q<<2000;q++);if(PIND|=0xFB)
while(PIND|=0xFB);
{k+=1;}
if(PIND|=0xF7) //判断PD3引脚
for(q=0;q<<2000;q++);if(PIND|=0Xf7)
while(PIND|=0xF7);
{k-=1;}
Elsek=0;
}
(13)数据设定存放子程序
Voidshuju(void)
{If(m==1)
data[2]+=k;if(m==2)data[2]+=1<<4;
if(m==3)data[2]+=1<<8;
if(m==4)data[2]+=1<<12;}
(14)向HC595输出数据的函数
voidxianshi(unsignedcharX) //向HC595输出数据的函数
{unsignedchari;for(i=8;i>=1;i--)
{if(X&0x80)PORTC.5=1;elsePORTC.5=0; //先输出低位X<<=1;
PORTC.7=0;
PORTC.7=1;
}
}
(15)显示数码管子程序
voidspihc595(void) //显示子程序
{unsignedchari;
{
{data[0]=var; //显示测量值
data[1]=data[4]; //显示给定值定值
if(LED1==1)
data[1]=data[2]; //显示报警上限值
if(LED2==1)
data[1]=data[3]; //显示报警下限值xs[0]=data[1]/1000%10;
xs[1]=data[1]/100%10;xs[2]=data[1]/10%10;xs[3]=data[1]%10;xs[4]=data[0]/1000%10;xs[5]=data[0]/100%10;xs[6]=data[0]/10%10;xs[7]=data[0]%10;
}
xianshi(weizhi[i]); //位输出
xianshi(disp[xs[i]]); //段输出
PORTC.6=0; //锁存信号低电平
PORTC.6=1; //锁存信号高电平i++;if(i==8)i=0;
}
}
七、总结
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
智能仪表的课程设计使我加深了对于所学知识的理解,巩固了所学的知识,学会了用
Protel99SE软件设计制作简单的单片机电路及其设计封装PCB图。
从生疏到较熟练地应用软件设计单片机的过程中,并不是一帆风顺,我在设计过程中也遇到了不少自己没有想到的问题和困难,只有理论的自己发现要将这些理论灵活运用起来还是非常困难的。
在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,
从而加以弥补。