Motor_thermistor.temperature always NaN despite valid ADC on GPIO1 (fw 0.6.11)

Summary

motor_thermistor.temperature always reads nan on the ODrive Micro (fw 0.6.11), regardless of configuration. The external 10K NTC thermistor is wired correctly to the THERMISTOR+/- pins and the ADC reads a valid, stable voltage via get_adc_voltage(1).

This appears to be a firmware bug in the internal decode_pin() function — no gpio_pin value (0–15, or special values 255/256/257) maps GPIO1 to the thermistor ADC channel.

Hardware

  • ODrive Micro, fw 0.6.11
  • External 10K NTC thermistor (beta 3950) wired to THERMISTOR+/THERMISTOR- header pins
  • Motor: DM-S-6015 (14pp gimbal motor)

What works

odrv0.get_adc_voltage(1)          # Returns ~2.95V (stable, valid)
odrv0.thermistor0                  # Returns ~39°C (board temp, works)
odrv0.axis0.motor.fet_thermistor.temperature  # Returns ~37°C (works)

With the 1kΩ internal pullup on the Micro’s THERMISTOR+ pin, the ADC voltage is consistent with a 10K NTC at room temperature:

import math
v = odrv0.get_adc_voltage(1)       # 2.95V
r_ntc = 1000.0 * v / (3.3 - v)     # ~8400 ohm
temp = 1.0 / (1.0/298.15 + (1.0/3950.0) * math.log(r_ntc / 10000.0)) - 273.15
# Returns ~28.3°C — correct room temp

What doesn’t work

odrv0.axis0.motor.motor_thermistor.temperature  # Always nan

Current config (saved to flash)

motor_thermistor.config:
  enabled: True
  gpio_pin: 1
  mode: 0 (Beta model)
  r_ref: 10000.0
  beta: 3950.0
  t_ref: 25.0
  temp_limit_lower: 100.0
  temp_limit_upper: 120.0
  temperature: nan  <-- BUG

What I’ve tried

Every combination of:

  • gpio_pin: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 255, 256, 257
  • mode: 0 (Beta), 1 (Steinhart-Hart)
  • r_ref: 3300, 4700, 10000, 47000, 100000
  • enabled: True
  • Save + reboot after each change
  • Full erase_configuration + reconfigure from scratch

Result: always nan, regardless of settings.

The ADC path (get_adc_voltage(1)) works fine through every test, confirming the hardware is correct. The thermistor module’s internal pin-to-ADC mapping appears broken on the Micro.

Workaround

Reading get_adc_voltage(1) directly and computing temperature in the host application works, but this bypasses the firmware’s thermal protection (temp_limit_lower/upper have no effect).

Request

Is there a known working gpio_pin value for the THERMISTOR+ pin on the Micro? Or is this a confirmed firmware bug? Since the v0.6.x firmware is closed-source, a community fix isn’t possible — this would need a firmware update from ODrive.