Controllo PID con saturazione

Documenti analoghi
Controllo di un Motore Elettrico in Corrente Continua

Architettura Software di un Sistema di Controllo per Multirotore

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

5 - Istruzioni condizionali

Esercitazione Controllo di un motore DC mediante Arduino YUN

SISTEMI LINEARI A COEFFICIENTE COSTANTE

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Il PID: dall analisi matematica al dspic

Programmazione Funzionale

Esercizi di Algoritmi e Strutture Dati

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Arduino: Programmazione

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

Corso di Informatica Industriale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Misure con l oscilloscopio (e non) su circuiti con amplificatori operazionali

Le Funzioni e la Ricorsione

LEGO Mindstorms e Arduino nella scuola secondaria di secondo grado: alcune esperienze didattiche. Pietro Bonora Liceo Scientifico A.B.

SOMMARIO 1. Descrizione Generale 2. Caratteristiche 3. Versioni 4. Operazioni Preliminari 5. Modifica dei Parametri 6. Allarmi 7.

MATLAB-SIMULINK. Simulink. Simulazione di un sistema ABS (Anti-lock bracking system) Ing. Alessandro Pisano.

Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza.

ESEMPIO: le variabili LETTURA/SCRITTURA DI VARIABILI. Specifica Leggere da tastiera un intero, un carattere, un float e un double. Stamparli a video.

Università degli studi di Roma LA SAPIENZA

Variabili e Istruzioni

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

I/O FILE. Sommario I/O FILE. I/O FILE LETTURA DA FILE DI TESTO oggetto di tipo ifstream. I/O FILE: lettura e scrittura su file di testo

Preparati per il compito in classe Modulo 5

Segnale e Rumore Strumentale

Strutture di controllo in C++

AZIONAMENTI PER MOTORE A C.C.

USO DELL OSCILLOSCOPIO PER LA MISURA DELLA VELOCITA' DEL SUONO NELL ARIA

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio

Librerie. Laboratorio di Informatica Antonio Monteleone 28

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

Laboratorio di Informatica Lezione 2

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Laboratorio di Algoritmi e Strutture Dati

Primi passi col linguaggio C

Problemi, istanze, soluzioni

Dati numerici: f = 200 V, R 1 = R 3 = 100 Ω, R 2 = 500 Ω, C = 1 µf.

OPEN DRIVE OPEN DRIVE. Applicazione n 001 Avvolgitore/Svolgitore con ballerino e servodiametro

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Marco Manna 1

Il blocco amplificatore realizza la funzione di elevare il livello (di tensione o corrente) del segnale (in tensione o corrente) in uscita da una

Individuazione di sottoproblemi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Simulazione di un circuito RC

Controllori PID, metodi di taratura e problemi d implementazione

DDS.682. C.F. partita Iva It capitale i. V ,00euro - telefono fax

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Motori Motore passo-passo Stadio di potenza PWM Sincrono Stadio di potenza del motore passopasso. Blocchi funzionali. Set point e generatore PWM

Esercizi Svolti di Programmazione

Il motore in corrente continua è utilizzato nei più svariati tipi di azionamenti, con potenze che variano da qualche decina di W ad alcuni MW.

Ambienti di sviluppo integrato

Sez 3c DETTAGLI COSTRUTTIVI E FUNZIONALI. 25 febbraio 2016 dalle ore alle ore 19.00

ISTITUTO TECNICO INDUSTRIALE STATALE "G. MARCONI" Via Milano n PONTEDERA (PI) PROGRAMMAZIONE COORDINATA TEMPORALMENTE

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

AMPLIFICATORE DIFFERENZIALE

Connessione ad internet

1. Il moto della sbarretta (OLIMPIADI della FISICA 1991)

Esercitazione 15. Il problema dello Sleeping Barber

Il linguaggio C. Notate che...

Elettronica dei Sistemi Digitali Le porte logiche CMOS

tecnologie ecosostenibili applicate INVERTER HTG 30 MP

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

PIANO DI LAVORO DEI DOCENTI

Rappresentazione con i diagrammi di flusso (Flow - chart)

Premessa: Si continua a studiare il moto degli oggetti in approssimazione di PUNTO MATERIALE

Lezione 3 programmazione in Java

Modulazione a larghezza di impulso ( PWM )

Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

Programmazione in Python. Moreno Marzolla

Electrical motor Test-bed

Linguaggio C Compilazione, linking e preprocessor

Transcript:

ARSLAB - Autonomous and Robotic Systems Laboratory Dipartimento di Matematica e Informatica - Università di Catania, Italy santoro@dmi.unict.it Programmazione Sistemi Robotici

Schema controllo PID di un motore in CC Il sistema complessivo per il controllo di un motore in CC è il seguente, ed include L algoritmo del PID (software) L intefaccia PWM più il ponte-h (hardware) Il sistema motore + encoder (sistema fisico) L intefaccia QEI (hardware)

Limite del PWM Ogni sistema fisico ha un limite oltre il quale non si può andare Nel caso del motore in CC tale limite è rappresentato dalla sua coppia e velocità, che si ottengono quando il motore è alimentato alla sua tensione massima La tensione massima corrisponde al valore massimo che possiamo fornire al circuito PWM

Limite del PWM Il circuito generatore di PWM accetta valori nell intervallo [ MAX, MAX] Tuttavia, l output del PID può essere qualunque numero (il PID implementa una formula matematica) Pertanto è necessario limitare cioè saturare l uscita del PID in modo che non vada oltre i limiti accettati dal circuito PWM

Saturazione Un blocco saturatore è rappresentato con il grafico in/out mostrato in figura Quando MAX in MAX, l uscita ricopia l ingresso Quando in < MAX (risp. in > MAX), l uscita vale MAX (risp. MAX) Questo si traduce nel seguente codice:... if (in < -MAX) out = -MAX; else if (in > MAX) out = MAX; else out = in;...

PID con saturazione Il sistema completo è mostrato in figura Il codice del saturatore di solito è implementato all interno della funzione del PID

Esempio di PID con saturazione Supponiamo il classico esempio di controllo (simulato) di massa su piano con attrito Consideriamo che l output del PID (forza di spinta della massa) sia saturato ad un valore che non può superare i 10N

Codice del PID con saturazione (header file) Il codice del PID con saturazione diventa il seguente /* * pid_saturation.h */ #include "dynamic_system.h" #include <stdbool.h> class PID_Saturation : public DynamicSystem { public: PID_Saturation(float kp, float ki, float kd, float saturation, float delta_t); float evaluate(float input); private: float m_kp, m_ki, m_kd, m_saturation, m_out_i, m_prev_input; bool m_saturation_flag; };

Codice del PID con saturazione (source file) Il codice del PID con saturazione diventa il seguente /* * pid_saturation.cpp */ #include "pid_saturation.h" PID_Saturation::PID_Saturation(float kp, float ki, float kd, float saturation, float delta_t) : DynamicSystem(delta_t), m_kp(kp), m_ki(ki), m_kd(kd), m_saturation(saturation), m_out_i(0), m_prev_input(0), m_saturation_flag(false) { } float PID_Saturation::evaluate(float input) { float deriv = (input - m_prev_input) / m_delta_t; m_prev_input = input; m_out_i = m_out_i + m_ki * input * m_delta_t; float output = input * m_kp + m_out_i + deriv * m_kd; if (output > m_saturation) { output = m_saturation; } else if (output < - m_saturation) { output = - m_saturation; } } return output;

Risposta del sistema SENZA saturazione v target = 8m/s K p = 6, K i = 3, K d = 0

Risposta del sistema CON saturazione v target = 8m/s, sat = 10N K p = 6, K i = 3, K d = 0 E comparsa una brutta sovraelongazione (detta windup) Il sistema è diventato più lento

Uscita del PID CON saturazione v target = 8m/s, sat = 10N K p = 6, K i = 3, K d = 0 Durante il primo secondo di tempo, il sistema è saturato

Saturazione e ottimizzazione anti-windup Quando il sistema è saturato, l errore non potrà mai ridursi secondo quanto ci si aspetta Cioè e sat(t) > e nonsat(t), l errore in saturazione è sempre più grande dell errore quando non c è la saturazione Poichè l integratore accumula l errore, quando siamo in saturazione è inutile accumulare errore che non potrà ridursi Per tale motivo, in codizioni di saturazione, si preferisce non calcolare il termine integrale Tale ottimizzazione è detta anti-windup

Codice del PID con saturazione e anti-windup #define USE_ANTI_WIND_UP /* define or comment this to enable/disable anti-wind-up */ float PID_Saturation::evaluate(float input) { float deriv = (input - m_prev_input) / m_delta_t; m_prev_input = input; #ifdef USE_ANTI_WIND_UP /* if ANTIWINDUP is active, do not integrate when the system is in saturation */ if (!m_saturation_flag) m_out_i = m_out_i + m_ki * input * m_delta_t; #else m_out_i = m_out_i + m_ki * input * m_delta_t; #endif float output = input * m_kp + m_out_i + deriv * m_kd; if (output > m_saturation) { output = m_saturation; m_saturation_flag = true; } else if (output < - m_saturation) { output = - m_saturation; m_saturation_flag = true; } else m_saturation_flag = false; } return output;

Risposta del sistema CON saturazione e ANTI-WINDUP v target = 8m/s, sat = 10N K p = 6, K i = 3, K d = 0 Con l anti-windup è scomparsa la sovraelongazione

ARSLAB - Autonomous and Robotic Systems Laboratory Dipartimento di Matematica e Informatica - Università di Catania, Italy santoro@dmi.unict.it Programmazione Sistemi Robotici