Hall senzor, smjer i broj okretaja
Moderators: pedja089, stojke369, [eDo], trax
Hall senzor, smjer i broj okretaja
Pozdrav,
radim jedan projekt i trebao bih pomoću PIC-a odrediti smjer i broj okretaja osovine jednog stroja. Osovina bi se trebala okretati promjenjivom brzinom. Pokušao sam pomoću tri optokaplera to riješiti ali mi se na velikim brzinama javlja greška zaostajanja brojanja (na momente polude i nisu pouzdani za moj slučaj). Može li se to uraditi pomoću Hall senzora? Pretražujem Internet danima, ali svi pokazuju izračun brzine okretanja, a meni to ne treba. Nisam pronašao nikakav primjer izračuna broja okretanja i smjera okretanja. Ima li tko kakav savjet ili mišljenje? Svaki savjet je dobro došao.
radim jedan projekt i trebao bih pomoću PIC-a odrediti smjer i broj okretaja osovine jednog stroja. Osovina bi se trebala okretati promjenjivom brzinom. Pokušao sam pomoću tri optokaplera to riješiti ali mi se na velikim brzinama javlja greška zaostajanja brojanja (na momente polude i nisu pouzdani za moj slučaj). Može li se to uraditi pomoću Hall senzora? Pretražujem Internet danima, ali svi pokazuju izračun brzine okretanja, a meni to ne treba. Nisam pronašao nikakav primjer izračuna broja okretanja i smjera okretanja. Ima li tko kakav savjet ili mišljenje? Svaki savjet je dobro došao.
Re: Hall senzor, smjer i broj okretaja
Kako misliš oktokaplerima ? Oni nisu davači signala nego samo prenosioci.
Navedi o kojem se rasponu brzine okretaja radi.
U datašitu hall ili nekog drugog senzora vidi koju frekvenciju prekidanja podržavaju.
Iz datašita korištenog pic-a vidi koliko često će "skenirati" taj pin i možel' izgurat' tu brzinu.
Navedi o kojem se rasponu brzine okretaja radi.
U datašitu hall ili nekog drugog senzora vidi koju frekvenciju prekidanja podržavaju.
Iz datašita korištenog pic-a vidi koliko često će "skenirati" taj pin i možel' izgurat' tu brzinu.
Ako kaniš pobijediti, ne smiješ izgubiti
Re: Hall senzor, smjer i broj okretaja
Pozdrav Witehead,
radi se o sličnom modelu kao CNY 37 (http://www.datasheetspdf.com/PDF/CNY37/828616/1). Imam takva tri (slična samo oblikom) ali bez oznaka. Hvala na savjetima. Ja sam samo amater, koji baš puno ne razumije datasheet, pa mi to stvara probleme. Pokušat ću sve to provjeriti.
Radi se o stroju za motanje transformatora. Ni sam neznam o kojim brzinama okretanja se radi, ali na svom modelu sam uvidio greške brojanja. Sada pokušavam to riješiti na način da radim samo s jednim senzorom i prekidačom sam definiram smjer vrtnje, a time i zbrajanje ili oduzimanje namotaja. To nije ono što sam želio, ali drugačije nisam znao postići.
radi se o sličnom modelu kao CNY 37 (http://www.datasheetspdf.com/PDF/CNY37/828616/1). Imam takva tri (slična samo oblikom) ali bez oznaka. Hvala na savjetima. Ja sam samo amater, koji baš puno ne razumije datasheet, pa mi to stvara probleme. Pokušat ću sve to provjeriti.
Radi se o stroju za motanje transformatora. Ni sam neznam o kojim brzinama okretanja se radi, ali na svom modelu sam uvidio greške brojanja. Sada pokušavam to riješiti na način da radim samo s jednim senzorom i prekidačom sam definiram smjer vrtnje, a time i zbrajanje ili oduzimanje namotaja. To nije ono što sam želio, ali drugačije nisam znao postići.
Re: Hall senzor, smjer i broj okretaja
Znači ovo je modul, a ne optokupler, odnosno može se možda reći da je to "otvoreni" optokupler.coupled interrupter module
Datašit na ovom linku je na njemačkom, a tu sam tanak, ali motalica transformatora se vrti prilično sporo, tako da ne bi trebalo biti nikakvih problema oko brojanja.
Možeš to izvesti s hall senzorima (tri ako želiš i smjer), i ostalo je do programa za PIC.
Ako je tu zapelo, postavi ovdje pa će neko ko je bolji u tome od tebe (a i od mene) svakako pomoći.
Ako kaniš pobijediti, ne smiješ izgubiti
Re: Hall senzor, smjer i broj okretaja
Sinoć sam "učio" o hall senzorima. Uradio sam proceduru u Interupt rutini ali trenutno nemam niti jedan hall senzor. Malo mi je nejasno kako misliš sa tri hall senzora urediti i smjer. To sam urado sa "optokaplerima", ali ne u interapt rutini. Ako ja to dobro razumijem, magnet je na osovini i samo jedan pol je "izložen". S obzirom na okretanje i interupt rutinu koja baš i neozvoljava previše koda (da ju ne usporim), možeš mi ukratko opisati tvoju ideju.
Re: Hall senzor, smjer i broj okretaja
Kod tvog problema je dovoljno imati dva senzora. Identično radi i kotačić na mišu, samo što on daje više impulsa. Dakle senzori moraju biti jedan do drugog i magnetić koji će, kad se vreteno okreće npr. desno, prvo aktivirati senzor A, zatim i senzor B, nakon čega će se maknuti sa senzora A a ostati iznad senzora B i na kraju maknuti se sa senzora B. U obrnutom smijeru rotacije vretena ide ovaj redoslijed, aktivita se senzor B, zatim senzor A, deaktivira se B i konačno se deaktivira senzor A. Zvuči komplicirano, ali nacrtaj si dijagram ili progooglaj "pic rotary encoder interrupt". Možeš koristiti "interrupt on change" recimo na A kanalu, dakle kad A naraste s L na H i ako je u tom trenutku B = L onda je smjer recimo desno, a ako A padne s H na L a B = L onda je smjer lijevo (suprotan). Za brojanje koristiš samo uzlaznu ili silaznu ivicu impulsa na A.
Nadam se da sam bio dovoljno nerazumljiv
Nadam se da sam bio dovoljno nerazumljiv
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Hall senzor, smjer i broj okretaja
Hvala,
dao si mi dužu domaću zadaću. Ako uspijem postavljam kod i šeme. Pozdrav
dao si mi dužu domaću zadaću. Ako uspijem postavljam kod i šeme. Pozdrav
Re: Hall senzor, smjer i broj okretaja
Evo ti dio interrupt rutine, istina pisano za Atmel u Bascom-u, ali vidjet ćeš da nije komplicirano kako se čini
Code: Select all
'---[ Interrupt On Change A kanala ]---------------------------------------------
A_kanal_int_on_ch: ' Interrupt na uzlaznoj ili silaznoj ivici A kanala
If A = 1 And B = 0 Then ' testiraj stanje B kanala
Incr Broj_namotaja ' Dodaj slijedeći namotaj
End If
If A = 0 And B = 0 Then
Decr Broj_namotaja ' Obrnuti smjer, oduzmi namotaj
End If
Return 'Povratak iz interrupt rutine
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Hall senzor, smjer i broj okretaja
Ja radim u Mikrobasicu. Moja interupt rutina nije tako jednostavna (barem se meni čini). Kukinjos, hvala svakako, jasna mi je ali moram ju preraditi na način poznat MB. koja izgleda ovako:
Moram se poigrati s dva pina RB0 i RB1, te ih pokušati upariti kako ste mi svi savjetovali. Nadam se da to neće biti još jedna neprospavana noć.
Code: Select all
sub procedure interrupt ' RB0 int
if INTCON.INT0IF = 1 then
inc(count)
INTCON.INT0IF = 0 ' Clear Interrupt Flag
end if
end sub
Re: Hall senzor, smjer i broj okretaja
@Kuki,
Ja razmišljam ovako:
Ako imamo senzor A i senzor B pri vrćenju osovine uvijek ćemo imati B poslije A i A poslije B bez obzira na smjer osovine, znači ABABABABABAB.....zato sam predlagao tri senzora.
Ne tvrdim da je tvoj prijedlog neizvediv, nego po trenutnom rasporedu i stanju svojih (ostarjelih) malih sivih ćelija, ja to ne bih znao uraditi.
EDIT: @bob me pretekao, vidi sa ovakvim rasporedom senzora može i sa dva.....stvarno ove moje male sive....
Ja razmišljam ovako:
Ako imamo senzor A i senzor B pri vrćenju osovine uvijek ćemo imati B poslije A i A poslije B bez obzira na smjer osovine, znači ABABABABABAB.....zato sam predlagao tri senzora.
Ne tvrdim da je tvoj prijedlog neizvediv, nego po trenutnom rasporedu i stanju svojih (ostarjelih) malih sivih ćelija, ja to ne bih znao uraditi.
EDIT: @bob me pretekao, vidi sa ovakvim rasporedom senzora može i sa dva.....stvarno ove moje male sive....
Ako kaniš pobijediti, ne smiješ izgubiti
Re: Hall senzor, smjer i broj okretaja
@Bjelokosi (kao i ja), bitna je stvar da magnet u jednom trenutku MORA pokriti oba senzora, onda ova moja logika radi.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Hall senzor, smjer i broj okretaja
Da, vidio sam iz Bob-ovih dijagrama...
Ako kaniš pobijediti, ne smiješ izgubiti
Re: Hall senzor, smjer i broj okretaja
Pozdrav,
uspio sam nešto proguglati i dosta pročitati. Rezultat je polovičan. Sada uspjevam registrirati okretanje u jednu stranu. Kada krenem okretati osovinu u drugu stranu program i dalje zbraja. Pazio sam na ivicu signala, ali nisam dobio rezultat. Ako imate volje pogledati kod i dati svoje mišljenje.
Više nemam ideja, gdje griješim.
uspio sam nešto proguglati i dosta pročitati. Rezultat je polovičan. Sada uspjevam registrirati okretanje u jednu stranu. Kada krenem okretati osovinu u drugu stranu program i dalje zbraja. Pazio sam na ivicu signala, ali nisam dobio rezultat. Ako imate volje pogledati kod i dati svoje mišljenje
Code: Select all
program Hall_1503_INT
' PIC18F4550 - 8 MHZ
' EasyPic5 MicroBasic PRO
dim hall_sensor_0 as sbit at RB0_bit
dim hall_sensor_1 as sbit at RB1_bit
dim hall_sensor_direction as sbit at TRISB0_bit
dim hall_sensor_direction_1 as sbit at TRISB1_bit
dim count, broj1, broj2, KONACNI as word
dim count_str, broj1_str, broj2_str, KONACNI_STR as string [5]
dim oldstate_1, d_1, broj, ne_minus, ne_plus, asds as byte
dim asds_str as string [3]
dim LCD_RS as sbit at RD4_bit
LCD_EN as sbit at RD5_bit
LCD_D4 as sbit at RD0_bit
LCD_D5 as sbit at RD1_bit
LCD_D6 as sbit at RD2_bit
LCD_D7 as sbit at RD3_bit
LCD_RS_Direction as sbit at TRISD4_bit
LCD_EN_Direction as sbit at TRISD5_bit
LCD_D4_Direction as sbit at TRISD0_bit
LCD_D5_Direction as sbit at TRISD1_bit
LCD_D6_Direction as sbit at TRISD2_bit
LCD_D7_Direction as sbit at TRISD3_bit
sub procedure interrupt
'--samo ovaj dio interrupt rutine radi , drugi smjer ne
INTEDG0_BIT=1
INTEDG1_BIT=0
if (INT0IF_BIT = 1) AND (INT1IF_bit=1) then
GIE_bit=0
inc(count)
INT0IF_bit = 0
INT1IF_bit=0
GIE_bit=1
end if
'DRUGI SMJER
INTEDG1_BIT=1
INTEDG0_BIT=0
if (INT1IF_bit=1) AND (INT0IF_BIT = 1) then
GIE_bit=0
dec(count)
INT1IF_bit = 0
INT0IF_bit=0
GIE_bit=1
end if
End sub
main:
ADCON1 = 0x0F
trisa=0 trisb=1
porta=0 portb=0
Lcd_Init() Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_LCD_CURSOR_OFF)
hall_sensor_direction=1
hall_sensor_direction_1=1
count=0
'--------INTERRUPT Setup----------
RCON.IPEN=1
INTCON.GIE=1 'global int on
INTCON.PEIE=1 'all int on
INTCON2.RBIP=0
INTCON3.INT1IP=0
INT0IE_bit = 1 'int0 on
INT1IE_bit = 1 'int1 on
INTCON.RBIE=0
INTCON.RBIF=0
while true
wordtostr (count, count_str)
LCD_Out (1,10, count_str)
LCD_Out (1,1, "ISPIS")
PORTA.broj=$FF
delay_ms (100)
porta.broj=0
inc (broj)
if broj>4 then
broj =0
end if
wend
end.
Više nemam ideja, gdje griješim.
Re: Hall senzor, smjer i broj okretaja
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Hall senzor, smjer i broj okretaja
Da, jesu.
Ta dva bita govore da se desio inerrupt na dva pina. Zato moraju biti isti. Bitovi iznad tog reda koda govore da se pojavljuju različiti ulazno silazni impulsi (barem sam si ja to tako razjasnio). Po meni tu se nalazi razlika koja govori o smjeru okretanja.
Međutim i dalje imam samo zbrajanje, bez oduzimanja.
Nakon toliko čitanja i isprobavanja, veliku nepoznanicu predstavljaju mi mjesto bitova INTEDG. Mislim kako njih ne smještam na dobro mjesto.
Code: Select all
if (INT1IF_bit=1) AND (INT0IF_BIT = 1) then
Međutim i dalje imam samo zbrajanje, bez oduzimanja.
Nakon toliko čitanja i isprobavanja, veliku nepoznanicu predstavljaju mi mjesto bitova INTEDG. Mislim kako njih ne smještam na dobro mjesto.
Re: Hall senzor, smjer i broj okretaja
Preporučam ti koristiti pinove na RB.4 - RB.7 za A kanal senzora, jer su to portovi na kojima možeš koristiti "interrupt on change". Ako možeš, izbjegni na te portove spajati bilo što drugo, jer se interrupt pojavljuje kad dođe do promjene na bilo kojem od tih pinova (RB.4 - RB.7).
Koristiš RBIE = 1 za dopustiti interupt on change, RBIF za provjeru je li došlo do promjene na nekom od pinova i RBIP za prioritet interrupta, ali ovaj zadnji nije toliko bitan. U rutini za interrupt, pročitaj RB, i vidi stanje senzora A i B, pa prema tome zbrajaj ili oduzimaj impulse. Dovoljno ti je nadzirati kanal A, i ako je na njemu došlo do promjene, onda uspoređuješ if A=1 and B=0 then zbroji else if A=0 and B=0 then oduzmi. Naravno da moraš prilikom ulaska u rutinu zabraniti interrupte (GIE), odradit rutinu, obrisat flagove (RBIF) i opet dopustiti interrupte (RBIE i GIE)
Koristiš RBIE = 1 za dopustiti interupt on change, RBIF za provjeru je li došlo do promjene na nekom od pinova i RBIP za prioritet interrupta, ali ovaj zadnji nije toliko bitan. U rutini za interrupt, pročitaj RB, i vidi stanje senzora A i B, pa prema tome zbrajaj ili oduzimaj impulse. Dovoljno ti je nadzirati kanal A, i ako je na njemu došlo do promjene, onda uspoređuješ if A=1 and B=0 then zbroji else if A=0 and B=0 then oduzmi. Naravno da moraš prilikom ulaska u rutinu zabraniti interrupte (GIE), odradit rutinu, obrisat flagove (RBIF) i opet dopustiti interrupte (RBIE i GIE)
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Hall senzor, smjer i broj okretaja
Prerano sam se obradovao.
Odlično zbraja, a kada krenem u drugom smjeru počinje oduzimati, da bi u jednom trenutku samo počeo zbrajati, pa opet oduzimati.
Sada više ne vjeriujem u kod, možda je PIC i njegov inerrupt "spor" (čisto sumnjam).
Odlično zbraja, a kada krenem u drugom smjeru počinje oduzimati, da bi u jednom trenutku samo počeo zbrajati, pa opet oduzimati.
Sada više ne vjeriujem u kod, možda je PIC i njegov inerrupt "spor" (čisto sumnjam).