jak rozpoznać przebiegi i odpowiednio zareagować?

Jeśli jesteś modelarzem lub interesujesz się robotami i chcesz się podzielić swoim doświadczeniem to weź udział w dyskusjach na tym forum.
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

jak rozpoznać przebiegi i odpowiednio zareagować?

Post autor: matrix » 26 wrz 2009, 15:44

słuchajcie, mam taki mały problem. otóż zajmuję się driftem elektrycznych modeli samochodów RC w skalo 1:10. chciałbym sobie zrobić układ który po wpięciu się w obwód regulatora prędkości wykryje mi ciąg impulsów sterujących tymże regulatorem i odpowiednio zareaguje zapalając światła STOP bądź też WSTECZ.

regulator sterowany jest tak samo jak serwo, więc przebiegi to zmiana długości impulsu w przedziale od:
0,9ms do około 1,5ms - jazda w jedną stronę.
przebieg o długości około 1,5ms - pozycja neutralna
przebieg powyżej 1,5ms do około 2ms - jazda w przeciwnym kierunku.

schemat działania wyglądał by następująco:
- jazda do przodu, wykrycie ciągu impulsów powiedzmy o długości około 1ms, wygaszenie diód
- jazda na "luzie", impulsy o długości około 1,5ms, diody wygaszone
- naciśnięcie hamowania, wykrycie ciągu impulsów około 2ms, zaświecenie świateł STOP
- puszczenie i naciśniecie hamowania poraz drugi, czyli jazda w tył, wykrycie ciągu impulsów około 2ms, zaświecenie diod od świateł WSTECZ

i nie bardzo wiem jak się za to wziąć? pewnie trzeba zaprząc timery? pomożecie?
nie musicie pisać gotowego programu, chociaż naprowadźcie mnie na trop. podajcie przykład, cokolwiek. no i jaki procek do tego? (avr) oby jak najmniejszy, ale żeby oprócz programu do tych świateł zmieścił się krótki do stroboskopów na przednie światła. wszystko pod bascom avr.

Awatar użytkownika
timo66
Moderator
Posty: 1807
Rejestracja: 20 maja 2006, 19:15
Lokalizacja: 66'15" M.a.R.s.
Kontakt:

Post autor: timo66 » 26 wrz 2009, 16:00

Witam
ja to widzę na 2 sposoby :

I.
przetwornik :arrow: u/f + powiedzmy LM393 i dioda na wyjście i po sprawie

II.
pomiar f przez uP i odpowiednie sterowanie wyjściami .

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 26 wrz 2009, 16:05

timo66 pisze:przetwornik u/f + powiedzmy LM393 i dioda na wyjście i po sprawie
myślałem nad tym, ale wtedy nie zawrę w programie strobo jak w pojazdach rządowych.
timo66 pisze:pomiar f przez uP i odpowiednie sterowanie wyjściami
wolałbym tak, ale za chiny nie wiem jak się do tego zabrać?

Awatar użytkownika
timo66
Moderator
Posty: 1807
Rejestracja: 20 maja 2006, 19:15
Lokalizacja: 66'15" M.a.R.s.
Kontakt:

Post autor: timo66 » 26 wrz 2009, 16:32

Co do wersji analogowej stroboskopu to :arrow: tu jest bardzo fajny efekt

z uP nie jestem orłem , ale myślę że timer + przerwania .
matrix pisze:0,9ms do około 1,5ms - jazda w jedną stronę.
to jest od 1111 do 666Hz
matrix pisze:przebieg powyżej 1,5ms do około 2ms - jazda w przeciwnym kierunku.
to jest powiedzmy od 665 do 500Hz
Wydaje mi się że powinno to wyglądać tak liczysz impulsy w czasie 1s i po tej 1s wynik porównujesz z wartością stała .W zależności ile ich zliczy zapala odpowiednie diody :wink:

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 26 wrz 2009, 16:42

timo66 pisze:Wydaje mi się że powinno to wyglądać tak liczysz impulsy w czasie 1s i po tej 1s wynik porównujesz z wartością stała .W zależności ile ich zliczy zapala odpowiednie diody
super, już coś wiem. kompletnie nie wiedziałem że ms można przeliczyć na częstotliwość. świetnie. teraz to mi diametralnie upraszcza sprawę. będę kombinował dalej. jak ktoś na coś wpadnie jeszcze to jestem otwarty na propozycje. dziękuję.

choć po przemyśleniu, z drugiej strony niewiele mi to daje. bo przecież zmienia się długość impulsów a nie ich ilość.

Awatar użytkownika
timo66
Moderator
Posty: 1807
Rejestracja: 20 maja 2006, 19:15
Lokalizacja: 66'15" M.a.R.s.
Kontakt:

Post autor: timo66 » 26 wrz 2009, 17:05

Czyli jak szerokość wypełnienia [ PWM] to chyba na przerwaniach, ale o tym dopiero nie mam pojęcia .
Szczerze to zrobił bym tak KA331 + LM3915/14 +4069 załączany tranzystorem. Z tym że uP będzie mniejszy i będzie mniej prądu potrzebował .

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 26 wrz 2009, 17:09

timo66 pisze:Szczerze to zrobił bym tak KA331 + LM3915/14 +4069 załączany tranzystorem. Z tym że uP będzie mniejszy i będzie mniej prądu potrzebował .
no właśnie a chodzi o to że ma to byc małe. uP byłby idealny i to najlepiej coś w stylu ATtiny13. mały bo tylko 8 wyprowadzeń, więc mało miejsca zajmuje i o to chodzi.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 26 wrz 2009, 18:24

timo66 pisze:
matrix pisze:przebieg powyżej 1,5ms do około 2ms - jazda w przeciwnym kierunku.
to jest powiedzmy od 665 do 500Hz
Tu jest błąd.

Długość impulsu (zwykle jedynki logicznej) w zabawkach sterowanych radiowo wynosi od 1ms do 2ms, natomiast długość przerwy nie jest precyzyjnie określona i może wynosić około 30ms.
W takim przypadku należy liczyć długość impulsu, nie zważając na długość przerwy.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 26 wrz 2009, 20:43

M@rek pisze:Długość impulsu (zwykle jedynki logicznej) w zabawkach sterowanych radiowo
z całym szacunkiem, dziękuję za pomoc, ale czy kolega to -> LINK <- nazywa zabawką? czy zabawka tyle kosztuje?

a przebiegi na wyjściu odbiornika rc wyglądają tak:

Obrazek
M@rek pisze:długość przerwy nie jest precyzyjnie określona i może wynosić około 30ms.
W takim przypadku należy liczyć długość impulsu, nie zważając na długość przerwy
w takim razie jak policzyć długość tego impulsu?

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 26 wrz 2009, 21:09

Witam to jest link do gotowca i kod
Autor Evert dekker jest jednym z naj aktyniejszych użytkowników forum MCS electronic (forum bascoma) http://evertdekker.com/Joomla/index.php ... &Itemid=47

Kod: Zaznacz cały

'======================================================================
'= Break light and failsafe for radio controlled (analog) nitro car   =
'=                                  Evert dekker 2007                 =
'=    Designed for the MCS electronics design contest 2007            =
'======================================================================
'=    Copyright for commercial use, for private use have fun          =
'======================================================================
'=      Version 1.0 29/1/2007 -  Bascom version 1.11.8.3              =
'======================================================================
'= Fuse but setting; clock/8 Off, rest factory default                =
'======================================================================

$regfile = "Attiny45.dat"
$crystal = 8000000
$eepleave
$hwstack = 40
$swstack = 16
$framesize = 40

'=== Dimension the variabele===
Dim Pulselenght As Word
Dim Keytime As Word
Dim Newpulselenght As Word
Dim Blightsetting As Eram Word At &H02
Dim Failsafesetting As Eram Word At &H04
Dim Counterclockwise As Eram Byte At &H06
Dim Voltage As Word
Dim L As Byte

'===Setup the ports===
Config Portb.1 = Output                                     ' Servo out
Config Portb.2 = Output                                     ' Breaklight leds's out
Config Pinb.0 = Input                                       'Button in
Config Adc = Single , Prescaler = Auto , Reference = 6      ' Setting the a/d convertor with a intern reference of 2.54V


'===Aliassen & constanten===
Breaklight Alias Portb.2
Setkey Alias Pinb.0
Const Correction = 20

'===Set the port===
Portb.1 = 0                                                 'Output port for servo set to low, pulses will be high
Set Pinb.0                                                  'Switch on the pull resistor for the key
Start Adc

'===Main===
If Setkey = 0 Then                                          ' If the key is pressed at startup
   If Counterclockwise = 1 Then                             ' Change the counterclockwise bit from 1 to 0 or 0 to 1
      Counterclockwise = 0
      Gosub Flashlights                                     ' Flash led's 1x for ack
    Else
      Counterclockwise = 1
      Gosub Flashlights                                     ' Flash led's 2x for ack
      Gosub Flashlights
   End If
End If
Bitwait Setkey , Set                                        ' Wait until the key is released


Do
Pulsein Pulselenght , Pinb , 4 , 1                          'Measure incoming pulselengte
Newpulselenght = Pulselenght * Correction                   'Correction to make the outgoing pulses as long as the incoming pulses
If Err = 1 Then                                             ' No pulses at all, fail safe activated
     Newpulselenght = Failsafesetting
End If
If Pulselenght < 10 Or Pulselenght > 300 Then               'Pulses are out of the normal range, fail safe activated
 Newpulselenght = Failsafesetting
End If
Pulseout Portb , 1 , Newpulselenght                         'Send pulse to the servo

If Setkey = 0 Then Gosub Keypressed                         'Key is pressed, jump to sub
Gosub Breaklights
Gosub Measurevoltage
Loop
End

'===Subroutines===
Keypressed:
Set Breaklight                                              'Switch the brake lights off else whe can't see the acknowledge
Waitms 30                                                   'Remove the debounce
Keytime = 0                                                 'Clear variabele
While Setkey = 0                                            ' Count until key is released
Incr Keytime
If Keytime > 64000 Then Keytime = 64000                     ' Pressed the key for a very long time...............
Waitms 2                                                    'Wait a little bit because the avr is fast
Wend
If Keytime > 100 And Keytime < 300 Then                     ' Key is short pressed
        Blightsetting = Pulselenght                         'Save setting in eeprom
        Gosub Flashlights                                   ' Flash led's 1x for ack
End If
If Keytime > 300 Then                                       'Key is long pressed
       Newpulselenght = Pulselenght * Correction
       Failsafesetting = Newpulselenght                     'Save setting in eeprom
       Gosub Flashlights                                    ' Flash led's 2x for ack
       Gosub Flashlights
End If
Return

Breaklights:
If Counterclockwise = 0 Then                                ' Breaklights on when servo is turning clockwise
   If Pulselenght < Blightsetting Then                      ' If Pulse shorter then saved pulse lenght, then breaklight on
      Reset Breaklight
   Else
      Set Breaklight
   End If
Else                                                        ' Breaklights on when servo is turning clockwise
If Pulselenght > Blightsetting Then                         ' If Pulse longer then saved pulse lenght, then breaklight on
      Reset Breaklight
   Else
      Set Breaklight
   End If
End If

Return


Flashlights:
Waitms 150
Reset Breaklight
Waitms 150
Set Breaklight
Waitms 150
Return

Measurevoltage:
Voltage = Getadc(3)                                         ' Get the battery voltage from adc channel 0
If Voltage < 660 Then                                       ' 660 represents 4.2V , 702=4.5V, 775=5V
    For L = 1 To 10                                         'Measure voltage 10x with a interval of 15 mSec to get rid of false measurements (spike's etc..)
       Waitms 15
       Voltage = Getadc(3)
       If Voltage => 660 Then Return                        ' Voltage is above 4.2V, must be a spike, so return to main prog
    Next L
Do                                                          ' Battery voltage is to low, going in a never ending loop
 Newpulselenght = Failsafesetting                           ' Put servo in the failsafe position
Pulseout Portb , 1 , Newpulselenght
Toggle Breaklight                                           ' Flash the lights to indicate LOW BAT
Waitms 75
Loop
End If
Return

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 27 wrz 2009, 7:59

Pikczu pisze:Witam to jest link do gotowca i kod
dziękuję ślicznie. teraz tylko kupić i zaprogramować proca, no i sprawdzić czy spełnia moje oczekiwania. jeszcze raz dziękuję.

ODPOWIEDZ