Ricavare funzione di trasferimento da funzione di uscita
Moderatori:
dimaios,
carlomariamanenti
0
voti
Se non divido l'uscita per 10.6 V a me funziona benissimo con questi valori.
0
voti
Salve, ho un sistema costituito da arduino, scheda di controllo a ponte L298N e un motore dc brush. Ho implementato la risposta al gradino e ho ricavato la funzione d'uscita della velocità
Faccio fatica a capire: hai un problema teorico da risolvere come esercizio
o
un vero prototipo fisico da provare?
Come comandi l'azionatore L298N ? Con una tensione variabile fra 0 e 5 V ?
Che coppia (corrente nel motore corrisponde a 5 V ? e a 0 V?
Se è un controllo di posizione devi anche invertire il moto del motore.
Quindi +5 V massima coppia oraria, 2,5 V fermo, 0 V massima coppia antioraria ??
Qunto è il momento di inerzia del motore-ingranaggio ? in kg M^2 ?
quella del controllore PD è la classica K_{p} * K_{d} s
Sarà il simbolo di somma non moltiplicazione ??
Con ingresso a gradino l'uscita derivativa va a infinito...come funziona ?
...va in saturazione...come fai a dire che funziona ?
Anche il titolo non mi è chiaro:
Ricavare funzione di trasferimento da funzione di uscita
Vuoi dire ricavare la fdt ad anello chiuso dalla fdt in catena aperta ?
Oppure la funzione di uscita è la fdt dell'impianto (azionatore, motore, carico (attrito) se esiste) ?
perché non provi prima a realizzare un asservimento più semplice con comando tutto niente con banda morta (errore di posizione inferiore in modulo a una data quantità) ?
Oppure un semplice controllo proporzionale.

0
voti
MarcoD ha scritto:Salve, ho un sistema costituito da arduino, scheda di controllo a ponte L298N e un motore dc brush. Ho implementato la risposta al gradino e ho ricavato la funzione d'uscita della velocità
Faccio fatica a capire: hai un problema teorico da risolvere come esercizio
o
un vero prototipo fisico da provare?
Prototipo fisico, ho anche detto da cosa è composto.
MarcoD ha scritto:
Come comandi l'azionatore L298N ? Con una tensione variabile fra 0 e 5 V ?
Lo comando col segnale PWM di arduino.
MarcoD ha scritto:quella del controllore PD è la classica K_{p} * K_{d} s
Sarà il simbolo di somma non moltiplicazione ??
si ovviamente è il simbolo di somma, ho sbagliato.
MarcoD ha scritto:Con ingresso a gradino l'uscita derivativa va a infinito...come funziona ?
Ho fatto la risposta al gradino di tensione di 10.6 V a catena aperta in modo da ricavare la funzione di trasferimento. Per fare ciò ho considerato in uscita la velocità in modo da approssimare la funzione di uscita con

da cui trasformando secondo Laplace

dove 4.93 sono gradi/ms e 65.68 ms è la costante di tempo.
Dovendo effettuare un controllo in posizione tramite PID, ho inserito in cascata a
un integratore, ottenendo 
ovvero la funzione d'uscita del sistema a catena aperta con uscita la posizione.
Dovendo realizzare una sintesi analitica del PID mi ricavo la funzione di trasferimento, ovvero

dove
(se non sbaglio!!!)Ora, avendo tarato il PID manualmente, con i valori Kp=3.1 Kd=0.19, il sistema funziona perfettamente, ma se lo provo su simulink non mi funziona, a meno che nel passaggio in cui ricavo la funzione di traferimento non divido per 10.6. Il mio dubbio è che sbaglio qualcosa in quel punto.
1
voti
Ci sono un po' di cose che non mi tornano...
Quella principale è che dici di aver misurato la risposta, che poi hai approssimato
Se quel coefficiente è in gradi/ms (dovrebbe essere in rad/s, semmai!), allora la tua uscita
mi pare che sia già una posizione...
In ogni caso, io riporterei tutto usando radianti e secondi.
L'altra cosa che non spieghi è che grandezza è realmente l'uscita del tuo regolatore, che poi applichi alla PWM.
Immagino che si tratti del valore di conteggio, che viene normalmente utilizzato dalla funzione AnalogWrite() di Arduino. Se così fosse, va tenuto conto del fatto che il valore corrispondente al duty-cycle (in realtà è il valore di compare) va da 0 a 255.
Non si tratta quindi di una tensione, che era invece l'ingresso del processo (plant) nella tua misura.
Per simulare correttamente, occorre tenere conto di questo aspetto, e del fatto che la tensione media (= mediata nel periodo di PWM) è pari
dove
è l'uscita del regolatore, 255 il fondo scala del compare (cioè il valore che corrisponde ad un duty-cycle del 100%) e
la tensione di alimentazione dell'L298.
Per poter ragionare sulla dinamica in modo semplice, quello che si fa normalmente è considerare come uscita del regolatore la tensione da applicare al motore (come media nel periodo di PWM), per poi calcolare il valore di compare che fa ottenere (approssimativamente) quella tensione media.
Quella principale è che dici di aver misurato la risposta, che poi hai approssimato
tino20 ha scritto:Ho fatto la risposta al gradino di tensione di 10.6 V a catena aperta in modo da ricavare la funzione di trasferimento. Per fare ciò ho considerato in uscita la velocità in modo da approssimare la funzione di uscita con
da cui trasformando secondo Laplace
dove 4.93 sono gradi/ms e 65.68 ms è la costante di tempo.
Dovendo effettuare un controllo in posizione tramite PID, ho inserito in cascata aun integratore, ottenendo
ovvero la funzione d'uscita del sistema a catena aperta con uscita la posizione.
Se quel coefficiente è in gradi/ms (dovrebbe essere in rad/s, semmai!), allora la tua uscita
mi pare che sia già una posizione...In ogni caso, io riporterei tutto usando radianti e secondi.
L'altra cosa che non spieghi è che grandezza è realmente l'uscita del tuo regolatore, che poi applichi alla PWM.
Immagino che si tratti del valore di conteggio, che viene normalmente utilizzato dalla funzione AnalogWrite() di Arduino. Se così fosse, va tenuto conto del fatto che il valore corrispondente al duty-cycle (in realtà è il valore di compare) va da 0 a 255.
Non si tratta quindi di una tensione, che era invece l'ingresso del processo (plant) nella tua misura.
Per simulare correttamente, occorre tenere conto di questo aspetto, e del fatto che la tensione media (= mediata nel periodo di PWM) è pari

dove
è l'uscita del regolatore, 255 il fondo scala del compare (cioè il valore che corrisponde ad un duty-cycle del 100%) e
la tensione di alimentazione dell'L298.Per poter ragionare sulla dinamica in modo semplice, quello che si fa normalmente è considerare come uscita del regolatore la tensione da applicare al motore (come media nel periodo di PWM), per poi calcolare il valore di compare che fa ottenere (approssimativamente) quella tensione media.
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
Mistero
Già realizzato o almeno concepito/progettato ?
La posizione angolare come la misuri ? Che campo angolare di rotazione ?
Il motore aziona un riduttore di velocità sul cui asse lento è calettato il trasduttore di posizione angolare ?
Quanto tempo impiega per muoversi da una estremità all'altra?
Magari l'attrito meccanico non è trascurabile.
Da quando è in moto e lo disalimenti, quanto tempo impiega a fermarsi?
O il tutto è solo nella pancia di un programma di simulazione ?
Attento:
Detto degli informatici anni 70: garbage in - garbage out
Detto dell'esercito USA: KISS keep it simple stupid

Prototipo fisico, ho anche detto da cosa è composto.
Come comandi l'azionatore L298N ? Con una tensione variabile fra 0 e 5 V ?
Lo comando col segnale PWM di arduino.
Già realizzato o almeno concepito/progettato ?
La posizione angolare come la misuri ? Che campo angolare di rotazione ?
Il motore aziona un riduttore di velocità sul cui asse lento è calettato il trasduttore di posizione angolare ?
Quanto tempo impiega per muoversi da una estremità all'altra?
Magari l'attrito meccanico non è trascurabile.
Da quando è in moto e lo disalimenti, quanto tempo impiega a fermarsi?
O il tutto è solo nella pancia di un programma di simulazione ?
Attento:
Detto degli informatici anni 70: garbage in - garbage out
Detto dell'esercito USA: KISS keep it simple stupid

0
voti
SandroCalligaro ha scritto:L'altra cosa che non spieghi è che grandezza è realmente l'uscita del tuo regolatore, che poi applichi alla PWM.
Immagino che si tratti del valore di conteggio, che viene normalmente utilizzato dalla funzione AnalogWrite() di Arduino. Se così fosse, va tenuto conto del fatto che il valore corrispondente al duty-cycle (in realtà è il valore di compare) va da 0 a 255.
Non si tratta quindi di una tensione, che era invece l'ingresso del processo (plant) nella tua misura.
Per la risposta al gradino imposto il valore del Duty Cycle del PWM al 100% quindi 255. Quindi tramite AnalogWrite() invio questo valore al ponte L298N. Ai morsetti a cui è collegato il motore ho misurato la tensione di 10.6 V. Quindi in base a quanto dici manca un blocco su Simulink, giusto? In particolare il blocco che rappresenta il ponte e che quindi converte il PWM in uscita da arduino in tensione d'ingresso per il Plant. Ho detto una cavolata?
Ho utilizzato gradi/millisecondi perché l'encoder mi restituisce la misura in gradi
1
voti
Per il tuo scopo, non serve rappresentare esattamente la PWM, basterebbe interporre un guadagno che tenga conto della relazione (che ho scritto nel post precedente) tra tensione e duty-cycle.
Per essere precisi, ci vorrebbe anche un ritardo di un periodo, che rappresenti l'attuazione della PWM.
Hai varie opzioni:
1. invece di considerare la funzione di trasferimento velocità/tensione, consideri velocità/compare (nel tuo caso 255)
2. (preferibile) implementi il controllo (reale) in modo che l'uscita del regolatore sia una tensione
3. ("a risparmio") la struttura rimane uguale in simulazione e nella realtà, ma tieni conto, nel dimensionamento dei parametri del regolatore, del rapporto tra tensione e duty-cycle, cioè per avere lo stesso comportamento nei due casi i guadagni effettivi devono essere diversi.
Il fatto di tener conto esplicitamente della relazione tra duty e tensione media ti permette di gestire meglio le cose, perché le grandezze con cui hai a che fare sono quelle reali. Questo permette, ad esempio, di tener conto di una tensione di ingresso al ponte (
) variabile, oltre che (volendo) di stimare grandezze elettriche o di dimensionare un controllore in modo analitico.
Per fare una cosa "seria", ti invito (se non lo hai ancora fatto) a:
- utilizzare un interrupt per la temporizzazione dell'algoritmo (campionamento ed aggiornamento dell'azione di controllo)
- utilizzare una PWM a frequenza più alta del default di AnalogWrite (5 o 10 kHz, ad esempio), scrivendo a mano le configurazioni necessarie (probabilmente le trovi in rete, volendo). A quanto ho visto, 10 kHz sono gestibili, se l'algoritmo di controllo è molto semplice
- misurare la corrente, se non altro per protezione (ma considera che il normale controllo di posizione per un motore DC prevede anelli annidati di corrente e velocità).
In simulazione, puoi usare i sistemi triggerati per rappresentare il controllo, posto che ci sia un minimo di ritardo (anche molto piccolo) nel loop.
Per essere precisi, ci vorrebbe anche un ritardo di un periodo, che rappresenti l'attuazione della PWM.
Hai varie opzioni:
1. invece di considerare la funzione di trasferimento velocità/tensione, consideri velocità/compare (nel tuo caso 255)
2. (preferibile) implementi il controllo (reale) in modo che l'uscita del regolatore sia una tensione
3. ("a risparmio") la struttura rimane uguale in simulazione e nella realtà, ma tieni conto, nel dimensionamento dei parametri del regolatore, del rapporto tra tensione e duty-cycle, cioè per avere lo stesso comportamento nei due casi i guadagni effettivi devono essere diversi.
Il fatto di tener conto esplicitamente della relazione tra duty e tensione media ti permette di gestire meglio le cose, perché le grandezze con cui hai a che fare sono quelle reali. Questo permette, ad esempio, di tener conto di una tensione di ingresso al ponte (
) variabile, oltre che (volendo) di stimare grandezze elettriche o di dimensionare un controllore in modo analitico.Per fare una cosa "seria", ti invito (se non lo hai ancora fatto) a:
- utilizzare un interrupt per la temporizzazione dell'algoritmo (campionamento ed aggiornamento dell'azione di controllo)
- utilizzare una PWM a frequenza più alta del default di AnalogWrite (5 o 10 kHz, ad esempio), scrivendo a mano le configurazioni necessarie (probabilmente le trovi in rete, volendo). A quanto ho visto, 10 kHz sono gestibili, se l'algoritmo di controllo è molto semplice
- misurare la corrente, se non altro per protezione (ma considera che il normale controllo di posizione per un motore DC prevede anelli annidati di corrente e velocità).
In simulazione, puoi usare i sistemi triggerati per rappresentare il controllo, posto che ci sia un minimo di ritardo (anche molto piccolo) nel loop.
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
@SandroCalligaro
Sei sicuramente più competente e miglior didatta di me.
Ho il dubbio che @tino20 abbia difficaltà a capire quanto hai scritto, perché purtroppo ha soltanto una preparazione scolastica teorica non bene metabolizzata.

Sei sicuramente più competente e miglior didatta di me.
Ho il dubbio che @tino20 abbia difficaltà a capire quanto hai scritto, perché purtroppo ha soltanto una preparazione scolastica teorica non bene metabolizzata.

0
voti
@Sandro Calligaro quello che dici tu va troppo oltre le mie conoscenze, il regolatore che ho progettato ha in uscita un segnale PWM che poi va in ingresso al ponte L298N e che quindi va a comandare il motore. (Se puo servire posto il codice)
Quello che mi interessa sapere e che devo fare è costruire un modello su Simulink. Quello che ho detto nel post precedente, ovvero di inserire un blocco tra il controllore e il plant è esatto? Se si come lo costruisco il blocco che mi rappresenta il ponte? Considera che alimento la scheda L298N con 12V , con una PWM DI 255 a catena aperta ho misurato una tensione di uscita della scheda di 10.6V. Tensione che mi va ad alimentare il motore.
Quello che mi interessa sapere e che devo fare è costruire un modello su Simulink. Quello che ho detto nel post precedente, ovvero di inserire un blocco tra il controllore e il plant è esatto? Se si come lo costruisco il blocco che mi rappresenta il ponte? Considera che alimento la scheda L298N con 12V , con una PWM DI 255 a catena aperta ho misurato una tensione di uscita della scheda di 10.6V. Tensione che mi va ad alimentare il motore.
Torna a Automazione industriale ed azionamenti
Chi c’è in linea
Visitano il forum: Nessuno e 13 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


