PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM- Probleme - nach Tiefpass kommen keine 0V / 5V mehr an?!



tauruz
12.10.2008, 16:47
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

$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?

Ceos
12.10.2008, 21:21
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

tauruz
13.10.2008, 17:05
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?????




$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