Servo 360° funziona con Arduino UNO ma non con Pro Mini

Ciao.
Sto pilotando un servo (360° di fabbrica) con un semplicissimo sketch di prova:

#include <Servo.h>
Servo myservo;
 
void setup()
{
   Serial.begin(9600);
   myservo.attach(9);
}
 
void loop(){
myservo.write (30);
}

Con ARDUINO UNO, il servo fa quello che deve fare.
Con Pro Mini (atmega328, 8mhz, 3v3) il servo si muove a tratti: 10 di gradi ogni secondo circa (per intenderci).
Contemporaneamente, e allo stesso ritmo, lampeggia il LED associato al pin 13.
Se cambio valore a myservo.write non cambia assolutamente nulla di nulla.

Provato anche a fare senza libreria e sfruttando il PWM, parimento con UNO tutto ok, con Pro Mini stesso problema.

Premetto che ho discreta esperienza con Arduino e ho già pilotato servi in passato (ma mai 360 di fabbrica, al massimo modificati da me).

Any ideas?

Stai dentro le specifiche del servo? Forse non gli bastano 3.3V di segnale. Come lo alimenti?

Non dici come alimenti il servo: se lo alimenti con i 3.3V di Arduino non funzionerà.

Se, invece, lo alimenti a 5-6V, probabilmente il segnale a 3.3V è sufficiente a pilotare la logica.

Ecco il settaggio: su ARDUINO UNO: gnd, 3v3, pin9 su PRO MINI 3V3: gnd, vcc, pin9

Datasheet: http://www.goodluckbuy.com/magic-rcm-micro-servo-3-7g-5v-360-degree-high-torque-servo.html

Quindi se ho capito bene l'unica differenza è che nell'UNO il PWM esce 5V, nel PRO esce a 3,3V.

Come risolvo? Vorrei costruire un microrobot alimentato con una lipo 3,7V

Se stai usando PRO MINI a 3.3V la velocità di clock è 8MHz, mentre quella della UNO è 16MHz.

A parte questo, il tuo servo deve essere alimentato da una tensione compresa tra 4.8 e 6V: se lo alimenti con i 3.3V della PRO MINI potrebbe non muoversi affatto oppure stentare nel movimento.

Discorso diverso per la tensione di pilotaggio PPM che dovrebbe funzionare anche a 3.3V, ovviamente alimentando il servo a 5V.

Puoi usare un piccolo convertitore DC/DC step up in modo da portare la tensione fornita dalla LiPO ai canonici 5V e con quelli alimentare la PRO MINI che possiede al suo interno un regolatore che accetta da 3.35 a 12V ed il servo.

cyberhs: Se stai usando PRO MINI a 3.3V la velocità di clock è 8MHz, mentre quella della UNO è 16MHz.

A parte questo, il tuo servo deve essere alimentato da una tensione compresa tra 4.8 e 6V: se lo alimenti con i 3.3V della PRO MINI potrebbe non muoversi affatto oppure stentare nel movimento.

Discorso diverso per la tensione di pilotaggio PPM che dovrebbe funzionare anche a 3.3V, ovviamente alimentando il servo a 5V.

Puoi usare un piccolo convertitore DC/DC step up in modo da portare la tensione fornita dalla LiPO ai canonici 5V e con quelli alimentare la PRO MINI che possiede al suo interno un regolatore che accetta da 3.35 a 12V ed il servo.

Perdonami, vero che nel data cè scritto 4,8-6v ma se hai letto bene quando provo con Arduino UNO io lo alimento col pin 3v3 e funziona egregiamente.

L'integrato regolatore di tensione MIC5205 usato dal PRO MINI eroga 3.3V con un massimo di 150mA con cui deve alimentare il processore (diciamo circa 80mA): la differenza può essere utilizzata per altri usi.

Nella UNO, invece, i 150mA del regolatore a 3.3V sono tutti a tua disposizione e forse per questo il servo funziona.

Ovvero, @squizzy… non basta guardare i Volt, mooolto importanti sono anche gli ampere.
Per i dispositivi che “consumano” elettricità, tipo i motori/servo bisogna conoscere quanta corrente si “ciucciano” :slight_smile:

nid69ita: Ovvero, @squizzy.... non basta guardare i Volt, mooolto importanti sono anche gli ampere. Per i dispositivi che "consumano" elettricità, tipo i motori/servo bisogna conoscere quanta corrente si "ciucciano" :)

Il servo a vuoto ciuccia 50mA, inoltre per non sforzare l'arduino ho eseguito lo stesso sketch utilizzando una lipo 3,7v e mettendo a massa comune servo, lipo e Pro Mini.

Con questo settaggio invece il microservo non va a tratti, va a "manetta" e non cè verso comunque di cambiargli direzione e velocità

AGGIORNAMENTO: Con Pro Mini 5v (quello che ho però è atmega168) funziona correttamente. Alimentazione: lipo 7,4v, servo alimentato direttamente dall'arduino Esperimento ripetuto con un microservo di un altra marca. Stessi risultati (non gli piace il ProMini 3v ma accetta il ProMini 5v). Quindi: Pro Mini 5v atmega168: funziona correttamente Pro Mini 3v3 atmega368: non funziona correttamente

Che sia il microcontrollore del microservo che non lavora con 3v di tensione?

Con Pro Mini (atmega328, 8mhz, 3v3) il servo si muove a tratti: 10 di gradi ogni secondo circa (per intenderci). Contemporaneamente, e allo stesso ritmo, lampeggia il LED associato al pin 13.

Il pin 13 lampeggia perché il micro si resetta per il calo di tensione dovuto al servo collegato sulla linea 3.3V.

Cominciamo a fare le cose per bene perchè andando per tentativi si risolve poco. Usa un pacco batterie dedicato per alimentare il servo, almeno sei sicuro che l'alimentazione non c'entra. Non è saggio usare una batteria per tutto perchè i servi portano anche dei disturbi. Una volta che hai separato le alimentazioni provi con il segnale di controllo a 3.3V, se vedi che con quello da problemi hai risolto il mistero. Non tutti i servi accettano un segnale a 3.3V

pelletta: Non tutti i servi accettano un segnale a 3.3V

Questa è la risposta che risolve il 3D

cyberhs: Nella UNO, invece, i 150mA del regolatore a 3.3V sono tutti a tua disposizione e forse per questo il servo funziona.

Ma nella pagina delle caratteristiche della UNO c'è scritto che i milliampere a 3.3V sono solo 50. 150 sono quelli a 5V. Come stanno le cose?

pelletta: Non tutti i servi accettano un segnale a 3.3V

Tutti i servo RC accettano un segnale a 3.3V, mai visto un servo che non lavora con questi livelli, tutti i radiocomandi moderni lavorano internamente a 3.3V e il segnale ppm in uscita dalla ricevente è 3.3V. Il problema lamentato è dato dall'eccessivo assorbimento del servo, infatti Arduino resetta come segnalato dal lampeggio del led, sulla pro mini a 3.3V il regolatore di tensione fornisce solo pochi mA e non bastano per far funzionare un servo, anche se si tratta di un micro servo a basso assorbimento. Sulla UNO l'out a 3.3V può fornire un massimo di 150 mA, solo per brevi periodi, il valore di 50 mA indicato sulle specifiche è riferito all'uso continuo perché il regolatore non dispone di sufficiente dissipazione termica per poter fornire una corrente maggiore. Normalmente i servo rc, quasi tutti, riescono a funzionare correttamente con solo 3.6V, però erogano molta meno coppia e sono più lenti, questo perché 0.8V per cella è la tensione minima ammessa, sotto carico elevato per brevi periodi, sulle batterie NiMh, che è la tipologia alle quale sono riferiti i dati di tensione dei servo, se non diversamente specificato. Far funzionare un servo a 3.3V è il modo sbagliato per fare le cose, anche se apparentemente riesce a lavorare non vuol dire che sia affidabile e che funziona in modo corretto anche sotto carico.

astrobeed: Sulla UNO l'out a 3.3V può fornire un massimo di 150 mA, solo per brevi periodi, il valore di 50 mA indicato sulle specifiche è riferito all'uso continuo perché il regolatore non dispone di sufficiente dissipazione termica per poter fornire una corrente maggiore.

Ora è chiaro! Grazie Astro.

astrobeed:
Tutti i servo RC accettano un segnale a 3.3V, mai visto un servo che non lavora con questi livelli, tutti i radiocomandi moderni lavorano internamente a 3.3V e il segnale ppm in uscita dalla ricevente è 3.3V.

Ok

astrobeed:
Il problema lamentato è dato dall’eccessivo assorbimento del servo, infatti Arduino resetta come segnalato dal lampeggio del led, sulla pro mini a 3.3V il regolatore di tensione fornisce solo pochi mA e non bastano per far funzionare un servo, anche se si tratta di un micro servo a basso assorbimento.

astrobeed:
Far funzionare un servo a 3.3V è il modo sbagliato per fare le cose, anche se apparentemente riesce a lavorare non vuol dire che sia affidabile e che funziona in modo corretto anche sotto carico.

Se riuscissi ad alimentare il servo direttamente dalla lipo, riceverebbe per la stragrande maggioranza del tempo di funzionamento una tensione compresa tra 3,6 e 4,2V

Oggi ho fatto questi test, ripetuti almeno 2 volte e… :

Con ProMini 5v, atmega168, doppia alimentazione (5v regolati su arduino, lipo 3,7 su servo, massa in comune) FUNZIONA

Con ProMini, 5v, atmega168, singola alimentazione così fatta *vedi allegato
NON FUNZIONA, ovvero la scheda si resetta in continuo

Con ProMini, 3v, atmega328, doppia alimentazione (5v regolati su arduino, lipo 3,7 su servo, massa in comune)
NON FUNZIONA, ovvero il servo parte a manetta ed è insensibile ai miei controlli

Con ProMini, 3v, atmega328, singola alimentazione
NON FUNZIONA, ovvero la scheda si resetta in continuo

Purtroppo l’unica soluzione funzionante richiederebbe ben 3 lipo (2 per feedare l’arduino e 1 per feedare il servo), che è improponibile per il robot di 50gr che sto costruendo, limite di peso che NON posso superare.

E’ un pò frustrante e dato che non sto andando da nessuna parte dopo aver speso il weekend in laboratorio credo seriamente che dovrò andare in un Fablab e pagare qualcuno per sistemarmi il problema.

A quanto ho capito tu usi il servo semplicemente come motorino comandato. Forse potresti sostituire il motorino interno con uno di quelli da quadricotteri economici che dovrebbero andare a 3.7. Oppure usare un normale motorino a spazzole e relativa elettronica di controllo.

Piuttosto cosa intendi per "il servo parte a manetta ed è insensibile ai miei controlli"?. A che so io una volta modificati i servo per la rotazione continua vanno proprio a manetta e puoi solo cambiare il verso di rotazione. Ma forse mi sbaglio.