Szervó motor léptetése

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
dutkair
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2010. augusztus 29. vasárnap, 6:00

Szervó motor léptetése

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

Üdv!

A következő problémát szeretném megoldani, és mivel kezdő vagyok csak külső segítségre számíthatok:

Adott egy ATtiny45-ös AVR és egy RC szervó motor amit n számú fix állás között szeretnék léptetni, úgy, hogy két nyomógombot használok, az egyik felfelé a másik lefelé léptetné... Ha megnyomom a felfelé gombot, akkor a szervó a következő állásba ugrik, ha a másik gombot akkor az előzőbe. Továbbá azt is szeretném megoldani, hogy egy adott állás tovább "finomítható" lenne további két nyomógombbal.

Valahogy úgy képzeltem el, hogy a program elején definiálnék n számú, adott időtartamú impulzus (ha jól tudom szervóknál ez 1-2 ms) és amikor megnyomom a "felfelé" gombot akkor a következő előre definiált impulzusértéket adja ki a vezérlő. a finombeállítást pedig úgy gondoltam, hogy az előre definiált impulzusértéket állítgatom egészen kicsi lépésközökkel, egy le-fel gombbal.

Na ezt szeretném valahogy használható programba foglalni csak az a kérdésem, hogy hogyan? Hogyan induljak el? Teljesen kezdő vagyok..:S
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Először döntsd el, hogy milyen frekvencián megy az ATiny45-ös! Mert ez fontos az időzítéseknél! Aztán old meg, hogy a gombok ne ismétlődjenek és ne prellezenek!
Utána jöhet az időzítés megoldása, Timer és INT használatával!
Ha még kezdő vagy fontos valami kijelző is a hibakereséshez! (Soros Terminál vagy LCD, de legalább 2-3 LED)
8)

Kezd a LED villogtató programnál!
http://avr.tavir.hu/modules.php?name=Co ... page&pid=7
:wink:
Avatar
dutkair
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2010. augusztus 29. vasárnap, 6:00

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

Ha minden igaz, akkor 50 Hz-en kellene működnie. Ennyit tudok egyelőre...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Na ne VICCELJ velünk! 50Hz a hálózati 230V-on van! :lol:
1- 2ms időzítéshez + még gombok figyeléséhez és motorvezérléshez ennél jóval nagyobb órajel szükséges!
:o
Avatar
dutkair
Biztosítékgyilkos
Hozzászólások: 57
Csatlakozott: 2010. augusztus 29. vasárnap, 6:00

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

Na igen! ennyit jelent egy kis 'M' betű...:D 50 MHz akart az lenni csak sajna elírtam, bocsi...
De sztem az se jó..
10 MHz lenne jó nekem talán, az egyszerűség kedvéért (szép kerek szám)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascom alatt a Config Servo= pont erre van kitalálva:)
Itt a lépést is tudod állítani....

Ugye a szervi az 0.5...1,5 ms kitöltéssel dolgozik, és 2 msec a teljes periódus?


Egyszerű így a megoldás.

Van egy számlálód, ami 0...200 közt számol.
Mindezt 2msec alatt.
Így egy számolás ideje: 2msec/200=10usec
Ez eddig vázlatként:

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

a=0
:foprg
a=a+1
if a>ertek then lab=1 else lab=0'itt lesz a kimeneted
waitus 5'mert a tobbire is kell ido
if a=200 then a= 0   'letelt a 2 ms
goto foprg

Ha ugye nyomogombod van, akkor azt bekotod, es nezed hogy a lab allapota 1 vagy 0.

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

if piny.x = 1 then  
  ertek=ertek+1
  if ertek=201 then ertek=200'nem lehet nagyobb mint a felso hatar!
endif

if piny.z = 1 then  
  ertek=ertek-1
  if ertek=255 then ertek=0'nem lehet kisebb mint a felso hatar!
endif
A masodik esetben azert 255 az also ertek, mert 0-1=255 (alulcsordul a byte valtozo!
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Sziasztok!
Nem 2msec a periódusidő!
1-2msec a jel, de ezek 60-100Hz-el mennek, tehát nem klasszikus
0-100% PWM. Ezzel szívtam én is. Vagy túl gyors volt a freki, vagy vacak volt a felbontásom. T45-ben megcsináltam, ez volt az az ominózus WDT időzítőnek használva témakör. Vagy küldjem be a versenyre a projectet? :)
JAni
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

A verseny kipublikálás csak nov közepén lesz... (mármint az eredmények+pályázatok)

Sztem max kódrészletet, de a kezdő esetén a WDT, mint időzítő, az olyan fából vaskarika lesz :)
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Közben persze aludtam rá párat és szerintem meg lehet csinálni 1 timer-el is, de még csak szerintem működik, de majd kipróbálom. Na, az aztán a nyakatekert, nem a WDT :) Sajnos nekem nincs RCservomotorom, de majd szkóppal megnézegetem.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Bogarászható kódrészlet:

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

'Felbontás : 128
'Watchdog=32msec, dupla, 58Hz-el is megy (WDTCR.0=0=58Hz, 1=32Hz

$regfile = "atTiny45.dat"
$crystal = 8000000
Const Imp_offset = 129                                      'A leghosszabb impulzus, SERVO=max

Config Timer0 = Timer , Prescale = 64                       '125kHz, max 2.048msec
Stop Timer0
Ocr1c = 255                                                 'MAX

Dim Imphossz As Byte                                        'Timerbe meno impulzushossz (0-125)

Config Portb = &B00000001                                   'OC0A kimenet

Config Watchdog = 2048
On Watchdog Wd_int
Wdtcr = &B01001000

Enable Ovf0                                                 'Csak 1 impulzus legyen a PWM kimeneten
On Ovf0 Tim0
Enable Interrupts
Start Watchdog

'Itt valami program van...
Do
Imphossz = Imphossz + 20
Imphossz = Imphossz And &B01111111                          '0-127
Wait 1
Loop

Wd_int:
Set Wdtcr.6                                                 'WDIE=ENABLE, mindig INT legyen WD lejártakor
Timer0 = Imp_offset - Imphossz
Set Portb.0                                                 'Vezérlőimpulzus bekapcs
Start Timer0
Return

Tim0:                                                       'Timer0 PWM OverFlow
Stop Timer0
Reset Portb.0                                               'Vezérlőimpulzus kikapcs
Return

End
Válasz küldése