一、实习内容和要求:
1、 采用Pt100热电阻作为温度传感器,测量范围为0~200度;
2、 设计热电阻传感器的测量转换电路、信号放大电路;
3、 设计仪烂亮猛表供电电路,已知外部输入的电源为24V直流电源;
4、 搭建8051单片机最小系统、LM032L液晶显示、基本按键输入电路;
5、 基于AD1674芯片开发A/D转换电路,正确连接AD1674与8051,实现热电阻转换后的信号采集;
6、 采用D/A转换芯片DAC1230实现4~20mA的信饥桥号输出;
7、 编写程序代码,实现热电键岁阻信号采集、仪表信号输出、测量值显示、仪表必须的参数设置等智能仪表的基本功能。
二:温度变送器的设计程序:
#include<REG52.h>
#include<stdio.h>
#include<intrins.h>
/* ---------------*/
sbit ADC_STS=P1^0
sbit ADC_CS=P1^1
sbit ADC_A0=P1^2
sbit ADC_CE=P1^3
sbit ADC_RC=P1^4
sbit L_RS=P1^5
sbit L_RW=P1^6
sbit L_E=P1^7
sbit DAC_CS=P3^0
sbit DAC_WR=P3^1
sbit DAC_XFER=P3^2
float ADC_data
/*----------------*/
void delay(void)
{
unsigned int j,k
for(j=20j>0j--)
for(k=200k>0k--)
}
/* --------ADC--------*/
void ADC_C( void)
{
P0=0xff
DAC_CS=1
_nop_()
ADC_CE=0
ADC_CS=1
ADC_RC=1
ADC_A0=1
_nop_()
ADC_CS=0
_nop_()
ADC_RC=0
_nop_()
ADC_CE=1
_nop_()
ADC_CE=0
ADC_CS=1
ADC_RC=1
}
void ADC_R(void)
{ ADC_CS=0
_nop_()
ADC_A0=0
_nop_()
ADC_RC=1
_nop_()
ADC_CE=1
_nop_()
ADC_data=P0
}
/* ------LCD-------*/
void LCD_init(void)
{ ADC_CS=1
_nop_()
P2=0x38
L_RS=1L_RW=1L_E=0
_nop_()
L_RS=0L_RW=0
_nop_()
L_E=1
_nop_()
L_E=0
delay()
L_RS=1L_RW=1P2=0x0e
_nop_()
L_RS=0L_RW=0
_nop_()
L_E=1
_nop_()
L_E=0
delay()
L_RS=1L_RW=1_nop_()
}
void LCD_display(unsigned char L_data)
{ P2=L_data
L_RS=1L_RW=0
_nop_()
L_E=1
_nop_()
L_E=0
delay()
L_RS=1L_RW=1_nop_()
}
void LCD_clc(void)
{
P2=0x01
L_RS=1L_RW=1L_E=0
_nop_()
L_RS=0L_RW=0
_nop_()
L_E=1
_nop_()
L_E=0
delay()
L_RS=1L_RW=1
}
void LCD_shift(void)
{
P2=0xc0
L_RS=1L_RW=1L_E=0
_nop_()
L_RS=0L_RW=0
_nop_()
L_E=1
_nop_()
L_E=0
delay()
L_RS=1L_RW=1
}
/* ---DAC-------*/
void DAC(int DAC_data)
{ P2=DAC_data
DAC_CS=1
DAC_XFER=1
DAC_WR=1
_nop_()
DAC_CS=0
_nop_()
DAC_WR=0
delay()
DAC_WR=1
_nop_()
DAC_CS=1
_nop_()_nop_()
P2=0x00DAC_CS=0DAC_XFER=0
_nop_()
DAC_WR=0
delay()
DAC_WR=1
DAC_CS=1
}
/*------MAIN------*/
void main(void)
{ int length,t
unsigned char tt[]="TEMPRETURE"
while(1)
{ADC_C()
ADC_R()
//转换温度的程序,不太清楚。
LCD_init()
LCD_clc()
for(length=0length<15length++)
{LCD_display(tt[length])}
LCD_shift()
DAC(t)
delay()
}
}
对应的电路图如下:
三、思考题
1、 仪表零点、量程如何调整?
2、 你所设计的仪表应该采用哪一种线制连接方式?
3、 考虑Pt100热电阻非线性补偿问题该如何处理,可能的同学请实现非线性补偿,测试补偿前后的变送器特性。
四、实习总结
图传不上去
最简单的方法是,你在U3输出后,再跟一个1倍的反相比例放大宏纯器,相位刚好反转过来举神,形成一个正电压。这里的蔽答咐运放也不用LF356,国内356很多假货,质量还不如TL082,082里面有两个运放单元,正好符合你的设计。程序很简单的,关键在写程序的时候告雀祥要注意DAC0832的保持时间和转换速度。建议你先弄个单缓冲或者直接控制岁晌的。
接着控制的会比较简单:
就是DAC8032
1,2,3,10,17,18脚GND。20,19,8脚VCC
能明白吧!程袜搏序自己写比较好,这样能学到更多东西
给你点参考,这个程序能让你对它的工作方式更熟悉!!
ORG
0000H
MAIN:MOV
A,P1
MOV
R0,A
设置高电平
MOV
R1,#00H
设置低电平
LCALL
BOXING
SJMP
MAIN
BOXING:
JNB
P1.0,SANJIAO
P1.0控制三角波的输出
JNB
P1.1,JUXING
P1.1控制矩形波的输出
JNB
P1.2,JUCHI
P1.2控制锯齿波的输出
RET
三角波
SANJIAO:
MOV
DPTR,#7FFFH
选中DA0832
MOV
A,#00H
UP1:
MOVX
@DPTR,A
向0832输出数据
INC
A
JNZ
UP1
A=!0
跳转反之顺序执行
DOWN1:DEC
A
MOVX
@DPTR,A
JNZ
DOWN1
RET
矩形波
JUXING:
MOV
DPTR,#7FFFH
LP:MOV
A,R0
设置输出上限
MOVX
@DPTR,A
LCALL
DEL_H
调高电平延时程序
MOV
A,R1
MOVX
@DPTR,A
LCALL
DEL_L
调低电平延时程序
RET
锯齿波
JUCHI:
MOV
DPTR,#7FFFH
MOV
A,#00H
LOOP:MOVX
@DPTR,A
INC
A
SJMP
LOOP
RET
延时程序
DEL_H:
高电平
MOV
R7,#250
DE:MOV
R6,#4
DJNZ
R6,$
DJNZ
R7,DE
RET
DEL_L:
低电平
MOV
R7,#250
DEL:MOV
R6,#4
DJNZ
R6,$
DJNZ
R7,DE
RET
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)