Cassette tape speed control

From Helpful
Revision as of 16:47, 25 March 2021 by Helpful (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Portable casette player with a knob

Speed controlling a casette player sounded like potentially nothing more than a potmeter and done.

It turns out that cassette tape motorsare designed to keep constant speed under varying load and varying supply voltage. Which makes a lot of sense, particularly in portable designs.

The player pictured here has the electromechanical variant of fixed-speed motor, which are basically weights on the commutator contacts that lift off at the intended speed. See also cassette tape motors.

Modulating the power wins in the end, because you're starving it off speed before that liftoff.

As such, the electronics consists of little more of a transistor, and the code nothing more than reading the dial value (and CV input to allow control directly from a sequencer), mapping to useful range of voltage/speed, and writing that to PWM registers.

The range in which the speed is usefully modulated between full and probably-too-slow is relatively narrow (0.8V of the ~5V range, iirc), but this is one-time calibration for a specific motor.

I'm setting the PWM registers directly, because Arduino analogWrite() is 8-bit, and when only ~15% of the total range does something, 8-bit is a bit granular.

I (arbitrarily) settled on 10-bit PWM is a little more precise and its lower output speed is valid enough for this case due to the motor's momentum. I should experiment with higher-bit to see if there is any noticeable difference.