Close

1. Motor selection and control

A project log for StrobeTuner

My version of the most accurate musical tuner idea.

eletraxeletrax 06/14/2016 at 09:550 Comments

The heart of a strobe tuner is the strobe disk, driven by a small electric motor. It has to spin pretty fast (thousands of RPM), but the only mechanical load is inertia and air drag. The angular speed has to be very accurate and stable. These requirements sound very familiar: After all, a CR-ROM or HDD spindle motor does exactly that. I also had plenty of HDD spindle motors. By coincidence, one of them fits exactly in the center hole of a transparent CD I found in a cake box of CD-Rs some time ago. Two birds with one stone!

Still I was a bit worried about using a BLDC motor: The sensorless motor control scheme is quite complex, and it would be hard to write a good PID regulator, able to maintain the speed with required precision. However, a BLDC motor can be treated like a 3-phase synchronous motor and fed with three sine waves 120* apart. Then all that is left is to make a precision 3-phase sine generator. Of course it would be possible to perform switching with a trio of MOSFET half-bridges, but this technique creates a lot of electrical noise, which might affect the sensitive analog part of the tuner, so let's be gentle and go with the sine. At 1-2W of power, there's no reason to be super energy efficient in a stationary application.

Initial considerations gave me faith that everything will be possible on a STM32F103C8. Generating a sine wave on a microcontroller is possible with a technique called DDS (more on that later). Some F103's have a twin channel DAC, but I need three channels. Fortunately, STM32's have many 16-bit PWM channels, and adding a RC filter to a PWM channel makes it a poor man's DAC. Now, for 3.3V powered MCU our DAC is able to produce a voltage from the range of 0...3.3V. Most HDD and CDROM motors are powered from 12V. So we need to amplify the signal about 3.5 times. The motor requires some hundreds of mA of current, so let's add some medium power transistors - and voila, we have a motor driver! Simple, cheap and hacked together, but it should work.

Discussions