-         

Ergebnis 1 bis 4 von 4

Thema: Spannungssignal verändern.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.10.2010
    Beiträge
    5

    Spannungssignal verändern.

    Anzeige

    Hy Leude,

    ich bin grad frisch in die AVR Geschichte eingestiegen weil ich etwas versuchen wollte. Da ich weder vom Hardwareaufbau noch von der Software so richtig Ahnung habe hoffe ich auf eure Hilfe.
    Ich besitze ein Lernboard von Amazon, welches einen ATmega88 beherbergt.
    Aufgabenstellung

    Board wird von Netzteil mit 5V betrieben.
    Am AD Eingang ADC0 liegt eine Spannung an, zwischen 0-5V.
    Diese Spannung soll gemessen und bearbeitet wieder ausgegen werden, d.h. wenn z.B. 2,4V anliegen soll der ATmega 2,2V ausgeben über die Timer Funktion am Ausgang PB1 oder PB2.
    Wichtig hierbei der Controller muss sofort aus Spannungsänderungen an ADC0 reagieren.

    Hier mein Programm bis jetzt.
    Code:
    $regfile = "m88def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Dim Zaehler As Long
    Dim Kurve As Byte
    Dim Rawinp As Word
    Dim Rawout1 As Word
    Dim Converter As Integer
    Dim Calc As Single
    Dim _step As Single
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Zaehler = 0
    
    Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Enable Timer1
    Enable Interrupts
    
    Do
       Rawinp = Getadc(0)
       Gosub _kurve_3
       Pwm1a = Rawout1
       Pwm1b = Rawout1
       Incr Zaehler
       If Zaehler = 10000 Then
          Print "inp:" ; Rawinp ; ":out:" ; Rawout1
          Zaehler = 0
       End If
    Loop
    End
    
    _kurve_3:
       Select Case Rawinp
          Case Is >= 881
             Rawout1 = 880
    
          Case 717 To 880
             Calc = 880 - 717
             Calc = 31 / Calc
             _step = Rawinp - 717
             _step = _step * Calc
             _step = Round(_step)
             Converter = _step - 31
             Rawout1 = Rawinp + Converter
    
          Case 635 To 716
             Calc = 716 - 635
             Calc = 10 / Calc
             _step = Rawinp - 635
             _step = _step * Calc
             _step = Round(_step)
             Converter = _step - 41
             Rawout1 = Rawinp + Converter
    
          Case 574 To 634
             Calc = 634 - 573
             Calc = 10 / Calc
             _step = Rawinp - 573
             _step = _step * Calc
             _step = Round(_step)
             Converter = _step - 51
             Rawout1 = Rawinp + Converter
    
          Case 513 To 573
             Calc = 573 - 513
             Calc = 10 / Calc
             _step = Rawinp - 513
             _step = _step * Calc
             _step = Round(_step)
             Converter = _step - 61
             Rawout1 = Rawinp + Converter
    
          Case 451 To 512
             Calc = 512 - 451
             Calc = 10 / Calc
             _step = Rawinp - 451
             _step = _step * Calc
             _step = Round(_step)
             Converter = 0 - 51
             Converter = Converter - _step
             Rawout1 = Rawinp + Converter
    
          Case 400 To 450
             Calc = 450 - 400
             Calc = 10 / Calc
             _step = Rawinp - 400
             _step = _step * Calc
             _step = Round(_step)
             Converter = 0 - 41
             Converter = Converter - _step
             Rawout1 = Rawinp + Converter
    
          Case 349 To 399
             Calc = 399 - 349
             Calc = 18 / Calc
             _step = Rawinp - 349
             _step = _step * Calc
             _step = Round(_step)
             Converter = 0 - 23
             Converter = Converter - _step
             Rawout1 = Rawinp + Converter
    
          Case 287 To 348
             Calc = 348 - 287
             Calc = 10 / Calc
             _step = Rawinp - 287
             _step = _step * Calc
             _step = Round(_step)
             Converter = 0 - 10
             Converter = Converter - _step
             Rawout1 = Rawinp + Converter
    
          Case 185 To 286
             Calc = 286 - 185
             Calc = 10 / Calc
             _step = Rawinp - 185
             _step = _step * Calc
             _step = Round(_step)
             Converter = 0
             Converter = Converter - _step
             Rawout1 = Rawinp + Converter
    
          Case Is <= 184
             Rawout1 = Rawinp
       End Select
    Return
    Probleme:
    Spannugnssignal wird über ein regelbares Netzteil simuliert (ohne Masseanschluß wird immer max. Wert ausgegeben).
    Starke Schwankungen, mit diesem Controller hab ich nur 1024 verschiedene Möglichkeiten aber da gibt es Schwankungen bis hin zu 25 Schritten.
    Auch wenn ich den Amperwert am Netzteil um 1mA hochnehme wird sofort der maximale Wert angezeigt.

    So jetzt ist erstmal alles zum aktuellen Stand bekannt, fällt vielleicht jemanden ein was ich noch verändern muss damit es wie gewünscht funktioniert (egal ob Soft- oder Hardwareseitig)?

    Vielen Dank

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Den Code habe ich mir nicht angesehen, tut er überhauptp das, was er soll?
    Wie hast Du gemessen? Ein normales Multimeter ist ungeeignet, um Effektivwerte einer PWM Spannung anzuzeigen. Da brauchts ein Oszi.
    Die Störungen, von denen Du schreibst, hängen von sehr vielen Unbekannten ab: Schaltung, Layout, Spannungsversorgung usw.
    Allgemein kann man sie minimieren, indem man mehrere Messungen macht und mittelt oder die Auflösung verringert.
    Aber bei diesen Schwankungen schätze ich mal, es liegt an erst genanntem.
    So ganz klar ist mir die Sache nicht.
    Zu diesem Thema gibt es allerdings auch schon sehr viele Beiträge hier, einfach mal suchen.
    Gruß

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Um mittels PWM eine Gleichspannung zu erzeugen muss am PWM Ausgang ein Tiefpass sitzen der aus dem PWM Signal eine gemittelte Gleichspannung erzeugt die dann mit einem Multimeter
    gemessen werden kann. Irgend welche Verluste wird es immer geben....PWM ist kein echter DAC.

    Gruß Richard

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.10.2010
    Beiträge
    5
    Also an sich wollte ich einen Tuningchip für mein Auto basteln.
    Wäre bestimmt besser wenn ich da einen seperaten DAC nehme gibts einen ATMega mit einer höheren Auflösugn als 10Bit?
    Beim Multimeter sind die Schwankungen nicht so schnell ersichtlich aber ich lasse mir die Werte halt unter dem Emulator anzeigen und dort sehe ich das es Schwankungen gibt bei der Stromversorgung gibt es keine Probleme.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •