您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的简易数字电流表设计
课程设计题目简易数字电流表二级学院电子信息与自动化学院专业自动化班级109070101、109070102学生姓名学号指导教师万文略考核项目设计50分平时成绩20分答辩30分设计质量20分创新设计15分报告质量15分熟练程度20分个人素质10分得分总分考核等级教师签名1目录摘要2关键词21概述31.1设计意义31.2系统主要功能32硬件电路设计方案及描述32.1设计方案32.2硬件电路描述33.电路工作原理54.电路图65元件清单86.程序流程图97.源程序代码108.调试149.总结15参考文献152基于单片机的简易数字电流表设计摘要所谓数字电流表就是能将测得的模拟电流量经过A/D转换转变为数字量,并在液晶显示屏上直接显示电流读数的电流表,相比针式电流表有着测量数据准确明了,读数精度高的特点,类似数字式万用表,有着相当的实用性。本次电流表设计主要由电流信号采样电路、A/D(ADC0804)转换电路以及LCD显示电路组成,其中采样电路包括0.1欧姆的采样电阻和100倍的差分放大电路,以及由芯片MC34063组成的反向电路(给运算放放大器提供-5V电压)。本次设计的电流表可直接检测带有负载的回路中的电流0-200Ma,超过200Ma时电路上的红色报警灯会亮,且在实际电路中示数与标准电流值基本相等,有时略有偏差。关键词:数字电流表,电流采样,ADC0804,单片机31.概述1.1设计意义通过课程设计,掌握电子设计的一般步骤和方法,锻炼分析问题解决问题的能力,学会如何查找所需资料,同时复习以前所学知识并加深记忆,为毕业设计打好基础,也为以后工作作准备。通过对选题的分析设计,学习数字电流表的工作原理、组成和特性;掌握数字电流表的校准方法和使用方法;学会分流电路的连接和计算;了解过压过流保护电路的功用。1.2系统主要功能A、利用AD转换芯片和精密电阻测量0~200mA电流B、系统工作符合一般数字电流表要求2.硬件电路设计方案及描述2.1设计方案本次电流表设计主要由电流信号采样电路、A/D(ADC0804)转换电路以及LCD显示电路组成,其中采样电路包括0.1欧姆的采样电阻和100倍的差分放大电路,以及由芯片MC34063组成的反向电路(给运算放放大器提供-5V电压)。如下图;→→→→↓←→2.2硬件电路描述先从题目本生分析,首先想到要求所用到的单片机,出于合理选取及实例分解,根据单片机的特点,选取了AT89S52作为设计用单片机。主要考虑到AT89S52可以按照电流信号采样电路A/D转换AT89S52处理数字信号LCD液晶显示电路判断电压值是否超过200Ma若超过红色LED灯亮未超过黄色led亮4常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。其次,电流测量中,电流是模拟量,而单片机只负责处理数字信号,所以要用到A/D转换芯片,通过筛选,选取了ADC0804作为设计用A/D转换芯片。A/D转换概念:即模数转换(AnalogtoDigitalConversion),输入模拟量(比如电压信号),输出一个与模拟量相对应的数字量(常为二进制形式)。例如参考电压VREF为5V,采用8位的模数转换器时,当输入电压为0V时,输出的数字量为00000000,当输入的电压为5V时,输出的数字量为11111111。当输入的电压从从0V到5V变化时,输出的数字量从00000000到11111111变化。这样每个输入电压值对应一个输出数字量,即实现了模数转换。ADC0804引脚功能:CS:芯片片选信号,低电平有效。即=0时,该芯片才能正常工作,高电平时芯片不工作。在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使能不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。WR:启动ADC0804进行ADC采样,该信号低电平有效,即信号由低电平变成高电平时,触发一次ADC转换。RD:低电平有效,即=0时,DAC0804把转换完成的数据加载到DB口,可以通过数据端口DB0~DB7读出本次的采样结果。VIN(+)和VIN(-):模拟电压输入端,单边输入时模拟电压输入接VIN(+)端,VIN(-)端接地。双边输入时VIN(+)、VIN(-)分别接模拟电压信号的正端和负端。当输入的模拟电压信号存在“零点漂移电压”时,可在VIN(-)接一等值的零点补偿电压,变换时将自动从VIN(+)中减去这一电压。VREF/2:参考电压接入引脚,本次设计运用了TL431稳压管构成的一个稳压电路,为的是给该端口提供稳定的直流电压,提高转换精度。CLKIN和CLKR:外接RC振荡电路产生模数转换器所需的时钟信号,时钟频率CLK5=1/1.1RC,一般要求频率范围100KHz~1460KHz。AGND和DGND:分别接模拟地和数字地。INTR:转换结束输出信号,低电平有效,当一次A/D转换完成后,将引起=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的,脚),当产生信号有效时,还需等待=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将引脚悬空。DB0~DB7:输出A/D转换后的8位二进制结果。另外ADC0804片内有时钟电路,只要在外部“CLKIN(引脚4)”和“CLKR(引脚19)”两端外接一对电阻电容即可产生A/D转换所要求的时钟,其振荡频率为fCLK≈1/1.1RC。其典型应用参数为:R=10KΩ,C=150PF,fCLK≈640KHz,转换速度为100μs。另外就是采样电流信号的采样电路,参考了相关的资料,设计的电路主要由两个OP07运算放大器组成的差分放大电路,放大倍数约为一百倍,为了减少运放的失真,还专门设计了有MC34063构成的一个反向电路,用来给运放提供-5V电压,然后就是利用的一个0.1欧姆的水泥采样电阻来把电流信号转换成电压信号,输入到运放中,因为ADC0804只能输入电压信号。最后电路显示部分采用的LCD1602液晶显示。3.电路工作原理整个电路正常工作时,电流信号首先流过采样电阻,转换成电压信号经过100倍差分放大电路放大后,进入ADC0804芯片,经过A/D转换后,单片机P2端口接收到0804转换出来的数字信号,经过单片机内部的处理后再将电压值在LCD上显示出来,因为前面电压信号进过了放大,所以程序中需要除以相关的值(本次为10)还原电流值,才能送到lcd显示出来。其中须判断电流值是否超过200毫安,若超过应该亮红灯,正常时亮红灯。由于是8位ADC,当单端输出时,数字输出D的范围是0-255,这时的公式应为:D=V/VREF*256,参考电压VREF设置的是2.56V,假设采样的电流为bA,实际显示应该为1000b毫安经过采样电阻后转换成0.1bV,,经过100倍放大后变成10bV,再根据ADC0804的量化公式D=V/VREF*256,D的值便为1000bV,刚好与要显示的毫安级别的电6流值相等,就不需要在程序中再次进行数值处理和还原了。4.电路图A/D转换和显示电路反向电压产生电路7采样电路AD转换器参考电压稳压电路85.元器件清单元件清单名称型号封装形式数量单片机AT89S52DIP-401个A/D转换器ADC0804DIP-201个液晶显示器LCD1602DIP-161个晶振12MXTAL-11个电阻排10kX8SIP-91个滑动变阻器1KVR-51个电阻100KAXIAL-0.42个按键SWANJIAN1个电阻1KAXIAL-0.41个采样电阻0.1欧姆AXIAL-0.41个电解电容470ufRAD-0.22个电容470pFRAD-0.21个电阻10KAXIAL-0.44个运算放大器0P07CPDIP-82个电阻330欧姆AXIAL-0.42个反向电路芯片MC34063DIP-201个限流电阻0.22欧姆AXIAL-0.41个电感线圈33uhXIAL0.31个稳压管TL431SIP31个发光二极管ledSIP22个电阻220欧姆AXIAL-0.41个电容150pfRAD-0.21个电解电容10ufRAD-0.23个电容30pfRAD-0.22个96.程序流程图NOYESYESNO开始LCD初始化,显示初始内容启动A/D转换判断A/D转换是否完成读取并显示电流值判断是否超过200黄灯亮红灯亮继续等待107.源程序代码主程序:#includereg52.h#includeintrins.h#includeLCD1602.hsbit_RD=P3^7;sbit_WR=P3^6;sbit_INTR=P3^3;sbitLED1=P1^3;sbitLED2=P1^4;unsignedcharADC_Datshow[16]={current:000Ma};unsignedcharADC_Dat=0;unsignedcharGet_Adc0804(void)//A/D转换函数,内部自动量化{unsignedchardat=0;//定义一个字符变量_WR=0;//拉低写端口_nop_();//延时两个机器周期_nop_();_WR=1;//在拉高写端口,启动A/D转换while(_INTR==1);//等待A/D转换完成_RD=0;dat=P2;_RD=1;returndat;}voidmain(void){LCD_Int();LCD_WriteStr(0,1,DigitalAmmeter);//第一行显示数字电流表LCD_WriteStr(0,2,ADC_Datshow);//显示初始电流值while(1){ADC_Dat=Get_Adc0804();LCD_WriteCom(0xc0+9);LCD_WriteDat((ADC_Dat/100)+0x30);//显示电流值第一位LCD_WriteDat((ADC_Dat%100/10)+0x30);//显示电流值第二位LCD_WriteDat((ADC_Dat%10)+0x30);//显示电流值第三位if(ADC_Dat200){LED1=0;LED2=1;}else{11LED1=1;LED2=0;}delay_ms(100);}}LCD驱动程序:#includereg52.h#includeLCD1602.h#includeintrins.h//包含_nop_()函数定义的头文件voiddelay_us(unsignedintz){while(z--){_nop_();}}voiddelay_ms(unsignedintz){unsignedchari=0;while(z--){for(i=112;i0;i--);}}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidLCD_WriteCom(unsignedchardictate){Rs=0;//根据规定,RS和R/W同时为低电平时,可以写入指令delay_us(5);Rw=0;delay_us(5);En=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,delay_us(5);//就是让E从0到1发生正跳变,所以应先置0LCD_Dat=dictate;//将数据送入P0口,即写入指令或地址delay_ms(2);En=1;;//E置高电平12delay_ms(2);En=0
本文标题:基于单片机的简易数字电流表设计
链接地址:https://www.777doc.com/doc-5589916 .html