Forum: PC-Programmierung Timer Interrupt ----> PWM Signal erzeugen


von Michael L. (nightflyer88)


Lesenswert?

Hallo Zusammen

Ich habe eine CNC Steuerung entwickelt, die auf einer Standard PC 
Hardware läuft. Alls Betriebssystem ist FreeDOS im Einsatz. Die 
Steuerung gibt Takt/Richtungssignale über den LPT Port aus, die dann die 
Servoantriebe der Maschine steuern. So weit so gut, die Steuerung läuft 
sehr zuverlässig und sehr stabil.

Nun zu meinem Problem:

Das Takt signal wird nicht sauber erzeugt, und dadurch laufen die 
Antriebsmotoren nicht ruhig. Das Signal ist vergleichbar mit einem PWM 
Signal.

Hier ein kleines Test-Programm in PowerBASIC zur Takt Erzeugung:

OUT (&H61), INP(&H61) OR 1  'Lautsprecher und damit Zähler 2 aktivieren
OUT (&H21), 252             'Interrupts maskieren
OUT (&H43), &b10110000      '10110000bin  8253 Zähler 2 auf Modus 0 
setzen

pause?? = 10000

for a = 1 to 10
  out (&h378),&b00000010    'Takt Signal EIN
  OUT (&H42), 255           'Zähler mit 65535 laden
  OUT (&H42), 255
  DO
    a? = INP(&H42)          'Zähler auslesen
    b?? = INP(&H42)
    shift left b??,8
    b?? = a? + b??
  loop until b?? < pause??  'Ist Zähler kleiner als Sollwert
  out (&h378),&b00000000     'Takt Signal AUS
next


Diese Methode ist nicht optimal, weil ich manchmal bei Zählerstand 9999, 
oder 9985, oder 9980, das PWM-bit auf 0 setze. Und somit ist mein PWM 
Signal nicht schön konstant.

Gibt es eine möglichkeit mit interrupts zu arbeiten ? Damit mein PWM 
Signal immer mit genau der gleichen frequenz kommt ?


Ich hoffe mir kann da jemand weiter helfen

Gruss Michael

von Michael L. (nightflyer88)


Lesenswert?

Kennt sich denn niemand mit Timer, Counter oder Interrupts aus ? Oder 
hat jemand eine andere Lösung ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.