motor s encoderom

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

motor s encoderom

Príspevok od používateľa fagi » 24 Jan 2018, 10:41

Zdravím :)

mám doma tento motorček https://www.pololu.com/product/2823 a chcel by som využívat na riadenie rýchlosti ten quadraturny enkoder na riadenie používam ATmega16 mám to vymyslene tak že kanál A privádzam na INT0 ktorý reaguje na nabežnu hranu a takto počítam impulzy takže využívam iba 1/4 všetkých možných impulzov zatial mi to stačí no neviem ako zistím smer, zatial to nechcem riešit programovo takže sa chcem spýtat nejaké zapojenie z klopných obvodov do ktorých ktorých by som priádzal signály A a B a zistil z nich smer otáčania ?
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: motor s encoderom

Príspevok od používateľa TomasNM » 24 Jan 2018, 16:38

Pri preruseni pozri stav kanala B a ak je true,tak je jeden smer,ak je false,tak smer druhy.
B-kanal nepotrebuje pin,na ktorom funguje prerusenie,kludne aj na analogu.
0

Používateľov profilový obrázok
otep69
Stály člen
Stály člen
Príspevky: 208
Dátum registrácie: 31 Okt 2008, 00:00
Bydlisko: Jarok
Vek: 35
Kontaktovať používateľa:

Re: motor s encoderom

Príspevok od používateľa otep69 » 24 Jan 2018, 17:35

Dokonca na to nepotrebujes ani vyuzivat prerusenie.
Princip:

Kód: Vybrať všetko

stav = 0;
		if (bit_is_set(PINC, PC0))				//skontroluje ci na pine PC0 je HIGH
			stav |= (1 << 1);					//ak hej zapise to na 1 poziciu v premennej stav
		if (bit_is_set(PINC, PC1))				//skontroluje ci na pine PC1 je HIGH
			stav |= (1 << 0);					//ak hej zapise to na 0 poziciu v premennej stav
		if (stav != prev_stav)					//vyhodnoti ci sa zmenil stav enkodera od poslednej kontroly ak sa nerovnaju vyhodnoti ktorym smerom sa pohol
		{
			if (((stav == 1) & (prev_stav == 2)) || ((stav == 0) & (prev_stav == 3)))
			{
				//jeden smer
			} 
			else
				if (((stav == 3) & (prev_stav == 0)) || ((stav == 2) & (prev_stav == 1)))
				{
					//opacny smer
				}
prev_stav = stav;
Taketo nieco mozes mat niekde v programe bez toho aby si vyuzival prerusenia.
P.S. tento kod reaguje na kazdu druhu zmenu hodnoty (kazde druhe "kliknutie" enkodera. Riesil som to s manualnym rotacnym enkoderom, ale princip je ten isty.
0
Teší ma Peter.
F*ck me I am Famous ...
Čo nejde silou, pôjde silou ešte väčšou.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: motor s encoderom

Príspevok od používateľa peterple » 24 Jan 2018, 19:06

S tým sw detekovaním to nie je také jednoduché ako to vyzerá. Musí sa to urobiť dobre. Riešenie od otep69 urobené dobre nie je.

Kód: Vybrať všetko

      if (bit_is_set(PINC, PC0))            //skontroluje ci na pine PC0 je HIGH
         stav |= (1 << 1);               //ak hej zapise to na 1 poziciu v premennej stav
      if (bit_is_set(PINC, PC1))            //skontroluje ci na pine PC1 je HIGH
         stav |= (1 << 0);
Ak medzi tými dvomi ifmi nastane prerušenie tak uplynie nejaká doba ktorá je daná najhoršou možnou dobou obsluhy. Navyše sa môžu zreťaziť viaceré prerušenia a tak sa doba ešte predĺži. V uvedenom prípade už obsluhy okolo 2μs môžu robiť problémy. (1/(11000*16)=5,6μs)

V takom prípade si ten kód ľahko môže občas prečítať úroveň zodpovedajúcej opačným otáčkam.

V prípade obsluhy s prerušením je to to isté ak sa bude postupovať podľa toho čo písal Tomas. Tiež nie je zaručené že prerušenie sa začne obsluhovať do tých 2μs.
Sw protiopatrenie je vcelku jednoduché, ale v prvom rade si musíte to nebezpečenstvo uvedomiť. A potom aj správne obabrať.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 24 Jan 2018, 19:27

no a preto by som to chcel skusit vymysliet cez tie klopne obvody lebo neviem či to može robit v tom najhoršom prípade že sa zretazia prerušenia šarapatu :D este dodám na atmega ide na 16Mhz este doplním že využívam tam viac prerušení takže, s tým atmegou chcem ovládat 2 taketo motry takže INT0 jeden motor encoder INT1 druhy encoder ,potom časovač 0 mi inkremetuje každu 1ms počitadlo ak dopočíta do 100 , čiže každých 100ms sa vypočítavaju regulatory a nastavenie PWM, samozrejme tam mam komunikaciu s UART kde vysielam hodnoty premenných na zobrazenie ako mi to reguluje, planujem taktiež rozchodit tam I2C a taktiež časovač 1 čo robi PWMky motorom skušam pri pretečení ADCčkom merat prúdy v motoroch ( fázovo korektnáPWM) :)
0

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 27 Jan 2018, 11:04

no neviete mi poradit aj s tým hardverovým riešením ? lebo ak chcem vužit všetky impulzy a dam tam XOR tak mi je to zistovanie softverom na hodnotu kanalu B nanič preto to chcem s klopnými obvodami skusit ?nasiel som take dačo čo si o tom myslíte ? http://www.picbasic.co.uk/forum/showthread.php?t=12911
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: motor s encoderom

Príspevok od používateľa dan21 » 27 Jan 2018, 11:27

0

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 27 Jan 2018, 11:31

ano ale ako je to s dostupnostou toho obvodu to neviem :confused:
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: motor s encoderom

Príspevok od používateľa dan21 » 27 Jan 2018, 11:55

No povedal by som ze je skor nedostupny :-)
A co toto ?
Prílohy
2009-12-21_221016_quadrature_decoder.gif
0

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 27 Jan 2018, 15:42

no obvod som odskušal a pri malých rychlostiach to funguje no pri väčších už to blbne može to byt spôsbene veľkou kapacitou tam kde je pulse generator ?
0

Dumitru
Stály člen
Stály člen
Príspevky: 374
Dátum registrácie: 06 Nov 2011, 22:19
Vek: 32

Re: motor s encoderom

Príspevok od používateľa Dumitru » 27 Jan 2018, 19:27

Nie je mi jasne aká je výhoda tohto riešenia okrem toho že to ma debouncer ? Veď pomocou mikropočítača je aj tak potrebne spracovávať dva signály síce trochu inak ale predsa
0

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 28 Jan 2018, 15:27

dobre už som to poriešil tým spôsobom že v prerušení snímam kanal B a určím smer funguje mi to spolahlivo tak už to neriešim aj ked využívam len 1/4 všetkych možných inpulzov už to necham tak hlavne že mi to spolahlivo funguje :)
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: motor s encoderom

Príspevok od používateľa peterple » 28 Jan 2018, 17:30

tiež by som to riešil cez sw. Môžem vidieť riešenie?
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

fagi
Stály člen
Stály člen
Príspevky: 110
Dátum registrácie: 23 Máj 2015, 18:09

Re: motor s encoderom

Príspevok od používateľa fagi » 29 Jan 2018, 13:17

ISR(INT0_vect){

pocitadlo1++;//inkrementovanie premennej na otačkovy sensor



if((PINC & (1<<PC5))==0){

smer1=1;
}
else{

smer1=0;
}

}
0

Zaky
Stály člen
Stály člen
Príspevky: 215
Dátum registrácie: 08 Nov 2014, 16:41

Re: motor s encoderom

Príspevok od používateľa Zaky » 29 Jan 2018, 16:02

Ideální je použití MCU, který umí IRC dekódovat hardwarově sám, ušetří to dost hw kolem. Takový HW dekodér, který je ovšem ve skutečnosti stejně jen konfigurace hradlového pole v tom MCU je třeba toto: http://www.cypress.com/documentation/co ... er-quaddec Reaguje na každou hranu a nehrozí ztráta impulsů. Pouze při přetečení counteru impulsů je třeba toto ošetřit SW, ale na to je spoustu času až do dalšího přetečení counteru.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok