PIC18f458

C

csr1981

Guest
Může mi někdo dát logiku / kód pro měření otáček motoru pomocí PIC18f458.proto jsem čtvercové vlny vstupu do mikrokontroléru na otáčkách motoru.Potřebuji převést tyto příchozí obdélníkovou vlnou impulsů na rychlost (ot
/ min).
četnost náměstí vlna pohybuje jako rychlost kolísá.

 
Dobrý den csr1981
Toto téma by mohlo nasměrovat Vás správným směrem: http://www.edaboard.com/viewtopic.php?p=1152065

Toto řešení jsem vysvětlil, že platí pro PIC16F874 (co jsem použil, když jsem RPM měření), ale stejný princip může být použit na většinu PIC18F MCUs stejně.

 
Ahoj jumper2highŠel jsem přes toto místo, ale didnot získat jasnou představu.

Můžete mi poskytnout kód nebo za stejné logiky by bylo skvělé.

Díky.

 
Nemohl jsem se vám s aktuálním kódem (od různých zasahují mají různé způsoby, jak dělat to samé).

V zásadě, pokud máte čtvercové-vlna signálem, že je motor rotace (1 impuls = 1 plnou rotaci) vše, co potřebujete udělat, je spočítat, kolikrát se signál jde z nízké na vysokou zatímco načasování jeden druhého s časovačem.Jakmile to udělal,
bude násobit počtem pulsů o 60 a máte RPM (otáček za minutu).Zde je malá chyba s tímto způsobem dělat věci, za prvé, jste počítání impulsů pro celou jednu sekundu, což znamená, že četnost aktualizací (v RPM) není mnoho, a vy se vynásobí číslem 60, což znamená, pokud si chybou tepu počítat pouze 1, výsledný rozdíl bude RPM 60 ot
/ min.

Pokud jste měl motor, který se 10 pulsů za jednu rotaci za minutu, budete dosahovat lepších přesnost (a mohla by snížit počítání času jen půl sekundy nebo méně při zachování uspokojivé přesnost).Jiný způsob výpočtu rychlosti motorových je využívat CCP (Zachytávat / Porovnání / PWM) modul spolu s 16-bit Timer.Pokud nastavíte na CCP v "zachytávání" Čas, kdy rostoucí hranu dojde, uložte ji někde, pak jednou jiné stoupající hrany dojde, odčítání uložené hodnoty z nových zachycené hodnoty ze Timer a budete přesně vědět, jak mnoho času uplynulo mezi dvěma impulsy, což znamená, budete přesně vědět, na dobu potřebnou k tomu jednu plnou rotaci.Jednoduchá matematika pak Vám umožní vypočítat skutečné RPM.Zk:

Pulsní # 1 Timer1 zajat value = "16000"
čeká na další impuls
Pulsní # 2 Timer1 zajat value = "36000"

nebo

Pulsní # 1 -> Timer je Reset
čeká na další impuls
Pulsní # 2 -> Timer zajat value = "20000"

Nyní, vzhledem k tomu, že jsme pomocí 4Mhz hodiny, máme časový rozdíl 20.000 mikrosekund, což je 20ms.To znamená, že motor potřebuje 20 milisekund na jednu rotaci.Pokud víme, že víme, že motor bude činit 50 otáček za jednu sekundu a 3000 otáček za jednu minutu.

Jediné omezení pro tuto metodu je RPM rozsahu.Nemůžete měřit velmi pomalé rychlosti (pokud budete provádět další kroky v počítání Timer přetečení).Maximální "čas" na Timer může počítat je 65536 mikrosekund (bez prescaler).To znamená, že nebudou moci měřit rychlost pod 1000rpm bez přidání prescaler (ztrácí přesnost) nebo přidání více kódu, aby se k přetečení odpočítáváme.Maximální RPM můžete měřit tímto způsobem s 4Mhz hodiny překračuje rychlost jakékoli fyzické motor / ventilátor by mohl dosáhnout, takže to není něco obávat

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsměv" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top