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

[AVR][BASCOM] Manetka gazu na potencjometrze

tzok 08 Wrz 2010 22:02 1980 4
REKLAMA
  • #1 8490447
    tzok
    Moderator Samochody
    Szukam pomysłu na ustabilizowanie odczytu potencjometru z ADC w układzie gdzie potencjometr pełni rolę "manetki gazu" do sterowania wypełnieniem PWM.

    Obecnie wygląda to tak:
    Temp = 512
    Inval = 127
    Do
       If Inval < 16 Then                                       ' ### Reverse w/bypass ###
          Set Rev                                               ' Reverse polarity relays on
          Reset Fwd
          Set Byp                                               ' Bypass relay on
          Pwm1a = 255
       Elseif Inval < 112 Then                                  ' ### Reverse w/PWM 20%-94% ###
          Set Rev                                               ' Reverse polarity relays on
          Reset Fwd
          Reset Byp                                             ' Bypass relay off
          Pwm = 112 - Inval                                     ' ADCmax - ADCCurrent
          'Pwm = Pwm * 48                                         ' *= (255 - PWMmin)
          'Pwm = Pwm / 32                                        ' /= (ADCmax - ADCmin)
          Shift Pwm , Left , 1
          Pwm = Pwm + 48                                        ' += PWMmin
          Pwm1a = Pwm                                           ' Set desired PWM duty cycle
       Elseif Inval < 142 Then                                  ' ### Stop ###
          Reset Byp                                             ' Bypass relay off
          Pwm1a = 0
          Reset Rev                                             ' Reverse polarity relays off, only for power consumption reasons, motor is stopped anyways
          Reset Fwd
       Elseif Inval < 239 Then                                  ' ### Forward w/PWM 20%-94% ###
          Reset Rev                                             ' Reverse polarity relays off
          Set Fwd
          Reset Byp                                             ' Bypass relay off
          Pwm = Inval - 142                                     ' ADCCurrent -  ADCmin
          'Pwm = Pwm * 48                                         ' *= (255 - PWMmin)
          'Pwm = Pwm / 32                                        ' /= (ADCmax - ADCmin)
          Shift Pwm , Left , 1
          Pwm = Pwm + 48                                        ' += PWMmin
          Pwm1a = Pwm                                           ' Set desired PWM duty cycle
       Else                                                     ' ### Forward w/bypass ###
          Reset Rev                                             ' Reverse polarity relays off
          Set Fwd
          Set Byp                                               ' Bypass relay on
          Pwm1a = 255
       End If
    
       Do
          Inval = Getadc(0)
          Inval = Getadc(0)
          If Inval > Temp Then
             Adcdelta = Inval - Temp
          Else
             Adcdelta = Temp - Inval
          End If
       Loop Until Adcdelta > 32
       Temp = Inval
       Shift Inval , Right , 2
    Loop


    P.S.
    Tak, wiem, to można zrobić na NE555 bez mikrokontrolera ;) ale tu 0 jest na środku i są obroty przód-tył.
  • REKLAMA
  • Pomocny post
    #2 8637811
    advsystems
    Poziom 11  
    Tak na moje oko to najlepiej zrobić to poprzez uśrednienie x razy powtórzonych pomiarów. W jakimś stopniu spowoduje to stabilniejszą pracę.
  • REKLAMA
  • Pomocny post
    #3 8646000
    arktik1
    Poziom 27  
    Uśrednianie można też zrobić sprzętowo, najprostsze to kondensator i opornik.
  • REKLAMA
  • #4 8646235
    advsystems
    Poziom 11  
    Owszem zgadzam się z kolegą, jednak to dodatkowe elementy a tak problem rozwiązuje się w kodzie.
  • #5 9245548
    tzok
    Moderator Samochody
    Zostało tak jak było - różnica kolejnych odczytów musi przekroczyć zadany próg, by zmieniona została wartość wypełnienia PWM.
REKLAMA