单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章_第1页
单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章_第2页
单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章_第3页
单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章_第4页
单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、第10章 A/D转换单片机原理及应用系统设计第10章 A/D转换单片机原理及应用系统设计自然界中的物理量大多是模拟信号,如温度、压力、位移、转速等,单片机在采集模拟信号时,一般先根据实际的物理量借助相应的传感器将其转为电信号(电压或电流)。然后再将电信号转换为对应的数字量输入到单片机进行信号处理,在这过程中,把实现模拟量转换为数字量的器件称为模数转换器,也称A/D转换器。第10章 A/D转换自然界中的物理量大多是模拟信号,如温度、压力、位移、转速等,10.1 A/D转换原理及性能指标一般的A/D转换过程包括三个部分:采样保持、量化和编码。首先,对输入的模拟电压信号采样即将模拟信号在时间上离散化

2、,结束后进入保持时间。其次,在这段时间内将采样的电压量转化为数字量即在幅度上离散化。最后,将每个量化后的样值用一定的二进制码来表示转换结果。10.1 A/D转换原理及性能指标一般的A/D转换过程包为确保转换结果的精确度,A/D转换器必须满足一定的转换精度和速度。转换精度和转换速度是衡量A/D转换器的重要技术指标。此外还有分辨率、量程、量化误差、线性度等。1. 分辨率分辨率表示A/D转换器对微小输入信号变化的敏感程度,通常用转换后数字量的位数来表示。N位转换器,其数字量变化范围为02N-1。例如8位A/D转换器,输入5V满量程电压,则分辨率为5/28=19.5mV。为确保转换结果的精确度,A/D

3、转换器必须满足一定的转换精度和3. 量化误差量化误差是A/D转换器实际输出的数字量与理论输出数字量之间的差值。一般是由于A/D转换器的分辨率有限引起的。量化误差在1/2LSB(最低有效位)之间。2. 转换精度转换精度是指与数字输出量所对应的模拟输入量的实际值与理论值之间的差值。A/D转换电路中与每个数字量对应的模拟输入量并非是一个单一的数值,而是一个范围值 ,其中 的大小理论上取决于分辨率。定义 为数字量的最小有效位LSB。3. 量化误差2. 转换精度4.转换时间转换时间是A/D转换器完成一次转换所需的时间,单位为SPS(Sample Per Second)每秒采样点数,常称为采样频率。一般转

4、换速率越快越好,常见的有高速(转换时间1s),中速(转换时间1ms)和低速(转换时间1s)等。在实际应用中,应从系统数据总的位数、精度要求、输入模拟信号的范围及输入信号极性等方面综合考虑A/D转换器的选用。4.转换时间在实际应用中,应从系统数据总的位数、精度要求、输10.2 IAP15W4K58S4单片机A/D模块的结构IAP15W4K58S4单片机集成有8路10位高速电压输入型模拟转换器(ADC),转换方式为逐次逼近式,频率可达300kHZ(30万次/秒)。10.2.1 A/D转换器的结构IAP15W4K58S4单片机ADC(A/D转换器)的结构如下图10-1所示。其输入通道与P1端口复用,

5、系统上电复位后,P1口默认为弱上拉I/O口,可通过设置P1ASF寄存器的相应位将对应引脚设置为ADC输入通道。10.2 IAP15W4K58S4单片机A/D模块的结构I 图10-1 IAP15W4K58S4单片机ADC转换器结构图 图10-1 IAP15W4K58S4单片机ADC转换器IAP15W4K58S4单片机的ADC由多路选择开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC控制寄存器(ADC_CONTR)等构成。IAP15W4K58S4单片机的ADC是逐次比较型ADC,由一个比较器和D/A转换器构成,通过逐次比较,从最高位(MSB)

6、开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模量对应值,转换结束,将转换结果保存到ADC转换结果寄存器ADC_RES和ADC_RESL,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换结束标志位ADC_FLAG,以供程序查询或发出中断申请。IAP15W4K58S4单片机的ADC由多路选择开关、比较器8位逐次逼近A/D转换器,若参考电压为5V,档输入电压为2.52V时,输出的数字量是什么?分析:参考电压为5V的8位A/D转换,其量化电平为8位逐次逼近A/D转换器,若参考电压为5V,档输入电压为2.10.2.2 A/D转换器的相关

7、寄存器IAP15W4K58S4单片机的ADC相关寄存器主要有:P1口模拟功能控制寄存器P1ASFADC控制寄存器ADC_CONTRA/D转换结果寄存器ADC_RES、ADC_RESL10.2.2 A/D转换器的相关寄存器IAP15W4K510.2.2 A/D转换器的相关寄存器1. P1口模拟功能控制寄存器P1ASF寄存器P1ASF控制P1口8个I/O的功能。P1ASF寄存器(地址为9DH,复位值为0000 0000B)各位定义如表10-1所示:P1nASF(n=07),P1.0P1.7为功能控制位:当P1nASF=0,对应引脚为基本I/O。当P1nASF=1,对应引脚为ADC的相应输入通道。P

8、1ASF寄存器不能位寻址,可采用字节操作。实际程序中可采用控制位与1相或实现置1的原理,如执行语句P1ASF | 1=0X01,使P1.作为模拟输入通道。10.2.2 A/D转换器的相关寄存器1. P1口模拟功2. ADC控制寄存器ADC_CONTRADC_CONTR寄存器主要用于设定ADC转换输入通道、转换速度和启动、转换结束标志等。ADC_CONTR寄存器(地址为BCH,复位值为0000 0000B)的各位定义如表10-2所示:ADC_POWER:ADC 电源控制位。 ADC_POWER =0,关闭ADC 电源。 ADC_POWER =1,打开ADC电源。2. ADC控制寄存器ADC_CO

9、NTRADC_POWER:建议进入空闲模式和掉电模式前,将ADC电源关闭,可降低功耗。启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后可关闭A/D电源,也可不关闭。初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议在转换结束之前,不改变任何I/O口的状态,这样有利于高精度A/D 转换。IAP15W4K58S4单片机的参考电压源是输入工作电压Vcc,一般不用外接参考电压源。若Vcc不稳定,则在8路A/D转换的任意一个通道外接一个稳定的参考电压源,来计算出此时的工作电压Vcc,再计算出其他A/D转换通道的电压。建议进入空闲模式和掉电模式前,将ADC

10、电源关闭,可降低功耗。ADC_FLAG: A/D转换结束标志位。 ADC_FLAG=0,ADC转换没有结束。 ADC_FLAG=1,ADC转换结束。不管A/D 转换是工作于中断还是查询方式,当A/D转换结束后,必须通过软件将ADC_FLAG清0。ADC_START: ADC转换启动控制位。 ADC_START=0,ADC转换停止。 ADC_START=1,ADC转换开始。ADC_FLAG: A/D转换结束标志位。单片机原理及应用系统设计-基于STC可仿真的IAP15W4K58S4系列课件第10章3. ADC转换结果调整寄存器位ADRJADC转换结果调整寄存器位ADRJ位于寄存器CLK_DIV/

11、PCON中,用于控制ADC转换结果存放的位置。其各位定义如表10-5所示。ADRJ:ADC转换结果存储格式调整控制位ADRJ=0:ADC_RES存放高8位ADC结果, ADC_RESL存放低2位ADC结果。ADRJ=1:ADC_RES存放高2位ADC结果, ADC_RESL存放低8位ADC结果3. ADC转换结果调整寄存器位ADRJADRJ:ADC4. A/D转换结果寄存器ADC_RES、ADC_RESL 特殊功能寄存器ADC_RES和ADC_RESL寄存器用于保存A/D转 换结果。 其存储格式如下表10-6和9-7所示。4. A/D转换结果寄存器ADC_RES、ADC_RESLA/D转换结果

12、计算公式如下: ADRJ=0,取10位结果(ADC_RES7:0,ADC_REL1:0) D =1024*Vin/VccADRJ=0,取8位结果(ADC_RES7:0,)=256*Vin/VccADRJ=1,取10位结果(ADC_RES1:0,ADC_REL7:0,)D =1024*Vin/Vcc 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。A/D转换结果计算公式如下:5. 与A/D转换中断相关的寄存器(1)中断允许寄存器IE中断允许寄存器IE地址为A8H,可位寻址。格式如表10-8所示:EA:CPU的中断总控制标志 EA=1,CPU 允许

13、中断, EA=0,CPU 屏蔽所有的中断申请。 EADC: A/D转换中断允许位 EADC=1 ,允许A/D转换中断, EADC=0 ,禁止A/D转换中断。5. 与A/D转换中断相关的寄存器(1)中断允许寄存器IE(2)中断优先级控制寄存器IP中断优先级控制寄存器地址为B8H,可位寻址。其格式如表10-9所示:PADC:A/D 转换中断优先级控制位。 当PADC=0 时,A/D转换中断为最低优先级中断(优先级0) 当PADC=1 时,A/D转换中断为最高优先级中断(优先级1)(2)中断优先级控制寄存器IPPADC:A/D 转换中断优先10.3 IAP15W4K58S4单片机A/D转换的应用IA

14、P15W4K58S4单片机A/D转换的应用编程要点如下:(1)设置ADC_CONTR寄存器中的ADC_POWER=1,打开ADC电源。(2)延时大约1ms,等待ADC内部电源稳定。(3)设置P1ASF寄存器相关位,选择P1口相应引脚为A/D转换模拟输入通道。(4)设置ADC_CONTR寄存器中的CHS2CHS0,选择ADC输入通道。(5)设置CLK_DIV寄存器中的ADRJ,选择转换结果存储格式。(6)启动ADC。(7)若采取查询法,查询ADC_FLAG位判断转换是否完成,完成则读取转 换结果。若采取中断法,开ADC中断,在中断服务程序中读取转换结 果并清除ADC_FLAG位。10.3 IAP

15、15W4K58S4单片机A/D转换的应用【例1】 利用IAP15W4K58S4单片机中的ADC转换器对输入电压进行测量并显示在数码管上。请编写单片机程序。解:C语言源程序代码如下:#include stc15w4k32s4.h /包含单片机头文件#include tm1638.h /包含数码管显示头文件#include /包含该文件可以使用_nop_()函数#define VCC 5000 /定义电源电压#define ADC_POWER 0 x80 / ADC控制位定义,ADC电源控制位#define ADC_FLAG 0 x10 /ADC转换完成标记#define ADC_START 0

16、x08 /ADC开始转换标记#define ADC_SPEEDLL 0 x00 /ADC转换速率540时钟#define ADC_SPEEDL 0 x20 /ADC转换速率360时钟#define ADC_SPEEDH 0 x40 /ADC转换速率180时钟#define ADC_SPEEDHH 0 x60 /ADC转换速率90时钟10.3 IAP15W4K58S4单片机A/D转换的应用【例1】 利用IAP15W4K58S4单片机中的ADC转换器/* ADC通道定义 */#define ADC_CHANNEL0 0 x00 /转换通道P1.0#define ADC_CHANNEL1 0 x01

17、 /转换通道P1.1#define ADC_CHANNEL2 0 x02 /转换通道P1.2#define ADC_CHANNEL3 0 x03 /转换通道P1.3#define ADC_CHANNEL4 0 x04 /转换通道P1.4#define ADC_CHANNEL5 0 x05 /转换通道P1.5#define ADC_CHANNEL6 0 x06 /转换通道P1.6#define ADC_CHANNEL7 0 x07 /转换通道P1.7/* ADC端口模拟功能 */#define P1ASF_00 x01 /设置P1.0口为ADC端口#define P1ASF_10 x02 /设置

18、P1.1口为ADC端口#define P1ASF_20 x04 /设置P1.2口为ADC端口#define P1ASF_30 x08 /设置P1.3口为ADC端口#define P1ASF_40 x10 /设置P1.4口为ADC端口#define P1ASF_50 x20 /设置P1.5口为ADC端口#define P1ASF_60 x40 /设置P1.6口为ADC端口#define P1ASF_70 x80 /设置P1.7口为ADC端口/* ADC通/* 定义全局变量 */unsigned char ADCCnt=0; unsigned int ADCResult=0;unsigned lo

19、ng int ADCSum=0;/* 函数声明 */void IO_Init(void); void ADC_Init(void);void ADC_Process(void);void Delay_ms(unsigned int ms);unsigned int ADC_GetResult(unsigned char ch);/* 定义全局变量 void main(void) /主函数 IO_Init(); /端口初始化ADC_Init(); /ADC初始化 TM1638_Init(); /TM1638初始化 while(1) ADC_Process(); /ADC数据采集并且处理 Dela

20、y_ms(10); /适当延时,无需采集过快 void main(void) void ADC_Process(void) / ADC数据处理函数 ADCSum+=ADC_GetResult(ADC_CHANNEL2); /从AD通道采集数据, / 并且进行累加 ADCCnt+; /计数器加1 if(ADCCnt=32) /如果累加到32个数据,则开始处理 ADCCnt=0; ADCSum=ADCSum5; /(ADCSum5)等价于(ADCSum/32), /对32个数据取平均 ADCSum=ADCSum*VCC/1024; /ADC=(Vin/Vref)*1024,根据 /ADC计算公式进

21、行转换 ADCResult=(unsigned int)ADCSum; /保存转换结果并进行类型转换, /方便显示 ADCSum=0; /清除AD暂存变量 ToDisplayBuf(ADCResult); /显示测量结果void ADC_Process(void) void Delay_ms(unsigned int ms) /延时函数 unsigned int i; while( (ms-) != 0) for(i = 0; i 580; i+); void ADC_Init(void) / ADC初始化函数P1ASF |=P1ASF_2; /P1.2口做为AD转换通道ADC_RES=0;

22、/ADC数据寄存器清零ADC_CONTR=ADC_POWER | ADC_SPEEDLL; /打开AD转换器 /电源,设置转换速率Delay_ms(2); /延时2ms,等待ADC上电稳定void Delay_ms(unsigned int ms)/*获取ADC转换的结果*/unsigned int ADC_GetResult(unsigned char ch) unsigned int ADC_Value; ADC_CONTR =ADC_POWER | ADC_SPEEDLL| ch | ADC_START; /启动ADC _nop_(); /延时 _nop_(); _nop_(); _no

23、p_(); while (!(ADC_CONTR & ADC_FLAG); /等待AD转换完成 ADC_CONTR &= ADC_FLAG; /清除转换完成标记 ADC_Value=ADC_RES; /读取ADC高八位 ADC_Value=(ADC_Value2)|ADC_RESL; /读取ADC低两位且数据 /合并 return ADC_Value; /返回数据 /*获取ADC转换的结果/*单片机IO端口模式初始化函数*/ void IO_Init(void) P2M1 &=( (15) | (16) | (17); /初始化P2.5,P2.6,P2.7口 /为准双向口P2M0 &=( (1

24、5) | (16) | (17); P1M1 |=( 12); /初始化P12为输入P1M0 &=( 12); P1M1 &=( (10) | (14) ); P1M0 &=( (10) | (14) ); /*单片机IO端口模式初【例2】利用IAP15W4K58S4单片机中的ADC内部基准对单片机的工作电压进行测量并显示在数码管上。解:C语言源程序代码如下: #define MAIN_Fosc 22118400L /定义主时钟 #include STC15Fxxxx.H #define DIS_DOT 0 x20 #define DIS_BLACK 0 x10 #define DIS_ 0

25、x11 #define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= (bitn) #define LED_TYPE 0 x00 /定义LED类型, 0 x00-共阴, 0 xff-共阳 #define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)/Timer 0 中断频率, 1000次/秒【例2】利用IAP15W4K58S4单片机中的ADC内部基准/*本地常量声明*/标准字库0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、black、/- 、H、J、K、L、N、o、P、U、t、G、Q、r、M、

26、y、0. 、1.、 2. 、/3. 、4. 、5.、 6. 、7.、8. 、9.、 -1u8 code t_display = 0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71,0 x00,0 x40,0 x76,0 x1E,0 x70,0 x38,0 x37,0 x5C,0 x73,0 x3E,0 x78,0 x3d,0 x67,0 x50,0 x37,0 x6e,0 xBF,0 x86,0 xDB,0 xCF,0 xE6,0 xED,0 xFD,0

27、x87,0 xFF,0 xEF,0 x46;u8 code T_COM = 0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80;/位码/*本地常量声明*/*IO口定义*/sbit P_HC595_SER = P40;/pin 14SER数据输入 P_HC595_RCLK = P54; /pin 12RCLk存储时钟P_HC595_SRCLK = P43; /pin 11SRCLK转移数据块/*本地变量声明*/u8 LED88; /显示缓冲u8 display_index; /显示位索引bit B_1ms; /1ms标志u8 msecond;u16 G

28、et_ADC10bitResult(u8 channel); /选择通道07/*IO口定义*/*主函数*/void main(void) u8 i; u16 j; P0M1 = 0; P0M0 = 0; /设置为准双向口 P1M1 = 0; P1M0 = 0; /设置为准双向口 P2M1 = 0; P2M0 = 0; /设置为准双向口 P3M1 = 0; P3M0 = 0; /设置为准双向口 P4M1 = 0; P4M0 = 0; /设置为准双向口 P5M1 = 0; P5M0 = 0; /设置为准双向口 P6M1 = 0; P6M0 = 0; /设置为准双向口 P7M1 = 0; P7M0 = 0; /设置为准双向口/*主函数*/*主函数*/ display_index = 0; P1ASF = 0; /对内部基准做ADC ADC_CONTR = 0 xE0; /90T, ADC上电 AUXR = 0 x80; /

温馨提示

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

评论

0/150

提交评论