NOTAS. Odometría Velocista MiniZ.

1. Izquierda 1. Centro 1. Derecha
1518 Ohmios Cable Naranja (borne1 R), canal amarillo.
Cable verde (borne2 R), canal azul.
Respecto a tierra.
2886 Ohmios


Caída en la R, respecto a tierra. Caída en la R, respecto a tierra. Caída en la R, respecto a tierra.
2. PIN MICRONCONTROLADOR COCHE 2. PIN MICRONCONTROLADOR COCHE 2. PIN MICRONCONTROLADOR COCHE
Frecuencia = 62.5 Hz Frecuencia = 62.5 Hz Frecuencia = 62.5 Hz
3. Osciloscopio  bornes resistencia 3. Osciloscopio  bornes resistencia 3. Osciloscopio bornes resistencia
Izquierda Centro Derecha
Rizq= 1518 Ohmios Rd = 2886 Ohmios


1. Imagenes con ambos canales del osciloscopio conectados cada uno a un terminal del potenciometro. El valor del potenciometro es de 1k5 con la dirección girada hacía la izquierda y de 2k8 a la derecha. La caída  en continua en la resistencia cuando tiene un valor de 1k5 es de 1.68V, lo que da una intensidad de 1.12 mA, para 2k8 tenemos una caída de 2.24 V, 0.8 mA. La diferencia entre los dos extremos 320 uA.

2. Las segundas imagenes se corresponden con el pulso observado en el pin del microcontrolado del coche, por el que recibe la información de la posición del servo. Se puede observar como el pulso en rampa cambia de 3.7 ms cuando la dirección está girada a la izquierda a 6.2 ms en la derecha. La frecuencia de la señal es de 62.5 Hz para todos los casos.

3. El tercer grupo de imagenes se corresponde con el osciloscopio colocado en bornes de la resistencia, la referencia en un borne y la señal en el otro. Se puede observar como en el primer caso la tensión en continua cae a -1.64 V en la izquierda y a -2.20 en la derecha. También se puede observar la carga que produce la señal en rampa.

Con la emisosa apagada no hay ninguna de las señales anteriores.



Para capturar la realimentación con un micro externo dos formas posibles serían:

1. Mediante un ADC capturando el valor de continua en el borne del potenciometro de mayor tensión. (Imagenes coche controlado mediante emisora).

Señal control y señal en borne del potenciometro.






La señal de realimentación comienza con el segundo pulso de la señal de control y la rampa tiene una duracción máxima de 7 ms aproximadamente, por lo que habría que capturar el valor de la señal de realimentación una vez pasada la rampa.

Ejemplo de código:

ISR(TIMER4_COMPA_vect)
{

    unsigned int cuenta_actual=TCNT0;
    static char cont_int = 0;
    cont_int++;

    switch(cont_int)
    {
        case 1:
        {
            //Aquí se genera la señal de control MiniZ
              PORTA |=(1<<PORTA7);
             _delay_ms(1);
            PORTA &= ~(1<<PORTA7);
        }break;
        case 2:
        {
            //Código del micro (leer enconders)
                if (cuenta_actual>cuenta_old)
                {
                    cuenta=cuenta_actual-cuenta_old;
                    suma_cuenta=suma_cuenta+cuenta;
                 }          
                 else if(cuenta_actual<cuenta_old)
                 {
                cuenta=256+cuenta_actual-cuenta_old;
                suma_cuenta=suma_cuenta+cuenta;
              }
              cuenta_old=TCNT0;
              contador++;
        }break;
        case 3:
        {
            //Código micro (se lee la realimentación)
            cont_int=0;
            direccion = ADCH;
            contador2++;
        }break;
        default:break;
    }
   
    TIFR4 |= (1<<OCF4A);
}

//    OCR4A= 0x0534;        //5.33 ms


El miniz necesita una señal de control en forma de 3 pulsos cada 16 ms para funcionar, por lo que se podría programar una interrupción de un timer cada 5.33 ms y dividir las acciones a realizar en 3 partes. En la primera parte (de 0-5.33 ms) se genera la señal de control (tiempo entre 2 y 4 ms), en esta primera parte comienza la señal de rampa ocupando un tiempo entre 2 y 9 ms. En la segunda parte (5.33-10.66 ms) queda libre para el código que necesitemos o para no hacer nada. En la tercera parte (10.66-15.99 ms) capturamos el valor de la señal de realimentación mediante un ADC, ya han pasado 10.66 ms por lo que no nos encontraremos la rampa. Un problema puede ser el ruido que se encuentra en esta señal, sobretodo con el motor, por lo que habrá que capturar varias muestras y hacer una media, una conversión single ended del ADC requiere 14.5 ciclos de reloj, *128 del prescaler serían 1826 ciclos de reloj, a 16MHz de éste nos da una conversión cada 0.114 ms por lo que se podrían tomar varias muestras antes de volver a tener la señal de control. Con 10 bits de ADC tendríamos una resolución bastante buena para los valores de tensión, probablemente llegue con 8 bits.

La segunda forma de medir la señal de realimentación es capturar el tiempo de la rampa, este tiempo oscila entre 3.5 ms y 7 ms aproximadamente, la dificultad aquí puede ser una Vpp de 1V.

Señal control y señal realimentación pin micro interno.






El micro del miniz funciona a 3V, el externo a 5 V, bajar a 3V significaría reducir la velocidad del cristal a la mitad, el ATMEGA32 para tensiones de 3V la velocidad máxima es 8 MHz, mientras que para tensiones de 5V se encuentra con un cristal externo de 16 MHz. Por lo que primero sería pensar en un circuito externo para detectar el comienzo de esa rampa y a partir de ahí medir el tiempo.


Electrónica MiniZ. Cómo detecta la posición de la dirección el pic del miniz.

Siguiendo el pcb del miniz con el polímetro para sacar el circuito de realimentación (no es 100% seguro ya que está a dos caras y algunas pistas y vias están por debajo de los componentes y habría que desoldar), pero se obtiene un circuito sencillo que tiene lógica con la señal anterior:

Vcc = 3V


Este sería el circuito mediante  con el que el coche detecta el ángulo de giro de la dirección, R7 se corresponde con el trimmer y nos sirve para ajustar los valores de tensión al ángulo de giro deseado. La resistencia R8 sería el potenciometro de la dirección, cuyo valor cambia según su ángulo de giro, la resistencia R9 sirve para proteger el puerto del microcontrolador limitando la corriente, el condensador C1 es necesario para generar la señal en rampa y medir el tiempo función de la resistencias anteriores. El valor de R7 es fijo, por lo que el tiempo de la señal en rampa sólo depende del valor de la resistencia R8.

Suposición de como funciona todo ésto.

En el pin 3 del microcontrolador se observa la siguiente señal (color azul) cuando recibimos por el pin 4 la señal de control (color amarillo).




El micro es un 12c509 bastante sencillo, el cual sólo tiene un único periférico, un timer de 8 bits, por lo que no hay comparadores, adcs ni nada en lo que pensar, lo único que puede hacer es generar-detectar unos y ceros y contar.

El pin 3 para generar la señal anterior tiene que funcionar como entrada y como salida. Por defecto está configurado como salida y puesto a tierra (absorbiendo corriente), lo que llevaría la señal azul a un valor muy próximo a cero voltios. Al recibir la señal de control por el pin 4 del micro, en el comienzo del segundo pulso de ésta el pin se configura como entrada y empieza a contar tiempo. Se pondría en alta impedancia y el condensador se empezaría a cargar a través de las 3 resistencias, dando lugar a la señal en rampa que se ve. Cuando el pin 3 del microcontrolador configurado como entrada detecta/lee un uno finaliza la cuenta anetrior de tiempo, se configura como salida a cero descargando el condensador (señal azul) dejandolo preparado para un nuevo ciclo.

El condensador se carga hasta que el pic detecta un uno, es decir hasta la tensión umbral para el uno.



Nos dice en el datasheet que el mínimo es 0.8V y el máximo los 3V a los que alimentamos, el valor típico está en el 1.1-1.2 voltios observados, supongo que si varía de un micro a otro habría que ajustar el trimmer para obtener los tiempos deseados para cada ángulo de la dirección.

La tensión en el condensador (ideal) sigue la siguiente fórmula: Vc= Vcc + (Vo-Vcc)*e^(-t/RC)

Si hacemos los cálculos: Vc = 1.150, Vcc = 3 V, Vo = 0.15, C= 3.3 uF. Nos queda que el tiempo, t = 1.426*R us, lo que da para un valor de resistencia variable de dirección 1K5 (tenemos una R de 1K5 + 1K + 100) un tiempo de 3.3 ms, y para un valor de 2K8 un tiempo de 5.561 ms. Son unos tiempos muy próximos a los obtenidos en las mediciones (distan un poco pero es porque el mínimo y el máximo de la R variable son unas pocas centenas (150-300 ohmios) menos y más que el 1K5 y el 2K8 medidos inicialmente).

El micro contando el tiempo que tarda en leer un uno desde que se configura el pin 3 como entrada conoce la posición de la dirección, ésta sería una forma de hacerlo.

La otra forma ya comentada sería mediante el uso de un ADC en el borne de la resistencia variable a mayor tensión (señal azul), cuando el pin 3 del micro del coche está configurado como salida absorbiendo corriente podríamos medir un valor de tensión función del valor del potenciometro de la dirección.



Para un valor de 2K8 queda que la I que atraviesa las resistencias es igual a (3/ 2K8 + 1K + 100) = 0.7692 mA, por lo que en el borne del potenciometro de dirección tendríamos un valor de tensión de 2.23 V según los cálculos, 2.3 medidos. De igual forma para un valor de 1K5 tednríamos 1.846 V teóricos, cercano a los 1.8 V medidos.

Por lo que viendo los resultados supongo que el micro del coche obtiene la posición de la dirección de la forma anterior, y el circuito real es el dibujado.

Ejemplo de captura mediante ADC.

Vref = Vcc, Variación de la señal 400 mA, 80 valores, fijar una Vref a 3.5V para mayor resolución.

Coche controlado con Arduino Mega, lcd para comprobar funcionamiento. Sólo una muestra del ADC en cada representación en pantalla.

Código completo.