数据采集与接口技术.ppt

上传人:wj 文档编号:10024411 上传时间:2023-05-23 格式:PPT 页数:169 大小:950KB
下载 相关 举报
数据采集与接口技术.ppt_第1页
第1页 / 共169页
数据采集与接口技术.ppt_第2页
第2页 / 共169页
数据采集与接口技术.ppt_第3页
第3页 / 共169页
数据采集与接口技术.ppt_第4页
第4页 / 共169页
数据采集与接口技术.ppt_第5页
第5页 / 共169页
数据采集与接口技术.ppt_第6页
第6页 / 共169页
数据采集与接口技术.ppt_第7页
第7页 / 共169页
数据采集与接口技术.ppt_第8页
第8页 / 共169页
数据采集与接口技术.ppt_第9页
第9页 / 共169页
数据采集与接口技术.ppt_第10页
第10页 / 共169页
数据采集与接口技术.ppt_第11页
第11页 / 共169页
数据采集与接口技术.ppt_第12页
第12页 / 共169页
数据采集与接口技术.ppt_第13页
第13页 / 共169页
数据采集与接口技术.ppt_第14页
第14页 / 共169页
数据采集与接口技术.ppt_第15页
第15页 / 共169页
数据采集与接口技术.ppt_第16页
第16页 / 共169页
数据采集与接口技术.ppt_第17页
第17页 / 共169页
数据采集与接口技术.ppt_第18页
第18页 / 共169页
数据采集与接口技术.ppt_第19页
第19页 / 共169页
数据采集与接口技术.ppt_第20页
第20页 / 共169页
亲,该文档总共169页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据采集与接口技术.ppt

《数据采集与接口技术.ppt》由会员分享,可在线阅读,更多相关《数据采集与接口技术.ppt(169页珍藏版)》请在冰点文库上搜索。

数据采集与接口技术.ppt

第2章智能仪器的数据采集通道及接口技术,第1节模拟信号的输入及A/D转换器第2节传感器输出信号的滤波及放大电路第3节多路转换器与采样/保持电路,第1节模拟信号的输入及A/D转换器,模拟信号输入通道的作用是将由传感器送来的模拟量进行电平转换、滤波、放大、采样保持、模/数转换之后,输入微处理器中。

完整的模拟信号输入通道由滤波器、放大器、采样/保持器、模/数转换器等组成,当然也有只需要其中部分器件的模拟信号输入通道。

在每个系统中需要采样的点数及要求的转换精度和速度不同,所以在一个数据采集系统中,可能会有多种转换方式。

一、模拟信号输入通道的工作方式,1、单通道不带采样/保持器的A/D转换这种电路适合于输入信号变化缓慢的场合,其转换速度一般,精度较高,方框图如图2-1所示。

图2-1单通道不带采样保持器的A/D转换电路,2、单通道带采样/保持器的A/D转换这种转换电路的转换精度很高,速度快,适合于高精度的数字转换电路,其方框图如图2-2所示。

图2-2单通道带采样保持器的A/D转换电路,3多通道A/D转换每个通道都带有自己的采样/保持器以及放大器、滤波器、A/D转换电路,其方框图如图2-3所示。

图2-3多通道带采样保持器的A/D转换电路,4多通道共享A/D转换这种采样输入形式,适合于多种信号的转换精度、转换速度要求基本一致的场合,它占用CPU的输入口较少,CPU对每个通道的访问,可以由软件决定,也可以由硬件决定,是一种比较经济的工作方法。

其转换框图如图2-4所示。

图2-4多通道带采样保持器共享A/D转换电路,5多通道共享采样/保持器与A/D转换器这种A/D转换输入方式适合于对同一信号不同量程的A/D转换,它也比较经济,占用CPU输入口少,因而可以更有效地利用CPU的输入口。

尤其对于那些接口有限的微型机,这种方式更有效。

CPU对各路通道的访问采用软件控制,由多路转换开关进行切换。

其框图如图2-5所示。

图2-5多通道带采样保持器共享A/D转换电路,项目一、热电偶温度检测,1)根据电路图搭建电路,分析各器件的作用(4节课)2)设计并制作热电偶数据采集及处理电路板(10节课)3)焊接热电偶数据采集处理板(2节课),撰写热电偶数据采集及处理实验报告,要求分析电路图中各环节的作用及参数选择。

分析是否能采用其他滤波电路?

(业余时间),二、模拟/数字转换器(A/D)A/D转换器过程:

(1)采样数据离散:

每隔一定时间对输入的连续信号进行采样

(2)量化:

将采样的信号取整量化(小于q/2舍去)量化使信号失真,影响系统精度和平滑所以要精确选择A/D转换器,项目训练:

传感器信号滤波及放大,项目训练:

传感器信号滤波及放大调试地点:

电工电子实验室根据所给图示连接并验证传感器信号滤波及放大,使输出产生15V信号要求能根据电路图进行电路连接,会分析电路中元器件作用,能测出几个关键点参数,热电偶温度检测项目训练应掌握与思考的内容,1)滤波电路作用,有哪些滤波电路?

2)各种电容在滤波电路中的作用3)电容、电阻的认识4)会分析电路图中各环节的作用及参数选择。

5)会根据检测的物理量设计前置放大电路原理图?

6)会根据设计的原理图绘制pcb板及选择元件封装7)学会调试你设计的电路,交项目训练报告,内容包括:

1)传感器信号滤波及放大电路功能及工作原理2)电路中各环节的作用3)电路中各参数的选择4)pcb板的一般绘制规则5)项目训练总结,报告书写基本要求:

先总体写。

再分部写(或先分部写,再总体写)写清所用电路原理、在本电路中的作用。

达到目的:

通过你的撰写,使阅读者能明白整个电路的作用及各环节原理。

如滤波电路分析,整流电路是将交流电变成直流电的一种电路,但其输出的直流电的脉动成分较大,而一般电子设备所需直流电源的脉动系数要求小于001故整流输出的电压必须采取一定的措施尽量降低输出电压中的脉动成分,同时要尽量保存输出电压中的直流成分,使输出电压接近于较理想的直流电,这样的电路就是直流电源中的滤波电路。

常用滤波电路主要有下列几种:

电容滤波电路,这是最基本的滤波电路;型RC滤波电路;型LC滤波电路;电子滤波器电路。

滤波原理:

单向脉动性直流电压的特点如图1所示,是单向脉动性直流电压波形,可分解成交流和直流两部分。

在电源电路的滤波电路中,利用电容器的“隔直通交”的特性和储能特性,或者利用电感“隔交通直”的特性可以滤除电压中的交流成分。

图1单向脉动电压分解,本电路采用型RC滤波电路。

C1、R1和C3构成型的RC滤波电路,电路中的C1、C3是滤波电容,R1是滤波电阻。

型RC滤波电路原理如下:

(1)从整流电路输出的电压首先经过C1的滤波,将大部分的交流成分滤除,然后再加到由R1和C3构成的滤波电路中。

加大C1容量可以提高滤波效果。

但是C1太大后,在开机时对C1的充电时间很长。

C3的容抗与R1构成一个分压电路,因C3的容抗很小,所以对交流成分的分压衰减量很大,达到滤波目的。

对于直流电而言,由于C3具有隔直作用,所以R1和C3分压电路对直流、不存在分压衰减的作用,这样直流电压通过R1输出。

(2)在R1大小不变时,加大C3的容量可以提高滤波效果,在C3容量大小不变时,加大R1的阻值可以提高滤波效果。

但是,滤波电阻R1的阻值不能太大,因为流过负载的直流电流要流过R1,在R1上会产生直流压降,使直流输出电压减小。

R1的阻值越大,或流过负载的电流越大时,在R1上的压降越大,使直流输出电压越低。

此电路也可采用型LC滤波电路替换。

单片机程序设计语言单片机汇编语言与C语言程序设计对照C语言程序设计知识,补充内容:

C51程序设计基础,单片机程序设计语言:

机器语言、C语言、汇编语言,机器语言机器可以识别的语言7401780238汇编语言:

由指令助记符书写的语言如:

MOVA,#01HMOVR0,#02HADDA,R0C语言:

通用程序设计语言,由函数组成voidmain()intm;m=1+2;,机器语言:

计算机可以识别,直接面向硬件、程序代码短、可直接运行、运行速度快、但难懂、难记、开发慢;汇编语言:

必须“翻译”成机器语言,直接面向硬件、运行速度快、但通用性差、不易移植;C语言:

使用了与人的思维更接近的关键字和操作函数,容易理解,通用性好、易移植。

应用C语言设计单片机程序可以大大加快开发速度,是目前开发人员用的最多的一种单片机开发语言。

单片机汇编语言与C语言程序设计对照,例将外部RAM的000BH和000CH单元的内容相互交换。

用汇编语言编程,汇编程序如下:

ORG000HMOVP2,#00H;送八位地址至P2口MOVR0,#0BH;R0=0BHMOVR1,#0CH;R1=0CHMOVXA,R0;A=(000BH)MOV20H,A;(20H)=000BHMOVXA,R1;A=(000CH)XCHA,20H;(20H)AMOVXR1,AMOVA,20HMOVXR0,A;交换后的数据送各单元SJMP$END,C程序,#include/绝对地址访问头文件voidmain(void)charc;/定义字符型变量do/dowhile(表达式)循环c=XBYTE11;XBYTE11=XBYTE12;XBYTE12=c;while

(1)在程序中,用#include即可使用其中声明的宏来访问绝对地址。

从上述两种语言编程实例看,应用C语言编写程序有如下优点:

1)不要求了解处理器的指令集,也不必了解存储器的结构。

2)寄存器分配和寻址方式由编译器管理,编程时不需要考虑存储器的寻址等。

3)可使用与人的思维更接近的关键字和操作函数。

4)可使用C语言中库文件的许多标准函数。

5)通过C语言的模块化编程技术,可以将已编制好的程序加入到新的程序中。

6)C语言编译器几乎适用于所有的目标系统,已完成的软件项目可以很容易地转移到其它微处理器和环境中。

汇编语言编制的每一个程序都与计算机的某一条具体指令对应,所以必须熟悉单片机的指令系统。

据统计有经验的程序员用汇编语言、高级语言编制的程序译成机器语言后,长度比较上:

高级语言长汇编语言15%200%;执行时间比较上:

高级语言增长汇编语言50%300%。

对反应灵敏、控制及时,实时检测等控制系统都是用汇编语言和C语言联合编写的。

对时钟要求严格时,使用汇编语言是唯一的方法。

有资料证明,最好的C51编程手,应该是从从事汇编语言转移过来的编程高手。

复习:

C语言的基本数据类型,数据类型位数字节数值域bit101signedchar81-128+127unsignedchar810255enum162-32768+32767signedshort162-32768+32767unsignedshort162065535signedint162-32768+32767unsignedint162065535,数据类型位数字节数值域signedlong324-2147483648-2147483647unsignedlong32404294967295float3240.175494E-380.402823E+38sbit101sfr810255sfr16162065535,C语言的缺陷无边界出错检查、运算符较多。

变量用来存放数据,运算符用来处理数据。

运算符分算术运算、关系运算、逻辑运算、赋值运算、逗号运算符、条件运算符、位运算符、指针运算符等。

运算符范例说明+a+ba变量值和b变量值相加-a-ba变量值和b变量值相减*a*ba变量值乘以b变量值/a/ba变量值除以b变量值%a%b取a变量值除以b变量值的余数+a+a的值加1,即a=a+1-a-a的值减1,即a=a-1算术运算符结果具体的值,复习:

C语言的基本运算符,运算符范例说明=a=6将6赋值给a变量,即a变量值等于6+=a+=b等同于a=a+b,将a和b相加的结果又存回a-=a-=b等同于a=a-b,将a和b相减的结果又存回a*=a*=b等同于a=a*b,将a和b相乘的结果又存回a/=a/=b等同于a=a*b,将a和b相除的结果又存回a%=a%=b等同于a=a%b,a值除以b值的余数又存回a赋值运算符,结果具体的值,运算符范例说明ab测试a是否大于b=a=b测试a是否大于或等于b=a=b测试a是否小于或等于b!

=a!

=b测试a是否不等于b关系运算符结果某种关系的真、假(“1”、“0”),运算符范例说明&a&ba和bAND,两个变量都是“真”,结果才为“真”否则结果为“0”aba和b作逻辑OR,只要有任何一个变量为“真”,结果就为“真”!

!

a将a变量的值取反,即原来为“真”则变“假”,为“假”则变为真逻辑运算符运算结果真、假(“1”、“0”),运算符范例说明ab将a按位右移b个位,左侧补“0”,溢出舍去ab将a按位左移b个位,右侧补“0”,溢出舍去aba和b的按位作OR运算&a&ba和b的按位作AND运算aba和b的按位作XOR运算a将a的每一位取反逻辑操作&a=&b将b变量的地址存入a寄存器*a用来取寄存器所指地址内的值指针运算,条件运算符:

表达式1?

表达式2:

表达式3条件运算符表达式的运算规则:

如果表达式1的值为真,那么整个表达式的值就是表达式2的值,否则是表达式3的值。

各种运算符时,要考虑运算符的优先级及结合性。

运算符的优先级如下:

2、C程序的流程控制,#define宏名字符串以一个宏名称来代表一个字符串,即当程序任何地方使用到宏名称时,则将以代表的字符串来替换。

宏的定义可以是一个常数,表达式,或含有参数的表达式都可,在程序中如果多次使用宏,则会占用较多的内存,但执行速度较快。

范例:

#defineucharunsignedchar/用uchar代替unsignedchar#defineunitunsignedint/用unit代替unsignedchar注意:

宏定义不是C程序的语句,所以后面不能有分号,若有分号会发生连同分号一起置换,则会出错。

如#definePI3.141596;area=PI*r*r;置换后area=3.141596;*r*r;出错。

if语句(Keil软件的使用),1if(条件表达式)动作如果条件表达式的值为真(非零数),则执行内的动作,如果条件表达式为假,则略过该动作而继续往下执行。

voidDelayX1ms(uintcount)uintj;while(count-!

=0)for(j=0;j72;j+);,voidIfDemol(void)uchari,j;intDisplayState=1;ucharcodeDISPLAY_TABLE10=0x88,0xEB,0x4C,0x490x2B,0x19,0x18,0xCB,0x08,0x09,0x0A,0x38,0x9C,0x68;,if(DisplayState10)for(i=0;i5;i+)j=5*DisplayState;P2=DISPLAY_TABLE10j+i;P1=0X01i;DelayX1ms(3);,作业:

复习C语言9种语句的使用。

熟悉“Keil软件的使用”。

2、if(条件表达式)动作1else动作2如果条件表达式为真,则执行动作1,略过else的部分,接着往下执行,如果条件表达式为假,则略过if的部分而执行else的动作2,然后再往下执行。

范例IfDemo2.C(C51程序),3、if(条件表达式1)if(条件表达式2)if(条件表达式3)动作Aelse动作Belse动作Celse动作D动作A:

条件表达式1,2,3都成立时才会执行。

动作B:

条件表达式1,2成立,但条件表达式3不成立时才会执行。

动作C:

条件表达式1成立,条件表达式2不成立时才会执行。

动作D:

条件表达式1不成立时才会执行。

范例IfDemo3.C,4、if(条件表达式1)动作Aelseif(条件表达式2)动作Belseif(条件表达式3)动作Celse动作D动作A:

条件表达式1成立时立即执行。

动作B:

条件表达式1不成立,但条件表达式2成立时才会执行。

动作C:

条件表达式1,2不成立,条件3成立时才会执行。

动作D:

是条件表达式1,2,3都不成立时才会执行。

switch-case语句switch(条件表达式)case条件值1:

动作1break;case条件值2:

动作2break;case条件值3:

动作3break;default:

动作4,switch内的条件表达式的结果必须为整数或字符。

Switch用条件表达式的值来与各case的条件值对比,如果与某个条件值相符合,则执行该case的动作,之后一定要写break退出循环。

如果所有的条件值都不符合,则执行default的动作,每一个动作之后一定要写break,否则会继续执行。

另外case之后的条件值必须是数据常数,不能是变量,而且不可以重复,即条件值必须各不同,如果有数种case所做的动作一样时,也可以写在一起,即上下并列。

一般当程序必须作多选1时,可以采用switch语句。

break:

是跳出循环的命令,任何由switch、for、while、do-while构成的循环,都可以用break来跳出。

必须注意的是break一次只能跳出一层循环,通常都和if连用,当某些条件成立后就跳出循环。

default:

当所有case的条件值都不成立时,就执行default所指定的动作,作完后也要使用break指令跳出switch循环。

范例SwitchDemo.c,while循环语句while(条件表达式)动作先测试条件表达式是否成立,当条件表达式为真时,则执行循环内动作,做完后又继续跳回条件表达式作测试,如此反复直到条件表达式为假为止,使用时要避免条件永远为真,造成死循环。

范例whileDemo.c,do-while循环语句do动作while(条件表达式);先执行动作后,再测试条件表达式是否成立。

当条件表达式为真,则继续回到前面动作,如此反复直到条件表达式为假为止,不论条件表达式的结果为何,至少会做一次动作,使用时要避免条件永远为真,造成死循环。

范例DowhileDemo.c,for循环语句for(表达式1;表达式2;表达式3)动作表达式1:

通常是设定起始值。

表达式2:

通常是条件判断式,如果条件为真时,则执行动作,否则终止循环。

表达式3:

通常是步长表达式,执行动作完毕后,必须再回到这里做运算,然后再到表达式2做判断。

范例ForDemo.c,函数(FUNCTION)数据类型函数名称(数据类型参数1,数据类型参数2,.)所谓函数,即子程序,也就是“语句的集合”。

就是说把经常使用的语句群定义为函数,在程序用到时调用,这样就可以减少重复编写程序的麻烦,也可以减少程序的长度。

当一个程序太大时,建议将其中的一部分改用函数的方式比较好,因为大程序过于繁杂容易出错,而小程序容易调试,也易于阅读和修改。

使用函数的注意事项1、函数定义时要同时声明其类型;2、调用函数前要先声明该函数;3、传给函数的参数值,其类型要与函数原定义一致;4、接受函数返回值的变量,其类型也要与函数一致。

函数的声明voidfunctionl(void)此函数无返回值,也不传参数。

voidfunction2(unsignchari,intj)此函数无返回值,但需要unsignchar类型的i参数和int类型的j参数。

unsigncharfunction3(unsignchari)此函数有unsignchar类型的返回值给原调用程序。

函数的返回值return是用来使函数立即结束以返回原调用程序的指令,而且可以把函数内的最后结果数据传回给原调用程序。

范例FunctionDemo1.c,/*-REG51.HHeaderfileforgeneric80C51and80C31microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.-*/*BYTERegister*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;,数据类型存储类型及存储区特殊功能寄存器(SFR)存储器模式函数的使用KeilC51的代码效率使用C51的技巧C51使用规范,第二讲C51对标准C语言的扩展,数据类型C51具有标准C语言的所有标准数据类型,除此之外,为了更加有效的利用8051结构,还加入了以下特殊的数据类型bit位变量值为0或1。

sbit从字节中声明的位变量0或1。

sfr特殊功能寄存器,sfr字节地址为0255sfr16同sfr,只是sfr字地址为065535,bit、sbit、sfrs和sfr16数据类型专门用于8051硬件和C51编译器,并不是标准C语言的一部分,不能通过指针进行访问。

bit、sbit、sfrs和sfr16数据类型用于访问8051的特殊功能寄存器,例如sfrP0=0x80,表示声明变量P0,并为其分配特殊功能寄存器地址0x80。

当结果为不同的数据类型时,C51编译器自动转换数据类型,例如位变量在整数分配中就被转换成一个整数。

除了数据类型的转换之外,带符号变量的符号扩展也是自动完成的。

存储类型及存储区,1、存储类型及存储区描述C51编译器支持8051及其扩展系列,并提供对8051所有存储区的访问。

存储区可分为内部数据存储区,外部数据存储区以及程序存储区。

8051CPU内部的数据存储区是可读写的,8051派生系列最多可有256字节的内部存储区,其中低128字节可直接寻址,高128字节(从0x80到0xFF)只能间接寻址,从20H开始的16字节可位寻址。

内部数据区又可分为3个不同的存储类型:

data、idata、bdata。

外部数据也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。

C51编译器提供两种不同的存储类型xdata和pdata访问外部数据。

程序CODE存储区是只读不写的。

程序存储区可能在8051CPU内或者在外部或者内外都有,具体要看设计时选择的CPU的型号来决定程序存储区在CPU内、外分布的情况;及根据程序容量决定是否需要程序存储器扩展。

C51程序设计时,每个变量可以明确地分配到指定的存储空间,定义变量时参考表3-4。

对内部存储器的访问比对外部存储器的访问快许多,因此应当将频繁使用的变量放在内部数据存储器中,而把较少使用的变量放在外部数据存储器中。

各存储区的描述如表所示。

表存储区描述,2、存储类型及存储区使用举例1)DATA区:

DATA区声明中的存储类型标识符为data。

DATA指低128字节的内部数据区。

DATA区可直接寻址,所以对其存取是最快的,应该把经常使用的变量放在DATA区;但是DATA区的空间是有限的,DATA区除了包含程序变量外,还包括了堆栈和存储器组。

举例:

unsignedchardatasystemstatus=0;/定义无符号字符型变量systemstatus,初值为0使其存储在内部低128字节unsignedintdataunit_id2;/定义无符号整型数组dataunit_id,存储在内部RAMchardatainp_string16;/定义字符型变量inp_string,使其存储在内部低128字节,标准变量和用户自声明变量都可存储在DATA区中,只要不超过DATA区范围即可。

2)BDATA区:

BDATA区声明中的存储类型标识符为bdata,指内部可位寻址的16字节储区(20H2FH)可位寻址变量的数据类型。

BDATA区实际就是DATA区中的位寻址区,在这个区声明变量就可进行位寻址。

位变量的声明对状态寄存器来说是十分有用的,因为它可能仅仅需要使用某一位,而不是整字节。

在BDATA区中声明的位变量和使用位变量的例子:

unsignedcharbdatastatus_byte;/定义无符号字符型变量status_byte,使其存储20H到2FH区,可进行位寻址。

unsignedintbdatastatus_word;/定义无符号整型变量status_word,使其存储20H到2FH区unsignedlongbdatastatus_dword;/定义无符号长整型变量status_dword,使其存储20H到2FH区sbitstart_flag=status_byte4;/将status_byte的第4位赋值给位变量sbitstart_flag,举例,if(status_word15)start_flag=0;start_flag=1;/否则stat_flag=1,3)IDATA区:

IDATA区声明中的存储类型标识符为idata指内部的256字节的存储区,但是只能间接寻址,速度比直接寻址慢。

举例如下:

unsignedcharidatasystem_status=0;unsignedintidataunit_id2;charidatainp_string16;floatidataoutp_value;,4)PDATA和XDATA区:

PDATA和XDATA区属于外部存储区。

外部存储区是可读写的存储区,最多可有64KB,当然这些地址不是必须用作存储区的。

访问外部数据存储区比访问内部数据存储区慢,因为外部数据存储区是通过数据指针加载地址来间接访问的。

在这两个区,变量的声明和在其他区的语法是一样的,但

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2