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

[ATMega8][Bascom]Niestabilna praca układu

tzok 02 Wrz 2008 18:04 4607 6
  • #1 5499942
    tzok
    Moderator Samochody
    Zacznę od zamieszczenia kodu źródłowego i schematu:

    ' ################################################
    ' #  Control Programm for Trolling Motor Driver  #
    ' #         (C)2008 by Tomasz Orczyk             #
    ' ################################################
    
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    'CKSEL3..0=0100 - 8MHz Internal (PWM ~30kHz)
    'SUT1..0=01 - Fast rising power, delay 4,1ms
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Portb = Output
    
    Set Portb.1                                                 ' Avoids turning motor on, before first ADC loop
    
    'Config Timer1 = FastPWM , Prescale = 1 , PWM = 8 , Compare A PWM = Clear Up , Compare B PWM = Disconnect
    'Set Tccr1a.wgm10
    'Set Tccr1b.wgm12
    'Set Tccr1b.cs10
    'Set Tccr1a.com1a1
    'Set Tccr1a.com1a0
    Tccr1a = &H01
    Tccr1b = &H09
    
    Rev Alias Portb.0
    Pwmo Alias Portb.1
    Byp Alias Portb.2
    
    Start Adc
    
    Dim Pwm As Integer
    Dim Inval As Integer
    
    Do
       Inval = Getadc(0)
       Inval = Getadc(0)
       Shift Inval , Right , 2
    
       If Inval < 16 Then                                       ' ### Reverse w/bypass ###
          Set Rev                                               ' Reverse polarity relays on
          Set Byp                                               ' Bypass relay on
          Pwm1a = 255
          'Tccr1a = &H01                                         ' Disconnect OC1A from PINB.1
          'Reset Pwmo                                            ' Set full throttle, not needed if bypass relay installed
          Tccr1a = &HC1                                         ' Connect OC1A to PINB.1
       Elseif Inval < 112 Then                                  ' ### Reverse w/PWM 40%-97% ###
          Set Rev                                               ' Reverse polarity relays on
          Reset Byp                                             ' Bypass relay off
          Pwm = 112 - Inval                                     ' ADCmax - ADCCurrent
          Pwm = Pwm * 48                                        ' *= (255 - PWMmin)
          Pwm = Pwm / 32                                        ' /= (ADCmax - ADCmin)
          Pwm = Pwm + 102                                       ' += PWMmin
          Pwm1a = Pwm                                           ' Set desired PWM duty cycle
          Tccr1a = &HC1                                         ' Connect OC1A to PINB.1
       Elseif Inval < 142 Then                                  ' ### Stop ###
          Reset Rev                                             ' Reverse polarity relays off, only for power consumption reasons, motor is stopped anyways
          Reset Byp                                             ' Bypass relay off
          Pwm1a = 0
          Tccr1a = &H01                                         ' Disconnect OC1A from PINB.1
          Set Pwmo                                              ' Motor full stop
       Elseif Inval < 239 Then                                  ' ### Forward w/PWM 40%-97% ###
          Reset Rev                                             ' Reverse polarity relays off
          Reset Byp                                             ' Bypass relay off
          Pwm = Inval - 142                                     ' ADCCurrent -  ADCmin
          Pwm = Pwm * 48                                        ' *= (255 - PWMmin)
          Pwm = Pwm / 32                                        ' /= (ADCmax - ADCmin)
          Pwm = Pwm + 102                                       ' += PWMmin
          Pwm1a = Pwm                                           ' Set desired PWM duty cycle
          Tccr1a = &HC1                                         ' Connect OC1A to PINB.1
       Else                                                     ' ### Forward w/bypass ###
          Reset Rev                                             ' Reverse polarity relays off
          Set Byp                                               ' Bypass relay on
          Pwm1a = 255
          'Tccr1a = &H01                                         ' Disconnect OC1A from PINB.1
          'Reset Pwmo                                            ' Set full throttle, not needed if bypass relay installed
          Tccr1a = &HC1                                         ' Connect OC1A to PINB.1
       End If
    Loop
    End


    [ATMega8][Bascom]Niestabilna praca układu

    Do wyjść M+ i M- są podłączone 2 przekaźniki, w taki sposób, że po włączeniu sygnału REV odwracają one polaryzację napięcia idącego na silnik.

    Drugi przekaźnik, sterowany z wyjścia BYP zwiera dreny tranzystorów wyjściowych do masy (źródła).

    Wszystkie przekaźniki mają włączoną diodę zabezpieczającą równolegle z cewką.

    Problem jest taki, że zwłaszcza w momencie zadziałania przekaźnika układ potrafi się zawiesić i to na różne sposoby:
    - silnik działa z minimalnymi obrotami na wstecznym, w ogóle nie reaguje na sygnał z potencjometru.
    - nie działa PWM, na wyjściu PB1 jest stan wysoki, ale przekaźniki reagują na potencjometr (czyli da się włączyć 100% wstecz i 100% naprzód).
    - j/w ale na PB1 jest cały czas stan niski (pełne obroty silnika).


    Na schemacie brakuje oznaczeń tranzystorów mocy (IRFP044) i dwudiody Schottky'ego (MBR4060) oraz L - filtry ferrytowe (wymontowane ze starej karty graficznej ;) ), tzw. EMI Filter.

    Układ steruje silnikiem DC o mocy ok 400W, zasilanie stanowi akumulator 12V/80Ah.
  • #2 5500258
    rrata
    Poziom 19  
    Z tego co wiem to nie można załączać jakiejkolwiek cewki przy użyciu pinu uC, bądź zwykłego tranzystora tylko trzeba to odizolować stosując np. transoptory. Myślę, że tu tkwi problem, ale nie jestem do końca pewien.
  • #3 5500360
    Tomasz.W
    Poziom 35  
    tzok napisał:
    ...Zacznę od.....
    Zacznij od pełnego schematu, z tego opisu :arrow:
    tzok napisał:
    ...Do wyjść M+ i M- są podłączone 2 przekaźniki, w taki sposób, że po włączeniu sygnału REV odwracają one polaryzację napięcia idącego na silnik. Drugi przekaźnik, sterowany z wyjścia BYP zwiera dreny tranzystorów wyjściowych do masy (źródła)...
    raczej nic nie wynika. A po co ktokolwiek ma się domyślać jak to jest podłączone.
    tzok napisał:
    ...nie działa PWM...
    Zamierzasz sterować przekaźnik sygnałem PWM :?:
  • #4 5500394
    Osmo
    Poziom 18  
    Z tego co zrozumiałem, kolega steruje silnikiem poprzez PWM, w miedzy czasie uruchamia też przekaźnik.

    O ile dobrze kojaże to mozna sterowac przekaźnikiem z uC, przez tranzystor, z tym że należy dodac diode równolegle do przekaźnika. Sam kozystałem ze schematu:

    [ATMega8][Bascom]Niestabilna praca układu

    Program w C, nie zarejestrowałem zadnego wieszania się uC.
  • #5 5500501
    rrata
    Poziom 19  
    :arrow: tzok
    Podłącz RESET przez rezystor 4,7k do VCC, a także przez kondensator 100nF do GND. Silnik jest mocny więc sieje zakłóceniami i możliwe, że się resetuje, a nie wiesza.
  • #6 5500609
    tzok
    Moderator Samochody
    Wiesza się, a właściwie "staje" timer i PWM nic nie generuje. Ale już przeprojektowałem filtr zasilania i na razie nie zaobserwowałem niepożądanych objawów - dzięki za pomoc crazy_phisic, sporą winę ponosiły też rozgięte styki w złączce, na "pełnym ciągu" było ok, ale kiedy pracował PWM zaczynało iskrzyć i cuda się z uC działy... jednak przy >30kHz i prądach kilkanaście A nie ma żartów, połączenia muszą być super solidne.

    :arrow: Tomasz.W:
    Schemat jest tego co na płytce, przekaźniki są na przewodach. Cewki przekaźników są podłączone do zacisków BYP i REV i diody są w podstawkach przekaźników (pisałem o tym), jak wygląda układ odwracania polaryzacji na 2 przekaźnikach chyba każdy wie...

    :arrow: Osmo:
    Tak dokładnie są włączone, o czym zresztą napisałem.

    :arrow: rrata:
    ATMega ma układ automatycznego resetu podczas startu i to z możliwością wybrania czasu jego trwania - problem w tym, że podczas resetu obroty silnika ustawiają się na max - stąd też jak widać, zawieszał się, a nie restartował (podczas restartu zachowuje się inaczej).

    Wybaczcie - to mój pierwszy projekt z użyciem uC, ale podstawy naprawdę znam... układ obciążony żarówką halogenową działał od początku idealnie.
  • #7 5500891
    Macias871
    Poziom 12  
    Wstaw zamiast tranzystorów - transoptory np cny17. Mialem podobny problem i to pomoglo!
REKLAMA