Léptetőmotor vezérlés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. január 24. szombat, 23:27

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. január 25. vasárnap, 10:03

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ásSzerző: dzoli » 2009. január 25. vasárnap, 10:52

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ásSzerző: dzoli » 2009. január 25. vasárnap, 10:54

: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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. január 25. vasárnap, 11:39

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ásSzerző: dzoli » 2009. január 25. vasárnap, 12:16

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ásSzerző: dzoli » 2009. január 25. vasárnap, 12:45

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. január 25. vasárnap, 14:32

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: 186
Csatlakozott: 2008. február 17. vasárnap, 7:00
Tartózkodási hely: Szuhakálló

HozzászólásSzerző: kefeur » 2009. január 25. vasárnap, 19:38

É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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. január 31. szombat, 16:01

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: 186
Csatlakozott: 2008. február 17. vasárnap, 7:00
Tartózkodási hely: Szuhakálló

HozzászólásSzerző: kefeur » 2009. február 1. vasárnap, 17:42

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
Tartózkodási hely: Budapest

HozzászólásSzerző: Marvinn » 2009. február 5. csütörtök, 9:33

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. február 6. péntek, 14:16

Ü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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2009. február 10. kedd, 21:48

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. február 10. kedd, 22:03

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...


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég