Ahojte, potřeboval bych u Arduina nastavit frekvenci u PWM pinu cca 46 Hz, ale být schopen ji pak krokově jedním tlačítkem zvyšovat a druhým snižovat o cca 0,1 Hz, či dokonce o menší rozdíl.
Snažil jsem se použít PWM.h ( https://codebender.cc/sketch:211750#PWM ... xample.ino ), ale tam lze frekvenci měnit pouze celočíselně.
Nemáte někdo nějaký tip, jak na to?
střída bude 50%, chci měnit jen frekvenci PWM.
Ta by měla být v rozsahu cca 45 - 110 Hz.
Jedná se o regulaci motoru pro gramofonový přehrávač.
Děkuji
Krokování frekvence u Arduino UNO
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Re: Krokování frekvence u Arduino UNO
46 HZ je na Arduino, co nemá na práci nic lepšího než display a pár tlačítek naprosto směšná frekvence, takže to levou zadní utáhne i přez klasické https://www.arduino.cc/en/Tutorial/Buil ... thoutDelay a s možností regulace na 0.001Hz pokud si tak zamaneš
Re: Krokování frekvence u Arduino UNO
To jsem zkoušel jako první , jen s tím rozdílem, že jsem nepoužíval millis, ale micros.gilhad píše: ↑06 zář 2021, 16:5246 HZ je na Arduino, co nemá na práci nic lepšího než display a pár tlačítek naprosto směšná frekvence, takže to levou zadní utáhne i přez klasické https://www.arduino.cc/en/Tutorial/Buil ... thoutDelay a s možností regulace na 0.001Hz pokud si tak zamaneš
S millis jsem moc nepochodil, protože když spočítáš periodu pro
43 Hz:
T = 1 / f = 0,0232558 S > 23,2558 mS
43,1 Hz
T = 1 / f = 0,0232018 S > 23,2018 mS (rozdíl oproti původnímu stavu 0,054 mS)
Pro 109 Hz je perioda 0,0091743 S > 9,1743
Pro 109,1 Hz je zase 0,00916590 S > 9,1659 (rozdíl oproti pův. stavu pouze 0,0084 mS)
Jsou to rozdíly jen v desítkách mikrosekund, což není moc dobré, protože i pokud vím, tak Arduino má toleranci +/- 4 mikrosekundy, kde se může přepočítat.
Pak tam jsou i další problémy, i když samozřejmě řešitelné, například přetečení micros časovače po cca 65 minutách, atd.
Jestli tedy není lepší měnit frekvenci PWM přímo.
Potřebuju ale efektivní skoky…
Re: Krokování frekvence u Arduino UNO
Použij timer 1 a čítej do něj 1us impulsy (clock/16). Počítej od nějaké hodnoty dolu (s autoreloadem) a pak v ISR proveď změnu stavu IO pinu. Hodnota čítače bude vyjadřovat délku půlperiody signálu. Získáš rozlišeni na 1us a celé to pojede v pozadí. V popředí si budeš tlačítky měnit hodnotu pro čítač a třeba obsuhovat displej. Maximální půlperioda bude 65535uS a min, tak 100us (aby se stihl zápis do portu). Rozlišení 1us.
Mohlo by ti pomoct třeba tohle
https://gammon.com.au/interrupts
Mohlo by ti pomoct třeba tohle
https://gammon.com.au/interrupts
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů