¿PERO QUE ES UN MICROCONTROLADOR?

  • Iniciador del tema Iniciador del tema josechu
  • Fecha de inicio Fecha de inicio
también les informo, que para mí, unas de las cosas más prioritarias o urgentes, es crear o desarrollar, un variador para nuestros barcos, lo del puente en H, creo que ya lo tengo facíl, pero lo de controlar la señal desde el receptor, capturarla y tranformar esa señal en PWM para enviarla al puente H, me está costando. Y una de las cosas que también he podido observar, es que cuando en este foro, alguien dice algo de variadores, tiene muchas visitas, muchisimas diria yo, y eso que yo por lo menos todavía no he visto uno que sea de verdad práctico para nuestros barcos, con planos de los fotolitos, lista de componentes y código para que se lo pudiesen bajar facilmente.
tanto koala como yo, estamos terminado de comprar los componentes de la placa experimental, que aunque parezca mentira y en Madrid, haya muchas tiendas de componentes electronicos, nunca encuentras el que te hace falta, lo que nos queda, lo tenemos pedido y estamos a su espera, al igual que otros componentes de otra cosa, que se pidieron a Portugal.
bueno no me enrrollo más, saludos a todos Josechu.
 
Lo de realizar la función que deseas es más que sencillo con BASCOM:

Código:
'======================================================
'ISR für INT0 - R/C-Kanal lesen
'======================================================
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 Then
   Start Timer1
   Reading = 1
   Toggle Portc.0
'Den Timer stoppen mit fallender Flanke
Else
   Stop Timer1
   Rc_value = Timer1
   Timer1 = 0
   Reading = 0
   Toggle Portc.1
End If
'Error-Bit rücksetzen
Error = 0
Return

Esta corta secuencia del programa mide la longitud del impulso que sale del receptor del radiocontrol y como resultado nos da un valor digital correspondiente. este valor digital oscilla entre 2 extremos y esa banda equivale a las posiciones que puede asumir el control del transmisor. Lo que hay que sumar y también dispongo es de una corta rutina que nos permita hacer los ajustes necesarios para que el variador tenga su punto neutral, motor no gira, en el momento que tengamos el control en el transmisor en la posicion central y que los extremos correspndan a las posiciones extremas del Joystick en el transmisor. Esto varía entre motor y motor y siempre hay que determinar estos puntos.
Finalmente una pequena rutina adicional graba estos valores en la memoria no volatil, EERAM del controlador. Ahora el control por el controlador del variador decodifica estos datos digitales y hace que el motor gire de acuerdo.
 
Acabo de notar que los comentarios en el programa son en alemán y además quiero indicar que el autor intelectual de todo el programa es Torsten!

Aquí las traducciones:

R/C-Kanal lesen!
Leer canal del radio control

'Den Timer starten mit steigender Flanke
'Iniciar el contador (Timer) cuando el impulso cambie de valor de 0 a 1 digital, respectivamente de 0 V a 5 V.
Esto ocurre cuando el receptor pone el impulso para controlar un servo o el variador, una vez cada 20 ms!

'Den Timer stoppen mit fallender Flanke
Esto es lo inverso, el impulso acaba y el valor digital se devuelve de "1" a "0", respectivamente de forma análoga, de 5 V a 0 V.

El contador va contando unidades de tiempo, empezando desde el valor "0" y aumentando hasta que la instrucción lo para. El programa entonces le el valor del contador y el digito resultante de esta operación es equivalente al la longitud del impulso del receptor.

Para mejor entendimiento de los novatos:

El radio control genera un impulso que dura entre 1 ms y 2 ms. Un impulso significa que el valor de la tensión entre tierra, el hilo negro de cable que conecta el receptor con el variador, y el hilo amarillo, el pin del enchufe del receptor, que provee el impulso, la información cambia del valor de Tierra a 5 V, el valor que tiene el hilo rojo. Esto se repite cada 20 ms!
Si pones el control en la posición más baja, el impulso tendría 1 ms de longitud, lo que podría equivaler un valor del contador de "500".
Si pones el control en la posición más alta, el impulso tendría 2 ms de longitud, lo que podría equivaler un valor del contador de "1000".

El valor del contador teniendo un valor entre 500 y 1000 indica que la longitud del impulso ha sido medida de forma correcta. El variador, que regula el número de revoluciones del motor por PWM también genera un impulso que usa para abrir o cerrar un interruptor dejando pasar la corriente o no dejándolo pasar, un par de miles o millones de veces por segundo. Según cual porcentaje del tiempo que el interruptor deja pasar la corriente el motor va a girar más o menos rápido. El programa del variador por lo tanto asume que cuando el valor digital del receptor es “1000” el controlador del variador mantendrá el interruptor dejando pasar la corriente un 100% del tiempo.
Cuando el valor es de 750, impulso de media longitud, el joystick del transmisor está en la posición central, el interruptor en el variador esta un 100% del tiempo no dejando pasar la corriente.
Cuando el valor está entre los 500 y los 750, el motor estaría andando en reversa, el controlador accionaría un control que tiene como resultado que los polos de la batería conectados al motor son cambiados. Donde iba el polo (+) ahora estará la tierra (-), y viceversa. Esto se logra con el puente de doble “H”. Lo que hay que cuidar atraves del programa es, que nunca el puente doble H vaya a crear un cortocircuito.

El programa listado es un programa de servicio a un “interrupt”. Un interrupt es una señal que el controlador recibe debido a que ocurre un evento exterior o interior. En nuestro caso estamos observando el valor de la tensión en el pin del receptor que genera la información. Utilizamos un pin del controlador y lo iniciamos de tal forma, que cuando el valor cambia de “0” a “1” el controlador genera un interrupt al empezar el impulso del receptor y un segundo interrupt cuando el impulso acaba y el valor del receptor vuelve de “1” a “0”.
Todo lo que hace el programita es iniciar el contador cuando el impulso empieza, cambiar la inicialización del Pin para que este genere otro interrupt cuando el impulso acabe, leer el valor del contador (Timer) y grabar el valor del contador asignándole un nombre e iniciar el contador asignándole el valor de “0” para que esté listo par a contar cuando se repita el impulso 20 ms más tarde.
El programa del controlador puede estar cumpliendo cualquier función que quisiéramos que haga. Cuando el interrupt ocurre, el controlador interrumpe su programa, lo pone a un lado y ejecuta el programe de servicio que os he dado aquí como ejemplo. Una vez que el programa de servicio ha iniciado el contador, el programa que originalmente el controlador estaba ejecutando continua donde lo interrumpió el “interrupt”
Ya ven porque el “interrupt” se llama “interrupt”! Es porque interrumpe la operación normal del controlador.
Cuando ocurre el segundo “interrupt”, esto es cuando el impulso del receptor acaba, se repite lo descrito, solo que el programita ahora nota que acabe de medir la longitud del impulso y ejecuta la segunda mitad del programa.
Lo que a mí me toca realizar cuando aprendí esto, era poner en relación el tiempo que las diferentes acciones requieren.
Imagínense que el controlador ejecuta un comando 8 , 16 o 20 millones de veces por segundo. El programita de servicio, solo requiere 20 a 40 periodos de los cuales el controlador tiene 8, 16 o 20 millones por segundo. 1 ms, que es el tiempo más largo que el impulso del receptor puede tener, equivale a 1000 x 8, 16 o 20, o sea 8000, 16000 o 20000 comandos pueden ser ejecutados por controlador durante ese tiempo que nos parece tan corto. Traduzcamos esto en segundos para tener una noción más familiar de cuánto tiempo le queda disponible al controlador a parte de ejecutar la función de leer la longitud del impulso.
Digamos que un período del controlador sea equivalente a 1 segundo nuestro. Entonces el controlador ejecutará nuestro programita en 30 segundos. Después tiene que esperar hasta un máximo tiempo para que el impulso del receptor finalice, equivale 8000, o 16000 periodos, o 20000 periodos, lo que equivaldría 8000 segundos lo que sería algo más de 2 minutos, casi 5 minutos o 6 minutos según qué tan rápido estamos dejando funcionar el controlador. Y después el controlador tiene que esperar hasta que se repita el impulso lo que tomará 19 veces 2 minutos, o 19 veces 5 minutos, o 19 veces 6 minutos, esto son 38 minutos, o 95 minutos o 114 minutos. Prácticamente el controlador nunca tiene trabajo que hacer, está en paro!
Ojala esto les ayude algo para entender porque no programamos el controlador para que espere observando cuando el pin cambia de valor, sino que lo hacemos por interrupt.
De este modo un controlador puede medir la longitud de los 8 canales de un receptor normal y aún estar prácticamente sin oficio la mayor parte del tiempo. Durante este tiempo, por ejemplo, puede hacer labores de administración, puede mandar por el bus I2C los datos a otro controlador en el variador, etcétera, etcétera.
 
otra vez gracias Hellmut, ahora que lo has escrito en cristiano, parece que por lo menos veo los pasos que se han seguido, me refiero al programa.

lo de capturar la señal ccp, te dire: si bien mas o menos ya imaginaba como tendria que ser la salida del receptor, y si no me equivoco, consta de pulsos en un determinado periodo de tiempo, (PWM,= modulacion por ancho de pulso), desconocia como capturar esa señal, como medir esos pulsos en ese periodo de tiempo, y una vez capturados o medidos, como el microcontrolador lo pasaba al puente en H,

bueno tu respuesta, ha despejado mis dudas, y ya sé a que se dedica el micro cuando no lo interrumpe nadie (“interrupt”), se queda mirandome diciendo, otro que quiere aprender, para hacerme trabajar, (era una broma, que no falte el humor), sido diciendo, que aunque parezca lioso, con lo de los segundos, yo te he entendido, ademas de como toma la decición para para el motor, ir hacia delante o dar marcha atras, (se entiende con Puente H), nuestro amigo Carptroya, también me explicó algo parecido a lo de controlar el puente en H, pero si le entedí bien, creo que el captura la señal en analogico.
 
Atrás
Arriba