PWM controllo motori, abbassamento di potenza

Buonasera,
sto testando per un progetto a scopo hobbistico la gestione di motori brush tramite PWM.
Utilizzo per lo scopo i motoriduttori 37GB520, arduino uno ed il seguente controller.

Il problema è che se al PWM invio valori bassi come 30 per far girare il motore a bassa velocità, diminuisce drasticamente la forza del motore. Se invece al PWM invio come valore 255, il motore va logicamente più veloce ed anche la potenza è maggiore.
Volevo capire se fosse un effetto corretto o se invece sbaglio in qualcosa.

Grazie a tutti

Buonasera e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto. :wink:

Normale, la forza o coppia è massima alimentando il motore con la tensione nominale. Questo fenomeno accade anche senza usare il PWM, ad esempio regolando la tensione di un alimentatore da laboratorio.

Per avere una coppia alta anche a bassi regimi occorre accoppiare all'asse del motore un encoder (o sensore di velocità). Un algoritmo detto PID si occupa di regolare il PWM per mantenere la velocità costante.

Ad esempio il primo link che ho trovato.

Ciao.

Grazie mille per la dritta.
Cercherò di trovare più materiale in merito al pid.
Il problema che però riscontro immediatamente è che ai miei motoriduttori, non posso montare un encoder in quanto l'albero del motore posteriore è troppo corto.
Cerco di capire se esiste qualche soluzione per non dover ricomprare i motori.
Grazie

Le soluzioni teoriche ci sono, poi c'è da vedere se si è nelle condizioni di poterle realizzare. Ad esempio, casualmente potresti essere un torniere e saresti in grado di fissare un micro magnete su un disco equilibrato accoppiato all'asse del motore.
Accanto al disco posizioni in modo stabile una schedina con su un sensore Hall (sensore magnetico), così ad ogni giro avrai un impulso largo o stretto in relazione alla velocità di rotazione, dalla larghezza dell'impulso ricavi la velocità di rotazione.

Ma come si dice tra il dire e il fare ...

Ciao.

Se hai bisogno di maggiore coppia ad una velocità ridotta, per quanto un controllo PID a velocità costante potrebbe migliorare un po' la situazione, dubito che riusciresti ad ottenere i risultati sperati soprattutto con quel controller che non ti consente di pilotare il motore in corrente.

Se si sbaglia il dimensionamento del cinematismo motore/riduttore di solito la soluzione migliore è mettere da parte e ricominciare.

Grazie per i preziosi consigli.
Non sapevo che esistessero controller in grado di pilotare i motori in corrente.
Sapreste consigliarmene un modello?
Io ho trovato questo ma non so se abbia questa caratteristica.
bts7960b
Purtroppo per il PID non sapendo purtroppo usare il tornio, dovrò cambiare tutti i motori.
A questo punto vi chiedo come consiglio o esperienza se sia il caso dato che devo cambiare tutto, utilizzare motori brushless con i relativi ESC.
Grazie

Il concetto di base con i DC motor è che la velocità di rotazione è direttamente proporzionale alla tensione, ma la coppia disponibile è invece proporzionale alla corrente assorbita: quando devi andare piano, hai poca tensione sul motore e come la legge di Ohm insegna, di conseguenza hai poca corrente.

Il driver di cui hai messo il link è simile a quello che già hai: non hai nessun feedback (lato MCU) sulla corrente assorbita dal motore, quindi non hai modo di realizzare un controllo PI (D) in questo senso.

Facendo una rapida ricerca è venuto fuori questo video su youtube dove si parla un po' del principio di funzionamento della regolazione in corrente. C'è anche questo interessante application note sempre della TI, ma di sicuro se cerchi troverai moltissimo materiale online.

Se cerchi un risultato in tempi rapidi, usare un brushless con il relativo ESC è senza dubbio un'ottima soluzione, ma forse non proprio la più economica.

L'encoder, spazio permettendo, lo puoi montare anche sull'asse anteriore:

Ciao, Ale.

1 Like

I motori a spazzole hanno molta potenza e, più vengono frenati, più assorbono corrente per ripristinare la velocità di rotazione iniziale. Proprio per questo, contrariamente a una resistenza in serie, non dovresti avere il problema.

Potrei secondo voi installare un encoder rotativo tipo lpd3806 su una puleggia messa anteriormente al motore?
Potrebbe essere una soluzione?
Anche se ammetto dato il costo mi conviene ricomprare i motori.
Utilizzando un algoritmo PID di cui sto iniziando a studiare un po' di sorgenti.

Grazie

Se trovi come accoppiarlo sull'asse lo puoi tranquillamente usare. Io ad esempio per usare l'encoder che citi ho usato 2 ingranaggi uguali, uno sull'asse del motore e uno sull'encoder (domani tempo permettendo posto la foto), ma nella mia applicazione tornava bene così.

Forse, non do giudizi perchè non sono un esperto di motori e non so niente della tua, sino ad ora misteriosa, applicazione...

Ciao, Ale.

Assolutamente corretto.
Volevo realizzare un rover per alcuni esperimenti.
Per questo è difficoltoso posizionare un encoder.

Grazie

Buongiorno,
secondo voi sarebbe possibile eliminare quella sorta di "capsula" che trovo dietro al motore per inserirci un encoder?
O in quel posto c'è un cuscinetto? Oppure sarebbe comunque troppo corto per un encoder?

Grazie

Per questa applicazione è assolutamente necessario che i motori girino alla velocità richiesta indipendentemente dal carico meccanico a cui sono sottoposti. Rower ok ma cingolato (due motori) oppure 4 ruote (4 motori). Il problema con gli encoder è che la MCU deve avere degli ingressi specifici, certamente si può fare anche con arduino UNO che non ha ingressi specifici ma lo sconsiglio. L'ideale per un (2 uno per lato) cingolato è un controllore motore intelligente connesso alla main board del rover tramite un canale tipo SPI.

Si trovano in commercio motori ridotti con encoder incluso ma il costo sale. Sale in relazione con il numero di impulsi per giro motore.

Non puoi. se c'è cuscinetto non lo so ma solitamente c'è la bronzina che funge da cuscinetto. C'è anche il supporto delle spazzole li. Puoi solo prevederlo sull'asse anteriore.

Ciao.

Eccola:

Nel caso in oggetto mi tornava bene montato così, nel rover la vedo difficile... :confused:

Ciao, Ale.

Il rover che vorrei fare, dovrebbe avere quattro motori.
Non mi è molto chiaro il discorso della MCU.
Se non ho capito male esistono encoder con MCU? O controller che già utilizzano gli encoder?
Questa ultima soluzione sarebbe perfetta anche se purtroppo dovrò cambiare sia i motori che il controller.
Da quel poco che ho trovato e capito, gli encoder possono essere utilizzati con Arduino ma credo che possa fare difficoltà con quattro encoder.

Grazie

Questo è davvero stupendo.
Vorrei essere bravo come lei anche io.

Grazie

Si diciamo di si, per qualunque cosa esistono "cose stupide" e cose "intelligenti". Le "cose stupide" si rendono intelligenti impiegando una MCU. Quindi ad esempio 4 motori e 4 controllori intelligenti.
Il controllore intelligente è composto da:

  • Una scheda nano o una con MCU più performante.
  • Un ingresso per sensore velocità analogico o digitale
  • Un ponte H per controllare il motore in PWM.
  • Un canale di comunicazione SPI o simile

Dialoghi con il controllore intelligente tra SPI e per semplificare gli dici setpoint(50);
Il controllore riceve il comando e farà del suo meglio per mantenere la velocità di rotazione al 50% indipendentemente dal carico meccanico (entro certi limiti).

Il controllore con la nano è possibile se l'encoder ha risoluzione bassa. Ad esempio motori con encoder che si trovano in giro hanno 64 CPR (count per revolution). Facendo due conti a naso il motore gira al massimo a 5000 giri/minuto (circa 83.33 al secondo) 83.33 x 64 = 5333Hz. Se non ho sbagliato a fare i conti la nano non va bene o meglio c'è poco margine. Quindi o il motore al massimo deve girare alla metà oppure il CPR deve essere la metà o anche meno.

Ciao.

Se sei pratico di meccanica puoi allungare l'albero posteriore saldando un tondo dello stesso diametro a filo o meglio TIG e poi portarlo a misura sul diametro, e saldare uno o 2 supporti per l'encoder sulla cassa