GUI Temperatura.
Librería MAX31855.
Componente HAL MAX31855.
Configuración archivo .ini
En el archivo .ini se pondrá la Gui de temperatura y el archivo postguihal necesarios para leer la temperatura y realizar las conexiones.
[DISPLAY] # Name of display program, e.g., tkemc #DISPLAY = tkemc #DISPLAY = axis DISPLAY = gmoccapy_lcd7 #EMBED_TAB_NAME = right_side_panel #EMBED_TAB_LOCATION = box_right #EMBED_TAB_COMMAND = gladevcp -x {XID} ReadTemp.glade EMBED_TAB_NAME = Temperatura EMBED_TAB_LOCATION = ntb_user_tabs EMBED_TAB_COMMAND = gladevcp -x {XID} ReadTemp.glade
En este caso se visualizará la temperatura en las pestañas de gmoccapy.
[HAL] # The run script first uses halcmd to execute any HALFILE # files, and then to execute any individual HALCMD commands. # list of hal config files to run through halcmd # files are executed in the order in which they appear HALFILE = MF5-Dual-Extrusion.hal #HALFILE = joypad.hal HALUI = halui POSTGUI_HALFILE = 3D.postgui.hal
Se cargan los archivos .hal que se utilizarán, joypad y halui son para poder controlar machinekit con un mando de juegos en mi caso con el control del Xbox 360. Se realizará esta configuración en tutoriales posteriores.
Configuración Archivo .hal
En el archivo .hal se debe aumentar y modificar algunas líneas.
En este caso se va a leer dos extrusores (termocuplas) con el amplificador MAX31855 y se usará el módulo de PID para controlar la temperatura.
loadrt pid count=3 loadrt limit1 count=3 loadusr -Wn Extruder0 hal_temp_max31855 -n Extruder0 -b SPI0 -num 1 -i 0.3 loadusr -Wn Extruder1 hal_temp_max31855 -n Extruder1 -b SPI0 -num 2 -i 0.3
Se añade el pid al servo-thread
addf pid.0.do-pid-calcs servo-thread addf pid.1.do-pid-calcs servo-thread addf pid.2.do-pid-calcs servo-thread addf limit1.0 servo-thread addf limit1.1 servo-thread addf limit1.2 servo-thread
Se crean nuevas señales que controlarán los extrusores y cama caliente.
newsig e0.temp.set float newsig e0.temp.meas float newsig bed.temp.set float newsig bed.temp.meas float newsig e1.temp.set float newsig e1.temp.meas float
Se da una frecuencia para generar las señales PWM, en este caso de 1khz.
1000000ns -> 0.001s.
1/0.001 = 1khz
setp hpg.pwmgen.00.pwm_period 1000000
Se define los GPIO que van a generar las señales PWM.
# P9.26 gpio0_14 Extrusor 1 setp hpg.pwmgen.00.out.01.pin 0x2E setp hpg.pwmgen.00.out.01.enable 1 setp hpg.pwmgen.00.out.01.value 0.0 # J9.16 gpio1_19 Bed #setp hpg.pwmgen.00.out.00.pin 0x53 #setp hpg.pwmgen.00.out.00.enable 1 #setp hpg.pwmgen.00.out.00.value 0.0 # P9.15 gpio1_16 Extrusor 0 setp hpg.pwmgen.00.out.02.pin 0x50 setp hpg.pwmgen.00.out.02.enable 1 setp hpg.pwmgen.00.out.02.value 0.0
Por útlimo se unen las señales con los componentes.
# PID for Extruder 0 temperature control net e0.temp.meas <= Extruder0.Temp.meas net e0.temp.meas => pid.0.feedback sets e0.temp.set 0 net e0.temp.set motion.analog-out-02 => pid.0.command net e0.temp.set => Extruder0.Temp.set net e0.done motion.digital-in-02 <= Extruder0.Temp.set.done net e0.heater <= pid.0.output net e0.heater => limit1.0.in net e0.heaterl <= limit1.0.out net e0.heaterl => hpg.pwmgen.00.out.02.value # Limit heater PWM to positive values # PWM mimics hm2 implementation, which generates output for negative values setp limit1.0.min 0 # PID for Extruder 1 temperature control net e1.temp.meas <= Extruder1.Temp.meas net e1.temp.meas => pid.1.feedback sets e1.temp.set 0 net e1.temp.set motion.analog-out-01 => pid.1.command net e1.temp.set => Extruder1.Temp.set net e1.done motion.digital-in-01 <= Extruder1.Temp.set.done net e1.heater <= pid.1.output net e1.heater => limit1.2.in net e1.heaterl <= limit1.2.out net e1.heaterl => hpg.pwmgen.00.out.01.value # Limit heater PWM to positive values # PWM mimics hm2 implementation, which generates output for negative values setp limit1.2.min 0 # PID for Bed temperature control #net bed.temp.meas <= Temp.Temperatura #net bed.temp.meas => pid.2.feedback #sets bed.temp.set 0 #net bed.temp.set => pid.2.command #net bed.heater <= pid.2.output #net bed.heater => limit1.2.in #net bed.heaterl <= limit1.2.out #net bed.heaterl => hpg.pwmgen.00.out.00.value # Limit heater PWM to positive values # PWM mimics hm2 implementation, which generates output for negative values setp limit1.1.min 0 # PID Parameters for adjusting temperature control # Extruder0 #setp pid.0.FF0 0 #setp pid.0.FF1 0 #setp pid.0.FF2 0 setp pid.0.Pgain 0.366693 setp pid.0.Igain 0.00001 setp pid.0.Dgain 0.9375 setp pid.0.maxerror 0.0 setp pid.0.bias 0.5 setp pid.0.enable 1 # Extruder1 #setp pid.1.FF0 0 #setp pid.1.FF1 0 #setp pid.1.FF2 0 setp pid.1.Pgain 0.366693 setp pid.1.Igain 0.00001 setp pid.1.Dgain 0.9375 setp pid.1.maxerror 0.0 setp pid.1.bias 0.5 setp pid.1.enable 1 # Bed #setp pid.2.FF0 0 #setp pid.2.FF1 0 #setp pid.2.FF2 0 #setp pid.2.Pgain 1 #setp pid.2.Igain 0.0 #setp pid.2.Dgain 0.0 #setp pid.2.maxerrorI 1.0 #setp pid.2.bias 0.5 #setp pid.2.enable 1
Archivo Postgui .hal.
# Include your customized HAL commands here # Run on Gmoccapy with gladevcp panel net e0.temp.set => ReadTemp.Extruder_Hal_lbl net e0.temp.meas => ReadTemp.E0_Temp net bed.temp.set => ReadTemp.Bed_Hal_lbl net bed.temp.meas => ReadTemp.Bed_Temp net e1.temp.set => ReadTemp.Extruder1_Hal_lbl net e1.temp.meas => ReadTemp.E1_Temp
El siguiente esquematico se basa en el diseño de Adafruit para los MAX31855 y de CRAMPS para la conexión de los Fusores (Extrusores). A continuación dejo los links para los que deseen descargar los esquemáticos.
Adafruit MAX31855
CRAMPS
En el siguiente gif se muestra la lectura de temperatura usando el amplificador MAX31855 con termocuplas tipo K. Se calienta el primer extrusor y luego el segundo extrusor.