Taula de continguts:

Controlador PID VHDL: 10 passos
Controlador PID VHDL: 10 passos

Vídeo: Controlador PID VHDL: 10 passos

Vídeo: Controlador PID VHDL: 10 passos
Vídeo: Implementation of PID-control on FPGA for Extrusion process 2024, Desembre
Anonim
Controlador PID VHDL
Controlador PID VHDL
Controlador PID VHDL
Controlador PID VHDL

Aquest projecte va ser el meu projecte final per completar la meva llicenciatura amb honors al Cork Institute of Technology. Aquest tutorial es divideix en dues seccions, la primera cobrirà el cos principal del codi PID que és l'objectiu principal del projecte i la segona secció tracta de la interfície del codi que es va implementar en una placa de desenvolupament Basys 3 i, a continuació, es va connectar a una bola de ping pong. plataforma de levitació. Les plataformes teòriques i construïdes es mostren a les imatges adjuntes.

Subministraments

Simulació

Vivado Design Suite

Implementació (entre parèntesis s'utilitza el meu projecte)

  • Taula FPGA que pot introduir i sortir senyals digitals / analògics (bases 3)
  • un sistema que es pot controlar amb una única font de retroalimentació (Ping Pong Ball Levitation Rig)

Plataforma

  • Tub de policarbonat
  • Ventilador de 5V
  • Sensor IR
  • Base impresa en 3D (aquest tutorial documenta la construcció de la plataforma, el sensor es va afegir per proporcionar informació, però la plataforma era generalment la mateixa)
  • Resistències 1k
  • Taula de pa amb carril de 5V i GND

Pas 1: teoria bàsica del control

Teoria bàsica del control
Teoria bàsica del control

Vaig pensar que afegir alguna teoria bàsica de control donaria a qualsevol persona que vulgui provar i implementar aquest codi una bona base per començar.

El diagrama adjunt és el disseny d’un controlador de bucle únic.

r- És la referència. Això determina on es vol anar al controlador.

e-És l'error. Aquesta és la diferència entre el valor del sensor i la referència. per exemple. e = r- (d + sortida del sensor).

K-Aquest és el controlador. Un controlador pot estar format per tres termes. Aquests termes són P, I i D. Els tres termes tenen multiplicadors anomenats Kp, Ki i Kd. Aquests valors determinen la resposta del controlador.

  • P-Proporcional. Un controlador estrictament P tindrà una sortida proporcional a l'error actual. Un controlador P és senzill d’implementar i funciona ràpidament, però mai no assolirà el valor establert (referència).
  • I-Integral. Un controlador estrictament integral resumirà l'error anterior que finalment arribarà a la referència desitjada. Aquest controlador sol ser massa lent per implementar-lo. Si s’afegeix un terme P, es reduirà el temps necessari per arribar a la referència. Cal tenir en compte el temps en què es mostra l’entrada, el terme integral s’integra respecte al temps.
  • Derivada D. El terme derivat tindrà una sortida que depèn de la taxa de canvi d'error. Aquest terme s’utilitza generalment amb un terme P o amb un terme PI. Com que això és proporcional a la taxa de canvi d'error, llavors un single sorollós amplificarà el seu soroll, cosa que pot fer que un sistema sigui inestable. El temps també s’ha de tenir en compte, ja que el terme derivat també ho és respecte al temps.

U- Aquest és el senyal de control. Aquest senyal és una entrada a la plataforma. En el cas d’aquest projecte, la u és una entrada de senyal PWM al ventilador per canviar la velocitat.

G- Aquest és el sistema que es controla. Aquest sistema es pot modelar matemàticament en el domini S o Z. Els sistemes poden estar al novè ordre, però per a algú que comença a controlar el sistema, probablement s’hauria de suposar, ja que és molt més fàcil de calcular. Es tracta d’una gran quantitat d’informació sobre el sistema de modelatge que es pot trobar en línia. Depenent del temps de mostreig del sensor, el model del sistema és discret o continu. Això té un efecte dràstic en el controlador, de manera que es recomana investigar-ne tots dos.

d- Es tracta d’una pertorbació que s’afegeix al sistema. La pertorbació està fora de les forces que el model del sistema no té en compte. Un exemple senzill d’això seria un dron que voleu situar a 5 metres, arriba una ràfega de vent i deixa caure el dron 1 metre; el controlador tornarà a situar el dron després que hagi passat la pertorbació. Això es coneix com a pertorbació, ja que el vent no es pot repetir, de manera que no es pot modelar.

Per ajustar el controlador, hi ha massa regles per anomenar-les, però algunes de bones que vaig començar són Cohen Coon i Zieger Nichols.

Modelar un sistema és generalment la part més important sense un model precís, el controlador dissenyat no respondrà com es desitgi.

Aquí hi hauria d’haver prou informació per entendre com funciona el controlador juntament amb algunes investigacions individuals i es pot implementar el codi que hi ha a sota d’un controlador amb qualsevol combinació dels tres termes.

Pas 2: escriure el codi PID

S’escriu el codi PID
S’escriu el codi PID

El principi bàsic del codi que es troba al següent enllaç es va adoptar i modificar, ja que aquest codi no funcionava, però tenia molts dels principis adequats que donaven un bon punt de partida. PID original El codi tenia diversos errors, com ara

  • Funcionament continu: el controlador és inherentment discret, de manera que s'ha hagut de configurar el controlador per calcular només els 3 termes quan hi havia una entrada nova disponible. El treball d'aquesta simulació va ser comprovar si l'entrada ha canviat des de l'última vegada. això només funciona per simular que el codi funciona correctament.
  • El temps de mostra no va tenir cap efecte sobre el terme integral i derivat: el controlador tampoc no va tenir en compte el temps en què es prenia la mostra, de manera que es va afegir un valor anomenat divisor de temps per garantir que els termes integrals i derivats funcionessin al llarg del temps correcte. interval.
  • L’error només podria ser positiu: en calcular l’error també hi havia un problema, ja que l’error mai no podria ser negatiu quan el senyal de retroalimentació havia superat el valor de referència que el controlador continuaria incrementant la sortida quan hauria de ser decrementant.
  • Els valors de guany dels tres termes eren enters: per la meva experiència, sempre he trobat que els valors dels tres termes del controlador sempre eren nombres de coma flotant a causa de que Basys 3 no tenia un número de coma flotant, s’havia de donar als valors un valor de numerador i un valor del denominador que serviria com a solució per superar aquest problema.

El codi s'adjunta a continuació, hi ha el cos principal de codi i un banc de proves per simular el codi. La carpeta zip conté el codi i el banc de proves que ja hi ha a Vivado, de manera que es poden obrir per estalviar temps. també hi ha una prova simulada del codi que mostra la sortida que fa el seguiment de la referència, cosa que demostra que el codi funciona tal com es pretenia.

Pas 3: Com es pot modificar el vostre sistema

En primer lloc, no tots els sistemes són iguals, cal analitzar les entrades i sortides del sistema. En el meu cas, la sortida del meu equip que em donava un valor per a la posició era un senyal analògic i l’entrada del sistema era un senyal PWM. El que significa que era necessària una conversió ADC. Afortunadament, el Basys 3 té un ADC integrat, de manera que això no va suposar cap problema, la sortida del sensor IR va haver de reduir-se a 0V-1V, ja que aquest és el rang màxim de l’ADC incorporat. Això es va fer mitjançant un circuit divisor de voltatge que es feia a partir de resistències 1k configurades com a resistència 3k en sèrie amb una resistència 1k. El senyal analògic estava ara dins del rang de l'ADC. L'entrada PWM al ventilador pot accionar directament la sortida d'un port PMOD al Basys 3.

Pas 4: Aprofitament de les E / S en base 3

Hi ha diverses E / S a Basys 3 que permetien depurar més fàcilment quan s’executava el codi. la E / S es va configurar de la següent manera.

  • Visualització de set segments: es va utilitzar per mostrar el valor de la referència i el valor de l'ADC en volts. Els dos primers dígits de la pantalla de set segments mostren els dos dígits després de la posició decimal del valor ADC, ja que el valor està entre 0-1V. Els dígits tres i quatre de la pantalla de set segments mostren el valor de referència en volts, també es mostren els dos primers dígits després de la posició decimal, ja que l'interval també està entre 0-1V.
  • 16 LED: els LED es van utilitzar per mostrar el valor de la sortida per assegurar-se que la sortida estava saturada i que la sortida canviava correctament.

Pas 5: soroll a la sortida del sensor IR

Hi havia soroll a la sortida del sensor per solucionar aquest problema, es va establir un bloc de mitjana, ja que era suficient i requeria molt poca feina per completar.

Pas 6: Disseny general del codi

Disseny general del codi
Disseny general del codi

Hi ha un tros de codi del qual encara no s’ha parlat. Aquest codi és un divisor de rellotge anomenat trigger. aquest bit de codi activa el codi ADC a mostrar. el codi ADC triga un màxim de 2us a completar-se, de manera que es fa la mitjana de l'entrada actual i l'entrada anterior. 1us després d'aquesta mitjana, el controlador calcula termes P, I i D. la disposició general del codi i la interfície es mostra al diagrama de connexió improvisat.

Pas 7: proves

Proves
Proves

El codi es va desplegar a Basys 3 i es va registrar la següent resposta. la referència va canviar entre 2 valors. que és el cas del codi de projecte completat adjunt. El vídeo adjunt mostra aquesta resposta en temps real. Les oscil·lacions decauen més ràpidament a la part superior del tub, ja que el controlador va ser dissenyat per a aquesta regió, però el controlador no funciona tan a baix del tub ja que el sistema no és lineal.

Pas 8: modificacions per millorar el projecte

El projecte va funcionar de la manera prevista, però hi hauria algunes modificacions que hauria fet si el projecte es pogués ampliar.

  • Implementa un filtre digital per atenuar completament el soroll
  • configureu el codi ADC, el codi mitjà i el codi d'integració per activar-los de manera seqüencial.
  • utilitzeu un sensor diferent per obtenir informació, ja que la resposta no lineal d’aquest sensor va causar una gran varietat de problemes amb aquest projecte, però això és més pel que fa al control, no al que codifica.

Pas 9: Treball extra

Al llarg de l’estiu, vaig escriure codi per a un controlador en cascada i vaig implementar les modificacions que vaig recomanar per al controlador PID de bucle únic.

Modificacions fetes al controlador PID normal

· La plantilla de filtre FIR implementada ha de canviar els coeficients per aconseguir la freqüència de tall desitjada. La implementació actual és un filtre d’avet de 5 taps.

· El temps del codi s'ha configurat de manera que el filtre propagarà la nova mostra i, quan la sortida estigui llesta, s'activarà el terme integral, que significa que el codi es pot modificar perquè funcioni a diferents intervals de temps amb menys esforç per canviar-lo. codi.

· El bucle principal que impulsa el programa també s’ha reduït, ja que aquest bucle prenia 7 cicles anteriorment, això va frenar la velocitat màxima de funcionament del controlador, però en reduir els estats del bucle t 4 això significa que el bloc principal de codi pot funcionar dins de 4 cicles de rellotge.

Proves

Aquest controlador es va provar i es va realitzar tal com es pretenia. No vaig fer fotos d'aquesta prova, ja que aquesta part del projecte era només per mantenir la ment activa. El codi per provar, així com el banc de proves, estarà disponible aquí perquè pugueu provar el programa abans de la implementació.

Per què utilitzar un controlador en cascada

Un controlador en cascada controla dues parts del sistema. En aquest cas, un controlador en cascada tindria un bucle extern que és un controlador que té retroalimentació del sensor IR. El bucle intern té retroalimentació en forma de temps entre els impulsos del tacòmetre que determina la velocitat de rotació del ventilador. Mitjançant la implementació del control, es pot aconseguir una millor resposta del sistema.

Com funciona el controlador en cascada?

El bucle exterior del controlador alimentarà un valor del temps entre les pules al controlador del bucle intern. Aquest controlador augmentarà o disminuirà el cicle de treball per aconseguir el temps desitjat entre polsos.

Implementació de modificacions a la plataforma

Malauradament, no he pogut implementar aquestes modificacions a la plataforma ja que no hi tenia accés. He provat el controlador de bucle únic revisat que funciona tal i com es pretenia. Encara no he provat el controlador en cascada. Estic segur que el controlador funcionarà, però pot requerir algunes lleugeres modificacions per funcionar segons el previst.

Proves

No he pogut provar el controlador, ja que era difícil simular dues fonts d'entrada. L'únic problema que puc veure amb el controlador en cascada és que, a mesura que el bucle exterior intenta augmentar el valor de consigna subministrat al bucle intern, un punt de consigna més gran és en realitat un RPS inferior per al ventilador, però això es pot solucionar fàcilment. agafeu el punt de consigna des del valor màxim del senyal de consigna (4095 - setpoint - tacho_result).

Pas 10: Conclusió

En general, el projecte funciona tal com volia quan va començar el projecte, de manera que estic satisfet amb el resultat. Gràcies per dedicar-vos temps a llegir el meu intent de desenvolupar un controlador PID a VHDL. Si algú intenta implementar alguna variació d’aquest sistema en un sistema i necessita alguna ajuda per entendre el codi, poseu-vos en contacte amb mi, respondré el més aviat possible. Qualsevol persona que provi el treball addicional que s'ha complert però no s'ha implementat, poseu-vos en contacte amb mi per obtenir més informació. Agrairia molt que algú que ho implementés em fes saber com va.

Recomanat: