|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Ned Maj 01, 2011 6:57 pm Naslov sporočila: MR1 |
|
|
Hi,
naredil sem prvi svoj mobilni robot.Vrjetno ima kar nekaj napak,bo 2. boljši.
Torej podvozje ima od legendarnega RP6 robota.
Kaj ima na sebi:
-atmega 32
-3x RGB LEDdiodi
-5x tipke
-2x tipke
-IDC 10 za programiranje
-2x L272M
-1x pinezo
-2x sprednja stikala
-in ostala drobnarija
V bližnji prihodnosti dobi še 2x8 LCD zaslon in IR senzorje.Kasneje pa ultrazvočne senzorje,I2C komunikacijo,mobilno roko in še kaj se bo našlo.
Evo par fotk.
Če vidi kdo kakšno napako ali kaj dodati da bo bolje delovalo naj pove.
LPM |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Ned Maj 01, 2011 11:24 pm Naslov sporočila: |
|
|
Čestitam!
Daj obesi na forum še shemo, kako si stvar vezal!
Jaz imam že dolgo v predalu tale Conradov voziček, a nisem še nič pametnega realiziral. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Pon Maj 02, 2011 9:30 am Naslov sporočila: |
|
|
Hi,
bom narisal shemo in jo pripel na forum.Zaenkrat imam vse v glavi .
Trenutno glih odpravljam napake na L272M,nekakašen šlus se mi je naredil.
LPM |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Pet Maj 13, 2011 6:59 pm Naslov sporočila: |
|
|
Hi,
kar nekaj časa že poskušam usposobiti servo motor in mi ne rata.
Na začetku sem probal napisati sestavo programa po primeru ki je napisan v S.E.166 ,ampak neuspešno.Potem sem probal v helpu in tudi neuspešno in tudi iskal po netu.
Prebral sem da ni več potrebno uporabiti timerje da ga nadomesti servo ukaz.Ponekot pa piše da še moramo uporabiti timer tako da ne vem kaj in kako.
Karkoli napišem mi servo začne delati par mm korake in nato pol cm korake.Ko pride do mehanske blokade se začne zaletavati.
Koda: | $regfile = "m32def.dat"
$crystal = 4000000
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10
Config Portd = Output
Enable Interrupts
Servo(1) = 10
'
Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next
For I = 100 To 0 Step -1
Waitms 1000
Next
Loop
End
|
tudi če napišem servo(1)=150 , kjer bi se moral servo motor postaviti v sredinski položal se prestavi do blokade se parkrat zaleti in ustavi.
uporabljam tale servo motor:
http://www.servodatabase.com/servo/modelcraft/rs-2
Mogoče moram uporabiti timer.Prebral sem da timer1 v moji različici bascoma ne deluje pravilno za servota.Tako da mi ostane še samo timer0.Ali ima timer0 poseben priklop na MCU-ju?Ali je lahko katerokoli pin ki se ga določi v programu?V data sheetu kjer je mega32 narisan nikjer ne piše zraven pina timer0,1.
Lepo bi prosil če mi lahko kdo obrazloži zadevo.Trenutno pa samo hočem da se motorček zavrti iz ene skrajne lege do druge skrajne lege.Vrjamem da ne manjka veliko do delovanja.
Najlepša hvala za razumevanje in pomoč.
LPM |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pet Maj 13, 2011 7:48 pm Naslov sporočila: |
|
|
Nikoli se nisem ukvarjal z bascom ukazi SERVO, tako, da ti v tem ne morem pomagati.
Sam sem generiral inpulze za servomotor s pomočjo interrupta.
Program, ki ga prilagam, generira inpulze za tri servomotorje.
Kam naj se obrne servo, glavni program določi v spremenljivki Tmrrl(i) kjer je i številka servomotorja.
No, ta program, ki ga prilagam, ima tam konstante, tako samo postavi servomotorje v zahtevani položaj in jih tam drži. Razširiš ga lahko, da bo spreminjal vrednosti teh spremenljivk in servomotorji se bodo premikali.
Koda: |
$regfile = "M32def.dat"
$crystal = 11059200
Const Timer0reload = 4
Config Timer0 = Timer , Prescale = 256
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
Enable Interrupts
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Byte
Dim Tmrrl(4) As Byte ' samo tri izhode
Tmrrl(1) = 44 ' 1 ms dolg servo inpulz
Tmrrl(2) = 66 ' 1.5 msec dolg servo inpulz
Tmrrl(3) = 88 ' 2 ms dolg servo inpulz
I = 1
Do
Loop
Timer0_isr:
Select Case I
Case 1 : Load Timer0 , Tmrrl(i)
Set Portd.7
Case 2 : Load Timer0 , Tmrrl(i)
Set Portd.6 : Reset Portd.7
Case 3 : Load Timer0 , Tmrrl(i)
Set Portd.5 : Reset Portd.6
Case Else : Load Timer0 , 54
Reset Portd.5
End Select
Incr I : If I = 16 Then I = 1
Return
' Takole bi bilo nekako v redu...
|
Sicer pa, kaj ti bodo servomotorji na tanku, ki si ga slikal?
Ah, ja še to, pri meni dela mikro na 11MHz-ih, le tvoj dela z 4Mhz, je potrebno interrupt rutino drugače krmiliti. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Sob Maj 14, 2011 12:52 am Naslov sporočila: |
|
|
Vilko,
hvala ti.
Ja servote rabim za robotsko roko ki bo montirana nanj.
MR1 je bil polomija,ker je bilo narejeno vse na enkrat iz fraj glave brez izračunov....tako da je bilo veliko zapletov.Zato sem se odločil narediti MR2 kjer ga sproti preizkušam.Ko prispajkam tipke jih ustrezno preizkusim in tako dalje.Korak za korakom.
Bom pa danes sprobal program.
Aja,napisal si sledeče:
Ah, ja še to, pri meni dela mikro na 11MHz-ih, le tvoj dela z 4Mhz, je potrebno interrupt rutino drugače krmiliti.
Morem v fuse bitih nasatviti notranji oscilator na 12MHz?Ali dam kar zunanji kvarc?
Hvala še enkrat,
lpm. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sob Maj 14, 2011 8:35 am Naslov sporočila: |
|
|
marc je napisal/a: | Vilko,
MR1 je bil polomija,ker je bilo narejeno vse na enkrat iz fraj glave brez izračunov....tako da je bilo veliko zapletov.Zato sem se odločil narediti MR2 kjer ga sproti preizkušam.Ko prispajkam tipke jih ustrezno preizkusim in tako dalje.Korak za korakom. |
Jaz vedno delam po majhnih samostojnih korakih, preizkusim vsak del posebej, in šele potem delam nadgradnjo, sistem, iz preizkušenih delov.
Tudi ta program je bil preizkus krmiljenja servotov.
marc je napisal/a: |
Ah, ja še to, pri meni dela mikro na 11MHz-ih, le tvoj dela z 4Mhz, je potrebno interrupt rutino drugače krmiliti.
Morem v fuse bitih nasatviti notranji oscilator na 12MHz?Ali dam kar zunanji kvarc? |
Če boš tako naredil, bo gotovo delalo, če pa ostaneš na 4 MHz se boš moral kar precej zafrkavati z load timer ukazi, kakšne parametre boš dal noter. Tako na oko, je tvoj mikro trikrat počasnejši, 4Mhz je trikrat manj kot 11MHz ov, torej bi moral v load timer dajati trikrat manjše vrednosti, če bi ostal na 4 MHz-ih. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sob Maj 14, 2011 8:38 am Naslov sporočila: |
|
|
Prilagam še program, ki ima enako interrupt rutino, le v glavnem programu spreminjam vrednosti, s katerimi se polni interrupt load timer, tako da servoti malo migajo.
Koda: | ' Sedaj sledi krmiljenje brez 4017 direktno na D.7, 6, 5,
$regfile = "M32def.dat"
$crystal = 11059200
' Timer na 100 usec ali 0.1 msec
Const Timer0reload = 4
Config Timer0 = Timer , Prescale = 256
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
Enable Interrupts
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Porta.0 = Output ' led kaže na sprejem
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Byte
Dim Tmrrl(4) As Byte ' samo tri izhode
Tmrrl(1) = 44 ' 1 ms dolg servo inpulz
Tmrrl(2) = 66 ' 1.5 msec dolg servo inpulz
Tmrrl(3) = 88 ' 2 ms dolg servo inpulz
I = 1
Do
Dim Ii As Word
Tmrrl(1) = 44 ' 1 ms dolg servo inpulz
Tmrrl(2) = 66 ' 1.5 msec dolg servo inpulz
Tmrrl(3) = 88 ' 2 ms dolg servo inpulz
Wait 5
For Tmrrl(1) = 44 To 88
Waitms 10
Next
For Tmrrl(1) = 88 To 44 Step - 1
Waitms 10
Next
For Tmrrl(2) = 66 To 88
Waitms 10
Next
For Tmrrl(2) = 88 To 44 Step - 1
Waitms 10
Next
For Tmrrl(2) = 44 To 66
Waitms 10
Next
For Tmrrl(3) = 88 To 44 Step - 1
Waitms 10
Next
For Tmrrl(3) = 44 To 88
Waitms 10
Next
Loop
Timer0_isr:
' Timer prekinitvena rutina se proži na osnovi Load timer ukaza,
' ki je odvisen od dolžine inpulza, ki ga generiramo.
' Izhodni inpulz generiramo samo, če ni vhodnih inpuzov.
' Če so vnodni inpulzi, tedaj jih verno prenašamo naprej na izhodne
' Če vhodni inpulzov ni 300 msec tedaj se izteče števec ii in to pomeni
' da spet preidemo na programsko generiranje inpulzov.
' števec ii, če preteče do 0, potemni, da ni sprejema in gremo
' na generiranje svojih servoinpulzov
Select Case I
Case 1 : Load Timer0 , Tmrrl(i)
Set Portd.7
Case 2 : Load Timer0 , Tmrrl(i)
Set Portd.6 : Reset Portd.7
Case 3 : Load Timer0 , Tmrrl(i)
Set Portd.5 : Reset Portd.6
Case Else : Load Timer0 , 54
Reset Portd.5
End Select
Incr I : If I = 16 Then I = 1
Return
' Nekako dela |
_________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Sob Maj 14, 2011 7:54 pm Naslov sporočila: |
|
|
Hi,
hvala vam.
Grem kar preizkušat .
LPM |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Pon Maj 16, 2011 7:30 pm Naslov sporočila: |
|
|
Hi,
Dodal zunanji kvarc in dva kondenzatorja,nastavil fuse bite in naložil program.Deluje .Mu ga kar malo dogaja servotu mislim.
Zdaj grem pa program študirat ker ga nič ne razumem.Da ga bom lahko krmilil tako kot js hočem.
LPM |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pon Maj 16, 2011 9:34 pm Naslov sporočila: |
|
|
Interrupt podprogram se uporavblja preprosto, sploh ga ni potrebno klicati, samo daš v spremenljivko Tmrrl(1) za servo 1 vrednost, in servo se bo obrnil, kamor mu vrednost nakaže. Vrednost pomeni 66 sredina, 88 ena skrajna lega, in 44 druga skrajna lega.
Vrednosti morajo seveda biti med 44 in 88.
Če ne bo kaj jasno, sem na vprašaj! _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Tor Maj 17, 2011 5:39 am Naslov sporočila: |
|
|
Hi,
torej zadnji program ki ste ga priložil bi moral servo se premikati iz ene skrajne lege v drugo a ne.
Koda: | Do
Dim Ii As Word
Tmrrl(1) = 66 ' sredinski položaj
Wait 5
For Tmrrl(1) = 44 To 88 'Iz Ene Skrajne Lege V Drugo
Waitms 10
Next
For Tmrrl(1) = 88 To 44 Step - 1 'iz zadnje skrajne lege v prejšno skrajno lego po korakih
Waitms 10
Next
Loop |
Meni se pa premika samo kakšen centimeter levo in desno.Če dam namesto waitms 10 več Npr wait 1 se nič ne spremeni in ko bi moral na začetku programa se postaviti na sredino in počakati 5 sekund,nič od tega.Sem že včeraj spreminjal vrednosti in čase in ni bilo nič bolje.Sem brskal tudi po spletu in nisem našel nič pametnega.
Ali je potrebno še kakšno drugo nastavitev narediti?
Mogoče sem servota uničil?
LPM |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Maj 17, 2011 6:16 am Naslov sporočila: |
|
|
marc je napisal/a: | Hi,
torej zadnji program ki ste ga priložil bi moral servo se premikati iz ene skrajne lege v drugo a ne.
Koda: | Do
Dim Ii As Word
Tmrrl(1) = 66 ' sredinski položaj
Wait 5
For Tmrrl(1) = 44 To 88 'Iz Ene Skrajne Lege V Drugo
Waitms 10
Next
For Tmrrl(1) = 88 To 44 Step - 1 'iz zadnje skrajne lege v prejšno skrajno lego po korakih
Waitms 10
Next
Loop |
|
Točno.
marc je napisal/a: | Meni se pa premika samo kakšen centimeter levo in desno. | Poizkusi spreminjati skrajne lege tako, da recimo namesto 88 daš 99 in namesto 44 33 marc je napisal/a: |
Če dam namesto waitms 10 več Npr wait 1 se nič ne spremeni in ko bi moral na začetku programa se postaviti na sredino in počakati 5 sekund,nič od tega.Sem že včeraj spreminjal vrednosti in čase in ni bilo nič bolje.Sem brskal tudi po spletu in nisem našel nič pametnega. | Ta wait samo določa hitrost premikanja
marc je napisal/a: | Mogoče sem servota uničil?
LPM |
Hja, z gotovostjo ne morem reči. Ali imaš osciloskop ali kaj osciloskopu podobnega (PoScope), da si ogledaš inpulze, ki jih pošiljaš na servote?
Servo se krmili z inpulzi, in sicer položaj določa dolžina inpulza ki naj bi bil med 1 in 2 msec, ponavlja pa se na 20 msec ali nekaj podobnega.
Računam, da nisi spreminjal interupt podprograma. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
RudiP Profesionalec
Pridružen/-a: Sre Jul 2008 8:39 Prispevkov: 128 Kraj: KOPER
|
Objavljeno: Tor Maj 17, 2011 12:53 pm Naslov sporočila: |
|
|
Malo nerodno pišeš programe, pa ti verjetno zato ne dela v redu.
Poskusi to bo delovalo boljše :
Koda: |
Dim I As Byte
Dim Smer As Bit
Tmrrl(1) = 66 ' sredinski položaj
I = 66
Reset Smer
Do
If Smer = 0 Then
Incr I
If I => 88 Then Set Smer
Tmrrl(1) = I
End If
If Smer = 1 Then
Decr I
Tmrrl(1) = I
If I <= 44 Then Reset Smer
End If
Waitms 500 ' TU SPREMINJAJ INTERVAL MED KORAKI
Loop
End
|
1. delaracije in najave morajo biti izven zanke do - loop _________________ Lep pozdrav ! |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Tor Maj 17, 2011 8:40 pm Naslov sporočila: |
|
|
Hi,
hvala obema.
Hja,
nekaj je delovalo dokler nisem uničil servota.Zdej se kar vrti kot navaden DC motor.Grem jutr po novega.
Glede programa mi pa dela težave,ker še ne poznam osnov ukaza timer in kako deluje...,grem še naprej razgibavat sive celice in raziskovati ukaze.
LPM |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|