Tabla de contenido:
- Paso 1: Generación de la señal Pwm para 50Hz
- Paso 2: Programa Arduino para ciclo de trabajo variable
- Paso 3: Alternando en los pines Arduino de 50Hz
- Paso 4: conducción de un puente H y filtrado de la señal Pwm
Video: Arduino Sinewave para inversores: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
En este proyecto, he generado una señal SPWM (pulso de onda sinusoidal modulada en ancho) a partir de dos salidas digitales arduino pwm.
Porque para hacer un programa de este tipo, tengo que hablar sobre muchas otras funciones y propiedades del arduino, el proyecto completo, incluidas las imágenes de osciloscopio y para diferentes frecuencias, visite mi sitio web:
eprojectszone
Paso 1: Generación de la señal Pwm para 50Hz
Para generar una señal de 50Hz a mayor frecuencia es necesario realizar algunos cálculos. Las frecuencias de arduino pueden ser de 8 MHz, pero queremos una señal con ciclo de trabajo variable.
Para comprender los tipos de ciclos de trabajo variables de arduino, puede leer estas 3 partes de la misma publicación 1, 2 y 3.
Supongamos que nuestra frecuencia es de 50 Hz, lo que significa que el período de tiempo es de 20 ms. Entonces 10ms es un período de medio ciclo. En esos 10ms necesitamos tener muchos pulsos con diferentes ciclos de trabajo comenzando con ciclos de trabajo pequeños, en el medio de la señal tenemos ciclos de trabajo máximos y terminamos también con ciclos de trabajo pequeños. Para generar una onda sinusoidal usaremos dos pines uno para semiciclo positivo y uno para semiciclo negativo. En nuestra publicación para esto usamos los pines 5 y 6 que significan Timer 0.
Para una señal suave, elegimos la fase correcta pwm a una frecuencia de 31372 Hz, ver publicación anterior. Uno de los mayores problemas es cómo calculamos el ciclo de trabajo necesario para cada pulso. Entonces, debido a que nuestra frecuencia es f = 31372Hz, el período para cada pulso es T = 1/31372 = 31.8 us, por lo que el número de pulsos para un medio ciclo es N = 10ms / 31.8us = 314 pulsos. Ahora, para calcular el ciclo de trabajo para cada pulso, tenemos y = sinx, pero en esta ecuación necesitamos grados, por lo que el medio ciclo tiene 180 grados para 314 pulsos. Para cada pulso tenemos 180/314 = 0.57deg / pulso. Eso significa que por cada pulso avanzamos con 0,57 grados.
y es el ciclo de trabajo yx el valor de la posición en la mitad del ciclo de trabajo. al principio x es 0, después de que x = 0.57, x = 1.14 y así sucesivamente hasta que x = 180.
si calculamos todos los 314 valores obtenemos una matriz de 314 elementos (escriba "int" para que arduino lo calcule más fácilmente).
Tal matriz es:
int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};
Puede ver que, como una onda sinusoidal, el ciclo de trabajo es más bajo en el primer y último elemento y más alto en el medio.
Paso 2: Programa Arduino para ciclo de trabajo variable
En la imagen de arriba tenemos señales de ciclos de trabajo variables con valores de la matriz.
Pero, ¿cómo hacer tal señal?
la parte del programa a continuación utiliza interrupciones para cambiar los valores de los ciclos de trabajo
sei (); // habilitar interrupciones
}
ISR (TIMER1_COMPA_vect) {// interrumpe cuando el temporizador 1 coincide con el valor OCR1A
if (i> 313 && OK == 0) {// valor final del vector para el pin 6
i = 0; // ir al primer valor del vector (matriz)
OK = 1; // habilita el pin 5
}
x = sinPWM ; // x toma el valor del vector correspondiente a la posición i (i es cero indexado) -valor del ciclo de trabajo
i = i + 1; // ir a la siguiente posición
}
Paso 3: Alternando en los pines Arduino de 50Hz
Debido a que cada pin genera solo la mitad del ciclo de trabajo para hacer una onda sinusoidal completa, usamos dos pines que se alternan uno tras otro después de 10msegundos exactos (para 50Hz). Este cambio de pines se realiza al final de la matriz; después de que digamos que el pin 5 haya generado 314 pulsos, este pin se apaga y habilita el pin 6, lo que hace lo mismo pero para el ciclo de trabajo negativo.
Debido a que arduino puede generar solo señales positivas, el ciclo de trabajo negativo se realiza en el puente h; puede leer aquí al respecto
El programa para cambiar pines:
sei (); // habilitar interrupciones
}
ISR (TIMER1_COMPA_vect) {// interrumpe cuando el temporizador 1 coincide con el valor OCR1A
if (i> 313 && OK == 0) {// valor final del vector para el pin 6
i = 0; // ir al primer valor del vector
OK = 1; // habilita el pin 5
}
if (i> 313 && OK == 1) {// valor final del vector para el pin 5
i = 0; // ir al primer valor del vector
OK = 0; // habilita el pin 6
}
x = sinPWM ; // x toma el valor del vector correspondiente a la posición i (i es cero indexado)
i = i + 1; // ir a la siguiente posición
si (OK == 0) {
OCR0B = 0; // hacer pin 5 0
OCR0A = x; // habilita el pin 6 al ciclo de trabajo correspondiente
si (OK == 1) {
OCR0A = 0; // hacer pin 6 0
OCR0B = x; // habilita el pin 5 al ciclo de trabajo correspondiente
}
}
Paso 4: conducción de un puente H y filtrado de la señal Pwm
Las señales que se obtienen de arduino son la parte de control para aplicaciones inverter porque ambas son positivas. Para hacer una onda sinusoidal completa y un inversor práctico tenemos que usar un puente hy para limpiar la pwm un filtro de paso bajo.
El puente H se presenta aquí.
El filtro de paso bajo probado con pequeños motores de CA, aquí.
Recomendado:
¡Un truco genial para el panel táctil de la computadora portátil para proyectos Arduino !: 18 pasos (con imágenes)
¡Un truco genial del panel táctil de la computadora portátil para proyectos Arduino !: Hace un tiempo, cuando estaba jugando con un panel táctil PS / 2 con un microcontrolador Arduino, descubrí que dos de sus conexiones integradas se pueden usar como entradas digitales. En este Instructable, aprendamos cómo podemos utilizar el complemento de un panel táctil PS / 2
Sensor de temperatura para Arduino aplicado para COVID 19:12 pasos (con imágenes)
Sensor de temperatura para Arduino aplicado para COVID 19: El sensor de temperatura para Arduino es un elemento fundamental cuando queremos medir la temperatura de un procesador del cuerpo humano. El sensor de temperatura con Arduino debe estar en contacto o cerca para recibir y medir el nivel de calor. Así es como t
OAREE - Impreso en 3D - Robot para evitar obstáculos para la educación en ingeniería (OAREE) con Arduino: 5 pasos (con imágenes)
OAREE - Impreso en 3D - Robot para evitar obstáculos para la educación en ingeniería (OAREE) Con Arduino: Diseño OAREE (Robot para evitar obstáculos para la educación en ingeniería): El objetivo de este instructivo era diseñar un robot OAR (Robot para evitar obstáculos) que fuera simple / compacto, Imprimible en 3D, fácil de montar, utiliza servos de rotación continua para movem
"GRECO" - Robot para evitar objetos Arduino para principiantes: 6 pasos (con imágenes)
"GRECO" - Robot para evitar objetos Arduino para principiantes: Bueno, si eres un principiante, ¡aquí encontrarás la forma más fácil de construir tu propio robot evitando objetos! Usaremos un mini chasis de robot redondo con dos motores de corriente continua para construirlo más fácilmente. . Por una vez más optamos por utilizar la famosa placa Arduino UNO. Nuestro
Soporte para computadora portátil de $ 3 y 3 pasos (con anteojos de lectura y bandeja para bolígrafos): 5 pasos
Soporte para computadora portátil de $ 3 y 3 pasos (con anteojos de lectura y bandeja para bolígrafos): este $ 3 y amp; El soporte para computadora portátil de 3 pasos se puede hacer en 5 minutos. Es muy resistente, liviano y se puede plegar para llevarlo a donde quiera que vaya