Dc Servo Drive 800W

Driver per motori Dc 800W (di picco)

Caratteristiche Tecniche Principali:

Alimentazione Logica 12 VDC 400mA

Alimentazione Motore 12-75VDC

Corrente Motore Regolabile da 0 a 12 Amp (1)

Uscita Alimentazione Encoder 5V 200mA

Encoder Feedback Encoder TTL letto in quadratura Freq. Max 2 Mhz (2)

Filtro Encoder Programmabile da 10 Khz a 2 Mhz

Posizione Massima Consentita +/- 2147483648 Count

Comando step-dir Optoisolato Freq. Max 500 Khz (3) – 5V 6mA

Comando Quadratura Optoisolato Freq. Max 250 Khz (3) – 5V 6mA

Ingresso Enable Optoisolato con logica selezionabile – 5V 6mA

Uscita Ready Optoisolata con funzioni programmabili (28V 50mA Max)

Campionamento Pid Regolabile da 200uS a 1mS (3)

Leds di stato drive e uscita ready

Comunicazione seriale per parametrizzazione tramite PC.


(1) La corrente massima è determinata dalla resistenza R Shunt installata

R= 0.1Ohm 5W corrente massima 6A

R= 0.05Ohm 10W corrente massima 12A

(2) La frequenza massima dipende dal tipo di encoder, il processore è comunque in grado di leggere fino a 2Mhz.

(3) La frequenza di comando è legata al campionamento del pid.

Se impostato a 200uS la frequenza massima comando è :

Step-Dir 250 Khz

Quadratura 125Khz

Se impostato a 300uS la frequenza massima comando è :

Step-Dir 400 Khz

Quadratura 200Khz

Se impostato a valori maggiori di 300uS la frequenza massima comando è :

Step-Dir 500 Khz

Quadratura 250Khz

Nel comando in quadratura la frequenza è relativa a tutti i fronti letti

Tenendo in considerazione che la maggior parte dei drive commerciali ha un campionamento di 250uS, in caso si necessiti di frequenze di step elevate, l’impostazione del parametro a 300uS non comporta sicuramente alcuna controindicazione.



Ho sviluppato un software che comunica in seriale con il processore, tramite il quale è possibile tracciare in tempo reale un grafico che rappresenta l'andamento dell'errore e delle azioni PID per permettere la regolazione dei vari parametri tra i quali possiamo trovare oltre a quelli del loop di regolazione anche i vari limiti e alcune opzioni relative agli allarmi e ai diversi modi di funzionamento.

La passione per la cnc e la voglia di creare qualcosa di un pò più difficile del solito mi hanno spinto alla progettazione di questo drive.

E' un servo drive a tutti gli effetti, che integra un soddisfacente controllo di posizione.

Per il momento è stato testato con motori da 300W alimentati a 60V e con 5A di assorbimento, il target da me prefissato è quello degli 800W visto che sulla carta i componenti non dovrebbero aver problemi a lavorare circa 80V con 10A di corrente assorbita.

Il drive può essere pilotato in maniera compatibile con i passo-passo quindi con i segnali di step e dir oppure in quadratura con i due canali A e B sfasati di 90°, è previsto un ingresso di enable che inibisce il ponte a mosfet finale in caso di disabilitazione.

Gli ingressi di comando sono optoisolati come pure l'uscita di ready che il drive pilota quando il funzionamento è regolare.

Il processore utilizzato è un PIC® della serie DsPic30, che lavora a 30Mips utilizzando l'oscillatore interno che tramite la moltiplicazione del PLL raggiunge un clock di quasi 130Mhz, velocità necessaria per poter garantire la chiusura del loop in 300μs, tempo tranquillamente paragonabile ai driver di fattura professionale utilizzati nell'industria dell'automazione.

La discreta dotazione del PIC® ci viene incontro offrendo risorse hardware di tutto rispetto come la QEI (Quadrature Encoder Interface) che ci permette di gestire l'encoder di retroazione con estrema facilità ed affidabilità.

Due ingressi di interrupt invece vengono utilizzati per la gestione dei comandi di step e dir oppure per i segnali in quadratura di pilotaggio, per i quali ho scritto una routine che interpreta tutti i fronti dei canali A e B e garantisce pienamente tutte le regole della quadratura per il riconoscimento delle sole sequenze di stati validi nei due canali.

L'interrupt scaturito da un timer ci assicura che ogni 300μs venga analizzata la situazione per calcolare l'errore e per eseguire quindi tutti i calcoli del pid che porteranno alla correzione del discostamento pilotanto il ponte a mosfet tramite due uscite in pwm del PIC®.

Il processore mette a disposizione un modulo di controllo motore che prevede, tramite 4 pwm, il pilotaggio dei 4 mosfet finali in maniera precisa e con tutte le accortezze necessarie come ad esempio il dead time che assicura la commutazione dei mosfet senza che vengano mai a trovarsi in conduzione quelli del ramo alto con quelli del ramo basso.

Tuttavia ho preferito non lasciare al PIC® questa incombenza, quindi ho utilizzato solo due uscite pwm, una per il comando positivo e una per il comando negativo di rotazione, andando a pilotare dei mosdriver dualside, che a loro volta gestiscono i mosfet assicurando fronti ripidi sulle commutazioni in quanto eliminano ogni problema causato dalla capacità di gate.

Il modulo pwm del PIC® prevede un ingresso chiamato FLTA che controlla le uscite pwm abilitandole e disabilitandole in fase, questo viene utilizzato per la limitazione di corrente, infatti un operazionale configurato come comparatore, leggendo la caduta di tensione sulla Rsense collegata in serie al ponte finale, porta a livello basso il pin FLTA ogni volta che l'assorbimento supera la soglia, impostabile con un trimmer.

In questo modo la corrente che circola viene limitata automaticamente, inoltre il firmware permette di impostare la durata massima della limitazione, mandando in fault il drive dopo il tempo impostato tramite il software di configurazione.

Abbiamo inoltre la possibilità di impostare l'errore massimo di posizione accettato dopo il quale il driver interrompe il propio funzionamento.

Questo è un esempio di assemblaggio per fare in modo di dissipare il calore prodotto dai finali e dal 7805.

Per pilotare motori fino a 150-200W di potenza non è necessario dissipare i mosfet, ma è sempre utile dissipare il 7805 visto che si occupa dell'alimentazione dell'encoder e del processore (che assorbe 200mA circa)

Questa è la semplice interfaccia di programmazione, un convertitore TTL-RS232 basato su max 232

--- NEW --- --- Clicca qui per la Pagina Downloads ---

disponibili software, pcb, schemi e aggiornamenti firmware

Taratura del PID

Ci sono dei metodi matematici che sfruttano dei modelli e si basano su rilevamento di dati e calcoli, ma io non li conosco e poi a me piacciono le cose pratiche, quindi utilizzo il metodo "sperimetale"!

Provo a descriverlo in maniera semplice, basandomi su informazioni raccolte durante lo sviluppo del drive e integrate con quelle derivate dalle mie esperienze.

Le formule che descrivo sono semplificate ma utili a capire il procedimento.

Magari leggendo queste istruzioni non avrete le idee chiare, ma passando qualche ora a fare prove pratiche la cosa diventa abbastanza intuitiva.

Il pid lavora eseguendo campionamenti e correzioni ogni tot tempo, che nel mio drive è di 300μs.

Quindi ogni 300nS analizza la situazione corrente e calcola la correzione da apportare.

Le variabili utilizzate sono:

PosizioneComandata = posizione che viene comandata all'azionamento

Posizione = posizione reale del motore

Errore= Errore instantaneo

dt = tempo di campionamento

Kp = Guadagno proporzionale

Ki = Guadagno Integrale

Kd = Guadagno Derivata

Per prima cosa viene calcolato l'errore instantaneo

Errore= PosizioneComandata - Posizione

Una volta calcolato l'errore si procede a calcolare le 3 azioni di correzione:

--- Proporzionale:

P= Errore x Kp

E' la componente che corregge maggiormente l'errore, l'azione è instantanea, possiamo dire che è la prima operazione di "sgrossatura".

Un Kp basso porta una risposta inadeguata, se troppo alto porta il sistema in pendolazione.

--- Integrale:

I= I + (Errore x dt) x Ki

Lo dice la parola, lavora per integrazione, infatti è una correzione che tiene conto degli errori precedenti.

L'integrale è utile a correggere l'errore a regime, è poco influente su cambiamenti repentini ma tende a rendere più "morbido" e "pastoso" il sistema, rallentando un pò la risposta dello stesso.

Un valore basso non permette mai di portarsi a errore prossimo allo 0 durante il funzionamento a regime, ad esempio durante uno spostamento ad incrementi costanti, quindi a velocità costante.

Un valore troppo alto produce una elongazione del comando, che all'atto pratico è ben visibile se durante la rotazione andiamo a fermare il motore, noteremo che avrà tendenza a oltrepassare la quota desiderata per poi tornare lentamente indietro, questo perchè l'integrale rimane "carico", facendo un confronto pratico, si comporta in maniera simile ad un condensatore.

--- Derivata:

D=(Errore - Errore (CampionamentoPrecedente) / dt) x Kd

La derivata lavora sulle differenze di errore, quindi si fa sentire quando ci sono grosse variazioni, come nelle accelerazioni e decelerazioni.

Un valore basso non porta controindicazioni ma tende a rendere il sistema meno pronto, specialmente in presenza di un forte fattore Ki dell'integrale.

Un valore troppo alto può rendere instabile il sistema durante il funzionamento a regime.

In molti sistemi la derivata non viene utilizzata, a mio parere non gusta.

Al termine le correzioni vengono sommate per determinare l'uscita:

Out= P + I + D

Questo è il pid nudo e crudo poi ci possono essere altre funzioni aggiuntive tipo il bias, il feedforward, la banda morta, le limitazioni per l'anti windup, etc... Questi paramentri sono presenti sul software ed impostabili abilitando la modalità di setup avanzato.

La taratura del pid generalmente la eseguo seguendo questa procedura sperimentale:

-Si porta Ki e Kd a 0

-Facendo prove di movimento si alza Kp fino a portare il sistema in pendolazione

-Un volta "pendolante" si abbassa Kp del 20-30%

-Si inizia ad alzare il Ki fino a che non si notano le elongazioni dopo lo stop della rotazione

-Si ritocca un pò Kp rialzandolo ed eventualmente si riabbassa leggermente Ki per eliminare le elongazioni

-Si alza Kd fino a quando il motore girando a regime non tende ad "impuntare"

-Si riabbassa Kd di un 30%

Una volta fatto questo primo setting la taratura è ottimizzata ad un 70-80% circa delle prestazionie, quindi si inizia a fare delle prove con movimenti più o meno veloci e impostando rampe più o meno ripide, osservando il comportamento del motore e apportando correzioni ai guadagni tenendo conto di come ogni fattore va ad influire.

Durante questo processo è importante, secondo me, avere uno strumento che visualizza le curve con le azioni e l'errore in modo da capire come la modifica di un valore va ad influire sul comportamento del motore.

Ecco perchè ho voluto curare abbastanza anche questa parte di software.

Una volta presa un pò di pratica, se le inerzie del carico applicato sono abbastanza costanti, come in una cnc, si riesce a tarare il pid in 10 minuti.

Alcuni video della prove con il motore:

http://www.youtube.com/watch?v=KYT9Axo-VxQ&feature=channel

http://www.youtube.com/watch?v=rHOORZZiMqk&feature=channel

In questi video si può vedere come lavora il motore pilotato da un encoder in quadratura:

http://www.youtube.com/watch?v=Bbd73oPy8Xk&feature=channel

http://www.youtube.com/watch?v=RkOWdITn5H8&feature=channel