A/D转换器

  A/D转换器,又称模/数转换器,顾名思义,就是把模拟信号数字化。

  由于系统的实际处理对象往往都是一些模拟量(如温度、压力、位移、图像等),要使计算机或数字仪表能识别和处理这些信号,必须首先将这些模拟信号转换成数字信号,这就必须用到A/D转换器。



A/D转换器的一般步骤

  模拟信号进行A/D转换的时候,从启动转换到转换结束输出数字量,需要一定的转换时间,在这个转换时间内,模拟信号要基本保持不变。否则转换精度没有保证,特别当输入信号频率较高时,会赞成很大的转换误差。要防止这种误差的产生,必须在A/D转换开始时将输入信号的电平保持住,而在A/D转换结束后,又能跟踪输入信号的变化。因此,一般的A/D转换过程是通过取样、保持、量化和编码这4个步骤完成的。一般取样和保持主要由采样保持器来完成,而量化编码就由A/D转换器完成。



实例


  1. //main.c

  2. #include "2410lib.h"

  3. externvoid adc_test(void);

  4. int main(int argc,char **argv)

  5. {

  6.    sys_init();        // Initial s3c2410's Clock, MMU, Interrupt,Port and UART

  7.    uart_printf("\n\n Embest S3CEB2410 Evaluation Board\n");    

  8. while(1)

  9.    {

  10.                adc_test();

  11.    }    

  12. }

  13. //adc.c

  14. #include "2410lib.h"

  15. #define REQCNT 100                          

  16. #define ADC_FREQ 2500000

  17. #define LOOP 10000

  18. volatile UINT8T unPreScaler;

  19. volatilechar nEndTest;

  20. void adc_test(void)

  21. {

  22. int j;

  23.    UINT16T usConData;

  24. float usEndData;

  25.    uart_printf("\n Adc Conversion Test Example \n");    

  26.    uart_printf(" ADC_IN Test,channel 2\n");

  27.    uart_printf(" ADC conv. freq. = %dHz\n",ADC_FREQ);

  28.    unPreScaler = PCLK/ADC_FREQ -1;  

  29.    rADCCON=(1<<14)|(unPreScaler<<6)|(2<<3)|(0<<2)|(1<<1);//enable prescaler,ain2,normal,start by read

  30.    uart_printf(" Please adjust AIN2 value!\n");

  31.    uart_printf(" The results of ADC are:\n");

  32.    usConData=rADCDAT0&0x3FF;

  33. for(j=0;j<20;j++)                               // sample and show data both by UART and leds

  34.    {

  35. while(!(rADCCON & 0x8000));

  36.        usConData=rADCDAT0&0x3FF;

  37.        usEndData=usConData*3.3000/0x3FF;

  38.        uart_printf(" %0.4f ",usEndData);

  39.        delay(10000);

  40.    }

  41.    uart_printf(" end.\n");

  42. }

  43. //sys_init.c主要代码

  44. void sys_init()

  45. {

  46.    change_clock_divider(1,1);                  // 1:2:4

  47.    change_value_MPLL(M_MDIV,M_PDIV,M_SDIV);    // Fin=12MHz FCLK=202.8MHz

  48.    delay(0);                                   // adjust the delay count

  49.    port_init();

  50.    beep(1);

  51.    interrupts_init();

  52.    uart_init(PCLK, 115200, UART0);

  53.    uart_init(PCLK, 115200, UART1);

  54. #ifdef CLK124_200M

  55.    change_value_MPLL(88,1,1);                  // Fin=12MHz FCLK=192MHz

  56.    uart_init(192000000/4, 115200, UART0);

  57.    uart_init(192000000/4, 115200, UART1);

  58. #endif

  59.    uart_select(UART0);

  60.    uart_printf ("\n boot success...\n\n");

  61.    delay(500);

  62.    beep(0);

  63. }//sys_init