Академический Документы
Профессиональный Документы
Культура Документы
Los dispositivos dsPic ofrecen un potente módulo ADC (convertidor analógico a digital) que
puede muestrear a velocidades de hasta 1 Msps. Se puede usar en una variedad de formas y
modos diferentes para satisfacer las necesidades de su proyecto.
Esta separata está dirigido a enseñar los conceptos básicos de los módulos de conversión A / D
a todos aquellos que están comenzando sus proyectos con los dsPics.
Cambie el nivel de la señal para que los valores negativos debajo de cero se cambien hacia
arriba. Los ADC en las imágenes no pueden muestrear señales negativas.
Este diseño de circuito de referencia puede ayudarlo con los circuitos de cambio de nivel:
SENSADO DE SEÑAL AC
Muestreo de una señal de CA con ADC. (La ganancia del amplificador operacional puede
sintonizarse a través de la resistencia variable para lograr una salida en el rango de 0 a 5 V, sin
embargo, uso un valor de 2.7 kOhms en su lugar). (Haga clic para agrandar).
Probando el ADC
Después de configurar el hardware y el código necesarios, deben ser una forma de comprobar
si el ADC está realmente muestreando correctamente de la manera requerida o no. Como no
se puede mirar dentro de la MCU para ver si todo funciona correctamente, sugiero dos
maneras:
1. Puede conectar un depurador con Pic como el que se muestra arriba. En el modo de
depuración, puede verificar el valor en los registros ADCBUF0 a 10 para ver si se están
cargando con valores muestreados correctamente.
2. Puede enviar los valores del registro ADCBUF a través de UART y supervisarlos en una
PC con la ayuda de un monitor en serie.
#include "xc.h"
#define FCY 20000000
#define FPWM 3600
#include <xc.h>
#include <stdio.h>
#include <delay.h>
#include <libpic30.h>
#include <dsp.h>
#include <math.h>
int ADCValue;
ADCHSbits.CH0SA = 1;
ADCHSbits.CH0NA = 0;
//ADCHSbits.CH123SA = 0;
//ADCHSbits.CH123NA = 0;
void readADC( )
{
//ADCON1bits.SAMP = 1; // start sampling, automatic conversion will follow
//__delay_ms( 100 );
ADCON1bits.SAMP = 0; // start sampling, automatic conversion will follow
while ( !ADCON1bits.DONE ); // wait to complete the conversion
ADCValue = ADCBUF0; // read the conversion result
}
while( 1 )
{
readADC();
data = ADCValue;
}
}
El módulo ADC se puede inicializar y configurar con la ayuda del código proporcionado
anteriormente. Sigue una guía paso a paso:
Los pasos 1 a 7 son esenciales. Después de 7 cualquiera o todos ellos pueden omitirse.
El puerto B, en el que están presentes las patillas de entrada ADC, debe configurarse como un
puerto de entrada. (línea - 21).
Deben establecerse en el modo de entrada analógica mediante el registro ADPCFG. (línea - 22).
Las entradas analógicas deben conectarse a un 'canal ADC' para el muestreo. Generalmente
hay más cantidad de entradas analógicas en comparación con los canales, por ejemplo:
dsPic30f4011 tiene 09 entradas analógicas pero solo 04 canales ADC. Por lo tanto, ahora debe
seleccionar qué pin de entrada analógica está conectado a qué canal ADC. Esto se hace con la
ayuda del registro de ADCHS.
Aquí AN1 se selecciona como la entrada de pin analógico al canal 0. (línea - 2).
El número de canales determina la cantidad de muestras simultáneas posibles.
El controlador puede muestrear alternativamente entre Mux A y Mux B.
Se puede seleccionar
ADCHSbits.CH0SA = 1; o
cualquier pin anlouge de
cualquier otro número
Canal 0 -> Mux A AN0 - AN8 para dar entrada
dependiendo del pin
al canal 0 a través de Mux
A.
0 AVdd AVss
0 integer
1 signed integer
2 fractional
3 signed fractional
ASAM Mode
El muestreo simultáneo se puede habilitar con el bit SIMSAM en el registro ADCON1. El muestreo
simultáneo captura las muestras de todos los canales de entrada exactamente en el mismo instante. Si el
muestreo simultáneo está desactivado, los canales serán muestreados uno después del otro.
En la mayoría de los casos, la fuente del reloj de conversión se selecciona para que sea el reloj del sistema
al establecer el bit ADRC en el registro ADCON3 en 0.
Para obtener más información sobre las interrupciones, consulte este tutorial detallado - Cómo usar
interrupciones en Pic MicroControllers
IFS0bits.ADIF = 0;
}
Interrupt_Init();
ADC_Init();
while( 1 )
{
_LATD0 = 1;
__delay32(15000000);
_LATD0 = 0;
__delay32(15000000);
}
}
Se debe seleccionar una fuente de activación de conversión para que la interrupción de ADC
funcione correctamente como se indica en el paso 5.
El muestreo debe hacerse en modo automático. (Bit ASAM)
La frecuencia del disparo de la interrupción de ADC se puede controlar con la ayuda de bits
SMPI en el registro ADCON2. (línea 50).