Electronic – arduino – Control of a coreless DC motor using a PWM and a mosfet

arduinomosfetmotor

I'm using 4 Si2302 logic level mosfets to drive 4 coreless dc motors. The speed of the motors is control led by the PWM signal from an Arduino Pro Mini. The power supply for the boards is a 3.7V (4.2V when fully-charged) 500mAh 50C Lipo.

The circuit is setup in the following way:

  • Source to ground
  • Gate to PWM pin with a 10KΩ resistor to ground.
  • Drain to motor terminal 1
  • Motor terminal 2 to Vcc
  • Diode placed across the motor terminals

schematic

simulate this circuit – Schematic created using CircuitLab

The motor gets its RPM value via a joystick which is connected to an Analog Input on the Arduiuno. This is then converted to a 0-255 value and outputted at the PWM output.

I'm facing the following problems with the circuit:

  1. As soon as I supply power to the circuit the Motors run at full RPM till the Arduino starts taking data from the joystick. It then settles down to the RPM corresponding to the joystick position. Is there any way to counter this so that the motors remain switched off until the Arduino starts receiving values from the joystick ? (My understanding was that the 10KΩ Rgs resistor would take care of this.)

  2. The second problem is that the mosfet never fully switches off. This happens even when the joystick is at the 0 position. I have also tried switching the pins HIGH and LOW, however there is still movement in the motor. Is there any remedy to this problem?

  3. When I measure the resistance between Gate and Source, the mosfet shows around 6K ohms. Shouldn't this be around 10KΩ since the Rgs resistor is 10KΩ ? Is this a sign that the mosfet is damaged ?

Best Answer

Reduce the 10K resistor to 3.3K or even 1K.

The Si2302 device that you are using has threshold voltage around 0.65V, this is much lower than many MOSFETS which more typically have a a threshold of 2v - 4.5V.

All effects you are seeing are probably because of the pullup resistor in the Arduino (assuming it uses an AVR processor). This can be anywhere between 20K and 100K and will be putting enough current out of the processor to create a bias voltage that turns on the MOSFET slightly.

When you measured the gate resistance, was it still connected to the Arduino?

The pull-up can be disabled programmatically, but of course not until the software is running.

kevin