[C]Função de Oversampling para aumentar a resolução do ADC

Tenho um projeto em que utilizo um conversor ADC de 12 bits, porem não o encontrava em lugar nenhum. Depois de pesquisar um pouco na internet vi a técnica de oversampling, que nada mais é que fazer uma super amostragem do sinal ADC.

A função é bem simples como podemos ver a seguir.

Agora compartilho ela com vocês. Comentem e deem sugestões.

Segue o código:

unsigned long Adc_Read_Ext_Res(unsigned char Resolution,unsigned char Channel)
{ 
   unsigned long valueOverSampled; 
   unsigned char qtdeOverSample; 
   unsigned long result=0; 
   if(Resolution<11) // Considerando seu ADC como sendo 10 bits 
   { 
      return(Adc_Read(Channel)); 
   } 
   Resolution-=10; 
   qtdeOverSample= Resolution-1; 
   valueOverSampled=4; 
   while(qtdeOverSample>0) 
   { 
      valueOverSample< <=2; 
      qtdeOverSample--; 
   } 
   while(valueOverSampled>0) 
   { 
      result+=Adc_Read(Channel); 
      valueOverSampled--; 
   } 
   result>>=resolution; 
   return(result); 
}

Exemplo de uso [PIC com MikroC PRO]:

void main() 
{ 
   unsigned ReadValue = 0; 
   char txt[11]; 
   UART1_Init(19200); 
   ADC_Init(); 
   ADCON1 = 0x0e; 
   while(1) 
   { 
      ReadValue = Adc_Read_Ext_Res(12,0); // over para 12 bits
      LongWordToStrWithZeros(ReadValue , txt);
      UART_Write_Text("RD12bits:"); 
      UART_Write_Text(txt); 
      UART_Write_Text("\r\n"); 
      Delay_100ms(); 
   } 
}
[C]Função de Oversampling para aumentar a resolução do ADC
Tags:                                         

Deixe uma resposta

%d blogueiros gostam disto: