Making a vinyl record player with arduino

Hello everyone,

I would like to build my own vinyl turntable using arduino to control the motor for the rotating platter (33, 45, 78 rpm), the switch to change the rotational speed and perhaps a pitch control. Not thinking about the tonearm, the needle and the amplification of the sound signal for now. It's really like a DIY record player kinda project.

I've been reading around a lot, but the sources of information are very scarce and confusing. I know how a turntable works, as I like djing as my hobby. As far as I understood, the main problem is the continuos rotational speed and it can be done in many ways: using DC motors, servo motors or stepper motors, attached to a "belt" or on direct-drive with the platter. But apparently there are pro and cons to any of those which I don't fully understand. I would really appreciate some help.

Would anyone know what would be the best approach?

And, more in general, is this a feasible project?

Thanks very much in advance for anyone that will shed some light on this matter.

1 Like

A stepper motor isn't a good idea because it moves in steps. For a record player, it would be crucial to maintain a uniform speed. A servo adjusted for continuous motion is essentially a DC motor, reduction gearbox and motor driver in a single unit. You could use that to drive the turntable, although it might be a bit underpowered (and also rather noisy). I would have thought that a larger motor would be better, and a belt drive would be quieter. If you use an encoder I suggest attaching it to the motor rather than the turntable, to give you the best resolution. Whatever solution you end up with, the more rotational inertia there is in your solution the smoother the rotation is going to be.

Thanks a lot for your answer. Here are some thoughts after reading your reply.

PeterH:
A stepper motor isn't a good idea because it moves in steps.

But if the frequency of the steps is fast enough it would be like continuos rotation right? Or maybe I am not understanding.

PeterH:
A servo adjusted for continuous motion is essentially a DC motor, reduction gearbox and motor driver in a single unit. You could use that to drive the turntable, although it might be a bit underpowered (and also rather noisy).

What do you mean by "underpowered"? Would the noise be a problem at the low rotation speed I am interested in?

PeterH:
I would have thought that a larger motor would be better, and a belt drive would be quieter. If you use an encoder I suggest attaching it to the motor rather than the turntable, to give you the best resolution. Whatever solution you end up with, the more rotational inertia there is in your solution the smoother the rotation is going to be.

An example of a larger motor? What you mean by encoder? I am not sure I completely got this last bit. And I am sorry for all the questions.

A continuous rotation servo is going to be physically noisy, which will carry to the record and be picked up and amplified. I don't think it would be underpowered, a record only has air resistance holding it back.

A stepper motor could work, if you are using 1/16 microstepping. At that point, the stepper driver circuitry is sending what is nearly a sine wave to the motor. I'd still use a belt drive to help isolate vibration from the motor. But don't use the toothed belts normally associated with stepper motors.

Actually, you might get away with a simple rubber coupling. IE, a short chunk of rubber hose from the stepper shaft to the shaft of the turntable. The mass of a turntable will help smooth out vibrations, although the ideal is to prevent those vibrations in the first place.

Here is an idea - the motor from a hard drive. It is essentially just a 3 phase motor. A bit more complicated driving it from an Arduino, although sometime in the past few months, someone was working on generating 3 phase PWM'd to sine waves from an Arduino. They are rather low torque at low speed, though. If there is enough torque for direct drive, well, they are built to be such low vibration that you can put a hard drive platter on it.

ilmatte:
But if the frequency of the steps is fast enough it would be like continuos rotation right? Or maybe I am not understanding.

It depends what you consider 'fast enough' i.e. what step frequency you'll be using, how much inertia there is in your turntable and how much sound distortion you're willing to tolerate. If you aren't looking for good audio quality then it may not be an issue.

ilmatte:
What you mean by encoder?

Unless you use something like a stepper motor with positive speed control, or a synchronous motor regulated by the mains frequency, you would ideally want to measure the turntable speed and use closed loop feedback to control it.

Get an old printer. You'll find a few brushed dc-motors of different size in it, with (optical) incrementers on the back.

Create a PI-regulator using a PWM-output to drive the motor over a logic-level-fet and use the incrementer as feedback.
Don't forget the flywheel-diode!

PeterH:
A stepper motor isn't a good idea because it moves in steps. For a record player, it would be crucial to maintain a uniform speed.

A belt driven platter (driven by a stepper motor) would work if designed properly. The drive belt's elasticity and the mass of the platter would act like an RC low pass filter (the belt is the R and the platter is the C).

Also, because the motor to platter belt link is a speed step DOWN, the effect of the individual motor steps would be divided by the drive ratio.

A stepper really might be ideal for this project, given that it's speed can be controlled with digital precision and will not have any deadband or hunting problems that a DC servo motor would have.

Something even better might be an AC brushless motor (like a hard drive platter motor). Driven with sinusoidal waveforms with the proper phase shift for each winding and the proper frequency for the desired RPM (plus the mass of the platter) would make for a smooth and quiet drive.

polymorph:
Here is an idea - the motor from a hard drive. It is essentially just a 3 phase motor. A bit more complicated driving it from an Arduino, although sometime in the past few months, someone was working on generating 3 phase PWM'd to sine waves from an Arduino. They are rather low torque at low speed, though. If there is enough torque for direct drive, well, they are built to be such low vibration that you can put a hard drive platter on it.

Sorry I didn't see your post before I posted about a hard drive motor. That may be the best idea of all (direct drive, perfect digitally controlled speed and quiet, high quality bearings meant to last years at 5400 RPM or more).

Krupski:
That may be the best idea of all (direct drive, perfect digitally controlled speed and quiet, high quality bearings meant to last years at 5400 RPM or more).

It's also the most difficult way to do it.
A hard-drive motor is a 3 phase synchronous motor with neodym-rotor - such engines don't work on 3 phase AC because they aren't 3phase induction engines.

A few basics:
You have to create a driver stage which allows you to set 2 currents - the 3rd current is the difference of I1 and I2.
Your current space phaser is simply formed by the 3 currents: I=I1e^j0°+I2e^j120°+I3e^j240°.
The permanent magnetized rotor forms a flux space phaser which is constant in magnitude and direction (in a rotor-fixed coordinate system)
The momentum of the engine is flux*I as long as I is 90° before the flux space phaser.

The way to drive a psm:
At first, you have to know the position of the rotor - for example by using hall sensors.
Now you add 90° to the position of the rotor and you have your current space phaser.

To get your 2 currents, you project the current space phaser on your 3 coils, by multiplying the current magnitude with cos(coil angle - current angle).
The current magnitude is proportional to the momentum and has to be regulated to reach and hold the correct speed.

An example: The allowed current is 2 Amps.
The rotor is standing at 270°, we want to accelerate at maximum momentum.
So we have to set the current space phaser to 270°+90°=360°=0° - our current space phaser is 2Ae^j0°.
I1=2A
cos(0°-0°) = 2A.
I2=2A*cos(120°-0°)=-1A.
I1+I2+I3=0 => I3=-1A.

When the rotor starts turning, you also have to turn your current. Keep it always 90° before/behind the flux.

edit: if you want to turn into the other direction, you have to set I to 180°

Why not get a used Technics SL-D2, has all the bits needed, and replace the flashing light that is used to manually sync the speed with your arduino controlled flashing light and speed controller?

https://www.google.com/search?hl=en&source=hp&q=technics+sl-d2&gbv=2&oq=technics&gs_l=heirloom-hp.1.1.0l10.810.6129.0.8589.14.11.3.0.0.0.240.1550.0j9j2.11.0....0...1ac.1.34.heirloom-hp..0.14.1600.Ovd5RSi1Rlk