-         

Ergebnis 1 bis 3 von 3

Thema: PWM- Probleme - nach Tiefpass kommen keine 0V / 5V mehr an?!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.04.2005
    Alter
    32
    Beiträge
    84

    PWM- Probleme - nach Tiefpass kommen keine 0V / 5V mehr an?!

    Anzeige

    Hallo Leute,

    habe untenstehendes Programm auf die Schnelle zusammengewürfelt. Wollte einen DAC per PWM realisieren, habe einen RC-Tiefpaß aus R=330k und C=100nF zusammengetüdelt und versuche jetzt gerade zu schauen wie gut die Spannung geglättet ist.
    Nun habe ich folgende 2 Probleme:

    1. Ich bekomme hinter dem Tiefpaß keine vollen 5Volt und auch keine echten 0V heraus, obwohl der Controller mit 4,98V versorgt wird. Habe mal das Signal direkt aus dem PWM-Pin oszilloskopiert und siehe da es gibt auch gar keinen Zeitpunkt indem der Pin dauerhaft HIGH oder dauerhaft LOW bleibt, es bleibt immer noch eine ganz kleine Restspitze erhalten indem er meint irgendwie takten zu müssen.

    Ist das normal??

    2. Der UART schickt nur wilde Zeichen raus aber nicht den entsprechenden Wert der Variable "Spannung"


    pwmdac.bas
    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    
    Dim Spannung As Byte
    Spannung = 0
    Pwm1a = Spannung
    
    Print "running"
    Spannung = 128
    Pwm1a = Spannung
    
    
    Do
    If Pind.3 = 0 And Spannung > 0 Then Decr Spannung
    If Pind.2 = 0 And Spannung < 255 Then Incr Spannung
    Pwm1a = Spannung
    Print Spannung
    Waitms 250
    Loop

    EDIT:

    habe soeben nochmals genau das oszilloskop betrachtet und fetgestellt, dass ich sehr wohl direkt auf 0v kommen kann undzwar indem ich meine spannung down taste dauerhaft gedrückt halte.
    also scheint Bascom irgendwie das ocr1a-register zu checken und wenn da null drinsteht macht er auf unerfindlichen gründen wieder eine 1 daraus?!

    fehler in Bascom oder verständnisproblem meinerseits?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.383
    also ich bin mir nicht sicher wie du darauf kommst dass der aus der 0 wieder eine 1 macht, aber wenn du meinst dass trotz allem ein gewisser offset existiert, liegt das daran, dass laut datasheet bei OCR register gleich 0 DENNOCH ein kurzer spike genau einen CPU takt lang high am ausgang rauskommt!

    umgehen kannst du das, indem du z.B. invertiert arbeitest, denn wenn OCR = TOP ist hast du eine konstanten high bzw. low pegel, dann hast du eine perfekte 0V aber eben keine perfekte Vmax mehr

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.04.2005
    Alter
    32
    Beiträge
    84
    okay, warum gibt es diesen spike aber jedoch NICHT, wenn ich meine "spannung down" taste gedrückt halte?

    ich mein zur lösung des problems kann ich die pwm bei 0% high auch einfach komplett abschalten und den pin auf low setzen, bei high eben das selbe.


    EDIT:

    habe mir nun zusätzlich folgendes programm geschrieben, dass mir entsprechen die ausgänge aus und einschalten soll sowie bei spannung = 0 oder = 255 eine led zum leuchten bringen soll und auch hier das selbe problem!! nur wenn ich die taste gedrückt halte gibt es den zustand, dass die led leuchtet!!
    was ist hier los?????



    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    
    Dim Spannung As Byte
    Spannung = 0
    Pwm1a = Spannung
    
    Print "running"
    Spannung = 128
    Pwm1a = Spannung
    
    
    Do
    Select Case Spannung
    
    Case 0:
    Disable Timer1
    Portd.5 = 0
    If Pind.2 = 0 Then Incr Spannung
    
    Case 255:
    Disable Timer1
    Portd.5 = 1
    If Pind.3 = 0 Then Decr Spannung
    
    Case Else:
    Enable Timer1
    If Pind.3 = 0 Then Decr Spannung
    If Pind.2 = 0 Then Incr Spannung
    Pwm1a = Spannung
    Waitms 250
    
    End Select
    
    If Spannung = 0 Then Portd.6 = 1 Else Portd.6 = 0
    If Spannung = 255 Then Portd.6 = 1 Else Portd.6 = 0
    
    Print Spannung
    Loop

Berechtigungen

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