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

Bascom Algorytm PWM i ADC

Patryk6144 27 Kwi 2011 17:59 3813 18
REKLAMA
  • #1 9445139
    Patryk6144
    Poziom 10  
    Witam, mam taki problem zacząłem pisał program do Line Follower i zatrzymałem się na konfiguracji PWM i ADC. I dalej czarna dziura, przeglądałem już dużo programów z tymi o to algorytmami i nie rozumiem tego zbytnio. Czy moglibyście mi to wytłumaczyć na przykładzie schematu poniżej, bym był wdzięczny. Goni mnie czas, bo szykuje prezent dziecku na urodziny i chciał robota więc nie chcę go zawieść. Z góry dzięki za pomoc.:D

    Bascom Algorytm PWM i ADC
  • REKLAMA
  • Pomocny post
    #2 9445315
    dondu
    Moderator na urlopie...
    Może ten filmik pomoże: PWM - Co to takiego ?

    Ponieważ używasz L298 do silniczków tu znajdziesz podstawowe informacje: Sterowanie silnikiem DC

    Na początek niepotrzebny ale wraz z rozwojem regulacja PID się przyda:
    https://www.elektroda.pl/rtvforum/topic1977989.html

    No i załącz swój program to będzie co analizować.

    Dodano po 4 [godziny] 5 [minuty]:

    Nie przekazuj mi punktów - oddaję i dodaję Ci 20 bo masz mało :)
    Wysłałem Ci Prywatną wiadomość (PW).
  • #3 9447843
    Patryk6144
    Poziom 10  
    Witam, to co mi przesłałeś zbytnio nie pomogło. Ale to nic jakoś muszę sobie poradzić.:D
    Co do programu mam tylko tyle. Mógłbyś sprawdzić i powiedzieć czego w tym kawałku jeszcze brakuje. Z góry dzięki.:D

    Bascom Algorytm PWM i ADC

    Pozdrawiam,
    Patryk
  • Pomocny post
    #5 9447900
    avatar
    Poziom 36  
    Najprosciej mowiac PWM to wyjscie na pinach PB1 i PB2
    Do tych wyjsc mozemy zapisywac wartosc PWM ktora bedzie sie zawierac miedzy 0 a 254 , Dzieki temu mozna regolowac predkosc silnika DC w prosty sposob, np za pomoca tranystora NPN bez wiekszej komplikacji ukladu moze to byc np TIP122
    co do progamowania

    ten kawelk kodu pokazuje jak zaprgoramowac PWM dla tych dwoch wyjsc
    predkosc bedzie rosla do pewnego momentu

    
    $regfile = "m88def.dat"
    $crystal = 8000000
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1  
    Dim I as byte
    I = 0
    do
      Pwm1a = I ' jak tu napiszesz Pwm1a= 127 to bedziesz mial 50% "predkosci silnika" jak dasz Pwm1a= 254 to predkosc bedzie max itd
      Pwm1b = I
     waitms 90 
     incr I
    
    loop
    end
    
  • #6 9447903
    piotrva
    VIP Zasłużony dla elektroda
    to nie będzie prędkość wprost proporcjonalna do wypełnienia, bo niestety przy niskich wypełnieniach silnik w ogóle nie ruszy
  • REKLAMA
  • #8 9447946
    Patryk6144
    Poziom 10  
    Witam, czyli o to chodzi:
    :D

    Bascom Algorytm PWM i ADC

    Dodano po 28 [minuty]:

    Czyli ten kawałek kodu to jest całe pwm. Tak dobrze rozumiem?
    A co do konfiguracji adc to musi być przed algorytmem czy może być na początku programu? I jakby to wyglądało? Z góry dzięki za odpowiedz.:D

    Dodano po 5 [minuty]:

    Czy po funkcji do nie trzeba dać Start Timer1?
  • Pomocny post
    #9 9448049
    piotrva
    VIP Zasłużony dla elektroda
    nie trzeba dać żadnego startu, pwm rusza od razu
    konfiguracji adc najlepiej dokonać na początku programu, tak jak to widać na screenie
    PS. zwróć uwagę na 5 linijkę kodu - czy tam aby zamiast 0 nie masz literki O ?
  • #10 9448135
    Patryk6144
    Poziom 10  
    Witam, dzięki za uwagę faktycznie ''O''.:D
    A ten screen z fragmentem programu jest dobry?
    I jak byście mogli zobrazować ADC tak samo jak PWM. Bym był wdzięczny.:D
  • #11 9448170
    piotrva
    VIP Zasłużony dla elektroda
    ADC - przetwornik analogowo cyfrowy
    urządzenie to w wielkim uproszczeniu mówiąc mierzy napięcie na konkretnym wejściu (podobnie jak woltomierz), z tym, że wynik jest podawany względem napięcia odniesienia - oznaczmy je jako Vref lub Uref (do wyboru mamy napięcie zasilania procesora - czyli najczęściej 5V /lub/ napięcie podane na nóżkę Vref pochodzące np. ze specjalnych układów referencyjnych jak lm385 /lub/ tu w zależności od modelu napięcie z wewnętrznego układu odniesienia, zwykle 1,1V lub 2,56V - trzeba sprawdzić w karcie katalogowej)
    pomiar polega na tym, że jeśli podamy na wejściu układu niepięcie równe napięciu odniesienia (np. standardowo 5V) to to otrzymamy maksymalny wynik, czyli 1023. Jeśli zaś pin ten zewrzemy do masy to otrzymujemy najmniejszy wynik, czyli 0. Wszystkie pośrednie napięcia są zgodne z tą proporcjonalnością, czyli np. dla napięcia 2,5V otrzymamy wynik ok. 511-512.

    wszystko można obliczyć z takiej proporcji:
    1023 - Vref
    x - U szukane
    czyli
    u szukane = (x/1023)*Vref
    gdzie x to otrzymany wynik pomiaru z ADC
  • REKLAMA
  • #12 9448204
    Patryk6144
    Poziom 10  
    Witam, dzięki. Tylko chodzi mi o zobrazowanie to w postaci kodu dla czujników. Ale to też jest dobre.:D
  • REKLAMA
  • Pomocny post
    #13 9448348
    piotrva
    VIP Zasłużony dla elektroda
    wystarczy nieco przejrzeć helpa bascoma:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #14 9448771
    Patryk6144
    Poziom 10  
    Dzięki. Jak skończę program to wrzucę do sprawdzenia.:D
  • #15 9451798
    Patryk6144
    Poziom 10  
    Witam, zamieszczam program do sprawdzenia. Mam nadzieje, że dobry. Czy czegoś mu brakuje i co byście jeszcze dodali? I tak na przyszłość jak dodać kod w poście.
    :D


    Kod: text
    Zaloguj się, aby zobaczyć kod
    :D
  • #17 9452057
    Patryk6144
    Poziom 10  
    $regfile = "m88def.dat"
    $crystal = 16000000
    
    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
    In1 Alias Portd.3
    In2 Alias Portd.2
    In3 Alias Portd.1
    In4 Alias Portd.0
    
    Config Adc = Single , Prescaler = Auto
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    Dim I As Byte
    
    I = 0
    
    Do
    
      Pwm1a = 127
      Pwm1b = 127
    
      Waitms 90
      Incr I
    
    Loop
    
    Start Adc
    
    Dim W As Word , Channel As Byte
    
    Channe0 = 0
    
    Do
    
    W = Getadc(channe0)
    
    Print 0 ; Channel ; " value " ; W
    
    Incr Channe0
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe1 = 0
    
    Do
    
    W = Getadc(channe1)
    
    Print 1 ; Channel ; " value " ; W
    
    Incr Channel
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe2 = 0
    
    W = Getadc(channe2)
    
    Print 2 ; Channel ; ; W
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe3 = 0
    
    W = Getadc(channe3)
    
    Print 3 ; Chanel ; " value " ; W
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe4 = 0
    
    W = Getadc(channe4)
    
    Print 4 ; Chanel ; " value " ; W
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe5 = 0
    
    W = Getadc(channe3)
    
    Print 5 ; Chanel ; " value " ; W
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    Channe6 = 0
    
    W = Getadc(channe6)
    
    Print 6 ; Chanel ; " value " ; W
    
    If Channel > 7 Then Channel = 0
    
    Loop
    
    End


    Dodano po 6 [minuty]:

    I jak z programem, dobry. Czegoś brakuje?
    :D
  • #18 9452094
    piotrva
    VIP Zasłużony dla elektroda
    Totalna klapa? Tak to dobre określenie...
    To nawet chyba się nie skompiluje...
    Polecam zacząć od absolutnych podstaw bascom'a....
  • #19 9452895
    Patryk6144
    Poziom 10  
    Witam, mógłbyś powiedzieć co jest żle i jak to zniwelować. Bym był wdzięczny.:D
REKLAMA