No varia voltaje control por Driver Mosfet IRF520 (Solucionado)

Hola, buenos días.
Soy nuevo en el foro. Primero muchas gracias por dedicarle tu tiempo a ayudarme. Voy a tratar de ser lo mas sintético posible.
Estoy queriendo regular el voltaje de una fuente de 15v 3a por medio de un modulo driver Mosfet IRF520 conectado a un Arduino UNO.
Realizo la conexión como en esta imagen ( adjunto la encontraran tal cual lo tengo):

Estoy usando este código:

int MOSFET = 3;        // LAMPARA en pin 3
int BRILLO;
int POT = 0;        // potenciometro en pin A0

void setup(){
  pinMode(LAMP, OUTPUT);   // pin 3 como salida
}

void loop(){
  BRILLO = analogRead(POT) / 4; 
  analogWrite(MOSFET, BRILLO);
}

Lo que me esta sucediendo es que al mover el potenciometro varia el voltaje de 14,78 a 15,13 ( Medido con voltimetro) Yo necesito que sea de 0v a 15v ( o de 2v a 15v, no necesariamente debe ser 0). Como logro eso? Estoy perdido.

Por la web encontré también que utilizan una librería, la HCMOTOR, ( IRF520 MOSFET Driver Module (HCMODU0083) - forum.hobbycomponents.com ) le cargue el ejemplo a arduino para probar y me sucede exactamente lo mismo ( Mismos valores de v). Dejo el código mas abajo.
Muchas gracias por su ayuda, la verdad estoy perdido.

DATE:    09/07/15
   VERSION: 0.1
   AUTHOR:  Andrew Davies

   
This example uses the library to control a DC motor via a potentiometer connected
analogue pin A0. The motor should be connected to digital pin 7 on the Arduino 
via a suitable transistor/driver module. Do not connect the motor directly as you
may damage your Arduino.

Note about driving more than one motor:
By default this library can drive up to 4 motors. However this can be increased by 
editing the following line in the libraries HCMotor.h file:

#define MAXMOTORS 4 <-- change to match the number of motors you require.

If you are using less than 4 motors and your sketch is processor intensive you may 
also want to reduce this value to match the number of motors you have attached as this 
will free up processing cycles for your main loop.

You may copy, alter and reuse this code in any way you like, but please leave
reference to HobbyComponents.com in your comments if you redistribute this code.
This software may not be used directly for the purpose of selling products that
directly compete with Hobby Components Ltd's own range of products.

THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS MAKES NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/


/* Include the library */
#include "HCMotor.h"

/* Set the pin that will control the motor. Note that it doesn't have to be a PWM pin - 
   any digital pin will do! */
#define MOTOR_PIN 7

/* Set the analogue pin the potentiometer will be connected to. */
#define POT_PIN A0

/* Create an instance of the library */
HCMotor HCMotor;


void setup() 
{
  /* Initialise the library */
  HCMotor.Init();

  /* Attach motor 0 to digital pin 7. The first parameter specifies the 
     motor number, the second is the motor type, and the third is the 
     digital pin that will control the motor */
  HCMotor.attach(0, DCMOTOR, MOTOR_PIN);

  /* Set the duty cycle of the PWM signal in 100uS increments. 
     Here 100 x 100uS = 1mS duty cycle. */
  HCMotor.DutyCycle(0, 100);
}



void loop() 
{
  int Speed;

  /* Read the analogue pin to determine the position of the pot. The map 
     function takes this value which could be anywhere between 0 - 1024 
     and reduces it down to match the duty cycle range of 0 - 100 */ 
  Speed = map(analogRead(POT_PIN), 0, 1024, 0, 100);
  
  /* Set the on time of the duty cycle to match the position of the pot. */
  HCMotor.OnTime(0, Speed);
}

En el esquema que muestras estas conectado al pin 7 y en el primer código usas el pin 3. Supongo que se debe a qeu el esquema es para el 2do código.

Pregunta, pusiste un tester a la salida del pin 3(1er código) o pin 7 (segundo código). deberías ver la misma variación entre 0 y 5V.
Si tienes saltos agrega un capacitor electrolitico de 1 a 10 uF.

Hola, gracias por responder. Si, perdón, no aclare. En el primer codigo va al pin 3 y en el segundo al 7 ( El segundo es el ejemplo de la libreria y no quise modificiarlo) Los cambio de lugar para probar.
Acabo de medir con el codigo 1 pin 3 y me da variación de 0,18 a 4,50v.
Que quiere decir eso? A la salida no varia ni 1v. Sigo perdido jaja

Hi,
Segun la foto tu estas usando el pin 7 que es una salida digital de 0 a 5 voltios. Para controlar la velocidad del motor normalmente se usa PWM,Entonces para controlar la velocidad usando el PWM en Arduino UNO necesitas usar los 3,5,6,etc.Trata de mover la salida del pin 7 al pin 3.No olvides de cambiar el pin en el sketch.Ahora como lo tienes alambrado el motor te va correr max velocidad o no corre,

Hola gracias por tu ayuda. Si ya lo había probado y tampoco. Hace lo mismo solo cambia el voltaje desde el pote de 14,7 a 15,1 Igual lei que el ejemplo de la librería HCMotor solo funciona con atmega328p y yo tengo el UNO con chip ch340: "This Arduino library (current only supports ATMega328p based Arduinos)..."
Asi que estoy usando el primer código con pin 3 ( Con PWM) y hace lo mismo.

Si yo mido SIG y GND del driver me varia de 0 a 5v cuando muevo el pote. Esta bien? y a la salida v+ y v- regula 14,7 a 15,1.

Hi,
Sugerencia con un cable conecta 5 voltios directamente a la entrada del pin de sig y el motor debe de correr. Sino quire decir que el mosfet esta danado. La funcion del mosfet es proveer el ground al motor. Otra prueba es de leer el voltaje del pin ground al ground del arduino para ver si tienes un buen ground. Si lees voltaje quire decir que no tienes buen ground. Si todos esta pruebas estan correctos quire decir que el modulo esta danado. Por ultimo haz la prueba de conectar el voltaje directamente al motor para ver si corre.

Hola,

  1. Conectando 5v al pin SIG efectivamente corre.
  2. No dan voltaje los GND
  3. Conecto directo a la fuente y me dan los 15v

Hi,
Si le connectas 5 voltios a la entrada del Sig y el motor corre entonces es posible que la salida del arduino no es suficiente para energizar el mosfet. Haz una prueba adjunto un pequeno sketch para prender el motor y apagarlo. Correla para ver que'

byte pin_motor = 3;
void setup() {
  // put your setup code here, to run once:
pinMode(pin_motor,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

}
//***************************
void prender_motor(){

digitalWrite(pin_motor,HIGH);
delay(1000);
digitalWrite(pin_motor,LOW);
delay(1000);
}

haber que sucede.

Pero porque dices que es el Arduino el que alimenta el motor si en el grafico hay conexioines VIn GND y dice Motor Power Supply?

Hi,
Segun yo entiendo el esta usando el alambrado que esta en la foto y que esta usanso otro sketch.

Y donde ves en el alambrado de la foto que el arduino alimente el motor?

Si yo mido SIG y GND del driver me varia de 0 a 5v cuando muevo el pote. Esta bien?

Esto es definitivo. El MOSFET debe estar fallado. Si a la entrada varía pero no a la salida no podemos desde acá mas que asumir que el MOSFET sufrió algun daño.
Consigue un IRF520 y reemplazalo. Es mu simple de hacerlo.

Segun el link publicado en el primer post, el modulo tiene un led. este led cambia de brillo cuando giras el potenciometro? Porque mira el esquema


Otra cosa es que el motor no tenga diodo en contra fase.

Coloca un diodo 1n4002 en adelante con catodo en le positivo y anodo en el negativo del motoro.

Hi,
Yo estoy usando la foto que puso en el hilo 1.En la foto indica como alambrar el systema. Yo le aconseje que energizara el modulo con 5 voltios directamente al pin de Sig y el motor salio corriendo. Puede se que yo haya mal entendido en la forma que el tiene alabrado el motor pero creo que el menciona que esta usando lo que suguere el web site.

El motor salio corriendo si pero no hablamos de eso.. hablamos de que varia la velocidad.
Con 14,78 a 15,13 volts el motor siempre va a salir corriendo.
El tema es si el motor se detiene cuando con el potenciometro le indicas 0 o muy baja PWM. Y para ese caso sigue entregando 14.78V Entonces? No anda el MOSFET. Al menos como yo lo veo.

Hi,
Surbyte eso es correcto y la segunda prueba es que corra el sketch sencillo que yo le adjunte para probar si el mosfet esta danado o no como tu sugiere.

Hola, actualizo. Termine cambiando el mosfet por uno nuevo ( consegui un IRL520) y funciona de 10. Ese era el error. No funcionaba el Mosfet. Gracias a todos por la ayuda!