logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pierwsze urochomienie linefollower z programem

Patryk6144 12 Maj 2011 18:05 1889 14
REKLAMA
  • #1 9498772
    Patryk6144
    Poziom 10  
    Witam, mam taki problem sprawdziłem elektronikę w robocie, wgrałem program i włączyłem zasilanie. I po włączeniu zasilania prawy silnik zaczął się kręcić do przodu a lewy nic nie ruszał się. Co może być nie tak i jak to naprawić. I gzie na zaciskach silników jest plus a gdzie minus? Proszę o pomoc.:D

    $regfile = "m88def.dat"
    $crystal = 16000000
    
    'Konfiguracja przetwornika analog-cyfra (ADC)
    Config Adc = Single , Prescaler = Auto
    
    'Konfiguracja sterowania sprzętowym PWM
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    'Konfiguracja portów
    Config Portb = Output
    Config Portd = &B01111111
    Config Portc = Input
    
    Portd.7 = 1
    
    Przycisk Alias Pind.7
         Led Alias Portd.6
    Enable_a Alias Portb.1
    Enable_b Alias Portb.2
    Silnik_prawy_a Alias Portd.3
    Silnik_prawy_b Alias Portd.2
    Silnik_lewy_a Alias Portd.1
    Silnik_lewy_b Alias Portd.0
    
    'Opis portów
    'Enable_a - Silnik lewy - Portb.1 (PWM1A)
    'Enable_b - Silnik prawy - portb.2 (PWM1B)
    'Input1 - Silnik prawy A - Portd.3
    'Input2 - Silnik prawy B - Portd.2
    'Input4 - Silnik lewy A - Portd.0
    'Input3 - Silnik lewy B - Portd.1
    'Dioda - Portd.6
    'Czujnik lewy końcowy - ADC5
    'Czujnik lewy - ADC4
    'Czujnik środkowy1 - ADC3
    'Czujnik środkowy2 - ADC2
    'Czujnik prawy - ADC1
    'Czujnik prawy końcowy - ADC0
    
    'Granica reagowania na linię - należy dobrać doświadczalnie
    Const Granica = 500
    
    'Deklaracje zmiennych
    Dim Czujnik_lewy1 As Single
    Dim Czujnik_lewy As Single
    Dim Czujnik_srodkowy1 As Single
    Dim Czujnik_srodkowy2 As Single
    Dim Czujnik_prawy As Single
    Dim Czujnik_prawy1 As Single
    Dim W As Word
    
    'Blok instrukcji
    Set Silnik_lewy_a
    Reset Silnik_lewy_b
    Set Silnik_prawy_a
    Reset Silnik_prawy_b
    
    Do
    
       Gosub Wczytaj_stany_przetwornikow
       If Czujnik_srodkowy1 > Granica Then
          'Silnik lewy - maksymalna prędkość
          Pwm1a = 255
          'Silnik prawy - maksymalna prędkość
          Pwm1b = 255
       Elseif Czujnik_srodkowy2 > Granica Then
          Pwm1a = 255
          Pwm1b = 255
       Elseif Czujnik_lewy > Granica Then
          Pwm1a = 0
          Pwm1b = 255
       Elseif Czujnik_lewy1 > Granica Then
          Pwm1a = 0
          Pwm1b = 255
       Elseif Czujnik_prawy > Granica Then
          Pwm1a = 255
          Pwm1b = 0
       Elseif Czujnik_prawy1 > Granica Then
          Pwm1a = 255
          Pwm1b = 0
          Else
          Pwm1a = 255
          Pwm1b = 255
       End If
    Loop
    End
    
    Wczytaj_stany_przetwornikow:
    Start Adc
    W = Getadc(0)
    W = Getadc(0)
    Stop Adc
    Czujnik_prawy = W
    Start Adc
    W = Getadc(1)
    W = Getadc(1)
    Stop Adc
    Czujnik_lewy1 = W
    Start Adc
    W = Getadc(5)
    W = Getadc(5)
    Stop Adc
    Czujnik_lewy = W
    W = Getadc(4)
    W = Getadc(4)
    Stop Adc
    Czujnik_srodkowy1 = W
    W = Getadc(3)
    W = Getadc(3)
    Stop Adc
    Czujnik_srodkowy2 = W
    W = Getadc(2)
    W = Getadc(2)
    Stop Adc
    Czujnik_prawy1 = W
    Return


    Pierwsze urochomienie linefollower z programem
  • REKLAMA
  • #2 9498799
    piotrva
    VIP Zasłużony dla elektroda
    Czy sprawdzałeś silniki na sucho, czy oba działają?
    A skąd my mamy wiedzieć, gdzie są zaciski dodatnie, a gdzie ujemne na silniku? Może wywróżyć :D
    Po drugie, daj schemat, bo nikt nie będzie analizował przez godzinę tej mozaiki i domyślał się jakie są wartości elementów i modele układów.
    A nie tak może być wszystko, począwszy od jakiegoś problemu z czujnikami, poprzez program, uszkodzenie elektroniki (np. drivera silników), aż do uszkodzenia samego silnika.
    Reasumując - podaj więcej szczegółów...
  • #3 9499065
    Patryk6144
    Poziom 10  
    Witam, sprawdziłem oba silniki działają. Jeszcze zmierzyłem napięcie na obu zaciskach i na prawym jest 7,95V a na lewym 2,55V, coś nie tak. Co do kondensatorów przy stabilizatorze to elektrolity 470uF i 100uF a ceramiczne to 047nF (0,47 K. 63) i 220nF a stabilizator to LM2940CT. Dioda to 1N4007.
    Silniki działają. Na trasie jak przyłożyłem to tak jak mówiłem tylko prawy. Włączam zasilanie i od razu prawy się kręci a nie powinie żaden. dopuki nie nacisnę startu. Macie jakieś pomysły na rozwiązanie tego problemu?

    Pierwsze urochomienie linefollower z programem

    $regfile = "m88def.dat"
    $crystal = 16000000
    
    'Konfiguracja przetwornika analog-cyfra (ADC)
    Config Adc = Single , Prescaler = Auto
    
    'Konfiguracja sterowania sprzętowym PWM
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    'Konfiguracja portów
    Config Portb = Output
    Config Portd = &B01111111
    Config Portc = Input
    
    Portd.7 = 1
    
    Przycisk Alias Pind.7
         Led Alias Portd.6
    Enable_a Alias Portb.1
    Enable_b Alias Portb.2
    Silnik_prawy_a Alias Portd.3
    Silnik_prawy_b Alias Portd.2
    Silnik_lewy_a Alias Portd.1
    Silnik_lewy_b Alias Portd.0
    
    'Opis portów
    'Enable_a - Silnik lewy - Portb.1 (PWM1A)
    'Enable_b - Silnik prawy - portb.2 (PWM1B)
    'Input1 - Silnik prawy A - Portd.3
    'Input2 - Silnik prawy B - Portd.2
    'Input4 - Silnik lewy A - Portd.0
    'Input3 - Silnik lewy B - Portd.1
    'Dioda - Portd.6
    'Czujnik lewy końcowy - ADC5
    'Czujnik lewy - ADC4
    'Czujnik środkowy1 - ADC3
    'Czujnik środkowy2 - ADC2
    'Czujnik prawy - ADC1
    'Czujnik prawy końcowy - ADC0
    
    'Granica reagowania na linię - należy dobrać doświadczalnie
    Const Granica = 500
    
    'Deklaracje zmiennych
    Dim Czujnik_lewy1 As Single
    Dim Czujnik_lewy As Single
    Dim Czujnik_srodkowy1 As Single
    Dim Czujnik_srodkowy2 As Single
    Dim Czujnik_prawy As Single
    Dim Czujnik_prawy1 As Single
    Dim W As Word
    
    'Blok instrukcji
    Set Silnik_lewy_a
    Reset Silnik_lewy_b
    Set Silnik_prawy_a
    Reset Silnik_prawy_b
    
    Do
    
       Gosub Wczytaj_stany_przetwornikow
       If Czujnik_srodkowy1 > Granica Then
          'Silnik lewy - maksymalna prędkość
          Pwm1a = 255
          'Silnik prawy - maksymalna prędkość
          Pwm1b = 255
       Elseif Czujnik_srodkowy2 > Granica Then
          Pwm1a = 255
          Pwm1b = 255
       Elseif Czujnik_lewy > Granica Then
          Pwm1a = 0
          Pwm1b = 255
       Elseif Czujnik_lewy1 > Granica Then
          Pwm1a = 0
          Pwm1b = 255
       Elseif Czujnik_prawy > Granica Then
          Pwm1a = 255
          Pwm1b = 0
       Elseif Czujnik_prawy1 > Granica Then
          Pwm1a = 255
          Pwm1b = 0
          Else
          Pwm1a = 255
          Pwm1b = 255
       End If
    Loop
    End
    
    Wczytaj_stany_przetwornikow:
    Start Adc
    W = Getadc(0)
    W = Getadc(0)
    Stop Adc
    Czujnik_prawy = W
    Start Adc
    W = Getadc(1)
    W = Getadc(1)
    Stop Adc
    Czujnik_lewy1 = W
    Start Adc
    W = Getadc(5)
    W = Getadc(5)
    Stop Adc
    Czujnik_lewy = W
    W = Getadc(4)
    W = Getadc(4)
    Stop Adc
    Czujnik_srodkowy1 = W
    W = Getadc(3)
    W = Getadc(3)
    Stop Adc
    Czujnik_srodkowy2 = W
    W = Getadc(2)
    W = Getadc(2)
    Stop Adc
    Czujnik_prawy1 = W
    Return
  • Pomocny post
    #4 9499295
    bogdan_p
    Poziom 39  
    Patryk6144 napisał:
    Włączam zasilanie i od razu prawy się kręci a nie powinie żaden. dopuki nie nacisnę startu. Macie jakieś pomysły na rozwiązanie tego problemu ?

    Gdzie w programie masz obsługę przycisku ? poza ustawieniem portu i nadaniem nazwy
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Może to były Twoje założenia , ale po co od razu start silników
    Kod: text
    Zaloguj się, aby zobaczyć kod

    czy nie lepiej na początku sprawdzić czy wogule widziana jest linia przez którykolwiek z czujników skoro masz ich aż 6 , nie wiem po co za każdym pomiarem zatrzymujesz przetwornik ADC . Proponuje wyjąć z podstawki ATMegę wymusić na wejściach L298 stan L i zobaczyć co robią silniki następnie według tabeli stanów sprawdzić czy następuje prawidłowa reakcja na poszczególne sygnały wejściowe na L298 , Jeżeli wszystko będzie dobrze włożyć procesor i zacząć od prostego sterowania dopiero potem przejść do pracy z czujnikami .
    Na koniec po co Ci PWM skoro i tak z niego nie korzystasz ?
  • #5 9499331
    Patryk6144
    Poziom 10  
    A jakby wyglądał ten fragment z obsługą przycisku?
  • REKLAMA
  • #6 9499354
    bogdan_p
    Poziom 39  
    Najpierw sprawdź L298 tak jak pisałem wcześniej , podstawa to sprawny układ mostków H i silników bo co Ci dają kombinacje w programie jak okaże się że L298 jest uszkodzony . Co do obsługi przycisku jeżeli ma być tylko start to przeczytaj o bitwait
  • #7 9499629
    Patryk6144
    Poziom 10  
    Mógłbyś podać jakby to wyglądało, bo muszę coś sprawdzić. Bym był wdzięczny.:D
  • REKLAMA
  • #8 9499651
    bogdan_p
    Poziom 39  
    Jeżeli chodzi o przycisk to wszystko jest w pomocy dla Bascoma , natomiast co do sprawdzenia L298 wszystko masz w dokumentacji tego układu
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Wstaw to przed Twoim " blokiem instrukcji "
  • #9 9502038
    Patryk6144
    Poziom 10  
    Witam, co do diody LED2 to też musi być jakiś fragment kodu, jak tak to jaki? Proszę o pomoc.:D I czy w helpie znajdę?
  • Pomocny post
    #10 9502149
    piotrva
    VIP Zasłużony dla elektroda
    w helpie znajdziesz wskazówki jak taki fragment napisać...
  • #11 9502167
    Patryk6144
    Poziom 10  
    A pod jakim hasłem lub komendą, bo szukałem ale nic nie znalazłem.:D
  • Pomocny post
    #12 9502339
    bogdan_p
    Poziom 39  
    Cytat:
    A pod jakim hasłem lub komendą, bo szukałem ale nic nie znalazłem.

    A co chciałeś znaleźć ?
    Najpierw określ warunek przy którym dioda ma być zapalona , widzę że nadal kombinujesz z elementami które zupełnie nie mają nic wspólnego z poprawną pracą programu a są tylko dodatkiem , ciekawe czy sprawdziłeś L298 ? .
  • #13 9502364
    Patryk6144
    Poziom 10  
    A mógłbyś pokazać jak to ma wyglądać. Bymbył wdzięczny, bo nie bardzo wiem o co chodzi.:D
  • REKLAMA
  • #14 9502620
    bogdan_p
    Poziom 39  
    Kilka postów wcześniej napisałem jak to zrobić , coś wydaje mi się że zastosowałeś układ którego działania nie rozumiesz , ale dobra jeszcze raz :
    wyjmij atmegę z podstawki
    praktycznie pozostanie Ci L298 plus stabilizator 7805
    połącz wejścia IN1 , IN2 , IN 3 , IN 4 do masy GND
    połącz wejścia ENABLE_A , ENABLE_B do masy GND
    podaj napięcie zasilania , oczywiście silniki muszą być wpięte przy takiej konfiguracji oba silniki muszą być zatrzymane
    wyłącz zasilanie
    połącz ENABLE_A do +5V
    połącz IN1 do masy , IN2 do +5V
    podaj napięcie 1 silnik powinien się kręcić następnie zmień kolejność połączenia wejść czyli IN1 do +5V IN2 do masy , silnik powinien kręcić się w drugą stronę dodatkowo możesz sprawdzić czy przy dowolnej kombinacji IN1 , IN2 podanie na ENABLE_A masy powoduje zatrzymanie silnika .
    Analogicznie zrób z drugim mostkiem czyli IN3 , IN 4 , ENABLE_B jeżeli to wszystko będzie w porządku dopiero możesz myśleć nad programem , na początek proponuje proste sposoby sterowania bez żadnego PWM tak aby sprawdzić czy Atmega prawidłowo steruje L298 .
REKLAMA