1 / 38

第八章 A/D 转换模块

第八章 A/D 转换模块. 本节提要. 一、 A/D 转换基础知识 二、 ATD 模块简介 三、 ATD 模块寄存器 四、 ATD 模块编程范例. 本节提要. 一、 A/D 转换基础知识 二、 ATD 模块简介 三、 ATD 模块寄存器 四、 ATD 模块编程范例. ADC 概述. 微控制器处理的是离散量 ( 数字量 ) ,而现实中往往是连续量 ( 模拟量 ) 物理量如:温度 , 压力 , 湿度以及速度等等 传感器 将物理量转换为电信号 ( 电压 , 电流 ) 需要模拟 - 数字转换器将电信号转换为数字量以供微控制器处理. 基本概念.

zayit
Download Presentation

第八章 A/D 转换模块

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章 A/D转换模块 单片机原理与应用

  2. 本节提要 一、A/D转换基础知识 二、ATD模块简介 三、ATD模块寄存器 四、ATD模块编程范例 单片机原理与应用

  3. 本节提要 一、A/D转换基础知识 二、ATD模块简介 三、ATD模块寄存器 四、ATD模块编程范例 单片机原理与应用

  4. ADC概述 • 微控制器处理的是离散量 (数字量) ,而现实中往往是连续量 (模拟量) • 物理量如:温度, 压力,湿度以及速度等等 • 传感器 将物理量转换为电信号(电压, 电流) • 需要模拟-数字转换器将电信号转换为数字量以供微控制器处理 单片机原理与应用

  5. 基本概念 传感器 控制器 执行器 单片机原理与应用

  6. ADC 工作原理 + - • 将输入电压与若干等间距的参考电压进行比较 • 因此需要比较器 • Uin > Uref Uout=V+ ‘1’ • Uin < Uref Uout=0V ‘0’ Uin 1位ADC Uout Uref 单片机原理与应用

  7. ADC 工作原理 + + + - - - • 3 个比较器可将电压分成4 级 (以 2位来表示) Uout3 Uref3 Umax Rank3 Uout2 Uref3 Rank2 Uref2 Uref2 Rank1 Uout1 Uref1 Uref1 Rank0 Uin Umin Quiz1: For voltage in rank2, Uout1 = ? Uout2 = ? Uout3 = ? 单片机原理与应用

  8. ADC工作原理 + + + - - - • 2位ADC Uref R R D1 编码器 D0 R R Uin 8位 ADC, 需要多少个比较器? 单片机原理与应用

  9. ADC工作原理 + - Uin 逐次逼近寄存器 D/A 转换器 Uref 结果 • Flash Converter ADC • 优点: 速度极快 • 缺点: 非常复杂 • 逐次逼近式A/D转换器 单片机原理与应用

  10. ADC工作原理 逐次逼近式转换器转换过程 ( 4位 ) SA-ADC 完成一次转换至少需要 n 个时钟周期 单片机原理与应用

  11. ADC工作原理 + - Uin • 必须进行采样保持以避免输入电压在转换期间发生变化 单片机原理与应用

  12. ADC工作原理 通道选择寄存器 SA-ADC • 逐次逼近式转换器( SA-ADC ) • 非常快 • 比较复杂 • SA-ADC在单片机中较为常见 • 单片机中常见 • 典型为8-12位 • 具有多个多路复用的模拟通道 单片机原理与应用

  13. ADC 参数 • 转换位数(Bits) • 分辨率 = 2-n (8bits = 0.39%) • 转换速度(Speed) • 由工作时钟频率和转换位数确定 • 转换范围(Range) • 0~5V, 0~10V, -5V~+5V. Etc.. • 转换通道数(Channels) • Distinguish the channel and converter 单片机原理与应用

  14. 本节提要 一、A/D转换基础知识 二、ATD模块简介 三、ATD模块寄存器 四、ATD模块编程范例 单片机原理与应用

  15. S12单片机ADC特性 • 8/10/12位可选 • 转换速度较高,10位精度,单次转换时间为7usec • 采样时间可编程设置 • 多种转换模式:数据对齐方式、单次/连续转换、 转换结果比较 • 外触发控制 • 转换结束可产生中断 • 可用于8个模拟输入通道的模拟输入多路转换器. • 模拟/数字输入引脚复用 1~8 转换序列长度. • 多通道扫描 单片机原理与应用

  16. S12单片机ADC转换时间 Always 2 Clocks 2, 4, 8, 16 Clocks 转换时间计算举例: (假设A/D 时钟为2MHz,10位精度) 转换时间 = Initial Sample Time + Programmed Sample Time + Resolution Period = 2 + 2 + 10 = 14 A/D Clocks = 7uSec 单片机原理与应用

  17. S12单片机ADC模块框图 ADC 结果寄存器 参考电压 模拟 输入 通道 ADC 引脚可用于数字输入 单片机原理与应用

  18. 本节提要 一、A/D转换基础知识 二、ATD模块简介 三、ATD模块寄存器 四、ATD模块编程范例 单片机原理与应用

  19. ATD 模块寄存器 • 共27个寄存器 • 控制寄存器(ATDCTL0~ATDCTL5,6个) • 状态寄存器(ATDSTAT0~ATDSTAT1,2个 ) • 比较使能寄存器(ATDCMPE, 1个) • 比较方式寄存器(ATDCMPHT , 1个,) • 转换输入使能寄存器(ATDDIEN , 1个) • 转换结果寄存器(ATDDR0~ATDDR15,16个) 其中: 8位寄存器: ATDCTL0~ATDCTL5, ATDSTAT0 16位寄存器:其余 单片机原理与应用

  20. ATD Registers 1/12 ATD Control Register 0 (ATDCTL0) WRAP[3-0] - Wrap Around Channel Select 0 = Reserved X = 多通道转换模式 从ANx回绕到AN0 1≤x ≤ 15 仅在ATDCTL5的MULT=1时有效 单片机原理与应用

  21. ATD Registers 2/12 ATD Control Register 1 (ATDCTL1) 注:写ATDCTL1会终止当前转换序列 ETRIGSEL - External Trigger Source Select S12XS此位无效 ETRIGCH[3:0] - External Trigger Channel Select SMP_DIS - Discharge Before Sampling Bit 0=No discharge 1 = discharge SRES[1:0] - A/D Resolution Select 单片机原理与应用

  22. ATD Registers 3/12 ATD Control Register 2 (ATDCTL2) 注:写ATDCTL2会终止当前转换序列 AFFC - ATD Fast Flag Clear All 0 = 向CCF[n] 标志位写1则清零 1 =读ATD转换结果寄存器则CCF[n] 标志位清零(当比较功能被禁止) 写ATD转换结果寄存器则CCF[n] 标志位清零(当比较功能被使能) ETRIGE - External Trigger Mode Enable 0 = 禁止外部触发信号 1 = 使能外部触发信号 ICLKSTP - Internal Clock in Stop Mode Bit 0 = 停止模式下,停止当前转换,退出停止模式后ATD转换自动重新开始 1 = 停止模式下,可继续使用内部时钟进行ATD转换 ASCIE- ATD Sequence Complete Interrupt Enable 0 = 禁止ATD转换序列结束中断 1 = 使能ATD转换序列结束中断 ETRIGLE - External Trigger Level/Edge Control ETRIGP - External Trigger Polarity ACMPIE - Internal Clock in Stop Mode Bit 0 = 禁止比较中断 1 = 使能比较中断 单片机原理与应用

  23. ATD Registers 4/12 ATD Control Register 3 (ATDCTL3) 注:写ATDCTL3会终止当前转换序列 S8C, S4C,S2C, S1C - Conversion Sequence Length DJM - Result Register Data Justification 0=Left justified data in the result registers 1=Right justified data in the result registers FIFO - Result Register FIFO Mode 0=Conversion results are placed in the corresponding result register up to the selected sequence length. 1=Conversion results are placed in consecutive result registers (wrap around at end). FRZ[1:0] - Background Debug Freeze Enable 单片机原理与应用

  24. ATD Registers 5/12 PRS0-PRS4 Divide By 2 SYSTEM CLOCK 5-Bit Modulus Counter Prescaler A/D Clock ATD Control Register 4 (ATDCTL4) 注:写ATDCTL4会终止当前转换序列 PRS[4:0] - ATD Clock Prescaler SMP[2:0] - Sample Time Select 设置预分频因子时,0.25MHz≤AEDCLK ≤8.3MHz 采样时间长,采样点电平更准确的逼近外部信号电平 单片机原理与应用

  25. ATD Registers 6/12 ATD Control Register 5 (ATDCTL5) SCAN - Continuous Conversion Sequence Mode 0=Single conversion sequence 1=Continuous conversion sequences (scan mode) MULT - Multi-Channel Sample 0=Sample only one channel 1=Sample across several channels SC - Special Channel Conversion 0=Special channel conversions disabled 1=Special channel conversions enabled CD,CC,CB,CA - Analog Input Channel Select Code ATD启动: 写ATDCTL5会终止当前转换序列,并开始新一次转换 此后,若外部触发信号每次满足触发条件都会开始一次ATD转换 单片机原理与应用

  26. ADC 工作方式 • 单通道,单次转换 • 多通道,单次转换 • 单通道,序列转换模式 • 多通道,序列转换模式 • 特殊通道测试模式 单片机原理与应用

  27. ATD Registers 7/12 ATD Status Register 0 (ATDSTAT0) SCF - Sequence Complete Flag 0=Conversion sequence not completed 1=Conversion sequence has completed CC[3:0] - Conversion Counter 当前转换结果将写入的结果寄存器编号 例如: CC[3:0]=0110, 转换结果写入第6个结果寄存器 先入先出模式下,不被初始化,当计数到最大值回最小值 非先入先出模式下,转换开始和结束时被初始化为0 两种模式下终止ATD转换或开始新ATD转换均被清零 ETORF - External Trigger Overrun Flag 0=No External trigger over run error has occurred 1=External trigger over run error has occurred FIFOR- Result Register Over Run Flag 0=No over run has occurred 1=Overrun condition exists (result register has been written while associated CCFx flag was still set) 单片机原理与应用

  28. ATD Registers 8/12 ATD Compare Enable Register (ATDCMPE) CMPE[15:0] - Compare Enable for Conversion Number n (n= 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) of a Sequence 0=No automatic compare 1= Automatic compare of results for conversion n of a sequence is enabled • 对一个序列中第n次ATD转换结果进行比较,除CMPE[n]=1,还要完成如下设置: • 将比较阈值写入ATDDRn • 写ATDCPMHT的CMPHT[n]位选择比较方法 注:写ATDCMPE会终止当前转换序列 单片机原理与应用

  29. ATD Registers 9/12 ATD Status Register 2 (ATDSTAT2) CCF[15:0] - Conversion Complete Flag n (n= 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) 0=Conversion number n not completed or successfully compared 1=If (CMPE[n]=0): Conversion number n has completed. Result is ready in ATDDRn. If (CMPE[n]=1): Compare for conversion result number n with compare value in ATDDRn, using compare operator CMPGT[n] is true. (No result available in ATDDRn) • 出现以下任一情况,CCF[n]被清零: • 写ATDCTL5 • 当AFFC=0,向CCF[n]写1 • 当AFFC=1,且CMPE[n]=1,写ATDDRn 单片机原理与应用

  30. ATD Registers 10/12 ATD Input Enable Register (ATDDIEN) IEN[15:0] - ATD Digital Input Enable on channel x (x= 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) 0=Disable digital input buffer to ANx pin 1=Enable digital input buffer on ANx pin 通用I/O口AD口与ATD模块的模拟输入引脚复用 将某个模拟输入引脚作为通用输入引脚使用时,必须将对应IEN位置位 单片机原理与应用

  31. ATD Registers 11/12 ATD Compare Higher Than Register (ATDCMPHT) CMPHT[15:0] - Compare Operation Higher Than Enable for conversion number n (n= 15, 14, …, 2, 1, 0) of a Sequence 0= If result of conversion n is lower or same than compare value in ATDDRn, this is flagged in ATDSTAT2 1= If result of conversion n is higher than compare value in ATDDRn, this is flagged in ATDSTAT2 注:写ATDCMPHT会终止当前转换序列 单片机原理与应用

  32. ATD Registers 12/12- data format ATD Conversion Result Registers (ATDDRn) ATDDR0~ATDDR15 • 关闭比较操作时,ATD转换结果写入ATDDRn 要写入的ATDDRn的编号由ATDSTAT0的CC3~CC0转换计数给出 转换结果在ATDDRn中的放置位置与转换精度和结果对齐方式有关 • 使能比较功能时,ATD转换结果和比较阈值都总是12位,与SRES[1:0](ATDCTL1)无关 DJM=0 比较阈值左对齐 DJM=1 比较阈值右对齐 转换结果不放入结果寄存器,比较完成后丢失 单片机原理与应用

  33. 本节提要 一、A/D转换基础知识 二、ATD模块简介 三、ATD模块寄存器 四、ATD模块编程范例 单片机原理与应用

  34. ATD模块编程范例 • ATD模块编程方法 • ATD初始化:先写除ATD0CTL5外的控制寄存器,再写ATD0CTL5完成初始化,并启动转换; • ATD结果读取:通过查询ATD0STAT0中的SCF位或采用中断方式,确定转换完成,读取相关结果寄存器取得ATD转换结果。 • ATD模块编程范例 任务:分别对特殊通道VRH、VRL和(VRH+VRL)/2进行 ATD转换 单片机原理与应用

  35. ATD模块编程范例(续1) //******************************** // *S12X128 ATD模块范例程序* //******************************** #include <hidef.h> /* common defines and macros */ #include <mc9s12XS128.h> //SCI相关函数 //SCI初始化函数 void SCI_init(void); void SCISendChar(char c1); void SCISendString(char * pc2); void SCISendHex(char c1); unsigned char dtoa(char c1); //ATD相关函数 //ATD初始化函数 void ATD_init(void) ; 单片机原理与应用

  36. ATD模块编程范例(续2) /*******主程序********/ void main(void) { SCI_init(); ATD_init(); ATD0CTL5=0x45; //单次转换,单通道,选择特殊通道VRL while(!(ATD0STAT0&0x80)); //查询ATD是否完成 SCISendString("VRL="); SCISendHex(ATD0DR0H); SCISendString("\r\n"); ATD0CTL5=0x44; //单次转换,单通道,选择特殊通道VRH while(!(ATD0STAT0&0x80));//查询ATD是否完成 SCISendString("VRH="); SCISendHex(ATD0DR0H); SCISendString("\r\n"); ATD0CTL5=0x46; //单次转换,单通道,选择特殊通道(VRL+VRH)/2 while(!(ATD0STAT0&0x80));//查询ATD是否完成 SCISendString("(VRL+VRH)/2="); SCISendHex(ATD0DR0H); SCISendString("\r\n"); for(;;) { } } //END OF MIAN 单片机原理与应用

  37. ATD模块编程范例(续3) /****SCI相关函数****/ void SCI_init(void) { SCI0BDH=0; SCI0BDL=52; SCI0CR2=0x0C; } void SCISendChar(char c1) { while(SCI0SR1_TC==0); SCI0DRL=c1; } void SCISendString(char *pc1){ while((*pc1)!=0) { SCISendChar(*pc1); pc1++ ; } } void SCISendHex(char c1){ SCISendChar(dtoa((c1&0xF0)>>4)); SCISendChar(dtoa((c1&0x0F)) ); } unsigned char dtoa(char c1){ return(c1>=10)?(c1+0x37):(c1+0x30); } 单片机原理与应用

  38. ATD模块编程范例(续4) /****ATD相关函数****/ //ATD初始化函数 void ATD_init(void) { ATD0CTL1=0x0F; //选择8位转换精度 ATD0CTL2=0x40; //打开CCF快速清零,关闭外部触发输入,关闭中断 ATD0CTL3=0x08; //数据左对齐,non-fifo,转换序列长度为1 ATD0CTL4=0xE3; //采样时间为24个ATD时钟周期,ATDClk=8MB/8=1MHz } 单片机原理与应用

More Related