Problema con porte PWM e Transistor

Ciao ragazzi,
ho un problema e non ne vengo a capo.
Ho acquistato dei transistor (Mosfet) e in particolare l'IRF540A, l'intento è quello di pilotare, attraverso le porte PWM di arduino, l'alimentazione 12V di alcune strisce LED creando un effetto "fading"... il problema è questo: quando faccio una simulazione del circuito a 5v pilotando un diodo LED il fading funziona alla grande, quando invece collego la corrente 12V al Mosfet e al posto del LED metto la striscia 12V, questa non fa il fading e tantomeno si accende...
Cosa potrebbe essere? Ho sbagliato qualcosa?

Hai collegato la massa del Alimentatore con la massa del Arduino?
Ciao Uwe

Urca... no... ora provo subito...

Grande! Funziona!!
Ora ci smanetto un pò...

Grazie tante ancora per la dritta...

:wink:

Domanda da assoluto ignorante in elettronica...
Ho collegato la massa dell'alimentatore con il GND di arduino (arduino non era alimentato), ho collegato l'alimentatore 12V che doveva alimentare la striscia LED e arduino si è acceso... e tra l'altro il fading funziona...
Come mai arduino si accende? Prende la tensione dall'alimentazione 12V? Non è che si brucia tutto??

domanda inncocente :wink:
Dove hai collegato i +12V?
Ciao Uwe

Il 12v l'ho collegato direttamente sul polo positivo della striscia LED...
ti chiedo troppo di buttarmi giù uno schemino veloce, tanto per vedere i contatti come dovrebbero essere?
Grazie, ciao

Ho trovato l'inghippo, avevo sbagliato a collegare drain/source/gate del mosfet... ora funziona alla grande! Grazie!!

Bene
I Mosfet hanno un diodo tra source e drain.
Ciao Uwe

Io ho messo una resistenza di 1k tra il mosfet e il pin di arduino, giusto vero? servono altri componenti secondo te?
Grazie ancora per l'aiuto...

no, va bene cosí
Ciao Uwe

Grazie! :wink:

Salve ragazzi, prima di aprire un nuovo post, provo a riagganciarmi a questo argomento.

Devo inviare tramite PWM un impulso ad una un attuatore elettronico che funziona a 12V, in modo da mandare avanti e indietro un motorino.

Su di un forum dedicato all' argomento, ho trovato quasi tutto il necessario, tra cui addirittura il codice da usare, ma non lo schema elettrico per collegare la PWM di arduino a 5V alla scheda a 12V.

L' unica cosa che si evince dal codice ( dovrei allegarlo?) e' ce chi ha realizzato il circuito, ha usato un mostet a canale N.

con un solo mosfet non vai lontano... (al massimo vai solo in una direzione)
Ti servirebbe un ponte H.
o forse non ho capito...

confermo quello detto da brainbooster
Uwe

perdonatemi, ho sbagliato io.
Non mi collego direttamente al motorino, ma ad una scheda elettronica che accetta segnali PWM in ingresso ed in base al duty cycle ( credo sia cosi') fa variare il senso di marcia del motorino.

Per chiarezza allego il codice ( non di mia realizzazione).
Grazie.

// by jason pepas (jasonpepas@gmail.com)
// released under the GPLv2.

// parts of the program taken from Ken Shirriff's excellent article on arduino PWM stuff:
// Secrets of Arduino PWM

// min and max duty cycles which the actuator will respond to.
#define DUTY_MIN 15
#define DUTY_MAX 98
uint8_t duty_cycle = DUTY_MIN;

// min and max periods which the actuator will respond to.
#define PERIOD_MIN 106
#define PERIOD_MAX 115
uint8_t period = 110;

void setup()
{
pinMode(3, OUTPUT); // OC2B
// we are using waveform generator mode "7", which is fast pwm with TOP = OCRA.
// see the atmega168 datasheet page 157, table 17-8.
//TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
// actually, I want "inverting" mode, because I am now driving an n-channel mosfet.
TCCR2A = _BV(COM2B1) | _BV(COM2B0) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22) | _BV(CS21) | _BV(CS20);
OCR2A = period; // sets TOP (thus, frequency). 111 should be just over 140hz.
OCR2B = (uint8_t)(period * (duty_cycle / 100.0)); // sets duty cycle.
}

boolean walk_duty = true;
boolean duty_climbing = true;

boolean walk_period = false;
boolean period_climbing = false;

void loop()
{
if (walk_duty == true)
{
if (duty_cycle < DUTY_MIN) duty_cycle = DUTY_MIN;
if (duty_cycle > DUTY_MAX) duty_cycle = DUTY_MAX;
if (duty_cycle == DUTY_MAX)
{
duty_climbing = false;
}
if (duty_cycle == DUTY_MIN)
{
duty_climbing = true;
}
if (duty_climbing == true)
{
duty_cycle++;
}
else // (duty_climbing == false)
{
duty_cycle--;
}
OCR2A = period;
OCR2B = (uint8_t)(period * (duty_cycle / 100.0)); // sets duty cycle.
}

if (walk_period == true)
{
if (period < PERIOD_MIN) period = PERIOD_MIN;
if (period > PERIOD_MAX) period = PERIOD_MAX;
if (period == PERIOD_MAX)
{
period_climbing = false;
}
if (period == PERIOD_MIN)
{
period_climbing = true;
}
if (period_climbing == true)
{
period++;
}
else // (period_climbing == false)
{
period--;
}
OCR2A = period;
OCR2B = (uint8_t)(period * (duty_cycle / 100.0)); // sets duty cycle.
}

delay(20);
}

si quindi ti basta un Mos a canale N per innalzare la tensione del PWM da 5V a 12V.
Lo schema è lo stesso che useresti per un relè o dei led o qualsiasi altra cosa dove vuoi un'alimentazione più altra dei 5V

adesso ho capito..
Quoto federico :slight_smile:
forse il codice poteva essere un pò semplificato, ma direi che funziona anche così...

Ok, Federico, ma perdonami, il quesito e' proprio questo: qual e' lo schema dei collegamenti che dovrei realizzare?
Un mosfet qualsiasi va bene?
Non chiedo che mi disegniate lo schema, ma dove lo trovo uno schema che puo' risolvermi sto problema?

Grazie

in parte Federico ti ha già risposto... :slight_smile:
se non sappiamo le esigenze del controller del motore, è difficile indirizzarti verso qualcosa...