VENTUNO Q – Fan runs at full speed after launching an MCU sketch in Arduino App Lab

Hi everyone,

I would like to report a reproducible fan control issue on my Arduino VENTUNO Q.

Hardware and software:

  • Arduino VENTUNO Q (16 GB RAM / 64 GB eMMC)
  • Ubuntu 24.04.4 LTS
  • Arduino App Lab 0.10.0
  • Arduino Zephyr board platform 1.0.0
  • STM32H5 MCU
  • Tested both with and without the Arduino UNO Media Carrier

1. Normal operation – MPU only

When running an Arduino App Lab application containing only main.py, without sketch.ino, the fan operates normally.

The application runs normally and displays:

Hello world!

Fan measurements:

fan1_input = 0 RPM
pwm1       = 0
fan1_fault = 0

The Hello world! output is simply a basic example showing that an MPU-only application runs correctly.

I have also successfully developed and tested a more complete MPU-only application for recording and playing WAV audio files, using a custom Brick, ALSA and a WebUI.

This application works correctly, with no abnormal fan behavior observed.

The fan issue appears when launching an application that also uses the MCU, even with an empty Arduino sketch.

I have also used Firefox and Arduino App Lab for more than five hours without using the MCU, with no abnormal fan behavior observed.

2. Abnormal operation – MCU enabled

I created another App Lab application containing a minimal, empty Arduino sketch:

void setup() {
}

void loop() {
}

No additional Bricks are required.

When launching this application, the fan starts running at high speed and remains there.

Measurements taken during the issue:

fan1_input = 5368 RPM
pwm1       = 0
fan1_fault = 0

On another occasion, I measured 5274 RPM, also with pwm1=0 and fan1_fault=0.

During previous occurrences, CPU temperature was approximately 28°C, despite the fan running at high speed.

The problem has also occurred with my GPS application and another test application. It is therefore not specific to the code of a particular sketch.

In previous tests, a complete power-off and power-on restored normal fan behavior.

Once the fan starts running at full speed after launching an MCU sketch, stopping the application in Arduino App Lab does not stop the fan. Even completely closing Arduino App Lab has no effect: the fan continues running at approximately 5,300 RPM.

In my tests, only a complete power-off and power-on of the VENTUNO Q restored normal fan behavior.

Despite the OpenOCD errors and the abnormal fan behavior, the application runs correctly, including the MCU sketch. The issue appears to affect the fan control rather than the application's functionality.

3. OpenOCD errors

During MCU programming, Arduino App Lab reports errors including:

Error: [stm32h5x.cpu] Execution of event examine-end failed

Error: Translation from khz to adapter speed not implemented

Error: [stm32h5x.cpu] Execution of event reset-start failed:
.../target/stm32h5x.cfg:250: Error:
{adapter speed} 480

The log also identifies the STM32H5 MCU and continues through the flashing procedure and application container startup.

I do not know whether these OpenOCD errors are related to the fan issue, but I am including them because they occur during the same MCU launch sequence.

4. Observations

  • MPU-only applications: normal fan behavior in the tests performed.
  • Applications using the MCU: fan runs at approximately 5300 RPM.
  • The issue occurs even with an empty sketch.
  • The Arduino Q Media Carrier is not required to reproduce the issue.
  • The fan speed remains high despite pwm1 reporting zero.

I would appreciate any guidance on whether this could be related to the MCU programming/reset sequence, OpenOCD, or the fan controller.

I can provide additional diagnostic measurements if needed.

Before attempting a complete system reflash, I would prefer to wait for my NVMe SSD, which should arrive shortly, so I can first investigate backup options for my current installation.

Thanks in advance!

P.S. I only noticed this fan issue very recently. Until now, I have mainly been developing and testing applications that use the MPU only, without involving the MCU.

As far as I remember, I have used very few applications involving both the MCU and MPU, possibly only my UNO-Q-GPS project.

Therefore, I cannot say when this issue first appeared or whether it was already present before the recent system updates.

Additional observation after a clean Ubuntu reflash

I have noticed that the fan does not always start running at full speed when an MCU sketch is launched.

Sometimes it happens when the application starts, but sometimes it happens only when I press Stop in Arduino App Lab.

For example, I launched my GPS application today. The fan behaved normally while the application was running, but started running at full speed immediately after I pressed Stop

The fan continues running at full speed even after Arduino App Lab is closed.

Applications using only the MPU (Python, without an MCU sketch) do not trigger this behavior.

The issue is still reproducible after a complete reflash using the official Ubuntu image.

Hi @ptillisch

VENTUNO Q – Video demonstration of the fan issue

I recorded a video showing the issue:

The sequence is as follows:

  1. Initially, the fan is stopped.

  2. I launch an Arduino App Lab application using only the MPU (Python, without an MCU sketch). The fan starts normally, then eventually stops.

  3. I launch an application containing an empty sketch.ino. The fan starts and gradually reaches full speed.

  4. I stop the application and close Arduino App Lab, but the fan continues running at full speed.

The fan only stops when the VENTUNO Q is completely powered off.

In other tests, the fan sometimes reaches full speed when starting an MCU application and sometimes only after stopping it.

The issue persists even after a complete reflash using the official Ubuntu image.

The video demonstrates that the abnormal fan behavior is associated with the use of an MCU sketch, even when the sketch contains no application code.

Thanks

Hi everyone,

I would like to provide an update on the fan control issue affecting my VENTUNO Q.

Since my previous report, I have performed additional tests and installed several software updates.

Current configuration:

  • VENTUNO Q — 16 GB RAM / 64 GB eMMC

  • Ubuntu 24.04.5 LTS

  • Linux kernel 6.8.0-1084-qcom

  • Arduino App Lab 0.11.0

  • Arduino App CLI 0.14.0

  • Arduino App daemon 0.14.0

Unfortunately, the fan issue persists despite these updates.

Additional observations

  1. After restarting the board, the fan initially operates normally.

  2. Applications running exclusively on the MPU do not trigger the issue.

  3. All applications involving the MCU that I have tested can trigger the fan issue, regardless of their code or functionality. This includes applications with an empty MCU sketch.

  4. The issue may occur either when pressing Run or when pressing Stop in Arduino App Lab.

  5. The behavior is intermittent. The same MCU application may run normally during one test and trigger the fan issue during another.

  6. Even when the fan is running at full speed, applications involving both the MCU and MPU continue to function correctly.

Latest tests

During my latest tests, I ran two different applications involving both the MCU and MPU.

The first application started and stopped normally, without affecting the fan.

I then launched a second application. This time, the fan started running at full speed immediately after pressing Stop in Arduino App Lab.

During subsequent tests, the first application also triggered the issue.

These observations indicate that the intermittent fan issue is specifically associated with applications involving the MCU, regardless of their code or functionality.

All MCU-based applications tested so far have exhibited this intermittent behavior, including applications with an empty MCU sketch.

In contrast, applications running exclusively on the MPU have never triggered the issue.

Fan measurements

Previous measurements showed approximately 5,300 RPM while pwm1 remained at 0, despite normal system temperatures (typically between 24°C and 29°C).

The fan continues running at full speed even after the application has been stopped.

A complete board restart restores normal fan operation, at least temporarily.

Current assessment

The issue appears to be associated with MCU application startup or shutdown, rather than with the application code itself.

However, I cannot determine whether the root cause is related to Arduino App Lab, the MCU firmware, the Linux fan driver, or a hardware issue specific to my board.

The problem was already present before upgrading to App Lab 0.11.0 and persists after updating Ubuntu 24.04 LTS to its latest maintenance release, without upgrading to a newer Ubuntu version.

Since I have not seen similar reports from other VENTUNO Q users, I am also considering the possibility of an individual hardware defect.

Could someone from the Arduino engineering team advise on the next diagnostic steps, particularly regarding the EMC2305 fan controller and its possible interaction with MCU startup/reset operations?

I would prefer to identify the cause before considering a hardware replacement.

Thank you for your assistance.

I had this exact issue, linux commands low speed but it defaults to full, its simple to fix and survived power cycles for me:

Ventuno Q fan stuck at full speed (~5300 RPM) — fixed with a simple fan curve service

Symptom: The fan ran flat out all the time, even at around 32 °C idle. Nothing was hot, so this wasn't thermal throttling.

Cause: The fan controller (an emc2305 chip) is set to PWM 0 by the kernel whenever the board is cool. This fan reads a steady 0 signal as a lost or failed signal and fails safe to 100%. So the cooler the board, the louder the fan. Everything between 1 and 255 works normally.

Fix: A small systemd service that sets the fan speed from the hottest temperature sensor and never sends 0. My settings: a quiet floor (~1500 RPM) up to 38 °C, a ramp from there, and full speed at 75 °C. The board does long LLM/NPU runs at around 38–40 °C and stays quiet.

All commands are single lines, because multi-line pastes kept getting mangled over phone SSH.


1. Confirm it's the same problem

Find the fan controller:

grep . /sys/class/hwmon/*/name

Look for emc2305. Mine was hwmon0; substitute your number below if it's different.

grep . /sys/class/hwmon/hwmon0/pwm* /sys/class/hwmon/hwmon0/fan*_input

If pwm1 is 0 and fan1_input is around 5000+ RPM, you have this issue.

2. Prove the fan responds (safe while it's cool)

echo 128 | sudo tee /sys/class/hwmon/hwmon0/pwm1
cat /sys/class/hwmon/hwmon0/fan1_input

Mine dropped to about 3270 RPM. 255 gave about 5234 and 0 gave about 5324, so only 0 is wrong. If the RPM doesn't change at all, check the fan cable instead; this fix won't help.

3. Install the fan curve script

printf '%s\n' '#!/bin/sh' 'H=$(dirname $(grep -l emc2305 /sys/class/hwmon/*/name))' 'while true; do' ' T=$(cat /sys/class/thermal/thermal_zone*/temp | sort -n | tail -1)' ' T=$((T/1000))' ' if [ $T -le 38 ]; then P=60' ' elif [ $T -ge 75 ]; then P=255' ' else P=$((60+(T-38)*195/37)); fi' ' [ "$(cat $H/pwm1)" != "$P" ] && echo $P > $H/pwm1' ' sleep 5' 'done' | sudo tee /usr/local/bin/fancurve.sh
sudo chmod +x /usr/local/bin/fancurve.sh

4. Make it a service that starts at boot

printf '[Unit]\nDescription=Fan curve (never PWM 0)\n[Service]\nExecStart=/usr/local/bin/fancurve.sh\nRestart=always\n[Install]\nWantedBy=multi-user.target\n' | sudo tee /etc/systemd/system/fancurve.service
sudo systemctl daemon-reload && sudo systemctl enable --now fancurve

5. Verify

systemctl is-active fancurve

It should print active.

cat /sys/class/hwmon/hwmon0/pwm1 /sys/class/hwmon/hwmon0/fan1_input

When cool, you should see a PWM of about 51–60 and roughly 1500 RPM. Mine reads 51 instead of 60 because the chip rounds to steps of about 25; that's harmless.

To watch it react under load:

watch -n2 cat /sys/class/hwmon/hwmon0/pwm1 /sys/class/hwmon/hwmon0/fan1_input

Tuning (optional)

Edit the numbers in /usr/local/bin/fancurve.sh:

  • -le 38 sets where ramping starts (°C)
  • -ge 75 sets where it hits full speed (°C)
  • P=60 sets the quiet floor (keep it above 0!)
  • (T-38)*195/37 is the ramp: 195 is 255 minus the floor, and 37 is full-speed temp minus start temp

Then restart it:

sudo systemctl restart fancurve

Undo

sudo systemctl disable --now fancurve && sudo rm /etc/systemd/system/fancurve.service /usr/local/bin/fancurve.sh

This puts the fan back under kernel control, which means back to full blast when cool.

Result: quiet at idle, still dynamic under load, and it survives reboots. Three long storytelling runs on the NPU only reached about 38 °C on the lowest fan speed.

Hope this is your solution!

-AJ

@zx10pilot on TT

Thank you very much for your detailed explanation and for taking the time to share your solution!

Your measurements are very similar to mine:

  • pwm1 = 0

  • fan1_input ≈ 5300 RPM

However, there is an important difference: on my VENTUNO Q, the fan operates normally after a reboot.

The problem occurs intermittently when starting or stopping applications involving the MCU in Arduino App Lab. Applications running exclusively on the MPU have never triggered the issue.

Your findings regarding the EMC2305 controller are certainly interesting and may help identify the cause.

However, before modifying the fan control system or installing a custom service, I would prefer to wait for feedback from the Arduino engineering team.

I believe it is important to understand the root cause and determine whether an official fix is needed.

Thank you again for your contribution!

Before it happened to me on every boot, it happened between programs on app lab, like if i changed a chat setting it would start full speed. But then that issue started to persist between boots, so i debugged what i could!

Thank you for this additional information!

This is particularly interesting because your issue initially seems to have been very similar to mine.

The fact that your problem eventually became persistent, even after rebooting, is also important information.

Hopefully, the Arduino engineering team will be able to investigate this behavior and identify the root cause.

Thanks again for sharing your experience!

Hi @philippe86220 , thanks for the extensive report! We were able to track down the problem, fix is here and will roll out with the upcoming 1.1.0 core version (and shortly after available on AppLab)

Hi @facchinm,

Thank you very much for your response and for taking the time to investigate this issue!

I’m very pleased to hear that the root cause has been identified and that a fix is already on the way.

I’ll wait for the official App Lab update before running further tests on my VENTUNO Q.

Many thanks to you and the Arduino engineering team for your work and support!