cordial saludo...
estoy haciendo un control de velocidad de un motor 110v con escobillas, lo estoy controlando con u modulo esterno de cruce por cero y control pwm. este utiliza una interrupcion para cuando el modulo le envia la deteccion de cruce por cero y luego le envio la señal pwm para control de angulo de fase y ajustar la velocidad.(hasta aqui esta trabajando bien)
el problema es que lo controlo con un potenciometro con lectura A/D y asi ajustar la velocidad ademas, tengo un encoder optico con 8 aspas para tomar referencia de la velocidad y asi, estar en lazo cerrado para ajustar la velocidad cuando la carga cambie.
segun investigue seria bueno hacer lectura A/D por interrupcion y otra interrupcion para el encoder optico. entonces serian 3 interrupciones .
como podria implemnetar u ordenar las interupciones, cualquier orientacion la agredeceria ampliamente.
También depende del microcontrolador que usas y su velocidad de procesamiento. Uno de 16 o 32 bits podría ser adecuado (orientado a control de motores eléctricos) (si estuvieras usando uno de 8 bits).gracias por tu respuesta..
Debes pensar en procesamiento en multitareas cooperativas, mientras que las procesos críticos usarías interrupciones y/o periféricos independientes.
Eso puedes solucionarlo a nivel de bare metal o puedes recurrir a un RTOs
También depende del microcontrolador que usas y su velocidad de procesamiento. Uno de 16 o 32 bits podría ser adecuado (orientado a control de motores eléctricos) (si estuvieras usando uno de 8 bits).gracias por tu respuesta..
Debes pensar en procesamiento en multitareas cooperativas, mientras que las procesos críticos usarías interrupciones y/o periféricos independientes.
Eso puedes solucionarlo a nivel de bare metal o puedes recurrir a un RTOs
entiendo,,, pero si quisiera hacerlo con interrupciones como manejaria las prioridades.
como se pueden manejar las prioridades?
es justo lo que requiero manejo de prioridades.
en el siguiente fragmento no entiendo estas lineas
delay=adc*7.7; //escalamiento hasta maximo periodo adc 0 a 1024
// //120Hz -> T:8mS = 8333uS maxCódigo: C
long delay=7000; short bandera1=0; int contador=0; long adc=0; #INT_timer1 void timer1() { adc=read_adc(); //lectura de potenciometro externo para temporizar disparo delay_us(20); //tiempo de conversion adc delay=adc*7.7; //escalamiento hasta maximo periodo adc 0 a 1024 // //120Hz -> T:8mS = 8333uS max set_timer1 (65526); }