Stap 2: De wiskunde
Ik was eigenlijk op het moment op dit analoge windvaan project, die in feite een continu potentiometer met een kleine 'dode zone' Noord werkzaam. Aanvankelijk, werd het project geplaagd met die bekende lawaaierige lezingen totdat ik keek naar de weerstand nauwer.
Ten eerste, ik uitgezet de werkelijke weerstand curve in Microsoft excel, welke de totale weerstand ontstaat door de combinatie van de windvaan en de belasting... en ik noemde het 'Total (RT)'. Ik was in eerste instantie teleurgesteld als ik niet werkelijk ieder zien kon kromme helemaal niet, dus dan mij gewijzigde naar de beide assen voor log10. Hey presto! Ik kan zien een kromme! (De blauwe curve aan de linkerkant in het bovenstaande diagram).
De totale weerstand wordt gegeven door deze bekende formule:
RT = (Rw * R L ) / (Rw + RL)
- waar:
- RT is de totale weerstand
- RW is de weerstand van de Wisser
- RL is de weerstand van de belasting
OK, zover zodoende zoet - niet te ingewikkeld?
Volgende, ik wilde zien hoe mijn mooie nieuwe curve keek naast een saaie rechte lineaire curve, net alsof de resultaten waren niet helemaal eigenlijk een curve, maar een rechte lijn. De formule hiervoor is:
RLIN = (Rw * RTMAX) / RWMAX
- waar:
- RLIN is de hypothetische lineaire weerstand (de 'imaginaire' weerstand)
- RW is de weerstand van de Wisser
- RTMAX is de maximale waarde van de totale weerstand
- RWMAX is de maximumwaarde van het verzet van de Wisser
Dit is allemaal goed en wel, maar waar gaan we de waarde van de totale weerstand uit te halen? Ik dacht echt dat dit was gonna be gemakkelijker dan dit, maar toen realiseerde me dat we al deze bovenstaande waarde hebt berekend, is het gewoon de maximale waarde van RT . Maar gewoon voor de verduidelijking, hier is de formule:
RTMAX = (RWMAX * R L ) / (RWMAX + RL)
- Dus, nu, als we uit RTMAX vervangen krijgen we:
RLIN = (RW * RTMAX) / RWMAX = (RW / RWMAX) * (RWMAX * RL) / (RWMAX + RL) = (RW * RL) / (RWMAX + RL)
Nu we kunnen onze lineaire 'curve' (in rood uitzetten) en zien of het merkbaar anders dan de bochtige curve is... en ja... zolang we bedriegen met behulp van de log10, kunnen wij het verschil zien. Als we het openen van het excel-bestand, kunnen we de waarde van de lading weerstand omzetten in iets dom klein en krijgen sommige behoorlijk gek bochten geproduceerd.
Tenslotte, realiseerde ik me dat we konden dan aftrekken van de niet-lineaire curve van de lineaire curve en krijg een eindresultaat: het werkelijke niet-lineariteit, of het 'verschil' tussen de lineaire en niet lineaire resultaten. Dit is de mooie blauwe curve aan de rechterkant en wordt gegeven door:
RDIFF = RT - RLIN = (RW * RL) / (RW + RL) - (RW * RL) / (RWMAX + RL)
Deze vergelijking kan verder worden verminderd, maar de arduino nano gaat al te worstelen met een aantal van de grote getallen geproduceerd (we werken met 16-bits ADCs), dus we moeten helpen het langs een beetje.
De formule wordt uiteindelijk vertaald arduino code:
U ziet dat de code meer 'onhandig' dan de formule is en ik heb gehad om te delen door 5 om de grootte van een aantal van de nummers. Maar het werkt!
Hopelijk, ik heb nu ook bleek niet dat alleen dat wiskunde leuk maar ook relevant zijn voor de echte wereld kan worden? Maar wat al dit werk eigenlijk bereiken?
Als we niet van eerder vergeten, de aanbevolen minimale last weerstand was 100K, maar als we deze Ohm verminderen kunnen we de lezingen aanzienlijk stabieler in de buurt van de dode zone. Ik probeerde veel verschillende permutaties en, met behulp van de bovenstaande formule te ontkennen van de niet-lineariteit, uiteindelijk heb ik met behulp van een super nauwkeurige (+ - 0,1%) 30K Ohm weerstand en heb nog steeds goede lezingen op vervaldatums Zuid, die, volgens ons excel-diagram, waar de meeste niet-lineariteit zal plaatsvinden.