四位半电压表.docx

上传人:b****8 文档编号:27737548 上传时间:2023-07-04 格式:DOCX 页数:30 大小:302.50KB
下载 相关 举报
四位半电压表.docx_第1页
第1页 / 共30页
四位半电压表.docx_第2页
第2页 / 共30页
四位半电压表.docx_第3页
第3页 / 共30页
四位半电压表.docx_第4页
第4页 / 共30页
四位半电压表.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

四位半电压表.docx

《四位半电压表.docx》由会员分享,可在线阅读,更多相关《四位半电压表.docx(30页珍藏版)》请在冰豆网上搜索。

四位半电压表.docx

四位半电压表

四位半多功能数字表

一.基本要求:

在Proteus平台上设计并仿真实现一台四位半多功能数字电压表

直流电压测量,并具有极性判断和自动量程转换功能。

1.直流电压测量:

每秒等效采样次数≥3次

推荐档位:

I档(20mV档):

最小电压分辨率:

2μV

II档(200mV档):

最小电压分辨率:

20μV

档(2V档):

最小电压分辨率:

0.2mV

档(20V档):

最小电压分辨率:

2mV

2.*交流电压测量:

最高频率<=10KHz的正弦波

档(20V档):

最小电压分辨率:

20mV

档(200V档):

最小电压分辨率:

200mV

3.*交流参数测量:

频率、有效值、峰值

4.第1项为基本要求内容,带有“*”的2、3项为选做内容。

5.只能采用通用A/D、集成运放IC、51单片机等器件,不准使用专用电压测量集成电路完成系统设计。

6.推荐一个参考的系统组成框图如下:

 

其中第一级的前置放大级推荐采用AD8551自稳零斩波运算放大器。

设计过程:

包括元器件选型依据(如前置放大器的设计、A/D分辨率的选择、放大器及滤波器设计、采样率计算、电源设计等)、理论分析及参数计算、系统设计(书面)。

系统框图、元件选型、理论计算、模块电路设计

二系统框图

整体框图

数字电路部分和模拟电路量程初判模块整体电路:

1.电压极性检测电路

电压极性检测电路采用过零比较器检测负电压的方式实现的,运算放大器LM324的反向端接地,同向端通过100K电阻接输入信号。

当输入的测量信号为负时比较器翻转,输出端经过电平转换成TTL信号后送给单片机PA7端口检测,通常情况下输出为高电平,为正电压状态。

                                                       

  2.电压范围粗测电路

为了粗略地得到被测量的电压范围我们采用多组比较器的方式,通过阶梯式比较的方法确定输入电压的范围。

其具体电路如下图(2.2.5)所示。

3.量程切换电路

量程切换电路包括电压放大电路和无零漂小信号放大电路。

电压变换电路

电压变换电路由衰减电阻、切换继电器和运算放大器组成,对应的是衰减1/2、1/3、1/4和无零漂放大50倍,切换电路如图(2.2.7)所示。

电压变换到0-5V标准信号后,再由A/D转换进行采样,最后由单片机算法还原。

4.差分放大电路:

对输入的电压进行去除同模干扰。

5.50hz陷波器:

电路设计,目的是滤去工频交流点,因为电表多由工频电源提供,在50HZ频率段电压干扰很大,所以要滤去。

陷波器的频谱分析图:

绿色为幅频响应,红色为相位。

运放模块

1|2放大电路;

100倍放大器:

测试输出:

输入10V:

输入5V

输入2V:

2V

输入800mv

800mv

输入80mv:

输入8mv:

单片机外围电路

2.

软件程序流程图

单片机控制系统软件流程如图所示。

  

三使用器件

单片机系统是以89C51单片机为核心;信号采集与量程转换电路是由0P一07和模拟开关CD4051所组成;积分比较与自动回零电路是由双积分型A/D转换器和过零比较器所组成;开关逻辑控制电路主要元件是模拟开关CD4051;显示采用了1602字符型液晶显示器:

基准电压是由TL431稳压所得。

采用双电源可以实现的数模隔离。

/*

作品:

 

*/

#include

#include

#defineaddo(20.0/65535.0)

#defineucharunsignedchar

#defineuintunsignedint

unsignedlongtemp;

bitsys=0;

sbitRS=P1^0;

sbitRW=P1^1;

sbitE=P1^2;

sbitCS=P3^0;

sbitBYTE=P1^3;

sbitBUSY=P1^4;

sbitRC=P1^5;

sbitS1=P1^6;

sbitS2=P1^7;

unsignedcharnum1[8]={0};

unsignedcharnum2[]={"Voltage:

"};

//-------------延时----------------

voiddelay(intms)

{

intx,y;

for(x=ms;x>0;x--)

for(y=110;y>0;y--);

}

//-------------------------------

bitlcd_bz()

{

bitresult;

RS=0;

RW=1;

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P2&0x80);

E=0;

returnresult;

}

 

//-----------------写命令----------------

voidlcd_wcmd(unsignedcharcmd)

{

while(lcd_bz());//判断LCD是否忙碌

RS=0;

RW=0;

E=0;

_nop_();

_nop_();

P2=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

E=0;

}

//-------------------写数据-----------------

voidlcd_wdat(unsignedchardat)

{

while(lcd_bz());//判断LCD是否忙碌

RS=1;

RW=0;

E=0;

P2=dat;

_nop_();

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

E=0;

}

 

//---------------------液晶初始化-------------

voidlcd_init()

{

lcd_wcmd(0x38);

delay

(1);

lcd_wcmd(0x0c);

delay

(1);

lcd_wcmd(0x06);

delay

(1);

lcd_wcmd(0x01);

delay

(1);

}

 

voidlcd_pos(unsignedcharpos)

{

lcd_wcmd(pos+0x80);

}

 

//ADS7825读函数

uintADS7825_READ()

{

uchartemp1,temp2;

CS=0;

RC=1;

RC=0;

RC=1;

while(BUSY==0);

RC=1;

BYTE=0;

temp1=P0;

if((temp1&0X80)==0)

{

temp1=P0;

BYTE=1;

temp2=P0;

CS=1;

sys=1;

}

else

{

temp1=~P0;

BYTE=1;

temp2=~P0;

CS=1;

sys=0;

}

return(int)((temp1<<8)|temp2);

}

voidHEXTOBCD()

{

//uinttemp;

temp=(unsignedlong)(ADS7825_READ()*addo*1000000);

//temp11=temp;

num1[0]=temp/10000000+0X30;

num1[1]=temp%10000000/1000000+0X30;

//num1[2]='.';

num1[2]=temp%1000000/100000+0X30;

num1[3]=temp%100000/10000+0X30;

num1[4]=temp%10000/1000+0X30;

num1[5]=temp%1000/100+0x30;

num1[6]=temp%100/10+0X30;

num1[7]=temp%10+0X30;

}

 

//-----------------------主函数------------------

voidmain(void)

{

unsignedchari;

S1=0;

S2=0;

lcd_init();//初始化LCD

delay(20);

//设置显示位置

lcd_pos(0x00);

while(i<16){lcd_wdat(num2[i]);delay

(2);i++;}

while

(1)

{

ucharflage=0;//flage=0为档位不合适

i=0;

S1=0;

S2=0;

HEXTOBCD();

if(flage==0)

{

if((temp>200000))

{lcd_pos(0x40);

//delay

(2);

lcd_wdat('1');//显示字符

lcd_pos(0x43);

//delay

(2);

if(sys==0)

{lcd_wdat('-');

delay

(2);}

elseif(sys==1)

lcd_wdat('+');

delay

(2);

//lcd_wdat(num1[0]);//显示字符

delay

(2);

lcd_wdat(num1[1]);//显示字?

delay

(2);

lcd_wdat(num1[2]);//显示字符

delay

(2);

lcd_wdat('.');//显示字符

delay

(2);

lcd_wdat(num1[3]);//显示字符

delay

(2);

lcd_wdat(num1[4]);//显示字符

delay

(2);

lcd_wdat(num1[5]);//显示字符

delay

(2);

lcd_wdat(num1[6]);//显示字符

delay

(2);

lcd_wdat(num1[7]);//显示字符

delay

(2);

lcd_wdat('v');

flage=1;

}

else{S1=0;S2=1;}

}

delay(50);

HEXTOBCD();

if(flage==0)

{

if((temp>200000)&&(temp<2000000))

{

lcd_pos(0x40);

//delay

(2);

lcd_wdat('2');//显示字符

lcd_pos(0x43);

lcd_pos(0x43);

if(sys==0)

{lcd_wdat('-');

delay

(2);}

elseif(sys==1)

lcd_wdat('+');

delay

(2);

lcd_wdat(num1[0]);//显示字符

delay

(2);

lcd_wdat(num1[1]);//显示字?

delay

(2);

lcd_wdat('.');//显示字符

delay

(2);

lcd_wdat(num1[2]);//显示字符

delay

(2);

lcd_wdat(num1[3]);//显示字符

delay

(2);

lcd_wdat(num1[4]);//显示字符

delay

(2);

lcd_wdat(num1[5]);//显示字符

delay

(2);

lcd_wdat(num1[6]);//显示字符

delay

(2);

lcd_wdat(num1[7]);//显示字符

delay

(2);

lcd_wdat('v');

flage=1;

}

else{S1=1;S2=0;}

}

delay(50);

HEXTOBCD();

if(flage==0)

{

if((temp>200000)&&(temp<2000000))

{

lcd_pos(0x40);

//delay

(2);

lcd_wdat('3');//显示字符

lcd_pos(0x43);

lcd_pos(0x43);

if(sys==0)

{lcd_wdat('-');

delay

(2);}

elseif(sys==1)

lcd_wdat('+');

delay

(2);

lcd_wdat(num1[1]);//显示字?

delay

(2);

lcd_wdat(num1[2]);//显示字符

delay

(2);

lcd_wdat(num1[3]);//显示字符

delay

(2);

lcd_wdat('.');//显示字符

delay

(2);

lcd_wdat(num1[4]);//显示字符

delay

(2);

lcd_wdat(num1[5]);//显示字符

delay

(2);

lcd_wdat(num1[6]);//显示字符

delay

(2);

lcd_wdat(num1[7]);//显示字符

delay

(2);

lcd_wdat('m');

delay

(2);

lcd_wdat('v');

flage=1;

}

else{S1=1;S2=1;}

}

delay(50);

HEXTOBCD();

if(flage==0)

{

if((temp<2000000))

{

lcd_pos(0x40);

//delay

(2);

lcd_wdat('4');//显示字符

lcd_pos(0x43);

lcd_pos(0x43);

if(sys==0)

{lcd_wdat('-');

delay

(2);}

elseif(sys==1)

lcd_wdat('+');

delay

(2);

//lcd_wdat(num1[0]);//显示字符

delay

(2);

lcd_wdat(num1[1]);//显示字?

delay

(2);

lcd_wdat(num1[2]);//显示字符

delay

(2);

lcd_wdat('.');//显示字符

delay

(2);

lcd_wdat(num1[3]);//显示字符

delay

(2);

lcd_wdat(num1[5]);//显示字符

delay

(2);

lcd_wdat(num1[6]);//显示字符

delay(4);

lcd_wdat(num1[7]);//显示字符

delay

(2);

lcd_wdat('m');

delay

(2);

lcd_wdat('v');

flage=1;

}

else{S1=0;S2=0;}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1