有效值检波器_第1页
有效值检波器_第2页
有效值检波器_第3页
有效值检波器_第4页
有效值检波器_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z.2021年春季西南交通大学大学生电子设计竞赛设计报告有效值检波器2021年5月27日有效值检波器引言单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能〔可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路〕集成到一块硅片上构成的一个小而完善的计算机系统。单片机因为体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,被广泛应用于仪器仪表中。目前市场上的便携式仪表大多都是以单片机为核心。LCD1602为工业字符型液晶,能够同时显示16*02即32个字符。〔16列2行〕单片机加LCD1602液晶显示器,根本可以满足本次单片机控制的数显频率计的设计与制作。ADC0832是NS(NationalSemiconductor)公司生产的串行接口8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比拟高,适宜在袖珍式的智能仪器仪表中使用。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。芯片具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。一.方案认证1.单片机局部:考虑到电子设计竞赛的内容和设计的目的,决定选取STC89C52。此单片机虽然属于低端机型,但足以满足设计的要求。选取其它的高端机型有些浪费。所以使用STC89C52。2.显示局部:此次电子设计大赛要求地显示局部能够完成数字和常用字符的显示。假设用数码管则只能显示0-F,不能显示其它的字符及符号。所以不能用数码管。而选用LCD1602恰好符合要求。所以应用LCD1602。3.A/D转换局部:ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。芯片具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。所以应用ADC0832。二、硬件电路的设计1.工作原理及系统框图此次课程设计的要求如下:一方面,单片机要通过I/O中接收输入信号,另一方面要通过I/O口控制液晶的初始化、显示方式以及要显示的字符。因此,设计必须以单片机为核心,显示器为外围设备。硬件上,单片机通过电路板电路与液晶显示电路相连;软件上,单片机要下载完整的程序对二者进展适时的控制。5V单片机单片机液晶模块电源模块5V液晶模块电源模块12V12V频率信号输入电压频率信号输入电压信号输入单片机控制的数显频率计电路系统框图从图中可以看出,单片机控制的有效值检波器的主要功能模块分为4类:液晶显示:是指在单片机的控制下,液晶模块显示被测信号的频率与有效值。电源模块:为单片机和液晶显示器提供工作电源。A/D模块:将交流电压由模拟量转换为数字量。放大模块:将微小交流电压量放大。单片机电路主要是通过编写程序来控制硬件电路。因此,可以通过改变程序,提高测量精度。2.各局部电路设计2.1单片机控制电路单片机控制电路由STC89C52单片机、晶振时序电路、复位电路构成。单片机STC89C52STC89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。本次设计主要用到单片机4个I/O口中的3个,其中P3口及与液晶显示器相接,18、19脚外界晶振电容为单片机提供时序。晶振时序电路*TAL1和*TAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,*TAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的上下电平要求的宽度。复位电路常见的复位电路有两种:上电复位电路和开关复位电路,可根据电路的需要选择复位电路。2.3液晶显示电路字符型液晶显示模块LCD1602是一种用5*7点阵图形来显示字符的液晶显示器,其引脚功能如下表所示。编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4RS数据/命令选择端〔H/L〕12D5DataI/O5R/W读写选择端〔H/L〕13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极读状态:输入:RS=L,RW=H,E=H输出:D0~D7=状态字写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:无读数据:输入:RS=H,RW=H,E=H输出:D0~D7=数据写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲输出:无根据1602液晶显示器的读写时序操作,编写相应的单片机驱动程序,便可以实现液晶显示器的显示输出。2.4A/D转换电路ADC0832有DIP和SOIC两种封装,DIP封装的ADC0832引脚排列如下图。各引脚说明如下:CS——片选端,低电平有效。CH0,CH1——两路模拟信号输入端。DI——两路模拟输入选择输入端。DO——模数转换结果串行输出端。ADC0832引脚图CLK——ADC0832引脚图Vcc/REF——正电源端和基准电压输入端。GND——电源地。2.4电压放大及整流电路在本设计中,采用LM324运放组成放大电路,对微量交流电压信号进展放大。同时,对交流信号全波整流。三、系统的软件设计软件调试主要是编写相应的程序,在电路仿真软件上仿真,直至到预期效果。1.程序框图主程序及各子程序的框图见图。开场开场初始化初始化被测信号输入被测信号输入测量电压和频率测量电压和频率显示显示完毕完毕主程序框图LCD程序流程图2.程序清单根据程序流程图,编写相应的子程序和主程序。程序清单见附录3。四、测试数据1.同一频率在不同电压时的测量。40mV100mV500mV1V5V20Hz200.0%200%200%200%200%50Hz500.0%500%524%500%536%100Hz1000.0%1077%1011%1000%1011%200Hz1990.5%2042%2000%1990.5%1990.5%500Hz5265.2%4990.2%4990.2%4990.2%4980.4%1kHz10040.4%9980.2%9980.2%9990.1%9980.2%2kHz19950.2%19970.1%19930.3%19950.2%19980.1%5kHz49900.2%49990.1%49860.3%49900.2%49830.4%10k99760.2%99860.1%99920.1%99820.1%99750.2%20k199870.6%199780.7%199940.1%199860.6%199551%100k999670.1%999360.1%999670.1%999570.1%998490.1%误差平均在0.2%以内。2.同一电压在不同频率时的测量。10Hz100Hz1000Hz10KHz50KHz50mV50.81.4%50.81.4%50.41.4%484%468%100mV106.46.4%1066%1044%928%8416%200mV2136.5%2105%2042%2010.5%1895.5%500mV5020.4%5000%5000%5000%4588.2%1V1.033%1.022%1.011%1.011%0.928%2V2.10.5%2.042%2.010.5%1.943%1.857.5%5V5.081.6%5.000%4.921.6%4.762.8%4.529.6%20V200%200%200%200%18.50.7%误差平均在3%以内。五.心得体会在这次电子设计竞赛中我们使用了STC89C52单片机。这让我对于单片机有了更多的了解。同时在找资料的过程中学到了许多单片机课本上没有讲到的知识。在这次电子设计竞赛过程中,我们通过在原有的输入系统进展了改良,使之测量频率和电压有效值精度更高,使之成为一个更加适用,功能更加完备的属于自己的一个系统。在这个过程中让我对于C语言的编写有了更深入的体会。在这次电子设计竞赛中,虽然花费了大量的时间和精力,但我却学到了许多在理论课程中无法学到的知识。最重要的是让我懂得了合作的重要性,学会了如何与人更好的合作。六、参考文献[2]李广弟.单片机根底[M].:航空航天大学,1994[3]阎石.数字电子技术根底〔第三版〕.:高等教育,19891版[6]*毅刚等编著."单片机原理及应用".:高等教育.2004年1月第1版附录1电路简图附录2元器件清单元器件描述数量STC89C52单片机1液晶显示器LCD16021按键开关2电阻1003电容342uF1晶振11.0592MHz1ADC08321电路板210mm铜柱10mm12LM3241电位器103,1046拨码开关6合11指示灯红色1二极管IN40074附录3程序清单:#include<reg51.h>//包含单片机存放器的头文件#include<intrins.h>//包含_nop_()函数定义的头文件#defineucharunsignedchar#defineuintunsignedintsbitCS=P1^2;//将CS位定义为P3.4引脚sbitCLK=P1^0;//将CLK位定义为P1.0引脚sbitDIO=P1^1;//将DIO位定义为P1.1引脚unsignedcharcodedigit[10]={"0123456789"};//定义字符数组显示数字unsignedcharcodeStr[]="Volt=";//说明显示的是电压//以下是对液晶模块的操作程序sbitRS=P2^0;//存放器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚//频率ucharcodetable1[]="Freq=Hz";unsignedcharcodetable2[]={0*30,0*31,0*32,0*33,0*34,0*35,0*36,0*37,0*38,0*39};bitflag;//定义标志位,确定是否到了1sunsignedlong*;ucharT0count;//从T0的计数单元中读取计数的数值uchartimecount;voiddelay(uintz){uint*,y;for(*=z;*>0;*--)for(y=110;y>0;y--);}voidwrite_date(uchardate) //写数据{P0=0*FF;delay(5);RS=1;E=0;P0=date;delay(5);E=1;delay(5);E=0;}voidwrite_(uchar){P0=0*FF;delay(5);RS=0;E=0;P0=;delay(5);E=1;delay(5);E=0;}voidinit() //写位{ucharnum;E=0;write_(0*80+0*40);for(num=0;num<16;num++){write_date(table1[num]); delay(5);}}voidLcdPos(uchar*Pos,ucharyPos)//设置第〔*Pos,yPos〕个字符的DDRAM地址{unsignedchartmp;*Pos&=0*0f;//*位置范围是0~15yPos&=0*01;//y位置范围是0~1if(yPos==0)//显示第一行tmp=*Pos;elsetmp=*Pos+0*40;tmp|=0*80;write_(tmp);}voidwrite_char(ucharc,uchar*Pos,ucharyPos){LcdPos(*Pos,yPos);write_date(c);}voiddelay1ms() //函数功能:延时1ms{unsignedchari,j;for(i=0;i<10;i++)for(j=0;j<33;j++);}voiddelaynms(unsignedcharn) //函数功能:延时假设干毫秒,入口参数:n{unsignedchari;for(i=0;i<n;i++)delay1ms();}bitBusyTest(void) //函数功能:判断液晶模块的忙碌状态{bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反响时间result=BF;//将忙碌标志电平赋给resultE=0;//将E恢复低电平returnresult;}//函数功能:将模式设置指令或显示地址写入液晶模块voidWriteInstruction(unsignedchardictate){while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,_nop_();_nop_();//空操作两个机器周期,给硬件反响时间P0=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反响时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反响时间E=0;//当E由高电平跳变成低电平时,液晶模块开场执行命令}voidWriteAddress(unsignedchar*)//函数功能:指定字符显示的实际地址{WriteInstruction(*|0*80);//显示位置确实定方法规定为"80H+地址码*"}voidWriteData(unsignedchary)//函数功能:将数据(字符的标准ASCII码)写入液晶模块{while(BusyTest()==1);RS=1;//RS为高电平,RW为低电平时,可以写入数据RW=0;E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,P0=y;//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反响时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反响时间E=0;//当E由高电平跳变成低电平时,液晶模块开场执行命令}voidLcdInitiate(void)//函数功能:对LCD的显示模式进展初始化设置{delaynms(15);//延时15ms,首次写指令时应给LCD一段较长的反响时间WriteInstruction(0*38);//显示模式设置:16×2显示,5×7点阵,8位数据接口delaynms(5);//延时5ms,给硬件一点反响时间WriteInstruction(0*38);delaynms(5);//延时5ms,给硬件一点反响时间WriteInstruction(0*38);//连续三次,确保初始化成功delaynms(5);//延时5ms,给硬件一点反响时间WriteInstruction(0*0c);//显示模式设置:显示开,无光标,光标不闪烁delaynms(5);//延时5ms,给硬件一点反响时间WriteInstruction(0*06);//显示模式设置:光标右移,字符不移delaynms(5);//延时5ms,给硬件一点反响时间WriteInstruction(0*01);//清屏幕指令,将以前的显示内容去除delaynms(5);//延时5ms,给硬件一点反响时间}voiddisplay_volt(void) //函数功能:显示电压符号数功能:显示电压符号{unsignedchari;WriteAddress(0*01);//写显示地址,将在第2行第1列开场显示i=0;//从第一个字符开场显示while(Str[i]!='\0')//只要没有写到完毕标志,就继续写{WriteData(Str[i]);//将字符常量写入LCDi++;//指向下一个字符}}voiddisplay_dot(void) //函数功能:显示电压的小数点{WriteAddress(0*09);//写显示地址,将在第1行第10列开场显示WriteData('.');//将小数点的字符常量写入LCD}voiddisplay_V(void)//函数功能:显示电压的单位(V){WriteAddress(0*0d);//写显示地址,将在第2行第13列开场显示WriteData('V');//将字符常量写入LCD}voiddisplay1(unsignedchar*) //函数功能:显示电压的整数局部{WriteAddress(0*08);//写显示地址,将在第2行第7列开场显示WriteData(digit[*]);//将百位数字的字符常量写入LCD}voiddisplay2(unsignedchar*) //函数功能:显示电压的小数数局部{unsignedchari,j;i=*/10;//取十位〔小数点后第一位〕j=*%10;//取个位〔小数点后第二位〕WriteAddress(0*0a);//写显示地址,将在第1行第11列开场显示WriteData(digit[i]);//将小数局部的第一位数字字符常量写入LCDWriteData(digit[j]);//将小数局部的第一位数字字符常量写入LCD}unsignedcharA_D() //函数功能:将模拟信号转换成数字信号{unsignedchari,dat;CS=1;//一个转换周期开场CLK=0;//为第一个脉冲作准备CS=0;//CS置0,片选有效DIO=1;//DIO置1,规定的起始信号CLK=1;//第一个脉冲CLK=0;//第一个脉冲的下降沿,此前DIO必须是高电平DIO=1;//DIO置1,通道选择信号CLK=1;//第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0CLK=0;//第二个脉冲下降沿DIO=0;//DI置0,选择通道0CLK=1;//第三个脉冲CLK=0;//第三个脉冲下降沿DIO=1;//第三个脉冲下沉之后,输入端DIO失去作用,应置1CLK=1;//第四个脉冲for(i=0;i<8;i++)//高位在前{CLK=1;//第四个脉冲CLK=0;dat<<=1;//将下面储存的低位数据向右移dat|=(unsignedchar)DIO;//将输出数据DIO通过或运算储存在dat最低位}CS=1;//片选无效returndat;//将读书的数据返回}voidmain() //函数功能:主函数{ while(1) {unsignedintAD_val;//储存A/D转换后的值unsignedcharInt,Dec;//分别储存转换后的整数局部与小数局部LcdInitiate();//将液晶初始化delaynms(5);//延时5ms给硬件一点反响时间display_volt();//显示温度说明display_dot();//显示温度的小数点display_V();//显示温度的单位RW=0;init();TMOD=0*15;//T0工作为16位计数器〔方式1〕,T1工作方式为16位定时器TH0=0;//计数为65536TL0=0;//TH1=(65536-3689)/256;//定时器采用定时4ms.初值为4000TL1=(65536-3689)%256;TR1=1;//TR1=1,控制开关闭合,计数脉冲进入T1计数器,启动定时TR0=1;//TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数ET0=1;//定时器0开中断必须关闭!!!!ET1=1;//定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论