您的位置:首页 > 其它

【ARM】arm·ad转换器

2013-06-27 17:38 232 查看
A/D转换器
  A/D转换器,又称模/数转换器,顾名思义,就是把模拟信号数字化。
  由于系统的实际处理对象往往都是一些模拟量(如温度、压力、位移、图像等),要使计算机或数字仪表能识别和处理这些信号,必须首先将这些模拟信号转换成数字信号,这就必须用到A/D转换器。

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

实例
//main.c

#include "2410lib.h"

externvoid adc_test(void);

int main(int argc,char **argv)

{

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

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

while(1)

{

adc_test();

}

}

//adc.c

#include "2410lib.h"

#define REQCNT 100

#define ADC_FREQ 2500000

#define LOOP 10000

volatile UINT8T unPreScaler;

volatilechar nEndTest;

void adc_test(void)

{

int j;

UINT16T usConData;

float usEndData;

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

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

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

unPreScaler = PCLK/ADC_FREQ -1;

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

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

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

usConData=rADCDAT0&0x3FF;

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

{

while(!(rADCCON & 0x8000));

usConData=rADCDAT0&0x3FF;

usEndData=usConData*3.3000/0x3FF;

uart_printf(" %0.4f ",usEndData);

delay(10000);

}

uart_printf(" end.\n");

}

//sys_init.c主要代码

void sys_init()

{

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

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

delay(0);                                   // adjust the delay count

port_init();

beep(1);

interrupts_init();

uart_init(PCLK, 115200, UART0);

uart_init(PCLK, 115200, UART1);

#ifdef CLK124_200M

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

uart_init(192000000/4, 115200, UART0);

uart_init(192000000/4, 115200, UART1);

#endif

uart_select(UART0);

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

delay(500);

beep(0);

}//sys_init


本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1193274
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: