Estoy controlando la velocidad del motor y midiendo las RPM usando el módulo IR.
El método que utilicé funciona bien (giré el motor manualmente). Estoy enfrentando problemas cuando conecto el motor a la fuente de alimentación. Solo quiero detener el motor una vez que la velocidad alcance un cierto límite. Estoy contando los pulsos durante 5 segundos, una vez que el número de pulsos cruza 11. Detengo el motor.
Sin embargo, cuando proporciono voltaje al motor, el temporizador nunca llega al final (desbordamientos).
Fuente de alimentación para motor: 48V.
//This code is for ATMEGA 16
#include<avr\io.h>
#include<avr\interrupt.h>
#define F_CPU 1000000UL
#include <util/delay.h>
int del;
int x,x1,z,z1,a;
volatile int rpm;
int main (void){
DDRA = 0x00;
DDRD = 0xFF;
DDRC = 0xFF;
DDRB = 0xFB;
ADCSRA = 0x87;
ADMUX = 0xC0; // Selecting ADC0
TCNT1H = 0xAC; //5 seconds timer for rpm
TCNT1L = 0x54;
TCCR1A = 0x00;
TCCR1B = 0x04;
MCUCSR = 0x40;
GICR = 0x20; //Enable interrupt 2
sei();
while (1)
{
ADCSRA |= (1<<ADSC);
while ((ADCSRA & (1<<ADIF)) == 0);
{
x = ADCL;
PORTD = x;
x1 = ADCH;
PORTC = x1;
del = ADCL;
del |= ADCH << 8; //ADC value from pin 40 (throttle)
del = (del-512)/50;
if (del >=7)
{
PORTB = 0x08; // if throttle is completely turned, rotate at
//full speed
}
else if (del > 0) //if throttle at midway, send PWM pulses
//accordingly
{
PORTB = 0x08;
_delay_ms(del);
PORTB = 0x00;
_delay_ms(10-del);
}
if (del < 0)
{
PORTB = 0x00; //motor stopped when throttle is at initial
//position
}
}
if ((TIFR & (0x1<<TOV1))) //if timer flag HIGH
{
if (rpm >= 11) // if rpm is greater than 11 during five seconds
{
PORTD = 0xAA;
PORTB = 0x00; //stop the motor
PORTC = rpm;
_delay_ms(2000);
rpm = 0;
}
else //else continue
{
PORTD = 0xFF;
PORTC = rpm;
_delay_ms(1000);
rpm = 0;
}
TCCR1B = 0; //restart the timer
TIFR = 0x1<<TOV1;
TCNT1H = 0xAC;
TCNT1L = 0x54;
TCCR1A = 0x00;
TCCR1B = 0x04;
PORTD = 0x00;
PORTC = 0x00;
}
}
}
ISR (INT2_vect)
{
rpm++;
}
El sensor IR está en el pin 3. Estoy usando el módulo tal como está: enlace
Estoy usando este circuito para reducir el voltaje de Atmega16. hobby-hour.com/electronics/lm2576-5v-buck-regulator.png Los mosfets funcionan bien. Ya los he comprobado con carga pesada y carreras largas.