I wanted to have some fun with a BLDC motor and use it as a speaker. It turned out much better than expected.
Camera equipment used was Fujifilm X-S10 + 50mm F/2 lens + Rode Videomic Pro. No audio processing was applied, except adjusting the gain.
The motor is custom model, 42mm diameter and 7 pole pairs, with 2 linear halls for a sin/cos encoder. Motor driver is the Powerful Brushless Motor Driver V6, running custom firmware.
The audio is first pre-processed by my computer from stereo into mono, and re-sampled to 50KHz which is the motor driver’s PWM frequency and FOC loop rate. A small DC offset (around 0.14A) is added to get the motor to spin slowly, hopefully distributing the wear caused by the vibrations across the bearings more evenly. Then the data gets sent via the USB to CAN adapter into the motor driver. The motor driver has a 2KB circular buffer which holds 512 audio samples. The buffer drains the data directly into the IQ target of the FOC loop. For the demo, the peak of the audio file corresponds to 10A IQ target, and the motor gets pretty loud, I would say about the same volume as my phone (Samsung S25) at 75% volume. The motor is mounted to a cardboard box which I found to be the best surface to help transfer the vibrations to the air, although placing it on a table worked too. It does need to be firmly attached to the surface with double sided tape otherwise it tends to jump off the surface and distort the audio.