Jump to content
PLC Forum


Calcolo Posizione Teorica Del Master


christian924
 Share

Recommended Posts

salve a tutti,

sono alle prese con la creazione di un asse elettrico.

come base di tutta la faccenda ho brutalmente impiegato la parte di codice messa generosamente in linea nella sezione didattica da Livio Orsini.

nello specifico il file asse_el.

il mio sistema si occupa di sincronizzare un asse master la cui posizione viene rilevata da encoder incrementale con un asse slave la controllato in anello aperto con un inverter incrementale.

provo a dare alcuni dati.

gli encoder sono installati sugli alberi lenti ( no direttamente sui motori)

il motore master ruota alla velocità costante di 60 rpm (53,5Hz)

il motore slave parte da fermo con asse master già in movimento alla velocità di cui sopra

il sistema attualmente funziona e una volta dato il comando di "aggancio" dell'asse master accelero a velocità fissa usando la rampa dell'inverter dopodiche abilito la regolazione per inseguire la posizione del master. ottengo un errore di inseguimento molto basso e accettabile.

il mio problema è che con pochi giri dell'asse master mi ritrovo con lo slave " sfasato" in maniera notevole.

nell'esempio di Livio Orsini ho notato che per calcolare l'errore si fa la somma di tutti i delta di posizione rilevati tra una scansione e l'altra del ciclo di interrupt. io invece ho memorizzato la quota dell'asse master nel momento in cui metto in run lo slave e poi sottraendola alla quota reale la uso per trovare l'errore di inseguimento.

consultando anche il tuttorial di Livio non ho trovato nulla che possa fare pensare che questo modo di procedere non sia corretto.

qualcuno ha avuto esperienze simili?

grazie mille per la collaborazione!! :thumb_yello:

Link to comment
Share on other sites


Se ho capito correttamente il problema che descrivi lo sfasamento è dovuto alla mancata integrazione della posizione dello slave.

In altri termini ti limiti ad una sincronizzazione delle due velocità. Il piccolo errore istantaneo si somma e nel tempo provoca uno sfasamento non accettabile.

La soluzione più immediata per la tua applicazione, e meno dolorosa :) , consiste nell'azzeramento dei due contatori (master e slave) nel momento in cui le due velocità sono simili. Da quel momento in poi confronti sempre le due posizioni a tempo costante (p.e. 20ms). La differenza trai i due contatori è una differenza di posizione relativa, quindi un errore di fase. Moltiplichi questo errore per una costante e sommi algebricamente il risultato al riferimento slave. Questo porterà a correggerne la velocità in modo continuativo ed a contenere l'errore di posizione entro una piccola oscillazione positiva e negativa.

Ovviamente i due contatori Hw dei due encoders tenderebbero ad assumere valori grandissimi andando in ower flow. O gestisci l'overflow oppure, supponendo che tu abbia due contatori da 16 bits, quindi con capacità pari a 65535 counts, fissi un valore, p.e. 32000; qunado entrambi i contatori hanno superato questo valore lo sottrai ad entrambi.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...