Léptetőmotor vezérlés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Szerintem régen rossz:

If Irany < 0 Then Gosub Csokkenes
If Irany < 1 Then Gosub Novekedes <- ide mindig belép!
Ha Irany < 0 akkor is!
:evil:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Most jobban átnéztem a programodat!
Mondhatom televan hibákkal!
Ha:

Kód: Egész kijelölése

Irany Alias Portb.5
Akkor:
If Irany = 0 Then Gosub Csokkenes 
If Irany = 1 Then Gosub Novekedes
Legyen!

Csokkenes 
Temp = Jelenposition - 1 
Temp1 = Temp Mod 8
Select Case Temp1 	<-Ez itt minek???
Jled = 1 
Waitms 100 
Gosub Lepked 
Return 


Novekedes 
Temp = Jelenposition + 1 
Temp1 = Temp Mod Temp1 8 
Selec Case Temp1 	<-Ez itt minek???

Bled = 1 
Waitms 100 
Gosub Lepked 

Return
 :roll: 
Avatar
dzoli
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2009. január 24. szombat, 7:00

Hozzászólás Szerző: dzoli »

szia
egy cnc masinát szeretnék összerakni x.y.z tengely-el
ugye a step jel határozza meg hogy kell-e lépni
a dir jel mondja meg a lépés irányát
eddig egyszerűnek is tűnhet
de irányváltáskor arra is figyelni kell hogy ne elölről lépjen
hanem a jelenlegi pozícióból visszafelé, máskülönben össze vissza ugrálna.
nos ez utóbbi megírása okoz nagyobb problémát.
próbáltam Marvin után menni ,de ő enkóderel lépked
nem step-dir jelekkel.
hát itt tartok... :oops:
Avatar
dzoli
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2009. január 24. szombat, 7:00

Hozzászólás Szerző: dzoli »

:arrow:
A hozzászólást 1 alkalommal szerkesztették, utoljára dzoli 2009. január 25. vasárnap, 12:48-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kezdetnek mondjuk ennyit javítanák:

Kód: Egész kijelölése

Dim Ap As Word 'alap pozició 
Dim Temp1 As Word 
Dim Temp As Word 
Dim Jp As Word 'jelenpozició

Ap = 1 
Temp1 = 1	’Adunk kezdőértéket 
Temp = 1

Do 


If Irany = 0 And Lepes = 1 Then Gosub Csokkenes 

If Irany = 1 And Lepes = 1 Then Gosub Novekedes 


Loop 


Csokkenes 
Temp = Temp - 1 
If Temp < 1 then Temp = 8 End if	’Figyeljük a ciklus túllépést 
Temp1 = Temp Mod 8 
Gosub Lepked 
Waitms 100 
Ap = Ap - 1 'Mi legyen ha AP kisebb mint 1 Lesz?
Return 

Novekedes 
Temp = Temp + 1 
If Temp > 8 then Temp = 1 End if	’Figyeljük a ciklus túllépést 
Temp1 = Temp Mod 8 
Gosub Lepked 
Waitms 100 
Ap = Ap + 1 'Mikor van végállás?
Return

Lepked 
Select Case Temp1 
Case 1 
Portb.4 = 1 
Portb.3 = 0 
Portb.2 = 0 
Portd.5 = 0 
Case 2 
Portb.4 = 1 
Portb.3 = 1 
Portb.2 = 0 
Portd.5 = 0 
Case 3 
Portb.4 = 0 
Portb.3 = 1 
Portb.2 = 0 
Portd.5 = 0 
Case 4 
Portb.4 = 0 
Portb.3 = 1 
Portb.2 = 1 
Portd.5 = 0 
Case 5 
Portb.4 = 0 
Portb.3 = 0 
Portb.2 = 1 
Portd.5 = 0 
Case 6 
Portb.4 = 0 
Portb.3 = 0 
Portb.2 = 1 
Portd.5 = 1 
Case 7 
Portb.4 = 0 
Portb.3 = 0 
Portb.2 = 0 
Portd.5 = 1 
Case 8 
Portb.4 = 1 
Portb.3 = 0 
Portb.2 = 0 
Portd.5 = 1 
End Select 
Return

Avatar
dzoli
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2009. január 24. szombat, 7:00

Hozzászólás Szerző: dzoli »

köszi a segítséget
kezdem érteni a lényeget,
a temp1 = 1 -re még kiabál a bascom
most ezzel próbálok kezdeni valamit.. :)
Avatar
dzoli
Újonc
Újonc
Hozzászólások: 6
Csatlakozott: 2009. január 24. szombat, 7:00

Hozzászólás Szerző: dzoli »

alakul.....
most így néz ki az error file

Kód: Egész kijelölése

Error : 1     Line :   66    Unknown statement [CSOKKENES]  , in File : L:\CNC\CNC.BAS
Error : 242   Line :   68    Source variable does not match the target variable [ 0|8 END IF]  , in File : L:\CNC\CNC.BAS
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Mod = osztás maradék nélkül
Ez mindig: Temp / 8 = 0 lesz!
Nem tudom minek oda ez: „Temp1 = Temp Mod 8” szedki!

:roll:
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Én is csinálta Tiny 13 al egy vezérlőt és jól müxik.
Bár fel kell érte áldozni a kontrollert !
programozás után le kell tiltani a reset lábat, illetve utolsó fuse bit írásként
Persze rögtön hibát jelez a Bascom de ez csak a visszaellenörzés sikertelensége miatt teszi!(nincs reset láb!!)

Kód: Egész kijelölése

 $regfile = "ATtiny13.dat"
 $crystal = 9600000

 Config Portb.0 = Output
 Config Portb.1 = Output
 Config Portb.2 = Output
 Config Portb.3 = Output
 Config Portb.4 = Input
 Config Portb.5 = Input
 Dim A As Byte

 A = 1

 Figyel:
 Portb.4 = 1
 Portb.5 = 1

 If Pinb.4 = 0 Then
 If Pinb.5 = 0 Then Gosub Fel Else Gosub Le
 End If

 Goto Figyel

 Fel:
  A = A * 2
  If A > 8 Then A = 1
  Portb = A
  Waitus 10
  Return

 Le:
  A = A / 2
  If A < 1 Then A = 8
  Portb = A
  Waitus 10
  Return
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Nekem nem fért bele a programod az ATtiny13-ba!
De nem is feszegettem!
Inkább átírtam így fél lépés is van benne!

Kód: Egész kijelölése

' Irta: kapu48
'$sim
' $regfile = "ATtiny13.dat"
 $regfile = "m8def.dat"
 $crystal = 9600000

 Config Portb.0 = Output
 Config Portb.1 = Output
 Config Portb.2 = Output
 Config Portb.3 = Output
 Config Portb.4 = Input
 Config Portb.5 = Input
 Dim Sztep(8) As Byte , N As Byte , Sztep_n As Word , Vege As Word

 Sztep(1) = 1                                               '1000
 Sztep(2) = 3                                               '1100
 Sztep(3) = 2                                               '0100
 Sztep(4) = 6                                               '0110
 Sztep(5) = 4                                               '0010
 Sztep(6) = 12                                              '0011
 Sztep(7) = 8                                               '0001
 Sztep(8) = 9                                               '1001

 N = 1                         'Indulás kezdő helyzetből!
 Sztep_n = 1
 Vege = 4000                                                'Pálya vége

 Do

 Portb.4 = 1                ' Ha teszel külsö felhuzo elenállást, ez nem kel!
 Portb.5 = 1
 Waitms 100
 If Pinb.4 = 0 Then
    If Pinb.5 = 0 Then
     Incr Sztep_n
     If Sztep_n > Vege Then Goto Hiba
     Incr N
     If N > 8 Then
     N = 1
     End If
    Else
     Decr Sztep_n
     If Sztep_n < 1 Then Goto Hiba
     Decr N
     If N < 1 Then
     N = 8
     End If
    End If
    Portb = Sztep(n)
    Print "N= " ; N ; " Port= " ; Sztep(n) ; " Helyzet: " ; Sztep_n
  End If

 Loop

 Hiba:
  Portb = 0               'Motor feszültség mentesitése
  Print "Utközés történt!"
  Nop

End   

Most ez az elmélet!
A valóságban az induló motor tehetetlensége miatt. Az első lépés után nagyobb Wait szükséges!
Utána kevesebb, hogy elérjük a lehető legnagyobb fordulatszámot.
Irányváltáskor ez még tovább bonyolódik!
Vagyis kísérletezni kel, hogy ne legyen lépésvesztés a tehetetlenség miatt!
Vagy figyelni kel, hogy megtörtént e valóságosan a lépés?
:idea:
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

Hozzászólás Szerző: kefeur »

Nekem belefért , Bár azt már nem programozhatom újra! :)
Kefeur
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

Hozzászólás Szerző: Marvinn »

Sziasztok!
Látom forog a fórumban a kód amit az enkóderes vezérléshez izzadtam össze Róbert segítségével. Ez jó.
Keresnék egy programozásban jártas személyt aki a meglévő kódomat átírja, akár egy kis tiszteletdíjért. Jelenleg van egy enkóderes vezérlésem ami működik is de sokáig pihent, gondoltam előveszem újra.

Amire szükség van az egy fő program INT megszakítással.
Laikusként leírom mire van szükségem:
Az enkóder áll, tehát nem akarom hogy forogjon a motor akkor egy szoftveres pwm-mel a motor tartófeszültsége lecsökkenjen kb 2V-ra. Tápfeszültséget így akár 12V-ra is fel tudom tekerni, így erősebb lesz a motor. (PWM azért kell mert már 6 V tartófeszültségtől is túlságosan izzad a motor). Amikor elkezdem tekerni az enkódert akkor forogjon a motor abba az irányba amibe tekerem az enkódert. Amikor megáll az enkóder menjen a szoftveres PWM. Tupírozni lehet: az enkóder sebességét figyelve 2 sebességi fokozat is lehet. Ha tekerem gyorsan az enkódert a motor max sebességgel forog, mivel nem egy versenymotor. Amikor az enkódert lassan egyet-egyet léptetem akkor a motor is 1-1 lépjen. Mivel a hardverre még nem szereltem rá így a motorsebességek változhatnak. pl egy lépés az enkóderen 4 lépés lehet a motoron.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Üdv!
Ahhoz, hogy valamit hozzá szóljunk a témához többet kellene tudnunk róla!
Milyen a proci, milyen a hardver kiépítése, mi hova van kötve?
Hogyan lehet monitorozni, van HW-s RS232?

Milyen az enkóder tulajdonsága, menyire prelez mikor áll be stabilan?
Mikor milyen jeleket ad ki? Motor feszültség állítást milyen áramkörrel oldod meg?
Menyi várakozási idő kel 2 lépés között?
Ezt az egészet mire akarod használni
:?: :arrow:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ki tudja, hogy M88, M644 prociknál miért nem fogadja el a Bascom GIFR 64 utasítást?

Kód: Egész kijelölése

Getencoder:
Waitms Debouncetime
If Cha = 0 Then
If Chb = 0 Then Incr Encounter Else Decr Encounter
End If
Gifr = 64
Return
:?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Talán nem ez a regiszter neve :)...
Ez nem utasítás, hanem a regiszter neve. ahol a INT ciklusban befutó INT0/INT1 jelzések tárolódnak....

EIFR néven fut itt, ami a GIFR a kisebbekben.
Extend Interrupt Flag regiszter a General.... helyett...
Válasz küldése