Controllo ventola pwm

Ed ecco il secondo problema della giornata (il primo qui http://forum.arduino.cc/index.php?topic=185288.0)

Come faccio a spegnere una ventola per pc a 12v con ingresso pwm (4 fili)? pensavo bastasse semplicemente portare il pwm a 0 invece continua a girare al minimo. devo interrompere l'alimentazione? come?

Che pin usi per il PWM ? Perché nel reference, QUI, c'è una nota che testualmente dice :

Notes and Known Issues

The PWM outputs generated on pins 5 and 6 will have higher-than-expected duty cycles. This is because of interactions with the millis() and delay() functions, which share the same internal timer used to generate those PWM outputs. This will be noticed mostly on low duty-cycle settings (e.g 0 - 10) and may result in a value of 0 not fully turning off the output on pins 5 and 6.

Guglielmo

grazie Guglielmo,

ho utilizzato il pin 8, per sicurezza ho provato anche gli altri pin ma la ventola non si ferma.
quindi non. normale....la ventola.con pwm a 0 deve essere ferma?confermi?

Per sicurezza, nel tuo loop, potresti aggiungere questa riga (... ovviamente mettendo al posto di PIN il tuo vero pin ed al posto di PWM la tua variabile che indica il PWM) :

if( PWM == 0){ digitalWrite( PIN , LOW ); }

... e vedere se cambia qualche cosa ?

Guglielmo

Il core di Arduino usa due trucchetti: quando il PWM da scrivere su un pin è pari a 0, semplicemente fa un digitalWrite(LOW) sul pin, quando è pari a 255 fa un digitalWrite(HIGH). In entrambi i casi stacca il timer.
Quindi non penso che sia questo il motivo per cui dando un analogWrite(0) la ventola continui a girare.

Ma staccando il filo del pwm della ventola da arduino e collegandolo alla massa della ventola, si ferma ? ... tanto per essere sicuri che la ventola non sia il problema :wink:

leo72:
Il core di Arduino usa due trucchetti: quando il PWM ...

Leo, non metto assolutamente in dubbio, ma ... se fai un po' di ricerche vedrai che la soluzione che gli ho indicato sopra, viene segnalata come "risolutrice" in molti casi ... non chiedermi perché ... :roll_eyes:

Per cui, magari tentar non nuoce :grin:

Comunque, il suggerimento di Ete è corretto: stacca quel filo e mettilo a massa ... si ferma la ventola ??? Se NO, vuol dire che è comunque progettata per avere una velocità minima sotto la quale non scende :wink:

Guglielmo

Ti mostro il codice della analogWrite:

void analogWrite(uint8_t pin, int val)
{
	// We need to make sure the PWM output is enabled for those pins
	// that support it, as we turn it off when digitally reading or
	// writing with them.  Also, make sure the pin is in output mode
	// for consistenty with Wiring, which doesn't require a pinMode
	// call for the analog output pins.
	pinMode(pin, OUTPUT);
	if (val == 0)
	{
		digitalWrite(pin, LOW);
	}
	else if (val == 255)
	{
		digitalWrite(pin, HIGH);
	}
	else
	{
		switch(digitalPinToTimer(pin))
.................ecc.........

Come vedi, non fa altro che quel che ti ho detto io.

leo72:
Ti mostro il codice della analogWrite:
....

Non ne dubitavo ... quindi deduco ... che quello che si legge siano le solite "leggende metropolitane" :grin: :grin: :grin:

Guglielmo

Andrebbero visti i cori vecchi, magari questa cosa nel corso degli anni è cambiata ed andava bene prima, poi per "memoria storica" è stata tramandata di generazione in generazione fino ai giorni nostri :stuck_out_tongue_closed_eyes:

Rieccomi.....ho provato a collegare il pwm a massa, niente, la ventola va al minimo.

Come posso fermarla?

Con una gettata di cemento. :grin:

Cambia ventola oppure togli l'alimentazione (ma complichi il circuito e/o usi un altro PIN per comandare un transistor). A meno di accorgimenti a me ignoti (diodi e condensatori da qualche parte).