🛠 Surveillance thermique et bridage : le sprint-marathon
Objetivos
Instrumentar la gestión térmica específica de la 3B+: límite suave por defecto a 60 °C (temp_soft_limit, con un tope de 70 °C) que reduce la frecuencia de la CPU de 1,4 GHz a 1,2 GHz, seguido de un estrangulamiento duro entre 80 y 85 °C. Aprenderá a leer la temperatura, la frecuencia y la máscara de estrangulamiento mediante vcgencmd, a generar una carga de prueba y a registrar todo con systemd.
Material
- Tarjeta tipo Raspberry Pi 3 Model B+ (idealmente con disipador o pequeña carcasa ventilada)
- Fuente de alimentación de 5,1 V / 2,5 A (el bit de subtensión distorsiona las mediciones)
sudo apt install -y sysbenchpara la carga de prueba
Código completo
#!/usr/bin/env bash
# thermal-watch.sh — journalise temperature, frequence ARM et masque de bridage.
# vcgencmd parle au GPU : c'est la source exacte selon la doc officielle.
LOG=/var/log/thermal.csv
[ -f "$LOG" ] || echo "horodatage,temp_c,arm_mhz,throttled" > "$LOG"
while true; do
temp=$(vcgencmd measure_temp | cut -d= -f2 | tr -d "'C")
clk=$(( $(vcgencmd measure_clock arm | cut -d= -f2) / 1000000 ))
# Masque : bit 0 sous-tension ; bit 3 (valeur 8) frequence bridsee ;
# bit 5 (32) sous-tension subie ; bit 6 (64) limite douce ; bit 8 (256) limite dure.
thr=$(vcgencmd get_throttled | cut -d= -f2)
echo "$(date -Is),${temp},${clk},${thr}" >> "$LOG"
printf "temp=%s C arm=%s MHz throttled=%s\r" "$temp" "$clk" "$thr"
sleep 1
done
# Lancer la surveillance et la charge en parallele
sudo ./thermal-watch.sh &
sysbench cpu --cpu-max-prime=20000 --time=600 run # 10 min de charge quad-core
# Attendu : 1400 MHz sous 60 C, puis 1200 MHz au-dessus (limite douce),
# puis bridage progressif 80-85 C. temp_soft_limit se regle dans config.txt.
Verificación esperada
Bajo carga, el CSV muestra el escalón: frecuencia a 1400 MHz mientras el sensor permanece por debajo de 60 °C, luego 1200 MHz con el bit de límite suave activado en get_throttled. En reposo, todo vuelve a bajar. Un bit de subtensión (bit 0/5) que se active indica un problema de alimentación, no de calor.
Errores frecuentes
- Confundir estrangulamiento térmico y subtensión: la máscara
get_throttleddistingue ambos — lea cada bit. - Subir
temp_soft_limitpor encima de 60: posible solo hasta 70 °C, y «puede causar inestabilidad» según la documentación;force_turbo=1+over_voltage_*graba el bit de overclock en el SoC. - Medir con
cat /sys/class/thermal/...y comparar con la GPU: la referencia oficial sigue siendovcgencmd measure_temp. - Carcasa cerrada sin flujo de aire: la masa térmica es un recurso que se agota en pocos minutos de carga de cuatro núcleos.
- Olvidar detener el script en segundo plano:
sudo pkill -f thermal-watch.sh; de lo contrario, el CSV crece indefinidamente — piense en logrotate. - Fuente de alimentación de teléfono de 1 A: falsos estrangulamientos permanentes que contaminan las mediciones.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython