Low-pass filter til PID'et espressomaskine - kodning søges (Læst 5528x)

Offline joeytribbiani

  • Modstanden
  • **
  • Indlæg: 29
  • Antal brugbare Indlæg: 0
    • Vis profil
Hej !

Jeg har fået installeret en arduino PID på min espresso maskine.  Jeg har ikke selv forstand til at skrive et program, så jeg har fået en masse hjælp hist og pist :)

Jeg har nogle problemer med min thermocouple forstærker (MAX31855k) er meget følsom. Når jeg brygger espresso, så laver min 230v pumpe og tre-vejs ventiler til tider en masse støj. Dette gør aflæsninger fra TC forstærkeren meget upræcise.  Støjen opstår ikke hver gang jeg brygger, men når de gør, er det altid når pumpen og/eller ventilerne er enten aktiveres eller slukkes. Espressomaskinen er jordet og arduinoen er godt gemt væk.

Et af problemer med disse udfald, er at de en sjælden gang i mellem får PID'en til at fryse/crashe, eller får mit 16X2 display til at vise mærkelige tegn. En andet problem opstår efter et udfald, så er det som om at PID'en lige skal komme sig over de mærkelige indput fra TC forstærkeren og de minutter det tager PID'en at normalisere sig, så falder temperaturen i kedlen alt for meget til min smag, især hvis jeg skal steame mælk, så taber den let pusten, meget irriterende.

Jeg er blevet anbefalet at lave et low-pass filter til at sorter de unormale værdier fra, men det kan jeg på ingen måde lave med min viden.

Hvis nogen har mod på at tilpasse sådan et filter til mit program, så vil jeg blive meget glad. Giver selvfølgelig en god kop kaffe, kage og lidt kompensation for tiden der blive lagt i arbejdet :)

Jeg har som sagt ikke den store forstand på kodning og ved ikke i praksis hvordan sådan et filter kan sættes op, men jeg havde en ide om at filteret måske skulle filtere output fra min thermocouple inden det bliver integreret i PID'en. Filteret kunne så måske tage et gennemsnit af fx. 10 forudgående målinger og hvis det nyeste output fra TC afviger mere end en bestemt procentdel, så skal output ikke sendes videre til PIDen?

Min PID's setpoint er omkring 115 grader celsius. Når udfaldene opstår, så er TC forstærkerens output ofte 0,0 grader eller det halve af det forgående output, 56 grader C. Andre gang er det er dobbelt så højt, 230 grader C. Udfaldene varer kun et split sekund og derefter kommer der et normalt output igen.

Håber der nogen der har tid til at hjælpe :)

Mvh

https://dl.dropboxusercontent.com/u/2613065/Espresso_v01h_MODI.zip




 

Offline janengelbrecht

  • Op-amp
  • ***
  • Indlæg: 211
  • Antal brugbare Indlæg: 23
    • Vis profil
    • Personlig hjemmeside
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #1 Dato: Marts 04, 2014, 18:36:48 »
Altså intet problem :) Hjælper gerne free of discharge :P

Kan nåes på hanzimand@gmail.com eller addes på fjæsen: https://www.facebook.com/JanEngelbrecht3 :P

 

Offline janengelbrecht

  • Op-amp
  • ***
  • Indlæg: 211
  • Antal brugbare Indlæg: 23
    • Vis profil
    • Personlig hjemmeside
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #2 Dato: Marts 04, 2014, 18:41:56 »
Altså intet problem at lave et Low Pass filter i software....men det trækker tænder i Arduinos C implementering :) Jeg vil anbefale simpelt HW filter :) Der findes jo et FIR filter library - men det trækker kræfter fra microcontrolleren :)

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #3 Dato: Marts 04, 2014, 19:53:53 »
Hej joeytribbiani,

den enkleste FIR-filter er et gennemsnit af n værdier.
Kode:
TempLong = 0;
for (i = 0; i < 100; i++)
   TempLong += thermocouple.readCelsius();
i stedet for:
Kode:
//TempLong = thermocouple.readCelsius()*100;

Citér
Min PID's setpoint er omkring 115 grader celsius. Når udfaldene opstår, så er TC forstærkerens output ofte 0,0 grader eller det halve af det forgående output, 56 grader C. Andre gang er det er dobbelt så højt, 230 grader C. Udfaldene varer kun et split sekund og derefter kommer der et normalt output igen.
Det er ikke normal og jeg er med Jan at søge efter fejlen i hardwaren.

Og det forstår jeg ikke:
Kode:
if ((millis() > Last_input + 20000)){
PID_Input = TempCalFloat; }


if ((TempCalFloat  < PID_Input + 5) || (TempCalFloat > PID_Input - 5) ){
PID_Input = TempCalFloat;
Last_input = millis();
}
else {
//her kunne man evt skrive en besked i lcd og putte pid'en i Off? Så maskinen skal slukkes og tændes for at varme igen

}

Jeg tror det er bedre at skrive bare:
Kode:
PID_Input = TempCalFloat;

gerd

 

Offline joeytribbiani

  • Modstanden
  • **
  • Indlæg: 29
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #4 Dato: Marts 04, 2014, 22:49:17 »
Hej Jan og Gerd. Mange tak for jeres hurtige respons :)

Med hensyn til er gennemsøge hardware'en for fejl, så har jeg i forbindelse med disse problemer snakket med dem der har lavet min TC forstærker og det lader til at det ikke er helt unormalt at der kommer udfald. Men det kunne da være rart hvis man kunne fjerne den primære årsag og undgå et filter. http://forums.adafruit.com/viewtopic.php?f=22&t=50418

Som jeg forstår det, så der mindst tre muligheder. HW (hardware filter) ? FIR og så Low-pass. Om det er det ene eller andet, er ikke så vigtig for mig, så længe at det er til at arbejde med for en newbi som mig :)

Gerd:
Citér
if ((millis() > Last_input + 20000)){
PID_Input = TempCalFloat; }


if ((TempCalFloat  < PID_Input + 5) || (TempCalFloat > PID_Input - 5) ){
PID_Input = TempCalFloat;
Last_input = millis();

Det var en kode jeg fik tilsendt, et forsøg på at afhjælpe netop disse med udfald på min TC forstærker, men det har ikke haft nogen effekt, så nok derfor det ikke giver så meget mening for dig? Det var egenlig os planen at det skulle have være slettet inden jeg uploaded programmet og være erstattet med "PID_Input = TempCalFloat;" som du forslår :)

Jeg prøver lige at læse lidt om FIR filteret, da jeg ikke er helt med på hvad din kode gør og om jeg selv skal tilføje noget mere ind jeg sætter det ind i programmet?

Citér
TempLong = 0;
for (i = 0; i < 100; i++)
   TempLong += thermocouple.readCelsius();
i stedet for:

Citér
//TempLong = thermocouple.readCelsius()*100;




 

Offline janengelbrecht

  • Op-amp
  • ***
  • Indlæg: 211
  • Antal brugbare Indlæg: 23
    • Vis profil
    • Personlig hjemmeside
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #5 Dato: Marts 04, 2014, 23:25:11 »
Enig i Gerds eksempel - havde ikke set du havde vedhæftet koden :P
Jeg laver normalt IIR eller FIR filtre lidt mere komplekse , men ovenstående indgangsvinkel vil sikkert virke :)

Vil man vide mere kan man læse her:
http://www.elcojacobs.com/eleminating-noise-from-sensor-readings-on-arduino-with-digital-filtering/

Et hardware filter vil også kunne løse problemet - men kan man slippe for hardware skal man gøre det lærer man på ingeniørhøjskoler : Komponenter koster penge og montageudgifter  :)

Før jeg ville kunne udtale mig eksakt om noget ville jeg dog foretrække at simulere det hele i Labcenter ISIS :) Hvis ovenstående ikke løser problemet kan du vende tilbage :) Så skal jeg udover din kode også bruge et diagram over din hardware hvis denne udgør mere end et Arduino Uno R3 board.
« Senest Redigeret: Marts 04, 2014, 23:30:53 af janengelbrecht »

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #6 Dato: Marts 05, 2014, 20:32:03 »
>dobbelt så højt, 230 grader C
Det er måske en forstyrret SPI kommunikation.
Er sensoren isoleret?

 

Offline joeytribbiani

  • Modstanden
  • **
  • Indlæg: 29
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #7 Dato: Marts 06, 2014, 00:36:22 »
Den er pakket ind i en metal kappe, men ved ikke om det virker isolerende eller har modsat effekt?
http://www.ebay.com/itm/121159766064?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

Jeg prøver at få lavet et diagram, taget lidt billeder og finde liste over de komponenter som jeg har brugt. Prøver at nå det i morgen ellers er jeg hjemme igen mandag og der burde jeg kunne finde lidt tid  :)

 

Offline joeytribbiani

  • Modstanden
  • **
  • Indlæg: 29
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: Low-pass filter til PID'et espressomaskine - kodning søges
« Svar #8 Dato: Marts 13, 2014, 10:43:26 »
Jeg står lige midt i en større flytning og eksamensperiode, men får lavet diagram mm. når det er overstået :)