Codificador absoluto y compensaciones

0

Quiero implementar un codificador absoluto RS485, valores 0-2048, en una puerta rápida de lona. El controlador MCU que lee el codificador, que programaré, puede que no esté encendido todo el tiempo, pero debe tener en cuenta la posición de la puerta cuando está encendido. Los interruptores de límite no serán instalados. El movimiento de la puerta nunca se traducirá en una revolución de más de 360 grados en el codificador. Se espera que el movimiento máximo tenga un rango de alrededor de 1600 valores.

El instalador establecerá las posiciones más bajas y más altas durante un procedimiento de configuración: Mueva la puerta a su posición más baja, almacene el valor del codificador, mueva la puerta a su posición más alta, almacene el valor del codificador, configuración completada.

La posición más baja se puede traducir a cualquier valor en el codificador debido al hecho de que el lienzo se ajusta a la barra de desplazamiento sin el conocimiento de la posición del codificador. Por lo tanto, puede tener una posición más baja en el valor del codificador de 100 o 1000 o 2000. Esto significa que, en el movimiento normal, el valor se ajustará a 2048. Además, el instalador puede ajustar el motor en el lado izquierdo o derecho de la barra estabilizadora, por lo que el valor del codificador puede incrementarse mientras la puerta sube, o viceversa. Para complicar aún más las cosas, la puerta podría moverse más lejos de la posición más baja, debido a la interrupción del calentamiento, el cambio de la temperatura del aceite del engranaje, etc., por lo que si su valor más bajo fuera 50, podría ajustarse a cero y alcanzar un valor inferior de 1950.

Teniendo en cuenta la descripción anterior y los escenarios donde las posiciones más baja (Lxxx) y más alta (Hxxx) tienen pares de valores correspondientes de: L200-H1400, L800-H300, L10-H1500 y el movimiento inverso de esos L1400-H200, L300-H800 , L1500-H10.

¿Qué algoritmo - condiciones usaría para detener el motor en las posiciones más bajas y más altas?

    
pregunta George P.

1 respuesta

2

Lista de variables.

  • H: puerta alta. (Almacenado en EEPROM).
  • L: puerta baja. (Almacenado en EEPROM).
  • Z: desplazamiento cero. (Almacenado en EEPROM).
  • TL: temperatura baja.
  • TM: temp mid.
  • TH: temperatura alta.
  • E: lectura del codificador.
  • P: posición (lectura del codificador corregida).
  • D: dirección (booleano). 0 = aumentar la cuenta significa arriba. 1 = el conteo decreciente está arriba. (Almacenado en EEPROM).
  • Mueve la puerta al fondo. Presiona ENSEÑAR.
  • TL = E.
  • Mueva la puerta al centro. Presiona ENSEÑAR.
  • TM = E.
  • Mueva la puerta hacia arriba. Presiona ENSEÑAR.
  • TH = E.

Figura 1. Hay cuatro resultados posibles del procedimiento de enseñanza. (a) y (b) son hacia la derecha para arriba. (c) y (d) son hacia la izquierda para arriba. Tenga en cuenta que (a) y (c) no transfieren el punto cero, mientras que (b) y (d) lo hacen. (El diagrama muestra 2000 pasos por revolución, mientras que el codificador en realidad tiene 2048.)

Como tendrá que almacenar los valores H y L, también puede almacenar una posición Z (desplazamiento cero).

if (TH > TL) {                          // it's (a) or (d)
  if ( (TM > TL) && (TM < TH) ) {       // it's (a)
    D = 0;                              // increasing count is up
  } else {                              // it's (d)
    D = 1;                              // increasing count is down
  }
  Z = TH - 200;                         // Save to eeprom.
} else {                                // it's (b) or (c)
  if ( (TM > TH) && (TM < TL) ) {       // it's (c)
    D = 1;                              // increasing count is down
  } else {                              // it's (b)
    D = 0;                              // increasing count is up
  }
  Z = TH - 200;                         // save to eeprom.
}

do {
  P = (E + 2048 - Z) MODULO 2048        // bring into range and avoid rollover.
}

El bucle do llevará todas las lecturas al rango 0 a 2047 con un cómodo margen de seguridad de 200 conteos en la parte superior e inferior.

¡El resto depende de ti!

    
respondido por el Transistor

Lea otras preguntas en las etiquetas