Žingsninio variklio paleidimas naudojant PIC16F84 mikrovaldiklį (Video) (2)
Žingsniniam varikliui (angl. step motor) kontroliuoti naudojamas keturių kanalų valdiklis (L293), kurį valdysime su PIC16F84 mikrovaldikliu.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Turi seną spausdintuvą ir nežinai ką su juo daryti, o gal planuoji robotus konstruoti, ir nežinai, kaip valdyti jo judesius? Žingsniniai varikliai, galima sakyti, yra pirmasis žingsnis link robototechnikos.
L293 tai 4 kanalų valdiklis valdomas loginiais įtampos lygiais. Valdiklio paskirtis - į variklį paduoti maitinimo įtampą. L293 valdikliui galima paduoti iki 36 V lygio įtampą ir jis išėjime gali išduoti 2 A stiprio srovę.
Pasinaudojus L293B valdikliu, mes galime kontroliuoti 4 paprastus variklius, kurie suksis į vieną pusę. Jei norima, kad būtų galima tą patį variklį reversuoti (pasukti atgal), prie L293 valdiklio bus galima prijungti 2 variklius (tokiu būdu atsilaisvina po vieną papildomą valdymo liniją), jeigu norime kontroliuoti žingsninį variklį - teks tenkintis tik vienu varikliu.
L293 valdiklio jungimo variantai.
Jeigu jungiamas nedidelės galios variklis ar varikliui paleisti nereikalinga didelė įtampa, tokiu atveju galima naudoti supaprastintą schemą (nenaudojant diodų):
SW1 – jungtukas, naudojamas variklio judėjimo režimui paleisti
SW2 – jungtukas, naudojamas variklio judėjimo režimui pakeisti
Programa:
Pirmiausiai programoje kaip įprasta atlieku visus nustatymus. Norint, kad variklis nuolat nesisuktų, reikia naudoti kokį nors įjungiantį elementą - šiuo atveju tam naudojamas jungtukas (SW2). Norint žingsninį variklį paleisti veikti keliais skirtingais rėžimais, panaudotas SW1 jungtukas.
Tiek pirmo, tiek antro kanalo leidimo signalai E1 ir E2; jų jungti neprivaloma.
btfsc PORTA,sw2 ;antro jungtuko tikrinimas ar atleistas
goto pradžia
btfsc PORTA,sw2 ;antro jungtuko tikrinimas
goto $-.1 ;grizta atgal per viena komanda
btfsc PORTA,sw1 ;jungtuko tikrinimas
goto antras_var
Variklio sukimosi paleidimas. Pateikti du variantai, kai žingsninis variklis sukasi tik į vieną pusę ir kai žingsninis variklis sukinėja tai į viena tai į kitą pusę
pirmas_var
movlw .50 ;duomenu nustatymas
movwf TARP ;duomenu irasymas
var1
call pirmyn0 ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
decfsz TARP,1 ;skaitliuko tikrinimas
goto var1
goto pradžia
antras_var
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
call atgal ;variklio pasukimo atgal ciklo papprogrames iškvietimas
call atgal ;variklio pasukimo atgal ciklo papprogrames iškvietimas
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
call pirmyn ;variklio pasukimo i prieki ciklo papprogrames iškvietimas
goto pradžia
;Variklio pasukimas į priekį
pirmyn
movlw 0x01 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x02 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x04 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x08 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000
return
;Variklio pasukimas atgal
atgal
movlw 0x08 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x04 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x02 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
movlw 0x01 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait10000 ;velinimas
return
;Variklio pasukimas į priekį su kitu velinimu
pirmyn0
movlw 0x01 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait1000 ;velinimas
movlw 0x02 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait1000 ;velinimas
movlw 0x04 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait1000 ;velinimas
movlw 0x08 ;kodo siuntimas
movwf PORTB ;issiuntimas L293 valdikliui
call wait1000 ;velinimas
return
Žingsninio variklio greitis priklauso nuo vėlinimo tarp siunčiamų signalų žingsneliui atlikti. Jeigu mes padarysime per didelį greitį, t.y. sumažinsime vėlinimo tarpą tarp siunčiamų komandų, gali nesisukti variklis. Kodėl? Variklio greitis priklauso nuo komandos siuntimo greičio ir variklio naudojamos srovės. Jeigu bandome pagreitinti variklio sukimosi greitį programiniu būdu, proporcingai turime didinti ir srovę (tai atlikti galime ir didindami įtampą).
Atliktas eksperimentinio darbo medžiaga:
Failai:
SĖKMĖS !!!