Stap 6: Extra gedachten...
Deze sensor geeft slechts twee meetbare gebeurtenissen per omwenteling, zodat hebt u een laag overbrengingsverhouding kan dit niet een ideale sensor voor u. In mijn geval is de boor-versnellingsbak een vrij hoge vermindering dus een lage resolutie op de motoras trekken nog steeds een eerlijke resolutie op de uitgang geeft. U kunt overwegen het toevoegen van een extra hal sensor offset 90 graden. Ik heb dit nog niet getest, maar ik veronderstel dat het zou geven u een quadrature uitgang waaruit u kon krijgen extra resolutie evenals kunnen lezen van de roterende richting. Het betekent meer verwerking op uw microcontroller maar betere resultaten kan opleveren.Wat de code zijn er vele manieren om te doen een motorsnelheid feedback loop. Degene die ik aan het testen ben is een simpele fout correctie lus die het verschil tussen de werkelijke snelheid (gemeten in Hz) en de gewenste snelheid bepaalt. De fout wordt vermenigvuldigd met een scalair (0,05, gekozen voor een langzamere en minder agressief reactie) en toegevoegd aan de waarde van een drijvende snelheid die vervolgens wordt omgezet in een uint8 type en zet in OCR0A/OCR0B van de AVR timer het PWM-uitgang te selecteren. Dit werkt zoals verwacht. Grijp de motoras trekken en greep het strak toe te passen een belasting en de snelheid zal afnemen, maar snel zullen oprit van macht te corrigeren. Laten gaan en het zal kort draaien boven snelheid als het vermindert macht, totdat de snelheid vestigt zich terug op het gewenste niveau. Koppel de sensor en de fout voortdurend accumuleert, speedramp up macht aan de grens waar het blijven zal tot een snelheidssignaal is verbonden. Ik ben met behulp van timer/teller 1 in de input-opnamemodus voor het meten van de motorsnelheid met snelle update tarieven. Dit is beter dan tellen pulsen per seconde, want het geeft je veel fijner resolutie en veel sneller updates. Experimenteer met verschillende wiskundige filters als u wilt dat een gemiddelde RPM-waarde overgenomen van een vast bedrag van tijd.