




免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子信息工程师实践设计报告开课学院: 计算机与信息学院 专业班级: 学生姓名及学号: 指导教师: 课题名称: 基于AT89S52的智能RLC测量仪 2016 2017 学年第 一 学期一、课题的基本描述 在电子电路实验中经常需要测定电感、电容、电阻的大小,设计操作简单、价格便宜、性能稳定的电阻、电容、电感测量仪具有很高的实用价值。二、设计的基本要求本课题要求设计一款基于AT89S52的智能RLC测量仪,通过振荡电路把RLC的参数转换成频率 (其中电阻、电容参数可利用555多谐振荡电路转化为频率,电感参数可根据电容三点式电路转化为频率),再利用单片机实现计算频率,间接实现RLC参数的测量。系统以AT89S52为主控芯片,包含测量电路、控制电路、通道选择及LCD显示等主要电路。三、技术方案及关键问题在系统硬件设计中,以MCS-51单片机为核心的电阻、电容、电感测试仪,将电阻,电容,电感,使用对应的振荡电路转化为频率实现各个参数的测量。其中电阻和电容是采用555多谐振荡电路产生的,而电感则是根据电容三点式产生的,将振荡频率送入AT89S52的计数端端,通过定时并且计数可以计算出被测频率,再通过该频率计算出被测参数。在系统的软件设计是以Keil51为平台,使用C语言编程编写了系统应用软件;包括主程序模块、显示模块、电阻测试模块、电容测试模块和电感测试模块。芯片介绍:CD4052是一个差分4通道数字控制模拟开关,有A、B两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止漏电流。幅值为4.520V的数字信号可控制峰峰值至20V的模拟信号。这些开关电路在整个VDD-VSS和VDD-VEE电源范围内具有极低的静态功耗,与控制信号的逻辑状态无关,当INH输入端=“1”时,所有通道截止。二位二进制输入信号选通4对通道中的一通道,可连接该输入至输出。引脚说明: 表1 CD4052引脚说明真值表: 表2 CD4052真值表NE555555集成电路开始是作定时器应用的,所以叫做555定时器或555时基电路。但后来经过开发,它除了作定时延时控制外,还可用于调光、调温、调压、调速等多种控制及计量检测。此外,还可以组成脉冲振荡、单稳、双稳和脉冲调制电路,用于交流信号源、电源变换、频率变换、脉冲调制等。由于它工作可靠、使用方便、价格低廉,目前被广泛用于各种电子产品中,555集成电路内部有几十个元器件,有分压器、比较器、基本R-S触发器、放电管以及缓冲器等,电路比较复杂,是模拟电路和数字电路的混合体。 555集成电路是8脚封装,双列直插型,如图2所示。其中6脚称阈值端(TH),是上比较器的输入;2脚称触发端(TR),是下比较器的输入;3脚是输出端(Vo),它有O和1两种状态,由输入端所加的电平决定;7脚是放电端(DIS),它是内部放电管的输出,有悬空和接地两种状态,也是由输入端的状态决定;4脚是复位端(MR),加上低电平时可使输出为低电平;5脚是控制电压端(Vc),可用它改变上下触发电平值;8脚是电源端,1脚是地端。 图2 NE555的引脚图 系统分四大部分:测量电路、控制电路、通道选择和显示电路。通过P2.3和P2.4向模拟开关送两位地址信号,取得相应的振荡频率,然后根据所测频率判断是否转换量程,或者是把数据进行处理后,得出相应的参数值。系统设计框图如图3所示。 图3 系统框图框图各部分说明如下:1)控制部分:本设计以单片机为核心,采用89C52单片机,利用其管脚的特殊功能以及所具备的中断系统,定时/计数器和LCD显示功能等。在本设计中,采用LCD1602液晶显示:本设计中有1个CD4502、3个LM555、3个测量选择按键。键盘:本设计中有Sr,Sc,SL三个按键,可灵活控制不同测量参数的切换,实现一键测量。2)通道选择:本设计通过单片机控制CD4052模拟开关来控制被测频率的自动选择。3)测量电路:RC震荡电路是利用555振荡电路实现被测电阻和被测电容频率化。电容三点式振荡电路是利用电容三点式振荡电路实现被测电感参数频率化。四、系统(算法)设计实现设计流图:开始初始化键扫描健分析,置状态R测试状态C测试状态L测试状态开中断定时器设置通道及指示灯的设置采值并计算显示结束NoYes如图4所示是系统的电路图图4 系统的电路图具体的设计如下:一、LED发光二级管电路与键盘电路的设计: 图5 LED发光二级管电路与键盘电路在本设计中,利用单片机的P2.0、P2.1和P2.2口直接和发光二极管相连接,控制程序放在 MCS-51单片机的ROM中。由于测试指示灯为发光二极管且阳极通过限流电阻与电源正极相接,所以为共阳极。因此 I/0口输出低电平时,与之相连的相应指示灯会亮;I/0口输出高电平时,相应的指示灯会灭。本设计中设置了Sr,Sc,SL三个按键,利用单片机的P1.0、P1.1和P1.2口直接和按键相连接,控制程序放在 MCS-51单片机的ROM中用于启动各个被测参数程序的调整。二、测量电阻、电容,电感电路的设计定时器555是一种用途很广的集成电路,只需外接少量R、C元件,就可以构成多谐、单稳及施密特触发器。电阻的测量采用“脉冲计数法”,由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电阻的大小。555接成多谐振荡器的形式,其振荡周期为: 得出: 即: 其中R16=1K, R17=1K,C11=0.1uF:电阻测试电路如图6所示: 图6 电阻测试电路电容的测量同样采用“脉冲计数法”,由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电容的大小。555接成多谐振荡器的形式,其振荡周期为: 我们设置 R1=R2,得出: 即: 电路分为1档:R14=30K,R15=3.9K; 电容测试电路如图7所示: 图7 电容测试电路电感的测量是采用电容三点式振荡电路来实现的。电容三点式振荡电路又称考毕兹振荡电路,三点式振荡电路是指:LC回路中与发射极相连的两个电抗元件必须是同性质的,另外一个电抗元件必须为异性质的,而与发射级相连的两个电抗元件同为电容式的三点式振荡电路,也就是射同基反的构成原则成为电容三点式振荡电路。其振荡频率为: 电感测试电路如图8所示: 图8电感测试电路多路选择开关电路的设计利用CD4052实现测量类别的转换,CD4052是差分四通道数字控制模拟开关器件,有A0和A1两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止电流。当INH输入端=“1”时所有通道截止,二位二进制输入信号选通四对通到中的一通道。当选择了某一通道的频率后,Y输出频率通过T1送入单片机进行计数,通过计算得到要被测值,多路选择开关控制如表3 所示。P2.3 P2.4 测量类别00Y0-L01Y1-R10Y2-C11*表3 多路选择开关控制多路选择开关硬件电路如图9所示: 图9 多路选择开关硬件电路代码:#include reg51.h#include#include#define uint8 unsigned char#define uint16 unsigned int#define uchar unsigned char#define uint unsigned intuint16 cnt2ms;/10ms计数器uint8 cnt1s;/1秒计数器/电阻-#define Z1 13700053.00#define Z2 3685279.00float RZ=0;unsigned long RX=0;unsigned long RX2=0;unsigned long RX3=0;unsigned long RX4=0;unsigned long RX5=0;unsigned long RX6=0;unsigned long RX7=0;unsigned long RX8=0;unsigned long RX9=0;/电感- float LZ=0;#define C1 0.0461/电容- float CZ=0; float CX=0;#define R1 24874uint8 KL=0;/unsigned int Pulsecnt=0;/脉冲个数unsigned int Pulsenum;/脉冲个数uint8 start=0;/uint16 PulseTime;/10ms计数器uint16 Pulse;/10ms计数器bit flag=0;uint8 CH=0;/unsigned long x;void Init_Extint(void);void TimerInitProc();void Init_System(void);void Display(uint8 chose_dat, uint8 dat);void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s);void DelayMs(uint8 Ms);uint8 Pulse_FLAG=0;uint8 Pulse_5=0;/*按键*/sbit K1=P13;sbit K2=P14;sbit K3=P15;sbit A0=P21;sbit A1=P20;sbit RED=P36;sbit YEW=P34;sbit GRE=P33;/*LCD液晶*/#define LCD_Data P0 /LCD的数据口sbit LCD_BF=LCD_Data7; /LCD忙信号位sbit LCD_RS=P10;sbit LCD_RW=P11;sbit LCD_EN=P12;#define LCD_GO_HOME 0x02 /AC=0,光标、画面回HOME位/输入方式设置#define LCD_AC_AUTO_INCREMENT 0x06 /数据读、写操作后,AC自动增一#define LCD_AC_AUTO_DECREASE 0x04 /数据读、写操作后,AC自动减一#define LCD_MOVE_ENABLE 0x05 /数据读、写操作,画面平移#define LCD_MOVE_DISENABLE 0x04 /数据读、写操作,画面不动/设置显示、光标及闪烁开、关#define LCD_DISPLAY_ON 0x0C /显示开#define LCD_DISPLAY_OFF 0x08 /显示关#define LCD_CURSOR_ON 0x0A /光标显示#define LCD_CURSOR_OFF 0x08 /光标不显示#define LCD_CURSOR_BLINK_ON 0x09 /光标闪烁#define LCD_CURSOR_BLINK_OFF 0x08 /光标不闪烁/光标、画面移动,不影响DDRAM#define LCD_LEFT_MOVE 0x18 /LCD显示左移一位#define LCD_RIGHT_MOVE 0x1C /LCD显示右移一位#define LCD_CURSOR_LEFT_MOVE 0x10 /光标左移一位#define LCD_CURSOR_RIGHT_MOVE 0x14 /光标右移一位/工作方式设置#define LCD_DISPLAY_DOUBLE_LINE 0x38 /两行显示#define LCD_DISPLAY_SINGLE_LINE 0x30 /单行显示/*定义子程序*/void LCD_ClrAll(void); /清屏void Judge_LCD_busy(void); /检测是否忙碌void LCD_Write(uchar WriteData); /写控制字void LCD_write_data(uchar LCD_data); /写数据显示void LCD_cursor(uchar x); /光标起始地址void LCD_printc(unsigned char lcd_data) ; /输出一个字符void LCD_prints(unsigned char *lcd_string);/输出字符串/*LCD1602忙碌判断子程序*/void Judge_LCD_busy(void) /判断LCD1602是否忙状态 while(1) LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_Data=0xff; LCD_EN=1; /EN 是 10 使能 if(!LCD_BF)break; /LCD_BF=1表示忙碌,需要等待。 LCD_EN=0;/*LCD清屏*/void LCD_ClrAll(void) Judge_LCD_busy(); /判断是否忙碌 LCD_RS=0; LCD_RW=0; LCD_Data=0x01; LCD_EN=1; LCD_EN=0;/*LCD写数据定义各种模式*/void LCD_Write(uchar WriteData) /写指令到LCD Judge_LCD_busy(); LCD_RS=0; LCD_RW=0; P0=WriteData; /把WriteData的数据送到数据口 LCD_EN=1; LCD_EN=0; /*LCD显示数据*/void LCD_write_data(uchar LCD_data) /输出一个字节数据到LCD Judge_LCD_busy(); LCD_RS=1; LCD_RW=0; P0=LCD_data; LCD_EN=1; LCD_EN=0; /*光标位置的确定*/void LCD_cursor(uchar x) /LCD光标定位到x处 LCD_Write(0x80+x); /第一行地址是0x80/*输出一个字符*/void LCD_printc(unsigned char lcd_data) LCD_write_data(lcd_data);/*输出字符串*/void LCD_prints(unsigned char *lcd_string) unsigned char i=0; while(lcd_stringi!=0x00) LCD_write_data(lcd_stringi); i+; /*初始化程序*/void LCD_initial(void) /初始化LCD LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE); LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF); LCD_Write(LCD_DISPLAY_DOUBLE_LINE); LCD_ClrAll();/*延时*/void delay_1ms(uint x) uint j; uchar i; for(j=0;jx;j+) for(i=0;i1;if(RX=100) RX=RX-100; elseRX=0; if(x=0)RX=0;RX2=0;RX3=0;RX4=0;RX5=0;RX6=0;RX7=0;RX8=0;RX9=0; if(RX1000000)RX=1000000; RX2=(RX+RX3+RX4+RX5+RX6+RX7+RX8+RX9)3;/求平均提高精度RX9=RX8;RX8=RX7;RX7=RX6;RX6=RX5;RX5=RX4;RX4=RX3;RX3=RX; /保存上一次的阻值 Value_to_ASCII(RX2,0x44);/更新阻值显示if(CH=2) LZ=(x*39*C1)/100000; LZ=LZ*x; LZ=1000000/LZ; if(x=0)LZ=0; if(LZ999999)LZ=999999; /限制最高值 Value_to_ASCIIL(LZ,0x44);/更新电感值显示if(CH=3) CZ=660000/x; if(x=0|x30500)CZ=0; if(CZ999999)CZ=999999; /限制最高值 Value_to_ASCIIC(CZ,0x44);/更新电容值显示 cnt2ms=0; Pulsenum=0; TH1=0; TL1=0; TR1=1; void T1_interrupt(void) interrupt 3 using 0 Pulsenum+;/保存测得脉搏值 void Timer0IntProc() interrupt 1 using 0 /2ms TH0=(65536-2000)/256; TL0=(65536-2000)%256; cnt2ms+;if(cnt2ms=497)/1s计时到 TR1=0; cnt2ms = 0; flag=1;INTRINS.H#ifndef _INTRINS_H_#define _INTRINS_H_extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);#endifSTDIO.H#ifndef _STDIO_H_#define _STDIO_H_#ifndef EOF#define EOF -1#endif#ifndef NULL#define NULL (void *) 0)#endif#ifndef _SIZE_T#define _SIZE_Ttypedef unsigned int size_t;#endif#pragma SAVE#pragma REGPARMSextern char _getkey (void);extern char getchar (void);extern char ungetchar (char);extern char putchar (char);extern int printf (const char *, .);extern int sprintf (char *, const char *, .);extern int vprintf (const char *, char *);extern int vsprintf (char *, const char *, char *);extern char *gets (char *, int n);extern int scanf (const char *, .);extern int sscanf (char *, const char *, .);extern int puts (const char *);#pragma RESTORE#endifINTRINS.H#ifndef _INTRINS_H_#define _INTRINS_H_extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned cha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高铁站台安全知识培训课件
- 集安市2025-2026学年七年级下学期语文月考模拟试卷
- 电路基础自锁知识培训课件
- 电芯厂消防知识培训课件
- 高边坡施工安全知识培训课件
- 电脑贴膜专业知识培训课件
- 高血压病课件
- 电脑知识培训活动课件
- 电脑知识培训实施方案课件
- 智慧化工园区数字孪生应用方案
- 安全挂梯施工方案
- 高速铁路接触网运行维修规则
- 《项目管理飞行检查管理办法》宣贯交底
- 易制爆化学品危险物品单位治安防范情况检查评估表
- 干熄焦余热发电安全预评价送审
- 中国传统艺术-篆刻、书法、水墨画体验与欣赏-哈尔滨工业大学中国大学mooc课后章节答案期末考试题库2023年
- 宾馆承包合同协议书
- 血透室进修汇报专业知识
- 2023年天津卷英语高考真题
- 硫磺安全技术说明书MSDS
- 贵州省新型农村社会养老保险经办规程
评论
0/150
提交评论