Analoga vindbommen med Auto ställa in (7 / 8 steg)
Steg 7: Ladda motstånd icke-linearitet beräkningar
Bara för att bevisa att matematik kan faktiskt vara roligt ska jag berätta hur jag upptäckte icke-linearitet justering formeln genom diagram.
Inledningsvis jag anges inte för att upptäcka formeln - jag ville bara visualisera icke linearitet skapad av belastning motståndet (även känd som en "dra" resistor). Jag ville försöka isolera kurva och tomt det som ett diagram i Microsoft excel.
För det första, jag ritade den faktiska kurvan, som är totalen motstånd skapad av kombinationen av vindbommen och laddar... och jag kallade det "Totalt (RT)". Inledningsvis var jag besviken eftersom jag inte kunde faktiskt se varje kurva alls, så då ändrade jag båda axlarna till log10. Hey presto! Jag kan se en kurva! (Den blå kurvan till vänster i diagrammet ovan).
Det totala motståndet ges av följande formel:
RT = (Rw * R L ) / (Rw + RL)
- var:
- RT är det totala motståndet
- RW är wiper motståndet
- RL är laddamotståndet
OK, så långt så bra - inte för komplicerat?
Nästa, jag ville se hur min nya tjusiga kurva såg sida vid sida med en tråkig rakt linjär kurva, precis som om resultaten inte var faktiskt en kurva på alla, men en rak linje. Formeln för detta är:
RLIN = (Rw * RTMAX) / RWMAX
- var:
- RLIN är hypotetiska linjära motståndet ("imaginära" motståndet)
- RW är wiper motståndet
- RTMAX är det maximala värdet av det totala motståndet
- RWMAX är det maximala värdet av wiper motståndet
Detta är bra, men där kommer vi att få värdet av det totala motståndet från? Jag verkligen fast detta var kommer att bli enklare än så här, men sedan insåg att vi redan har räknat ut detta värde ovan, det är bara det maximala värdet av RT . Men bara för förtydligande, här är formeln:
RTMAX = (RWMAX * R L ) / (RWMAX + RL)
- så, nu, om vi ersätter ut RTMAX får vi:
RLIN = (RW * RTMAX) / RWMAX = (RW / RWMAX) * (RWMAX * RL) / (RWMAX + RL) = (RW * RL) / (RWMAX + RL)
Nu vi kan rita våra linjär kurva (i rött) och se om det är märkbart skiljer sig från kurviga kurvan... och ja... så länge vi fuska genom att använda log10, kan vi se skillnaden. Om vi öppnar excel-filen, kan vi ändra värdet av belastning motståndet till något dumt litet och få några ganska galet kurvor produceras.
Slutligen, jag insåg att vi kunde sedan subtrahera icke linjära kurvan från linjära kurvan och få ett slutresultat: det faktiska icke-linearitet, eller "skillnaden" mellan linjära och icke linjära resultaten. Detta är söt blus kurvan till höger och ges av:
RDIFF = RT - RLIN = (RW * RL) / (RW + RL) - (RW * RL) / (RWMAX + RL)
Denna ekvation kan minskas ytterligare, men den arduino nano kommer redan att kämpa med några av de stora siffrorna produceras, så vi måste hjälpa den längs lite.
Så småningom blir formeln översatt till arduino koden:
////////////////////////////////////////////////////////////////////////////////////////////////////////
Icke-linearitet beräkningar:
load2 = laddar / 1000 * maxSensorValue;
Serial.Print ("load2 =");
Serial.println(load2);
långa loadz = load2/5;
lång sensorValuez = sensorValue/5;
lång maxSensorValuez = maxSensorValue/5;
långa en = 5 * ((sensorValuez * loadz) / (sensorValuez + loadz));
långa b = 5 * ((sensorValuez * loadz) / (maxSensorValuez + loadz));
Serial.Print ("a =");
Serial.println(a);
Serial.Print ("b =");
Serial.println(b);
outputValue = sensorValue + a - b.
//////////////////////////////////////////////////////////////////////////////////////////////////////
Här ser du att koden är mer otymplig än formeln och jag har haft att dividera med 5 för att minska storleken på några av siffrorna. Men det fungerar!
Förhoppningsvis, jag har nu också visat inte bara att matematik kan vara roligt men också relevant till den verkliga världen! Men vad allt detta arbete faktiskt uppnå?
Om vi minns från tidigare, rekommenderade minsta lasten motståndet var 100K, men om vi minskar dessa ohm kan vi göra avläsningarna avsevärt stabilare nära döda zonen. Jag försökt massor av olika varianter och med hjälp av formeln ovan för att förneka icke linearitet, slutade jag upp med en super exakt (+ - 0,1%) 30K motstånd och fortfarande har bra avläsningar på due south.