zoukankan      html  css  js  c++  java
  • 【ARM】AD转换器

    A/D转换器

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

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


    A/D转换器的一般步骤

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


    实例

      1 //main.c
      2 
      3 #include "2410lib.h"
      4 
      5 externvoid adc_test(void);
      6 
      7 int main(int argc,char **argv)
      8 
      9 {
     10 
     11    sys_init();        // Initial s3c2410's Clock, MMU, Interrupt,Port and UART
     12 
     13    uart_printf("
    
     Embest S3CEB2410 Evaluation Board
    ");    
     14 
     15 while(1)
     16 
     17    {
     18 
     19                adc_test();
     20 
     21    }    
     22 
     23 }
     24 
     25 //adc.c
     26 
     27 #include "2410lib.h"
     28 
     29 #define REQCNT 100                          
     30 
     31 #define ADC_FREQ 2500000
     32 
     33 #define LOOP 10000
     34 
     35 volatile UINT8T unPreScaler;
     36 
     37 volatilechar nEndTest;
     38 
     39 void adc_test(void)
     40 
     41 {
     42 
     43 int j;
     44 
     45    UINT16T usConData;
     46 
     47 float usEndData;
     48 
     49    uart_printf("
     Adc Conversion Test Example 
    ");    
     50 
     51    uart_printf(" ADC_IN Test,channel 2
    ");
     52 
     53    uart_printf(" ADC conv. freq. = %dHz
    ",ADC_FREQ);
     54 
     55    unPreScaler = PCLK/ADC_FREQ -1;  
     56 
     57    rADCCON=(1<<14)|(unPreScaler<<6)|(2<<3)|(0<<2)|(1<<1);//enable prescaler,ain2,normal,start by read
     58 
     59    uart_printf(" Please adjust AIN2 value!
    ");
     60 
     61    uart_printf(" The results of ADC are:
    ");
     62 
     63    usConData=rADCDAT0&0x3FF;
     64 
     65 for(j=0;j<20;j++)                               // sample and show data both by UART and leds
     66 
     67    {
     68 
     69 while(!(rADCCON & 0x8000));
     70 
     71        usConData=rADCDAT0&0x3FF;
     72 
     73        usEndData=usConData*3.3000/0x3FF;
     74 
     75        uart_printf(" %0.4f ",usEndData);
     76 
     77        delay(10000);
     78 
     79    }
     80 
     81    uart_printf(" end.
    ");
     82 
     83 }
     84 
     85 //sys_init.c主要代码
     86 
     87 void sys_init()
     88 
     89 {
     90 
     91    change_clock_divider(1,1);                  // 1:2:4
     92 
     93    change_value_MPLL(M_MDIV,M_PDIV,M_SDIV);    // Fin=12MHz FCLK=202.8MHz
     94 
     95    delay(0);                                   // adjust the delay count
     96 
     97    port_init();
     98 
     99    beep(1);
    100 
    101    interrupts_init();
    102 
    103    uart_init(PCLK, 115200, UART0);
    104 
    105    uart_init(PCLK, 115200, UART1);
    106 
    107 #ifdef CLK124_200M
    108 
    109    change_value_MPLL(88,1,1);                  // Fin=12MHz FCLK=192MHz
    110 
    111    uart_init(192000000/4, 115200, UART0);
    112 
    113    uart_init(192000000/4, 115200, UART1);
    114 
    115 #endif
    116 
    117    uart_select(UART0);
    118 
    119    uart_printf ("
     boot success...
    
    ");
    120 
    121    delay(500);
    122 
    123    beep(0);
    124 
    125 }//sys_init
    View Code
  • 相关阅读:
    varnish4.X安装
    关于varnish缓存
    s3cmd的使用
    MarkdownPad 2
    Lua控制语句
    Lua表达式
    后端怎么防止重复提交?(常用的做法)
    Redis用setnx+expire实现分布式锁存在什么隐患,如何改进?
    推送消息为什么使用RocketMQ,而不使用Kafka?
    自定义线程池,如何最佳创建线程池
  • 原文地址:https://www.cnblogs.com/lcw/p/3159417.html
Copyright © 2011-2022 走看看