《第8讲模数转换器ADC》由会员分享,可在线阅读,更多相关《第8讲模数转换器ADC(55页珍藏版)》请在金锄头文库上搜索。
1、模/数转换 ADC 在现实世界中,许多量都是模拟量,例如电压、电流、温度、湿度、压力等信号,而在DSP等微控制器的世界中,所有的量却都是数字量,那如何实现将现实世界的模拟量提供给DSP等微控制器呢? ADC第13章 模/数转换器ADC1、2812内部的ADC模块 2、ADC模块的工作方式3、ADC模块的中断4、ADC模块的寄存器13.1 2812内部的ADC模块nADC模块是一个12位分辨率的、具有流水线结构的模数转换器 。nX281X的ADC模块一共具有16个采样通道,分成了两组,一组为ADCINA0ADCINA7,另一组为ADCINB0ADCINB7。 ADC模块的结构框图虽然ADC模块具
2、有多个输入通道,但是它内部只有1个转换器,也就是说同一时刻只能对1路输入信号进行转换。当有多路信号需要转换时,ADC模块该怎么办呢?多路转换示意图ADC模块的特点n一共有16个模拟量输入引脚,将这16个输入引脚分成了两组,A组的引脚为ADCINA0ADCINA7,B组的引脚为ADCINB0ADCINB7。 n具有12位的ADC内核,内置有2个采样保持器S/H-A和S/H-B,从前面的学习可以知道,引脚ADCINA0ADCINA7对应于采样保持器S/H-A,引脚ADCINB0ADCINB7对应于采样保持器S/H-B。 ADC模块的特点nADC模块的时钟频率最高可配置为25MHz,采样频率最高为1
3、2.5MSPS,也就是说每秒最高能完成12.5个百万次的采样。 nADC模块的自动序列发生器可以按两个独立的8状态序列发生器(SEQ1和SEQ2)来运行,也可以按一个16状态的序列发生器(SEQ)来运行。 ADC模块的特点ADC模拟输入的范围为03V。 AD端口的嵌位电路 ADC模块的特点nADC模块对一个序列的通道开始转换必须需要有一个启动信号,或者说是一个触发信号。 序列发生器SEQ1SEQ2SEQ启动方式软件立即启动(S/W)EVA的多种事件外部引脚(GPIO/XINT2_ADCSOC)软件立即启动(S/W)EVB的多种事件软件立即启动(S/W)EVA的多种事件EVB的多种事件外部引脚(
4、GPIO/XINT2_ADCSOC)ADC模块的特点nADC模块共有16个结果寄存器ADCRESULT0ADCRESULT15,用来保存转换的数值。每个结果寄存器都是16位的,而X281X的ADC是12位的,也就是说转换后的数字值最高只有12位,那这个12位的值是如何放在16位的结果寄存器中的呢? ADC模块的特点ADC的时钟频率和采样频率-1假设外部晶振的频率为OSCCLK Hz,通常选用的是30M的晶振。外部晶振经过PLL模块产生CPU时钟SYSCLKOUT,如果PLL模块的值为m,则有: ADC的时钟频率和采样频率-2然后,CPU时钟信号经过高速时钟预定标器HISPCP之后,生成高速外设
5、时钟HSPCLK,假设HISPCP寄存器的值为n,则有:ADC的时钟频率和采样频率-3AD控制寄存器ADCTRL3的第0到第3位,也就是功能位ADCLKPS,可以对HSPCLK进行分频,此外,AD控制寄存器ADCTRL1的CPS位另外还可以提供一个2分频,因此,可以得到ADC模块的时钟ADCLK为:ADC时钟产生实例XCLKINPLLCR3:0HISPCLKADCTRL31:4ADCTRL17ADC_CLKADCTRL18:11SHWidth0000bHSPCP=0ADCLKPS=0CPS=0ACQ_PS=030MHz15MHz15MHz15MHz15MHz15MHzSH pulse cloc
6、k=011010bHSPCP=3ADCLKPS=2CPS=1ACQ_PS=1530MHz150MHz150/(2*3)=25MHz25/(2*2)=6.25MHz6.25/(2*1)=3.125MHz3.125MHzSH pulse clock=1516ADC时钟频率nADC的时钟频率就是每秒有多少个时钟脉冲的意思,它是ADC模块运行的基础n正如上面所介绍的,它是由系统时钟经过很多环节分频后得到的,它取决于外部的时钟输入和各个环节的倍频或者分频的系数。 ADC转换时间n转换时间是指ADC模块完成一个通道或者一个序列的转换所需要的时间,很显然,转换时间是由ADC的时钟频率来决定的。 ADC采样频
7、率n采样频率是指ADC模块每秒能够完成多少次的采样,采样频率取决于启动ADC的频率。启动ADC的方式有很多,比如利用软件直接启动,利用事件管理器的某些事件,或者是利用外部引脚来启动。启动ADC的频率才是ADC的采样频率,例如如果每隔1ms启动一次ADC,那么ADC的采样频率就为1KHz。 13.2 ADC模块的工作方式nADC模块既支持2个8状态序列发生器SEQ1和SEQ2分开独立工作,此时称为双序列发生器方式,也支持序列发生器SEQ1和SEQ2级联成一个16状态序列发生器SEQ来工作,此时称为单序列发生器方式,或者称为级联方式。ADC输入通道选择序列控制寄存器nX281X的16个通道可以通过
8、编程来为序列发生器中需要转换的通道安排顺序,这个功能就需要通过ADC输入通道选择序列控制寄存器ADCCHSELSEQx(x=1,2,3,4)来实现。每一个输入通断选择序列控制寄存器都是16位的,被分成了4个功能位CONVxx,每一个功能位占据寄存器的4个位 。ADC输入通道选择序列控制寄存器序列发生器对应的通道选择控制寄存器CONVxx对应的引脚SEQ1ADCCHSELSEQ1ADCCHSELSEQ2CONV00CONV07ADCINA0ADCINA7SEQ2ADCCHSELSEQ3ADCCHSELSEQ4CONV08CONV15ADCINB0ADCINB7SEQADCCHSELSEQ1ADC
9、CHSELSEQ2ADCCHSELSEQ3ADCCHSELSEQ4CONV00CONV15ADCINA0ADCINA7ADCINB0ADCINB7各个序列发生器所对应的寄存器和可选用的通道情况各个序列发生器所对应的寄存器和可选用的通道情况 最大转换通道寄存器的结构双序列发生器模式下顺序采样n假设需要对ADCINA0ADCINA7,ADCINB0ADCINB7这16路通道进行采样,ADC模块工作于双序列发生器模式,并采用顺序采样。ADCCHSELSEQ1CONV000000(ADCINA0)ADCCHSELSEQ3CONV081000(ADCINB0)CONV010001(ADCINA1)CON
10、V091001(ADCINB1)CONV020010(ADCINA2)CONV101010(ADCINB2)CONV030011(ADCINA3)CONV111011(ADCINB3)ADCCHSELSEQ2CONV040100(ADCINA4)ADCCHSELSEQ4CONV121100(ADCINB4)CONV050101(ADCINA5)CONV131101(ADCINB5)CONV060110(ADCINA6)CONV141110(ADCINB6)CONV070111(ADCINA7)CONV151111(ADCINB7) 双序列发生器顺序采样模式下双序列发生器顺序采样模式下16路通道
11、时路通道时ADCCHSELSEQn位情况位情况 双序列发生器顺序采样模式下序列发生器16路通道选择情况 AdcRegs.ADCTRL1.bit.SEQ_CASC=0; /选择双序列发生器模式 AdcRegs.ADCTRL3.bit.SMODE_SEL=0; /选择顺序采样模式 AdcRegs.MAX_CONV.all=0x0077; /每个序列发生器最大采样通道数为8,总共可采样16通道 /SEQ1将用到ADCCHSELSEQ1、ADCCHSELSEQ2,SEQ2将用到ADCCHSELSEQ3、ADCCHSELSEQ4 AdcRegs.CHSELSEQ1.bit.CONV00=0x0; /采样
12、ADCINA0通道 AdcRegs.CHSELSEQ1.bit.CONV01=0x1; /采样ADCINA1通道 AdcRegs.CHSELSEQ1.bit.CONV02=0x2; /采样ADCINA2通道 AdcRegs.CHSELSEQ1.bit.CONV03=0x3; /采样ADCINA3通道 AdcRegs.CHSELSEQ2.bit.CONV04=0x4; /采样ADCINA4通道 AdcRegs.CHSELSEQ2.bit.CONV05=0x5; /采样ADCINA5通道 AdcRegs.CHSELSEQ2.bit.CONV06=0x6; /采样ADCINA6通道 AdcRegs.
13、CHSELSEQ2.bit.CONV07=0x7; /采样ADCINA7通道 AdcRegs.CHSELSEQ3.bit.CONV08=0x8; /采样ADCINB0通道 AdcRegs.CHSELSEQ3.bit.CONV09=0x9; /采样ADCINB1通道 AdcRegs.CHSELSEQ3.bit.CONV10=0xA; /采样ADCINB2通道 AdcRegs.CHSELSEQ3.bit.CONV11=0xB; /采样ADCINB3通道 AdcRegs.CHSELSEQ4.bit.CONV12=0xC; /采样ADCINB4通道 AdcRegs.CHSELSEQ4.bit.CONV
14、13=0xD; /采样ADCINB5通道 AdcRegs.CHSELSEQ4.bit.CONV14=0xE; /采样ADCINB6通道 AdcRegs.CHSELSEQ4.bit.CONV15=0xF; /采样ADCINB7通道双序列发生器顺序采样模式下16路通道转换结果 双序列发生器模式下并发采样n假设需要对ADCINA0ADCINA7,ADCINB0ADCINB7这16路通道进行采样,ADC模块工作于双序列发生器模式,并采用并发采样。 ADCCHSELSEQ1CONV000000(ADCINA0)ADCCHSELSEQ3CONV081000(ADCINB4)CONV010001(ADCIN
15、A1)CONV091001(ADCINB5)CONV020010(ADCINA2)CONV101010(ADCINB6)CONV030011(ADCINA3)CONV111011(ADCINB7)ADCCHSELSEQ2CONV04ADCCHSELSEQ4CONV12CONV05CONV13CONV06CONV14CONV07CONV15 双序列发生器并发采样模式下双序列发生器并发采样模式下16路通道时路通道时ADCCHSELSEQn位情况位情况 双序列发生器并发采样模式下序列发生器16路通道选择情况 AdcRegs.ADCTRL1.bit.SEQ_CASC=0; /选择双序列发生器模式Adc
16、Regs.ADCTRL3.bit.SMODE_SEL=1; /选择并发采样模式AdcRegs.MAX_CONV.all=0x0033;/由于并发采样是一对通道、一对通道采样,采16个通道,总共只需设置8个通道。SEQ1和SEQ2各设置4个通道,SEQ1将用到ADCCHSELSEQ1,SEQ2将用到SDCCHSELSEQ3。AdcRegs.CHSELSEQ1.bit.CONV00=0x0; /采样ADCINA0和ADCINBAdcRegs.CHSELSEQ1.bit.CONV01=0x1; /采样ADCINA1和ADCINB1 AdcRegs.CHSELSEQ1.bit.CONV02=0x2;
17、/采样ADCINA2和ADCINB2 AdcRegs.CHSELSEQ1.bit.CONV03=0x3; /采样ADCINA3和ADCINB3 AdcRegs.CHSELSEQ3.bit.CONV08=0xC; /采样ADCINA4和ADCINB4 AdcRegs.CHSELSEQ3.bit.CONV09=0xD; /采样ADCINA5和ADCINB5 AdcRegs.CHSELSEQ3.bit.CONV10=0xE; /采样ADCINA6和ADCINB6 AdcRegs.CHSELSEQ3.bit.CONV11=0xF; /采样ADCINA7和ADCINB7双序列发生器并发采样模式下16路通
18、道转换结果 级联模式下顺序采样n假设需要对ADCINA0ADCINA7,ADCINB0ADCINB7这16路通道进行采样,ADC模块工作于级联模式,并采用顺序采样。ADCCHSELSEQ1CONV000000(ADCINA0)ADCCHSELSEQ3CONV081000(ADCINB0)CONV010001(ADCINA1)CONV091001(ADCINB1)CONV020010(ADCINA2)CONV101010(ADCINB2)CONV030011(ADCINA3)CONV111011(ADCINB3)ADCCHSELSEQ2CONV040100(ADCINA4)ADCCHSELSEQ
19、4CONV121100(ADCINB4)CONV050101(ADCINA5)CONV131101(ADCINB5)CONV060110(ADCINA6)CONV141110(ADCINB6)CONV070111(ADCINA7)CONV151111(ADCINB7) 级联顺序采样模式下级联顺序采样模式下16路通道时路通道时ADCCHSELSEQn位情况位情况 级联顺序采样模式下序列发生器16路通道选择情况 AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /选择级联模式 AdcRegs.ADCTRL3.bit.SMODE_SEL=0; /选择顺序采样模式 AdcRegs.MAX
20、_CONV.all=0x000F;/序列发生器最大采样通道数为16,一次采1个通道,总共可采16通道 /SEQ将用到ADCCHSELSEQ1、ADCCHSELSEQ2、ADCCHSELSEQ3、ADCCHSELSEQ4AdcRegs.CHSELSEQ1.bit.CONV00=0x0; /采样ADCINA0通道 AdcRegs.CHSELSEQ1.bit.CONV01=0x1; /采样ADCINA1通道 AdcRegs.CHSELSEQ1.bit.CONV02=0x2; /采样ADCINA2通道 AdcRegs.CHSELSEQ1.bit.CONV03=0x3; /采样ADCINA3通道 Adc
21、Regs.CHSELSEQ2.bit.CONV04=0x4; /采样ADCINA4通道 AdcRegs.CHSELSEQ2.bit.CONV05=0x5; /采样ADCINA5通道 AdcRegs.CHSELSEQ2.bit.CONV06=0x6; /采样ADCINA6通道 AdcRegs.CHSELSEQ2.bit.CONV07=0x7; /采样ADCINA7通道 AdcRegs.CHSELSEQ3.bit.CONV08=0x8; /采样ADCINB0通道 AdcRegs.CHSELSEQ3.bit.CONV09=0x9; /采样ADCINB1通道 AdcRegs.CHSELSEQ3.bit
22、.CONV10=0xA; /采样ADCINB2通道 AdcRegs.CHSELSEQ3.bit.CONV11=0xB; /采样ADCINB3通道 AdcRegs.CHSELSEQ4.bit.CONV12=0xC; /采样ADCINB4通道 AdcRegs.CHSELSEQ4.bit.CONV13=0xD; /采样ADCINB5通道 AdcRegs.CHSELSEQ4.bit.CONV14=0xE; /采样ADCINB6通道 AdcRegs.CHSELSEQ4.bit.CONV15=0xF; /采样ADCINB7通道级联顺序采样模式下16路通道转换结果 n假设需要对ADCINA0、ADCINA1
23、、ADCINA2、ADCINB3、ADCINB4、ADCINB5、ADCINB7这7路通道进行采样,ADC模块工作于级联模式,并采用顺序采样。 ADCCHSELSEQ1CONV000000(ADCINA0)ADCCHSELSEQ3CONV08CONV010001(ADCINA1)CONV09CONV020010(ADCINA2)CONV10CONV031011(ADCINB3)CONV11ADCCHSELSEQ2CONV041100(ADCINB4)ADCCHSELSEQ4CONV12CONV051101(ADCINB5)CONV13CONV061111(ADCINB7)CONV14CONV0
24、7CONV15 级联顺序采样模式下级联顺序采样模式下7路通道时路通道时ADCCHSELSEQn位情况位情况 级联顺序采样模式下序列发生器7路通道选择情况 AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /选择级联模式 AdcRegs.ADCTRL3.bit.SMODE_SEL=0; /选择顺序采样模式 AdcRegs.MAX_CONV.all=0x0006;/序列发生器最大采样通道数为7,一次采1个通道,总共可采7通道/SEQ将用到ADCCHSELSEQ1、ADCCHSELSEQ2AdcRegs.CHSELSEQ1.bit.CONV00=0x0; /采样ADCINA0通道 Ad
25、cRegs.CHSELSEQ1.bit.CONV01=0x1; /采样ADCINA1通道 AdcRegs.CHSELSEQ1.bit.CONV02=0x2; /采样ADCINA2通道 AdcRegs.CHSELSEQ1.bit.CONV03=0xB; /采样ADCINB3通道 AdcRegs.CHSELSEQ2.bit.CONV04=0xC; /采样ADCINB4通道 AdcRegs.CHSELSEQ2.bit.CONV05=0xD; /采样ADCINB5通道 AdcRegs.CHSELSEQ2.bit.CONV06=0xF; /采样ADCINB7通道级联顺序采样模式下7路通道转换结果 级联模
26、式下的并发采样n假设需要对ADCINA0ADCINA7,ADCINB0ADCINB7这16路通道进行采样,ADC模块工作于级联模式,并采用并发采样。ADCCHSELSEQ1CONV000000(ADCINA0)ADCCHSELSEQ3CONV08CONV010001(ADCINA1)CONV09CONV020010(ADCINA2)CONV10CONV030011(ADCINA3)CONV11ADCCHSELSEQ2CONV040100(ADCINA4)ADCCHSELSEQ4CONV12CONV050101(ADCINA5)CONV13CONV060110(ADCINA6)CONV14CON
27、V070111(ADCINA7)CONV15 级联并发采样模式下级联并发采样模式下16路通道时路通道时ADCCHSELSEQn位情况位情况 级联并发采样模式下序列发生器16路通道选择情况 AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /选择级联模式 AdcRegs.ADCTRL3.bit.SMODE_SEL=1; /选择并发采样模式 AdcRegs.MAX_CONV.all=0x0007;/序列发生器最大采样通道数为8,一次采2个通道,总共可采16通道 /SEQ将用到ADCCHSELSEQ1、ADCCHSELSEQ2AdcRegs.CHSELSEQ1.bit.CONV00=0
28、x0; /采样ADCINA0和ADCINB0 AdcRegs.CHSELSEQ1.bit.CONV01=0x1; /采样ADCINA1和ADCINB1 AdcRegs.CHSELSEQ1.bit.CONV02=0x2; /采样ADCINA2和ADCINB2 AdcRegs.CHSELSEQ1.bit.CONV03=0x3; /采样ADCINA3和ADCINB3 AdcRegs.CHSELSEQ2.bit.CONV04=0x4; /采样ADCINA4和ADCINB4 AdcRegs.CHSELSEQ2.bit.CONV05=0x5; /采样ADCINA5和ADCINB5 AdcRegs.CHSE
29、LSEQ2.bit.CONV06=0x6; /采样ADCINA6和ADCINB6 AdcRegs.CHSELSEQ2.bit.CONV07=0x7; /采样ADCINA7和ADCINB7级联并发采样模式下16路通道转换结果 序列发生器工作流程ADC模块的中断n当序列发生器完成一个序列的转换时,就会对该序列发生器的中断标志位进行置位,如果该序列发生器的中断已经使能,则ADC模块便向PIE控制器提出中断请求。 n当ADC模块工作于双序列发生器模式时,序列发生器SEQ1和SEQ2可以分开单独设置中断标志位和使能位,当ADC模块工作于级联模式时,设置序列发生器SEQ1的中断标志位和使能位便可以产生AD
30、C转换的中断。 ADC模块的序列发生器支持两种中断方式n一种叫“interrupt request occurs at the end of every sequence”,意思是中断请求出现在每一个序列转换结束时,换句话说,每转换完一个序列,便产生一次中断请求; n另一种叫“interrupt request occurs at the end of every other sequence”,意思是中断请求出现在每隔一个序列转换结束时,换句话说,不是每次转换完都会产生一个中断请求,而是一个隔一个的产生,比如第一次转换完成时并不产生中断请求,第二次转换完成时才产生中断请求,接着,第三次转换完
31、成也不产生中断请求,第四次转换完成时产生中断请求,一直这样下去。 中断请求出现在每一个序列转换结束时ADCCHSELSEQ1CONV00I1ADCCHSELSEQ3CONV08CONV01I2CONV09CONV02V1CONV10CONV03V2CONV11ADCCHSELSEQ2CONV04V3ADCCHSELSEQ4CONV12CONV05CONV13CONV06CONV14CONV07CONV15ADC输入通道选择序列控制寄存器设置输入通道选择序列控制寄存器设置 中断请求出现在每隔一个序列转换结束时 ADC输入通道选择控制寄存器设置输入通道选择控制寄存器设置 ADCCHSELSEQ1CONV00I1ADCCHSELSEQ3CONV08CONV01I2CONV09CONV02I3CONV10CONV03V1CONV11ADCCHSELSEQ2CONV04V2ADCCHSELSEQ4CONV12CONV05V3CONV13CONV06CONV14CONV07CONV15