jak rozpoznać przebiegi i odpowiednio zareagować?
jak rozpoznać przebiegi i odpowiednio zareagować?
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.
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.
Witam
ja to widzę na 2 sposoby :
I.
przetwornik
u/f + powiedzmy LM393 i dioda na wyjście i po sprawie
II.
pomiar f przez uP i odpowiednie sterowanie wyjściami .
ja to widzę na 2 sposoby :
I.
przetwornik
II.
pomiar f przez uP i odpowiednie sterowanie wyjściami .
Co do wersji analogowej stroboskopu to
tu jest bardzo fajny efekt
z uP nie jestem orłem , ale myślę że timer + przerwania .
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
z uP nie jestem orłem , ale myślę że timer + przerwania .
to jest od 1111 do 666Hzmatrix pisze:0,9ms do około 1,5ms - jazda w jedną stronę.
to jest powiedzmy od 665 do 500Hzmatrix pisze:przebieg powyżej 1,5ms do około 2ms - jazda w przeciwnym kierunku.
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ę.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
choć po przemyśleniu, z drugiej strony niewiele mi to daje. bo przecież zmienia się długość impulsów a nie ich ilość.
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.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ł .
Tu jest błąd.timo66 pisze:to jest powiedzmy od 665 do 500Hzmatrix pisze:przebieg powyżej 1,5ms do około 2ms - jazda w przeciwnym kierunku.
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.
z całym szacunkiem, dziękuję za pomoc, ale czy kolega to -> LINK <- nazywa zabawką? czy zabawka tyle kosztuje?M@rek pisze:Długość impulsu (zwykle jedynki logicznej) w zabawkach sterowanych radiowo
a przebiegi na wyjściu odbiornika rc wyglądają tak:

w takim razie jak policzyć długość tego impulsu?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
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
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