Paso 10: Firmware
El código se compone de varios componentes:
- Un puerto serie virtual se implementa utilizando el código proporcionado por PJRC . Si usted necesita los drivers, vaya a su sitio.
- Escribí tres funciones para comunicarse con el LCD via I2C, entonces varias funciones más para inicializar el LCD y dibujar cosas en la pantalla LCD. También es una fuente de píxel de 8 x 5 que se almacena en memoria flash, así que puedo escribir fácilmente texto a la pantalla LCD. (La fuente es generada por una herramienta personalizada que escribí, pero también se puede encontrar una fuente similar en el sitio web de Newhaven Display)
- Un archivo encarga del comportamiento de los menús, otro archivo mangos recolección lectura muestra la temperatura, el otro archivo es responsable de guardar/cargar datos de memoria EEPROM.
- El archivo principal encarga de los cálculos para el control de la temperatura y automáticamente pasando por la fases de soldadura por reflujo. También maneja la inicialización de lo varios hardware interno del AVR como temporizadores.
Hay algunos detalles importantes que deba señalar aquí:
- Cuando utilice "%d", con "printf", el argumento es tomado como un entero de 16 bits firmado incluso si la variable no es, así que escribí "str_from_int" para superar esta limitación. También escribí "str_from_double" para mayor comodidad, como usar "%f" no ofrece mucho control y "dtostrf" formato hace que el código desordenado.
- El LCD, NHD-C160100DiZ, tiene una hoja que dice que la frecuencia máxima de reloj I2C puede utilizar es de 400 KHz. Esto es falso, no responde a esa frecuencia y se congela totalmente el bus I2C. También he probado 280 KHz y que no podría funcionar. Finalmente utilicé 100 KHz, y comenzó a trabajar.
- Velocidad de fotogramas de la pantalla LCD es ridiculamente lenta debido a mi microcontrolador relativamente lento (corriendo a 8 MHz), la baja frecuencia del bus I2C (100 KHz) y el hecho de que muchos datos de la fuente se almacenen en la memoria flash en lugar de RAM.
- Estoy usando PWM para controlar el relé de estado sólido. Mi razonamiento es que puedo controlar el elemento de calefacción como si estaba controlando el brillo de un LED. La frecuencia PWM debe ser baja, para el razonamiento detrás de esto, véase el apéndice.
- El valor PWM utilizado varió de 0 a 65535. Para que OCR valor 0 significa que el ciclo de trabajo 0%, valor de OCR 5000: 7,6% ciclo de trabajo OCR valor 40000 significa 61% ciclo de trabajo y OCR valor 65535: 100% ciclo de trabajo.
- El chip AD595AQ salidas una onda cuadrada en lugar de una tensión constante, la parte superior de la onda cuadrada es el voltaje que debe leerse como la temperatura. No estoy seguro si esto es intencional y una parte del diseño de AD595AQ (no puedo averiguar esto de la hoja de datos), o si es mi culpa de alguna manera. Independientemente del razonamiento, el sensor de lectura rutinas escribí cuentas para esto y se muestra sólo la parte superior de las ondas cuadradas, que también hace un promedio de.
- El valor del crudo sensor es osciló entre 0 y 1023 porque el ADC en el AVR tiene 10 bits de resolución. 1023 significa que la lectura es 3.3V porque el voltaje de referencia analógica es de 3.3V. Según la ficha técnica del AD595AQ, la tensión de salida de 320 grados centígrados es 3.227V (0 grados es de 0,027 voltios, por cierto, muy cerca de 0, el AD595AQ va a salida de 10 mV por cada grado Celcius). De estos números, sé que 1 grado celcius es 3,125 unidades de lectura de ADC crudas, y 1 unidad de lectura de ADC cruda es aproximadamente 0,32 grados centígrados. Estos cálculos de conversión son difíciles de cifrar en mi código fuente. Usted debe recordar la constante del 0,32 al ocuparse de los archivos de registro.
- Un controlador PID se utiliza para calcular la cantidad adecuada de energía para ofrecer a la resistencia. El usuario es capaz de editar las constantes del PID mediante la interfaz de usuario.
- Este controlador PID no es un típico controlador PID, es asistida mediante el uso de información que ya se conoce sobre las características del horno de la tostadora. Se permite entrada de temperatura constante más alta que puede alcanzar el horno, y cuánto tarda en alcanzar esa temperatura. De esta información, el controlador sabe cómo calcular la cantidad correcta de energía para ofrecer. El controlador PID se utiliza para ajustar esta estimación, que corrige para el non-linearity de la estimación.
- Nota: Utilice el modo de "manual PWM control" para medir la temperatura más alta que puede alcanzar y cuanto tarda para lograrlo. Para ello, entrar en ese modo desde el menú y suba el PWM a max y luego guardar la información de registro (o usar un cronómetro).
- Hay error en la configuración de dispositivo y Perfil de temperatura. El programa no permite realizar modificaciones que no tienen sentido, y si algo está mal, lo preguntaré para corregirlo antes de continuar.
Consulte el "paso Instructable" anterior sobre el gestor de arranque para ver cómo compilar y bootload código de la aplicación, incluso hay un video ahí.