Separe los valores de calibración del programa

1

Estoy trabajando en un dispositivo con una bomba interna. Debido a las pequeñas diferencias en la velocidad del motor de la bomba, tengo que calibrar la bomba. El resultado es un valor entre 0 y 1 (ciclo de trabajo PWM). El PWM es generado por un XMEGA32A4U, que estoy programando en C ++ con Atmel Studio 7.0 y cargo el programa con un AVRISP MK II. También tengo una tarjeta SD en el sistema para guardar datos.

Mi problema ahora es el siguiente: tengo varios dispositivos y trato de evitar tener que cambiar el código fuente de cada dispositivo antes de programarlo. No solo porque soy perezoso, sino que también es propenso a errores. Y también porque el resto del código es siempre el mismo y no quiero guardar 10 veces el mismo código que contiene solo un número diferente. ¿Que puedo hacer? Cosas en las que pensé:

  • leyendo un ID de dispositivo único y, por lo tanto, determinando qué valor tomar. Pero esto requiere almacenar una ID única - > Problema de huevo y gallina. Excepto si se puede hacer en el momento de la programación con un script (?) O si hay un número de serie que puedo leer en el arranque. El ID del dispositivo parece no ser único en lo que leo.
  • Guardar los valores en la EEPROM en el microcontrolador. Investigué un poco y descubrí que esto tampoco es tan sencillo, ya que tiene que volver a tener varios archivos de origen para generar los varios archivos * .eep que debe seleccionar manualmente en la programación. Aunque esto es algo que solo necesito hacer una vez, sigue siendo "manual".
  • Guarde un archivo de configuración en la tarjeta SD y léalo al principio. Probablemente sea la parte más fácil, pero la tarjeta SD es accesible para el usuario y, en teoría, se puede eliminar e intercambiar. Por supuesto, verificar el archivo con un ID de dispositivo ayudaría, pero luego vuelvo al punto uno.
  • Utilice la comunicación en serie para almacenar un valor de configuración, que luego se escribe en la EEPROM en el dispositivo. Podría usar LabView o una secuencia de comandos para hacer esto ("ingrese el número de serie" - > comparando con la lista almacenada - > publíquelo a través de la serie)

¿Alguien tiene experiencia en esto? ¿Cuál es el mejor camino a seguir? Gracias!

    
pregunta zorgmorg

2 respuestas

0

Usted dice que ya tiene que realizar un paso de calibración en la producción y, como resultado, cargar un valor diferente en el procesador. Identificar diferentes tipos de motores, o agregar un número de serie, ID de dispositivo y similares, no es diferente.

Esto parece algo natural para mantener en la EEPROM del procesador. En producción, la plantilla de prueba habla con el micro a través de un UART de repuesto o algo así. No tiene que ser rápido, por lo que incluso un par de líneas de E / S con un apretón de manos primitivo es suficiente. Si el dispositivo ya tiene algún tipo de conexión externa, aún mejor, solo úselo.

De una forma u otra, la plantilla de prueba determina el valor de calibración para el motor en particular. En ese punto, también puede asignar una identificación de tipo y un número de serie. Estos se comunican al micro, que los escribe en su EEPROM.

Un truco que puede ser útil, especialmente cuando la plantilla de prueba se comunica a través de algún puerto de datos del cliente, es que el micro solo acepte esta información si su número de serie es FFFFFFFFh. Ese es el valor EEPROM no programado. Lo último que hace la plantilla de prueba es enviar el número de serie real. Después de eso, el micro no aceptará más cambios en el número de serie o los otros parámetros estáticos. De esta manera, no importa a qué balbuceo el cliente pueda someter el dispositivo, esta información no se puede modificar.

    
respondido por el Olin Lathrop
0

Lo que realmente quiere hacer IMO es identificar cada bomba y mantener su software idéntico para todos sus dispositivos. En el pasado, he usado dispositivos Maxim de 1 cable que proporcionan una pequeña cantidad de almacenamiento y una identificación única a nivel mundial.
Puede almacenar su valor de PWM en un dispositivo de 1 cable y hacer que forme parte de la bomba o su cable (el dispositivo de 1 cable no necesita alimentación). Esto significa que tiene dos cables adicionales en la bomba o incluso podría colocar el dispositivo de 1 cable en el conector de la bomba y evitar los cables adicionales.

Mire el dispositivo DS28E07 que tiene 1k de almacenamiento local de Eprom y cuesta $ 1 en el formulario TO92 factor y 1 fuera de la cantidad.

La interfaz es un sistema simple de dos cables (sentido y tierra).

    
respondido por el Jack Creasey

Lea otras preguntas en las etiquetas