PID drukregeling

Arduino specifieke Software
Berichten: 13
Geregistreerd: 18 Mrt 2016, 13:45

Re: PID drukregeling

Berichtdoor Alex » 21 Mrt 2016, 21:48

Het probleem met het sensorvoltage is opgelost, ik had een weerstand in mijn testopstellling....
Ik heb de sensor ook "gemapt".
Nu kan ik de onderdruk uitlezen in Millibar en Inch H2O met deze code:
cpp code
/*
Pressure Sensor test Code
*/

// These constants won't change. They're used to give names
// to the pins used:

const int analogInPin = A0; // Analog input pin that the potentiometer is attached to

int sensorValue = 0; // value read from the pressure sensor via the amplifier stage
float outputValue1 = 0; // value output to the Serial port and LCD display
float outputValue2 = 0;
void setup()

{
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}

void loop()

{
// read the analog in value:
sensorValue = analogRead(analogInPin);
outputValue1 = map(sensorValue, 66, 1015, 0, 62); //The zero value of sensor is around 66
outputValue2 = map(sensorValue, 66, 1015, 0, 24.890710877044);
// print the results to the serial monitor:

Serial.print("\tMbar= ");
Serial.println(outputValue1);
Serial.print("\tINCH H2O = ");
Serial.println(outputValue2);

// wait 500 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(100);
}

Advertisement

Berichten: 13
Geregistreerd: 18 Mrt 2016, 13:45

Re: PID drukregeling

Berichtdoor Alex » 21 Mrt 2016, 21:52

Nu moet ik dus een PID regeling maken waarin ik de onderdruk instel door in te geven welke testdruk ik wil hebben, laten we zeggen 20 inch H2o
Dan moet de output dus PWM aangestuurd worden dat hij de motoren regelt naar deze testdruk.
Hoe doe ik dit?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PID drukregeling

Berichtdoor nicoverduin » 21 Mrt 2016, 22:37

Deze regel:cpp code
outputValue2 = map(sensorValue, 66, 1015, 0, 24.890710877044);
zal wat minder nauwkeurig werken dan je verwacht. Op de Arduino zijn doubles en floats het zelfde met een precisie van ongeveer 7 cijfers totaal. Dus bij jouw 24 hooguit 4-5 cijfers achter de komma.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PID drukregeling

Berichtdoor nicoverduin » 21 Mrt 2016, 22:39

Hoe zou jij het zelf doen? gewoon zonder de code.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 13
Geregistreerd: 18 Mrt 2016, 13:45

Re: PID drukregeling

Berichtdoor Alex » 22 Mrt 2016, 08:03

4 cijfers achter de komma is goed genoeg.
Ik begrijp niet precies wat je bedoelt met "hoe ik het zou doen".
Ik heb uitgelegd hoe ik de PID regeling wil laten werken maar ik heb geen idee hoe ik dat moet programmeren.
Ik heb al wel wat PID code's gezien maar daar zat geen duidelijke beschrijving bij of het waren regelkringen die te veel afweken van mijn regeling.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PID drukregeling

Berichtdoor nicoverduin » 22 Mrt 2016, 08:39

Alex schreef:4 cijfers achter de komma is goed genoeg.
Ik begrijp niet precies wat je bedoelt met "hoe ik het zou doen".
Ik heb uitgelegd hoe ik de PID regeling wil laten werken maar ik heb geen idee hoe ik dat moet programmeren.

Een van de grootste fouten die vaak met ontwikkelen van programma's worden gemaakt is dat we eerst gaan intikken en dan pas denken. Daarmee verlies je het overzicht en zie je door de bomen het bos niet meer. In het papiervolle tijdperk werden we verplicht om eerst een structuur neer te zetten van een programma. Dus hoe is de stroom van de gegevens of in moderne termen de "proces flow". De stelling was toen en gaat nog steeds op is dat als je het niet kan beschrijven kun je het niet programmeren.

in jouw geval zeg je dat het een PID is. Maar verder ga je niet. Probeer dat nu eens uit te werken zonder je direct te bekommeren over de feitelijke c-code. Als je het kan beschrijven als continu proces kan je programmeren. Het vertalen in C-code is dan slechts nog het coderen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 13
Geregistreerd: 18 Mrt 2016, 13:45

Re: PID drukregeling

Berichtdoor Alex » 22 Mrt 2016, 13:47

Je hebt helemaal gelijk Nico. Dit is normaal ook mijn werkwijze, sterker nog ik heb dit project al jaren in de planning maar ik ben geen programmeur dus daar loop ik een beetje vast. Ik zal vanavond wederom de boel eens proberen te verduidelijken.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PID drukregeling

Berichtdoor nicoverduin » 22 Mrt 2016, 13:53

Alex schreef:Je hebt helemaal gelijk Nico. Dit is normaal ook mijn werkwijze, sterker nog ik heb dit project al jaren in de planning maar ik ben geen programmeur dus daar loop ik een beetje vast. Ik zal vanavond wederom de boel eens proberen te verduidelijken.
Af en toe moet je mensen weer ff een zetje geven :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 13
Geregistreerd: 18 Mrt 2016, 13:45

Re: PID drukregeling

Berichtdoor Alex » 22 Mrt 2016, 22:29

Ok hierbij nog een poging om duidelijk te maken wat het systeem is en wat het moet kunnen.
Het doel is om een constante (ingestelde) onderdruk in een testkast te halen en houden. Laten we zeggen: 6Kpa onderdruk.
Deze testkast heeft drie ruimtes; In ruimte Ruimte A word de testdruk gemeten en via ruimte B word de lucht naar de vacuum motoren gezogen.
De doorlaat van het gat aan de bovenzijde van ruimte A kan variëren door een instelbare smoring.
Als de doorlaat groter word zullen de motoren dus harder moeten draaien om de ingestelde testdruk te halen of houden.
Bij het opstarten van het systeem moeten de motoren langzaam draaien op een soort "idle stand" en pas als een knop bediend word moeten de motoren naar de ingestelde druk gaan.

De onderdruk word door een MPXV4006DP sensor gemeten op de locatie waar in de tekening de meetbuis aan zit.
De 6 vacuum motoren zijn Universeel motoren die met faseafsnijding in twee circuits geregeld worden door twee Kemo M028N modules. (Is getest en werkt). Omdat de M028N modules niet rechtstreeks met PWM of lage voltages kunnen werken zitten er ook 2 Kemo M150 modules parallel aan de M028N modules. Deze M150 modules kunnen met PWM aangestuurd worden (is getest door met een Arduino aan te sturen en werkt).
Nu is het dus de vraag hoe we dit geheel kunnen programmeren zodat de gewenste testdruk ingegeven word,de sensorwaarde afgelezen word en de motoren geregeld worden naar de testdruk.
Bijlagen
Vacuum testkast.png
Vacuum testkast.png (40.22 KiB) 6440 keer bekeken

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: PID drukregeling

Berichtdoor nicoverduin » 22 Mrt 2016, 23:04

Maar simpel uitgedrukt:
cpp code
ALS drukGemeten < dan gewensteDruk DAN
MotorDraaitHarder
ANDERS
MotorDraaitLangzamer
Einde ALS

Hoe wordt dat smoren geregeld?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 84 gasten