Paso 13: Arduino Demo: salida PWM
La función del contador comparar salida del temporizador se utiliza para generar señales PWM. Cuando el temporizador llegue a 0, se enciende de un perno, cuando alcanza un cierto número (que especifica), se apaga el pin. Esto genera una onda cuadrada con un ciclo de trabajo variable.
Aunque las señales de servo normal generalmente tienen un período de unos 20 ms (es decir, una frecuencia de unos 50 Hz), la salida de nuestro microcontrolador tiene un período más corto (por lo tanto una frecuencia más alta, unos 250 a 300 Hz). Los Turnigy Plush CES (y HobbyKing marca clones) se han divulgado para ser capaz de manejar la frecuencia más alta y así se pueden hacer más ajustes en la velocidad del motor por segundo, por lo tanto será más estable la quadrocopter.
También he unido imágenes de mi analizador lógico para mostrar lo que parecen las 4 señales.
Aquí está el código:
#define PWM_FREQUENCY 300 / / Hz#define PWM_PRESCALER 8
#define PWM_COUNTER_PERIOD (F_CPU/PWM_PRESCALER/PWM_FREQUENCY)
void setup()
{
pines como salida
DDRD | = (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
por defecto a la anchura de pulso de 1000 microsegundos
OCR1A = 1000 * 2;
OCR1B = 1000 * 2;
OCR2A = 1000 / 16;
OCR2B = 1000 / 16;
la configuración es:
Claro OCnA/OCnB compara partido, set OCnA/OCnB en fondo (modo sin inversión)
temporizador de configuración 1
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11);
ICR1 = PWM_COUNTER_PERIOD;
temporizador de configuración 2
TCCR2A = (1 << WGM20) | (1 << WGM21) | (1 << COM2A1) | (1 << COM2B1);
TCCR2B = (1 << CS22) | (1 << CS21);
el período es fijo para el temporizador 2, es de 244 Hz
Tenga en cuenta que timer1 es un temporizador de 16 bits y el timer2 es un temporizador de 8 bits
}
void loop()
{
int pw;
para (pw = 1000; pw < = 2000; pw += 20)
{
OCR1A = pw * 2;
OCR1B = pw * 2;
OCR2A = pw / 16;
OCR2B = pw / 16;
Delay(10);
}
para (pw = 2000; pw > = 1000; pw-= 20)
{
OCR1A = pw * 2;
OCR1B = pw * 2;
OCR2A = pw / 16;
OCR2B = pw / 16;
Delay(10);
}
}
Otras páginas agradables para leer: