数据采集综述.docx

上传人:b****5 文档编号:28939924 上传时间:2023-07-20 格式:DOCX 页数:21 大小:343.98KB
下载 相关 举报
数据采集综述.docx_第1页
第1页 / 共21页
数据采集综述.docx_第2页
第2页 / 共21页
数据采集综述.docx_第3页
第3页 / 共21页
数据采集综述.docx_第4页
第4页 / 共21页
数据采集综述.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据采集综述.docx

《数据采集综述.docx》由会员分享,可在线阅读,更多相关《数据采集综述.docx(21页珍藏版)》请在冰豆网上搜索。

数据采集综述.docx

数据采集综述

 

综合实验一 PWM波形的设计及应用

设计要求:

1.用ADC0809进行A/D转换,采集到数字信号D

2.在P1.1上产生周期T为1kHz的PWM波形,其中脉冲宽度Tao由数字信号D决定。

(如当采集到的数字信号为80H时,占空比为50%,依此类推)

1.系统设计与理论分析:

模拟信号经ADC0809转换成数字信号D,通过调节输入信号量的大小来控制输出PWM波形的脉冲宽度。

本实验通过模拟信号发生器产生模拟信号,将此信号输入到ADC0809模块的09IN0接口,经ADC0809将输入的模拟信号转换成数字信号D,获得数字信号与计数值T进行比较,当数字信号小于T,则在P1.1引脚输出高电平1;反之输出低电平0。

通过调节模拟量电位器调节模拟量大小,从而控制转换后的数字量大小,达到控制脉冲宽度Tao的大小的作用。

增大或减小输入的模拟信号量,通过运行C程序,在8155键显区数码管上显示也不断加大或减小数字量。

2.硬件设计

2.1根据系统设计与理论分析,这个过程将采用如下框图:

2.2模拟信号发生器

电位器电路用于产生可变的模拟量。

旋转电位器,可调节输出电压值的大小。

 

2.3A/D模数转换模块

主要是将输入的模拟信号转换成数字信号。

本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进行转换,转换时间为100μS。

其工作过程如下:

首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,ADC0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。

本实验程序通过查询的方式读取转换结果。

2.4数码管显示模块

实验箱提供了8段码数码管LED显示电路,只需按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,采用动态方式显示。

8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。

6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位显示出数据。

2.5示波器

示波器的输入端接到P1.1引脚,可观察在P1.1上产生周期为T的PWM波形。

3.软件设计

3.1编写程序,使用查询的方式读取转换结果

4.系统测试

通过模拟信号发生器,旋转其电位器,调节输入电压值的大小,经A/D转化成数字电压,从而达到控制脉宽的大小,当模拟量较大时,输出的数字量也比较大,示波器显示屏上输出的脉宽也比较宽;当模拟量比较小时,输出的数字量也比较小,其脉冲宽度也比较小,其在示波器显示出的波形分别如下(a)(b):

(a)

(b)

实验原理图:

A/D转换模块

EOC

单片机模块

 

实验程序:

#include

#include

#defineLEDLen3

#definemode0x03;

#defineCAddrXBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

#defineCS0809XBYTE[0xa000]

sbitP10=P1^0;

sbitP11=P1^1;

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

unsignedcharTao;

unsignedcharT;

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0x02;

CLK164=CLK164&0xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

}

unsignedcharRead0809()

{

CS0809=0;/*起动A/D*/

while(P10==0);

return(CS0809);/*读入结果*/

}

voidDisplayTao()

{

unsignedchari;

i=Tao%100;

LEDBuf[0]=LEDMAP[Tao/100];

LEDBuf[1]=LEDMAP[i/10];

LEDBuf[2]=LEDMAP[i%10];

DisplayLED();

}

voidInitTimer()

{

TMOD=0x02;

TH0=0xFC;

TL0=0xFC;

ET0=1;

EA=1;

TR0=1;

}

voidT0_ISR()interrupt1

{

T++;

if(Tao

P11=1;

else

P11=0;

}

voidmain()

{

CAddr=mode;

InitTimer();

while

(1)

{

Tao=Read0809();

DisplayTao();

}

}

 

综合实验二  电动车的仿真设计

姓名:

黄凤英学号:

110700524年级:

07级专业:

电子科学与技术

在熟悉超想-3000TC系统基础上,完成一电动自行车设计,

设计要求:

1.用DAC0832控制直流电机转动前进,转速可调;用两位数码管显示速度,用四位数码管显示里程。

(设每转一圈前进1m)

1.系统设计与理论分析

直流电机的转速与施加于电机两端的电压大小有关。

在模拟信号发生器获得的模拟信号,并通过电位器调节大小,输入到ADC0809模块转换成数字信号D,在把数字信号输入到DAC0809模块转换成模拟量,本实验用DAC0832控制输出到直流电机的电压,控制DAC0832的模拟输出信号量来控制电机的转速。

当电机转速小于设定值时增大D/A输出电压,大于设定值时则减小D/A输出电压,从而使电机以某一速度恒速旋转。

增大或减小输入的模拟信号量,通过运行C程序,在8155键显区数码管上显示也不断加大或减小的数字量。

2.硬件设计

2.1根据系统设计与理论分析,这个过程将采用如下框图:

2.2模拟信号发生器

电位器电路用于产生可变的模拟量。

旋转电位器,可调节电压值的大小。

2.3A/D模数转换模块

主要是将输入的模拟信号转换成数字信号。

本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进行转换,转换时间为100μS。

其工作过程如下:

首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,AD0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。

CLOCK为转换时钟输入端,频率为100KHz-1.2MHz。

2.4D/A数模转换模块

D/A转换器的功能主要是将输入的数字量转换成模拟量输出。

本实验中采用的转换器为DAC0832,该芯片为电流输出型8位D/A转换器,输入设有两级缓冲锁存器,因此可同时输出多路模拟量。

2.5直流电机

直流电机的转速与施加于电机两端的电压大小有关

直流电机

数码管显示模块

实验箱提供了8段码数码管LED显示电路,只需按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,采用动态方式显示。

8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。

6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位显示出数据。

3.软件设计

3.1

4.系统测试

调节模拟信号发生器模块上的电位器,使模拟电压从小变大,输入到A/D模块,其输出值再次输入到D/A模块,控制直流电机转动速度从小变大,相应显示速度的两位数码管显示的速度也从小变大;当模拟电压从大变小时,数码管显示的速度也从大变小。

而显示里程四位数码管不断增加。

电路图

A/D转换模块

D/A转换模块

直流电机模块

实验程序:

#include

#include

#defineLEDLen6

#definemode0x03;

#defineC_8155XBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

#defineCS0809XBYTE[0xa000]

#defineCS0832XBYTE[0xb000]

sbitP10=P1^0;

sbitP11=P1^1;

bitADC_START;

bitCACULATE_START;

unsignedcharspeed;

unsignedintmile;

unsignedcharsecond;

unsignedcharpressure;

unsignedcharroll;

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0x02;

CLK164=CLK164&0xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

}

voidGetADCData(void)

{

CS0809=0;/*起动A/D*/

while(P10==0)

;

pressure=CS0809;/*读入结果*/

}

voidControlSpeed(void)

{

CS0832=pressure;

}

voidShowInfo(void)

{

unsignedintl;

l=mile/10;

LEDBuf[2]=LEDMAP[l%10];

l=l/10;

LEDBuf[1]=LEDMAP[l%10]|0x80;

LEDBuf[0]=LEDMAP[l/10];

LEDBuf[3]=0x00;

LEDBuf[4]=LEDMAP[speed/10];

LEDBuf[5]=LEDMAP[speed%10];

DisplayLED();

}

voidInitSystem()

{

C_8155=mode;//初始化8155

ADC_START=0;

CACULATE_START=0;

mile=0;

speed=0;

roll=0;

TMOD=0x01;

TH0=0x3C;

TL0=0xB0;//T0每隔50ms发生一次中断,采样频率为20Hz

second=20;

ET0=1;

EX0=1;

IT0=1;

EA=1;

TR0=1;

}

voidINT0_ISR()interrupt0

{

roll++;

}

voidT0_ISR()interrupt1

{

ADC_START=1;

second--;

if(second==0)

{

CACULATE_START=1;

second=20;

}

TH0=0x3C;

TL0=0xB0;

}

voidCaculate(void)

{

speed=roll;

mile+=roll;

roll=0;

}

voidmain()

{

InitSystem();

while

(1)

{

ShowInfo();

if(ADC_START)

{

ADC_START=0;

GetADCData();

ControlSpeed();

}

if(CACULATE_START)

{

CACULATE_START=0;

Caculate();

}

}

}

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

当前位置:首页 > 工程科技 > 建筑土木

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

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