作為TI的C2000系列最新產品的28377S(D),ADC模塊是其核心的信號采集功能。28377的ADC是一個逐次逼近型(SAR)ADC,可選擇分辨率為16位或12位。具體ADC特性如下圖的數據手冊所示:
這次學習,我采用Timer定時器作為觸發源來觸發ADC在SOC0上的的連續轉換。由上圖可以看到,ADC支持的觸發類型有:
- 軟件觸發
- 所有的EPWM-ADCSOCA或B
- GPIO XINT2
- CPU 定時器0/1/2(每個C28x內核)
- ADCINT1/2
所以,通過CPU的定時器來觸發采樣是可行的。下面來看ADC的模塊框圖:
我們通過Timer觸發ADC的SOC0轉換序列對ADCIN0進行持續采樣:采樣方式為單端12位采樣。
接下來需要配置ADC的SOC采樣序列,包括采樣窗時間,轉換的通道選擇,觸發源選擇等:
下面附上程序部分:
1 /*配置ADC的轉換模式、中斷及觸發源*/ 2 void ConfigureADC(void) 3 { 4 EALLOW; 5 AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //ADC時鍾預分頻:200M/4=50MHz 6 AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, 7 ADC_SIGNALMODE_SINGLE); //配置ADCA為12位轉換精度,單端模式 8 AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADC中斷脈沖位置發生在在轉換結束時,在ADC結果鎖存到結果寄存器之前的一個周期 9 AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; //內核中的所有模擬電路都通電 10 DELAY_US(1000); //delay for 1ms to allow ADC time to power up 11 EDIS; 12 13 Uint16 acqps; 14 15 if(ADC_RESOLUTION_12BIT == AdcaRegs.ADCCTL2.bit.RESOLUTION) 16 { 17 acqps = 14; //12位單端模式下采樣時間最快75ns,ACQPS>=14, 18 } 19 else //resolution is 16-bit 20 { 21 acqps = 63; //16位差分模式下采樣時間最快320ns,ACQPS>=63 22 } 23 24 EALLOW; 25 AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0將轉換ADCINA2 26 AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //設置采樣窗時間 27 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 2; //SOC0觸發源選擇為CPU1 Timer1 28 AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //EOC0觸發ADCINT1 29 AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //ADCINT1中斷使能 30 AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //ADCINT1中斷標志位清零 31 EDIS; 32 }
可以看到,在ADCRESULT0寄存器中,程序正在持續采樣中