积分式直流数字电压表文档格式.docx
《积分式直流数字电压表文档格式.docx》由会员分享,可在线阅读,更多相关《积分式直流数字电压表文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
![积分式直流数字电压表文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/95121204-5946-45a5-b0f0-76ab4236fd87/95121204-5946-45a5-b0f0-76ab4236fd871.gif)
我们现在利用单片机软件编程与模拟开关硬件控制P1^3将量程分为200mv到2V发挥部分的第2项要求,同时实现自到转换的功能。
这达到发挥部分的第7个要求。
通过液晶LCD128*64里面数据可以显示达到十进制0~19999的显示功能,这完成发挥部分的第3项。
同时再用单片机P1^1实现自动校零的功能。
其具体电路见附录一。
2.4电源电路
电源电路可以输出+—5V与+-15V电压,如下图D3-6。
本方案的直流稳压电源采用通常的桥式全波整流,单电容波滤波,四端固定输出集成稳压器件。
电路见附录一。
连接此电路后,输入端接了运放电路后,其输入电阻远远大于1M
,所以这可以达到基本要求第的7项
发挥其它功能部分,利用凌阳单片机发音发出电压值,具体见附录三。
3.电路与软件程序设计
单片机控制模拟开关灵活控制电路,如下图
(2)。
主要电路图见附录一
图
(2)单片机控制系统
我们采用STC89C52单片机芯片,其具有以下特点:
在5V工作电压下最高频率达到80MHZ,8K的FLASH存储器,512的RAM字节,内置看门狗,有32个I/O口,2K的E2PROM.2个外部中断,2个定时/计数器,1个串行中断.我利用中断定时功能从而达到定时计数的作用,我们利用24MHZ的晶振,使这种单片机的采样速度远远大于2次/秒,采样速度可以达到基本要求第(4)。
也可以达到发挥部分的第(4)要求软件流程图如下
图(4)软件流程图
4.测试方案与测试结果
4.1仪器设备
根据设计要求,测试使用的仪器设备如表1所示。
表1测试使用的仪器设备
序号
名称、型号、规格
数量
备注
1
数字示波器
GDS-820S
2
数字万用表
DT-9205B
4.2测量结果
测量结果对比如表2所示.
表2测试结果对比表
测量
万用表
测量值
mv
电压表
绝对
误差
%
1.0000
1.0020
0.0004
0.0400
11
100.00
100.01
0.0060
2.0000
2.0030
0.0010
0.0500
12
200.00
200.01
0.0720
0.0360
3
3.0000
3.0020
0.0015
13
300.00
300.02
0.0700
0.0233
4
4.0000
4.0010
0.0250
14
400.00
400.01
0.0125
5
5.0000
5.0010
0.0200
15
500.00
500.01
0.1100
0.0220
6
10.000
10.010
0.0040
16
1000.0
1000.1
0.3000
0.0300
7
20.000
20.010
0.0100
17
1200.0
1200.1
8
30.000
30.010
0.0130
0.0433
18
1500.0
1500.2
0.2000
0.0133
9
40.000
40.020
19
1800.0
1800.2
0.0111
10
50.000
50.030
0.0230
0.0460
20
2000.0
2000.2
0.9000
0.0450
具体数据见附表三以上结果达到显示范围是:
1mv~2v达到发挥部分的第一项要求。
测量误差:
远小于≤±
0.05%±
5个字,达到发挥部分的第5项要求。
5.总结
由于使用单片机作为中央控制器件和计算器件,本仪表有功能性强,性能可靠,体积小,电路简单的特点,量程自动转换等功能又使这个测量仪表具有较高的智能水平。
由于时间的关系,在配置电阻电容时,可能还会有点不足。
但是可以达到一定的要求。
参考文献
1<
<
凌阳16位单片机应用基础>
>
罗亚非等编著.北京航空航天大学出版社
2<
单片机的C语言应用程序设计>
马忠梅,马岩等编.北京航空航天大学出版社出版.
3〈电子测量仪器原理与使用〉〉林占江,林放编著.电子工业出版社.
4〈〈数字电子技术〉〉徐丽香编著.电子工业出版社.
附录一:
整体电路
附录二:
程序清单
附录三元件清单:
测量具体数据与发挥其它功能部分
附录一:
主电路图
电源电路图
附录二
/*********************************************
程序名:
dianyabiao.c
程序功能:
引脚定义:
*********************************************/
#include<
reg52.h>
Intrins.h>
#include<
absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
/************滤波数据******************/
ucharshuzu_num=50;
bitctrl5_flag=0;
//ctrl5_flag=12V;
//ctrl5_flag=0200mv
bitjiao_flag=1;
bittiao_ling_flag=1;
unsignedlongintCount0=0;
unsignedlonginttiaoling_num;
unsignedlongintjiao_num;
unsignedlongintsum=0;
uchara=0;
unsignedlongintncount;
/************引脚定义******************/
sbitLCD12864_EN=P2^0;
sbitLCD12864_RW=P2^1;
sbitLCD12864_RS=P2^2;
sbitp32=P3^2;
sbitctrl1=P1^0;
/*trl1=0时放电,trl1=1时冲电*/
sbitctrl2=P1^2;
/*ctrl2=0调零*/
sbitctrl3=P1^1;
/*ctrl3=0测量*/
sbitctrl4=P1^3;
/*ctrl4=0校准*/
sbitctrl5=P1^4;
/*档位:
ctrl5=1时2V档,ctrl5=0时200mV档*/
ucharcodetable[10]={48,49,50,51,52,53,54,55,56,57};
ucharVin[11];
//uintvoltage=0,temp=0;
/************函数定义********************/
voidt0_init();
voidLcd12864_Int();
voidLcd12864_Location_XY(ucharx,uchary);
voidLcd12864_Write_Data(uchar*p);
voidLcd12864_Write_Command(ucharCommand_Code);
//voidLcd12864_show(uinttt);
voidLcd12864_show(uinta,uinttt,ucharhang);
voidDelay_ms(uintsecond);
voidmeasure(void);
unsignedlongintx;
/**************测量电压子程序******************/
voidmeasure(void)
{
TR0=0;
//定时器0停止
a=0;
//p32=0;
TH0=0;
//定时器0清零
TL0=0;
TR0=1;
//定时器0启动
ctrl1=1;
//开始积分
while(p32);
//一直等到低电平
//停止计数
ctrl1=0;
//积分电容放电
Delay_ms(5);
}
voidt0_server()interrupt1
a++;
/**************显示记录******************/
voidLcd12864_num(uinta,uinttt,ucharhang)
Vin[0]=58;
/*冒号"
:
"
*/
Vin[1]=table[a%1000/100];
Vin[2]=table[a%100/10];
Vin[3]=table[a%10];
Vin[4]=table[tt%10000/1000];
Vin[5]=table[tt%1000/100];
Vin[6]=table[tt%100/10];
Vin[7]=table[tt%10];
Vin[8]=32;
Vin[9]=32;
Lcd12864_Location_XY(3,hang);
Lcd12864_Write_Data(Vin);
celinag_2V(){ctrl2=1;
ctrl3=0;
ctrl4=1;
ctrl5=1;
}//celiang2V档
//celinag_2mV(){ctrl2=1;
ctrl5=0;
}//celiang200mV档
/************主程序*********************/
voidmain()
ucharnum;
//unsignedlongintx;
Lcd12864_Int();
t0_init();
Lcd12864_show(12345);
ctrl5_flag=1;
loop1:
if(num<
shuzu_num)
{
num=num+1;
celinag_2V();
measure();
sum=sum+a*65536+TH0*256+TL0;
//得到本次积分的计数值
}
else
Count0=sum/shuzu_num;
if(Count0>
=33120)x=(Count0-33120)*10/2.235;
elsex=(33120-Count0)*10/2.235;
Lcd12864_num(Count0/10000,Count0%10000,1);
Lcd12864_num(x/10000,x%10000,2);
Lcd12864_show(x/10000,x%10000,3);
sum=0;
num=0;
gotoloop1;
/**************显示程序******************/
voidLcd12864_show(uinta,uinttt,ucharhang)
if(x>
=20000)
Vin[1]=table[a%100/10];
Vin[2]=46;
/*小数点"
."
*/
//Vin[7]=table[tt/10%10];
//Vin[7]=table[tt%10];
Vin[7]=32;
Vin[8]=86;
//Vin[10]=32;
//Vin[1]=table[a%100/10];
Vin[1]=table[a%10];
Vin[2]=table[tt%10000/1000];
Vin[3]=table[tt%1000/100];
Vin[4]=46;
Vin[5]=table[tt%100/10];
Vin[6]=table[tt%10];
Vin[8]=109;
Vin[9]=86;
//Vin[9]=32;
Lcd12864_Location_XY(0,3);
Lcd12864_Write_Data("
电压值"
);
Lcd12864_Location_XY(0,0);
校零"
Lcd12864_Location_XY(0,1);
调试"
积分式直流数字电压表电路元件清单
元件
型号
芯片
LM311
CD4066
金属膜电阻
9.1M
电阻
100K
电容
103
104
单片机芯片
STC89C52
液晶显示屏
LCD
LM324
测试结果对比表
发挥部分
凌阳单片机技术
语音处理技术:
音频采样和量化
Ø
将模拟的(连续的)声音波形数字化(离散化)
语音信号的时域分析
直接利用语音信号的时域波形进行分析
语音信号的频域分析
对语音信号的频谱、功率谱等进行分析
语音信号的线性预测分析
把语音信号用一个模型来表示,利用模型的参数来描述语音
信号的波形和频谱特性
我们应用单片机处理语音,把电压粗读出来
单片机实现语音功能的条件
硬件要求
DA输出用于放音
定时器/计数器用于控制采样频率
软件要求
语音编解码算法支持
本源凌阳网站