Krokování frekvence u Arduino UNO

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
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.
Odpovědět
QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Krokování frekvence u Arduino UNO

Příspěvek od QRocky » 06 zář 2021, 16:48

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

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Krokování frekvence u Arduino UNO

Příspěvek od gilhad » 06 zář 2021, 16:52

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š :D

QRocky
Příspěvky: 36
Registrován: 28 zář 2017, 16:30
Reputation: 0

Re: Krokování frekvence u Arduino UNO

Příspěvek od QRocky » 07 zář 2021, 10:50

gilhad píše:
06 zář 2021, 16:52
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š :D
To jsem zkoušel jako první 😊, jen s tím rozdílem, že jsem nepoužíval millis, ale micros.

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…

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Krokování frekvence u Arduino UNO

Příspěvek od ondraN » 07 zář 2021, 12:35

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

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů