Kontrolowanie serwa modelarskiego
Kontrolowanie serwa modelarskiego
Jak sterować serwem? Nie chodzi mi o sterowanie z komputera, tylko za pomocą sprzętowego układu PWM, który można by sterować zdalnie (np. na zasadzie zamknięcia obwodu).
- joon
- Użytkownik
- Posty: 2076
- Rejestracja: 30 cze 2007, 22:56
- Lokalizacja: Kraków, Przemyśl, Warszawa
- Kontakt:
I wychodzi na to że otrzymujesz sterowanie typu: lotka maks w górę, maks w dół...
Czarny masa, czerwony +4,8V do +6V a na żółty sygnał sterujący...
Sygnał sterujący to prostokątne impulsy dodatnie 1-2ms w odstępach co najmniej 18ms. Zależnie od długości impulsu serwo wychyla się o dany kąt - 1ms max w jedną, 2ms max w drugą, 1,5ms to środek i tak dalej analogicznie...
Zobacz na:
http://www.edw.com.pl/pdf/k10/56_07.pdf
Trochę tam wyczytasz...
A jak z transmisją radiową? Masz już rozwiązanie?
Czarny masa, czerwony +4,8V do +6V a na żółty sygnał sterujący...
Sygnał sterujący to prostokątne impulsy dodatnie 1-2ms w odstępach co najmniej 18ms. Zależnie od długości impulsu serwo wychyla się o dany kąt - 1ms max w jedną, 2ms max w drugą, 1,5ms to środek i tak dalej analogicznie...
Zobacz na:
http://www.edw.com.pl/pdf/k10/56_07.pdf
Trochę tam wyczytasz...
A jak z transmisją radiową? Masz już rozwiązanie?
To wiem...joon pisze:I wychodzi na to że otrzymujesz sterowanie typu: lotka maks w górę, maks w dół...
Czarny masa, czerwony +4,8V do +6V a na żółty sygnał sterujący...
Sygnał sterujący to prostokątne impulsy dodatnie 1-2ms w odstępach co najmniej 18ms. Zależnie od długości impulsu serwo wychyla się o dany kąt - 1ms max w jedną, 2ms max w drugą, 1,5ms to środek i tak dalej analogicznie...
Tylko jak wgrać kod programu do mikroprocesora? I jak później to kontrolować?
Mam plany trójkanałowej aparatury zdalnego sterowania. Zrobię takie dwie i akurat będzie.joon pisze: A jak z transmisją radiową? Masz już rozwiązanie?
- gwozdex
- Użytkownik
- Posty: 879
- Rejestracja: 24 lut 2006, 10:04
- Lokalizacja: Czechowice-Dziedzice
- Kontakt:
No to już inna bajka Kolegomaciekg5 pisze:Tylko jak wgrać kod programu do mikroprocesora? I jak później to kontrolować?
Witam
Musisz mieć programator żeby to wgrać do procka.
To jest bardzo wczesna wersja softu do sterowania dwoma serwami wychyleniem drążków
(potencjometrów) i przesyłania danych prze port szeregowy.
Mniej więcej możesz zobaczyć jak to wygląda , będziesz mógł napisać własny program.
Moja część sprzętowa to gotowa płytka z Atmega 128 z mikrovegi
http://mikrovega.pl/index.php?page=shop ... &Itemid=38
TX 1
Teraz część odbiorcza
Musisz mieć programator żeby to wgrać do procka.
To jest bardzo wczesna wersja softu do sterowania dwoma serwami wychyleniem drążków
(potencjometrów) i przesyłania danych prze port szeregowy.
Mniej więcej możesz zobaczyć jak to wygląda , będziesz mógł napisać własny program.
Moja część sprzętowa to gotowa płytka z Atmega 128 z mikrovegi
http://mikrovega.pl/index.php?page=shop ... &Itemid=38
TX 1
Kod: Zaznacz cały
'Sterwoanie dwoma serwami przez port szeregowy
'ATmega 128 kwarc 16 MHZ
'by Pawel L. (pikczu)
'ver 1.0 /2008
'$sim
$regfile = "M128def.dat"
$crystal = 16000000 'Kwarc
$baud = 9600
'predkosc transmisji
'-----------konfiguracjia portu B ----------------
Config Portb.7 = Output
'-------------deklaracia zmiennych-----------------------------
Dim Osy As Byte 'os y serwa
Dim Osx As Byte 'os x serwa
Dim os_y As Byte 'trymowanie Y
Dim os_x As Byte 'trymowanie X
Dim Channel As Byte 'kanal ADC
Dim Przetwornik As Word 'wartosc pobrana z ADC
Dim kanal As Byte
'------------konfiguracjia LCD---------------------------------
Config Lcd = 16 * 2
'-------------konfiguracjia przetwornika A/C-------------------
Config Adc = Single , Prescaler = Auto , Reference = Internal
'--------------------------------------------------------------
Enable Interrupts
Cls
Lcd "start Adc" 'tak dla zabawy drukowanie na LCD
Start Adc 'start przetwornika ADC
Waitms 100
Reset Portb.7 'włacz diode
Echo On 'echo dla termianla
wait 1 'czekaj 1s
set portb.7 'wyłacz diode
wait 2 'czekaj 2s
'--------------------------------------------------------------
Cls 'czysc ekran
Do 'poczatek petli
For Channel = 0 To 1 'dwa Kanaly
przetwornik = 0 'wartosc poczatkowa ADC=0
przetwornik = Getadc(channel) 'pobierz z ADC
Shift przetwornik , Right , 2 'przesun o 2 w prawo
Select Case Channel 'kanał przetwornika
Case 0 : 'jeli kanal adc 0 to
if Osy <> Przetwornik then 'jeli rozne od poprzedniej wartosci
osy = przetwornik 'osy przypisz wartosc pobrana z przetwornika do zmiennej OSY
kanal = 35 'wartosc 35 jest to # w ASCII
If Osy < 40 Then 'jesli wartosc zmiennej osy mniejsz niz 40 wtedy
Osy = 40 'zmien wartosc OSY na 40 (doswiadczalnie usawiony minium wychylenia serwa)
End If 'koniec warunku
If Osy > 180 Then 'jelsi wartosc OSY wieksza niz 180 to
Osy = 180 'zmien wartosc na max 180 (tez ustwione doswiadczalnie)
End If 'koniec warunku
printbin kanal 'wysyła binarnie kanał czyli 35 lub 36 koniecznie ponizej wartosci 40
printbin osy 'wysyła zmienna OSY
print chr(13) 'znak enter w ASCII
print osy 'drukuje w termianlu OSY i enter plus LF wASCII 10 czyli przechodzi do poczatku lini
end if 'koniec warunku
Case 1 : 'kanał przetwornika jak wyzej
if Osx <> Przetwornik then 'jeli rozne od poprzedniej wartosci
osx = przetwornik 'osx przypisz wartosc pobrana z przetwornika do zmiennej OSX
kanal = 36 'wartosc 36 jest to $ w ASCII
If Osx < 40 Then 'jesli wartosc zmiennej osx mniejsz niz 40 wtedy
Osx = 40 'zmien wartosc OSX na 40 (doswiadczalnie usawiony minium wychylenia serwa)
End If 'koniec warunku
If Osx > 180 Then 'jelsi wartosc OSX wieksza niz 180 to
Osx = 180 'zmien ratosc na max 180
End If 'koniec warunku
printbin kanal 'wysyła binarnie kanał tym razem 36 $ w ASCII
printbin osx 'wysyła binarnie OSX
print chr(13) 'znak enter w ASCII
print osx 'drukuje wartosc OSX plus enter ASCII 13 i LF w ASCII 10 czyli przechodiz do poczatku lini
end if 'koniec warunku
End Select 'koniec select case
next 'następny kanał z przetwronika ADC
Loop 'petla
End 'koniec tych wypocin
Kod: Zaznacz cały
'---CZĘŚĆ ODBIORCZA-------------------------------------------------------------
'Sterwoanie dwoma serwami przez port szeregowy
'ATmega 128 kwarc 16 MHZ
'by Pawel L. (pikczu)
'ver 1.0 /2008
'$sim
$regfile = "M128def.dat"
$crystal = 16000000 'Kwarc
$baud = 9600
'-----------konfiguracjia portu B i C jako wyjscie ----------------
Config Portb = Output
Config portc = Output
'-------------deklaracia zmiennych-----------------------------
Dim Osy As Byte
Dim Osx As Byte
Dim Channel As Byte
Dim Przetwornik As Word
dim value as byte
'-----------------konfiguracjia serv---------------------------
Config Servos = 2 , Servo1 = Portb.7 , Servo2 = Portb.6 , Reload = 10
Enable Interrupts
Echo On
servo(1) = 40 'wartosc poczatkowa
servo(2) = 40 'wartosc poczatkowa
Cls
Lcd "start" 'wdrukuj na lcd start
Wait 1 'czekaj 1
Cls 'czysc ekran
lcd "servo test" 'drukuj na lcd
wait 1 'czekaj
lcd "servo max" 'drukuj na lcd
servo(1) = 180 'ustaw servo na max wartosc dobrana doswiadczalnie
servo(2) = 180
wait 1 'czekaj
cls
servo(1) = 40 'servo na min
servo(2) = 40
lcd "servo MIN"
wait 1
cls
LCD "System on"
wait 1
cls
Do
value = inkey() 'zmienna do której bedzie przypisana wartosc odebrana
if value = 35 then 'jelsi znak w ASCII #
channel = 1 'to bedzie to kanal 1 czyli OSY
end if
if value = 36 then 'jesli znak w ASCII $
channel = 2 'to bedzie to kanał 2 czyli OSX
end if 'koniec warunku
Select case channel
case 1 : inputbin osy 'kanał 1 to zapisz do OSY
channel = 0 ' wyzeroj kanał
servo(1) = osy 'ustaw servo, wartosc w zmiennej OSY
case 2 : inputbin osx 'kanał 2 to zapisz do OSX
channel = 0 'wyzeroj kanał
servo(2) = osx 'ustaw servo , wartosc w zmiennej OSX
Case else
End select
Loop
End
' to tyle
Zobacz tutaj - http://forumrc.alexba.eu/ipw-web/bullet ... php?t=4795
Sprawdzone gotowe rozwiązanie.
Sprawdzone gotowe rozwiązanie.