Obsluha přerušení na "nepřerušitelných" pinech
Moderátor: Moderátoři
-
hall
Obsluha přerušení na "nepřerušitelných" pinech
-
hall
-
hall
Kód: Vybrat vše
if (bit_is_set(PIND, PD3) && bit_is_set(PIND, PD6) && ! speedLcounted) {
speedL1++;
speedLcounted = 1;
}
if (((bit_is_set(PIND, PD3) && ! bit_is_set(PIND, PD6)) || (! bit_is_set(PIND, PD3) && bit_is_set(PIND, PD6))) && speedLcounted) {
speedLcounted = 0;
}Ale takhle nepoznám směr otáčení.
-
hall
Kód: Vybrat vše
if (bit_is_set(PIND, PD3) && bit_is_set(PIND, PD6) && ! speedLcounted) {
speedL1++;
speedLcounted = 1;
if (!speedLdirTest) speedLdir = 0; else speedLdir = 1;
}
if ((bit_is_set(PIND, PD3) && ! bit_is_set(PIND, PD6)) && speedLcounted) {
speedLcounted = 0;
speedLdirTest=0;
}
if ((! bit_is_set(PIND, PD3) && bit_is_set(PIND, PD6)) && speedLcounted) {
speedLcounted = 0;
speedLdirTest=1;
}
Teď to dám asi do přerušení nějakýho timeru, aby se to spouštělo "na čas" a mělo by být po problému. Nebo je tam ještě nějaká zádrhel? Ještě mě ale překvapuje jedna věc. Enkodér by měl dávat 360 pulsů/otáčku hřídele, ale já dosahuju jen 290pulsů při pwm 255.
Asi takto:
Vstupy od snímačů přivést na libovlné dva vstupní piny.
Přes OR hradlo přivést signál také na INT0.
Po přerušení okamžitě šáhnout na ty vstupní piny a tím poznat, kdo to byl.
Vrátit se do programu a zařídit se podle toho, kdo to byl.
Jinak OR hradlo se dá udělat pomocí dvou diod a jednoho odporu
-
hall
Směr otáčení se zjišťuje posloupností fází, proto jsou tam ty Hallovy sondy dvě. I když nevím, proč zjišťovat směr, když ten přece vyplývá ze zadaného napětí (polarity). Zjišťování směru by mělo význam jen při pasivním pohybu.
Ani otáčky bys nemusel zjišťovat, když budeš motor s enkodérem řídit jako "analogově krokový": motor dostane napětí a po potvrzení enkodérem, že tam dojel, "krok" skončí, příp. vykonává další. Po zastavení motoru výkonová logika motor zkratuje, takže nepřejede do další polohy. Vůbec nepotřebuje na pohon dozírat a MCU se může věnovat jiným věcem, třeba obsloužit nadproud motoru (robot jede do zdi nebo pohon namotal kočku)
-
hall
-
hall