|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando

Volver al índice del tutorial

____________________________

226.- Wemos D1 R32 ESP32. Convertidor Digital-Analógico. DAC.

- Pensamos que un convertidor digital de 8 bits es un circuito al cual se suministramos niveles altos y bajos por sus 8 entradas y obtenemos un valor analógico en su salida, en este caso una tensión.

________________________________
- El ESP32 como convertidor DAC con 8 entradas.

- Esto lo podemos hacer con los mismos terminales del ESP32, utilizamos 8 terminales de entrada y mediante la expresión anterior obtenemos un valor analógico, observa que obtenemos un valor, no una tensión.
- Será un valor comprendido entre 0V y 3,2V, con un paso de 3,2/256 = 0,0125V

________________________________
- El ESP32 como convertidor Digital-Analógico sin entradas. DAC.

- En el ESP32, el concepto es un poco distinto, le aplicamos un número del 0 al 255 mediante el programa y obtenemos un valor de tensión entre 0 y 3,2V, es decir no conectamos 8 entradas como acabamos de ver en los dos ejemplos anteriores, sino que la entrada es una variable, un número, que asignamos en el programa.

- Obtendremos una tensión comprendida entre 0V y 3,2V en los terminales IO25 y IO26, ya que podemos tener dos DAC diferentes.

________________________________
- Diente de sierra. Incremento de 1 desde 0 a 255.

- En este ejemplo vamos a utilizar como salida de nuestro DAC el terminal IO25

diente_sierra.ino

// Juan Antonio Villalpando
// KIO4.COM


void setup() {
  Serial.begin(115200);
}

void loop() {  
    for (int E = 0; E < 256; E = E + 1){
      dacWrite(25, E);
      delay(10);
     }
}

- Aquí tenemos el resultado, a medida que se va incrementando E, se incrementa la tensión en el terminal IO25.

- Los valores de E se incrementarán desde 0 a 255 y el nivel de tensión en el terminal IO25 irá cambiando desde 0V a 3,2V

- En el siguiente dibujo, solo se ha representado hasta el valor 16, observa el paso de unos 0,0125V

- ¿Cómo podemos apreciar esa subida de tensión?

1.- Cambia el delay(100);

- Conecta un voltímetro a IO25, observarás como se incrementa la tensión hasta los 3,1V.

2.- Otra manera, cambia el delay(1);

- Conecta un osciloscopio a IO25, observarás la forma de onda del diente de sierra.

- Otra forma de ver la señal.

- Recuerda el tutorial 140, sobre la entrada analógica y el potenciómetro.

- Vamos alimentar la entrada analógica IO2 desde la salida de IO25 de nuestro DAC, uniéndolas con un cable.

diente_sierra_2.ino

// Juan Antonio Villalpando
// KIO4.COM

int IO2 = 2;
float valor = 0;
void setup() {
  Serial.begin(115200);
}

void loop() {  
    for (int E = 0; E < 256; E = E + 1){
      dacWrite(25, E);
      valor = analogRead(IO2);
      Serial.println(valor);
      delay(10);
     }
}

- Vamos al Serial Plotter.

- La abscisa representa a tiempo en centésima de segundos, en el dibujo un ciclo se realiza aproximadamente en un periodo de 2,5 segundos.

- Podemos cambiar dacWrite(25, 255); y ver que sale una señal continua de unos 3,2V. se mide mejor con un voltímetro.

sinusoidal.ino

// Juan Antonio Villalpando
// KIO4.COM

int IO2 = 2;
float valor = 0;
void setup() {
  Serial.begin(115200);
}

void loop() {  
  for (int deg = 0; deg < 360; deg = deg + 1){
    dacWrite(25, int(128 + 127 * (sin(deg*PI/180))));
    valor = analogRead(IO2);
    Serial.println(valor);
    delay(10);
     }
}

frecuencia máxima unos 160 Hz

- Ejemplos de:

https://github.com/G6EJD/ESP32-DAC-Examples

Otras funciones .ino

void setup() {
  Serial.begin(115200);
}

void loop() { // Generate a Sine wave
  for (int deg = 0; deg < 360; deg = deg + 8){
    dacWrite(25, int(128 + 80 * (sin(deg*PI/180)+sin(3*deg*PI/180)/3+sin(5*deg*PI/180)/5+sin(7*deg*PI/180)/7+sin(9*deg*PI/180)/9+sin(11*deg*PI/180)/11))); // Square
  }
}

// ESP32 has two 8-bit DAC (digital to analog converter) channels, connected to GPIO25 (Channel 1) and GPIO26 (Channel 2)
// Square wave   = amplitude . sin(x) + sin(3.x) / 3 +  sin (5.x) / 5 + sin (7.x) / 7  + sin (9.x) / 9  + sin (11.x) / 11  Odd harmonics
// Triangle wave = amplitude . sin(x) + 1/3^2.sin(3.x) +  1/5^2.sin(5.x) + 1/7^2.sin (7.x) + 1/9^2.sin(9.x) + 1/11^2.sin (11.x) Odd harmonics
// dacWrite(25, int(128 + 80 * (sin(deg*PI/180)))); // GPIO Pin mode (OUTPUT) is set by the dacWrite function
// dacWrite(25, int(128 + 80 * (sin(deg*PI/180)+sin(3*deg*PI/180)/3+sin(5*deg*PI/180)/5+sin(7*deg*PI/180)/7+sin(9*deg*PI/180)/9+sin(11*deg*PI/180)/11))); // Square
// dacWrite(25, int(128 + 80 * (sin(deg*PI/180)+1/pow(3,2)*sin(3*deg*PI/180)+1/pow(5,2)*sin(5*deg*PI/180)+1/pow(7,2)*sin(7*deg*PI/180)+1/pow(9,2)*sin(9*deg*PI/180))));

- Funcionamiento de las dos salidas DAC.

dd.ino

// Juan Antonio Villalpando
// KIO4.COM

int IO2 = 2;
int IO4 = 4;
float valor2 = 0;
float valor4 = 0;
void setup() {
  Serial.begin(115200);
}

void loop() {  
  for (int deg = 0; deg < 360; deg = deg + 1){
    dacWrite(25, int(128 + 127 * (sin(deg*PI/180))));
    dacWrite(26, int(128 + 80 * (sin(deg*PI/180))));
    valor2 = analogRead(IO2);
    valor4 = analogRead(IO4);
    Serial.println(valor2);
    Serial.println(valor4);
    delay(10);
     }    
}

________________________________
- Osciloscopio.

- Cargamos este código, observa que está muy simplificado.

sinusoidal.ino

// Juan Antonio Villalpando
// KIO4.COM

void setup() {

}

void loop() {  
  for (int deg = 0; deg < 360; deg = deg + 1){
    dacWrite(25, int(128 + 127 * (sin(deg*PI/180))));
     }
}

- Conectamos a un osciloscopio digital la señal del IO25 y Gnd. Obtendremos una señal sinusoidal de unos 3.12 Vpp y una frecuencia de unos 152 Hz.

- La señal ha sido construida digitalmente, por lo cual tiene mucho ruido, se observa sus trazos escalonados.

- Así se vería en un osciloscopio analógico, cada división vertical es de 0,5V y la base de tiempo 2 ms.

 

- Propuesta.

- Realiza un Lissajous con un osciloscopio.

https://www.youtube.com/watch?v=8L2qjdaHwug

Convertidor DAC.

https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/adc.html

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información