Rök-O-Tron (3 / 7 steg)
Steg 3: PID logik
PID-numret är hjärtat i denna kod. Den grundläggande teorin är att du överväga tre faktorer att räkna ut hur mycket värme att tillämpa systemet:
1] hur långt bort är vi från inställningen target?
2] hur snabbt vi får det?
3] hur mycket har vi varit konsekvent bort?
OK, så först representerar, eftersom detta är en 8-bitars mikro som kan hantera några 16-bitars register, vi temperaturerna som temp multiplicerat med 64. Detta kallas fast punkt math, eftersom vi är bara att flytta decimaltecknet. En 64 x multiplikator låter mig få en temp upp till 1024 grader med 5 bitar av decimaltecken (1/64: e per division). Eftersom temp sensorn ger oss 2 bitar av decimal, är detta gott om precision för vad vi håller på med.
När vi beräknar hur mycket för att värma utrymmet (effektbehov), börjar vi med proportionella förstärkningen. För att få detta, vi subtrahera mål temp från nuvarande temp och multiplicera med känslighetsinställningen. När vi kommer närmare, vi lägger mindre värme. Kör det här av sig själv, dock lämnar oss med ett fel. Om vinsten är för lågt, att kommer felet vara nästan konstant. För hög, och det kommer att svänga. Det är viktigt att se till att när du gör denna matematik som du vara på utkik efter översvämningar i kassorna. Om din vinst är 1024 och läsandet är 16C, fungerar matten till väl över 65 535 du får gå. Så var noga med att begränsa alla värden till sane kära.
För att förhindra svängning vi Lägg till efter derivat. Derivatan av temperatur är ett mått på hur mycket det är att ändra. Så för att göra detta vi spara den sista behandlingen och subtrahera det från den ström en. Nu har vi multiplicera det med den härledda vinsten och få ett mått på hur mycket av proportionell vinsten som vi måste bli av för att förhindra överskridande målet temp.
Slutligen, att lite av fel som alltid kommer att vara närvarande när du använder endast P och D delar kan tas bort genom att lägga till en faktor som kommer från hur långt bort du har varit. Medan praktiskt för att hålla börvärdet, det kan inte betonas nog att eftersom det ackumuleras, integrerad vinsten har potential att orsaka problem snabbare än något annat. Tänk på det: du startar systemet och det är 82F, men du har ställt den för 225F. För de 45 minuter som det tar för att komma till temp-det stapla på mer vinst.
Vi undvika de flesta av detta genom två enkla metoder:
1] gräns jag portionr till något litet... inte mer än ca 10% totalt tillgängliga vinst
2] inte ackumuleras jag vinna om temperaturen är på väg i rätt riktning.
Den andra lite det är inte standard, men det verkade fungera bäst i denna ansökan.
När du har alla vinst komponenterna som läggs, konvertera till ett produktionsvärde.