Hall senzor, smjer i broj okretaja

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Hall senzor, smjer i broj okretaja

Post by majstor1 »

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.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Hall senzor, smjer i broj okretaja

Post by WhiteHead »

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.
Ako kaniš pobijediti, ne smiješ izgubiti
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

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.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Hall senzor, smjer i broj okretaja

Post by WhiteHead »

coupled interrupter module
Znači ovo je modul, a ne optokupler, odnosno može se možda reći da je to "otvoreni" optokupler.
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
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

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.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Hall senzor, smjer i broj okretaja

Post by Kukinjos »

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 :roll:
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

Hvala,
dao si mi dužu domaću zadaću. Ako uspijem postavljam kod i šeme. Pozdrav
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Hall senzor, smjer i broj okretaja

Post by Kukinjos »

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 ....
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Hall senzor, smjer i broj okretaja

Post by bob4 »

:wink:
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

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:

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
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ć.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Hall senzor, smjer i broj okretaja

Post by bob4 »

:wink:
Image

Ja sam to tako nekada radio....Malo logike i odrediš smjer; a jedan kanal sam koristio za brojanje
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Hall senzor, smjer i broj okretaja

Post by WhiteHead »

@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.... :azdaja:
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Hall senzor, smjer i broj okretaja

Post by Kukinjos »

@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 ....
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Hall senzor, smjer i broj okretaja

Post by WhiteHead »

Da, vidio sam iz Bob-ovih dijagrama... :oops:
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: Hall senzor, smjer i broj okretaja

Post by bob4 »

majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

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

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.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Hall senzor, smjer i broj okretaja

Post by Kukinjos »

Zar ove dvije zaokružene stvari nisu jedno te isto?
Image
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

Da, jesu.

Code: Select all

  if (INT1IF_bit=1) AND (INT0IF_BIT = 1) then
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.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: Hall senzor, smjer i broj okretaja

Post by Kukinjos »

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)
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
majstor1
Pocetnik na forumu
Pocetnik na forumu
Posts: 47
Joined: 17-10-2014, 13:43

Re: Hall senzor, smjer i broj okretaja

Post by majstor1 »

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. :azdaja:
Sada više ne vjeriujem u kod, možda je PIC i njegov inerrupt "spor" (čisto sumnjam).
Post Reply