- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: Interrupt-Problem, wie gegenseitiges Stören verhindern?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.10.2006
    Beiträge
    32

    Interrupt-Problem, wie gegenseitiges Stören verhindern?

    Anzeige

    Praxistest und DIY Projekte
    Hi zusammen,

    ich stehen vor einem Programmtechnischen Problem und weiß nicht wie ich dieses lösen soll.

    Folgende Problemstellung:
    Ich habe 1 drehende Welle eines Motors bei dem ich die Drehzahl messen möchte und bekomme durch einen Induktivaufnahmer ein einwandfrei Sauberes Impulsförmiges Signal.Ich habe für die Drehzahlmessung
    schon angefangen Programmcode zu schreiben (Ich arbeite mit Bascom-AVR von Mcselec). Die Messung mache ich mit dem
    Capture-Modul des ATMega 32 (ICP). Frage 1: gibt es eine "bessere" Möglichkeit eine Drehzahl hinreichend genau im Bereich
    von ca 400-5000 Upm zu erfassen? Die Drehzahlmessung bekomme ich mit dem von mir gestrickten Programm hin. Um mich nicht
    mit fremden Federn zu schmücken muß ich jedoch auch sagen daß ich mit die Denkanstöße aus dem Drehzahlmessungs-Programm
    vom User "formtapez" geholt habe. Dieses ist gut kommentiert, darum habe ich dies als Beispiel verwendet.

    2.Problem:
    Ich möchte am Mega32 an den TOSC-Pins einen extra Quarz betreiben um den Timer2 asynchron zu betreiben. Ich möchte
    mir damit ein 1.sec signal herstellen. Die Geschichte mit dem Prescaler ist mir klar, ich lasse in der Interruptroutine
    dann eine Variable raufzählen, bis auf 32 und habe damit nach jeweils 32 Interruptaufrufen (bei einem Prescaler von 1024)
    meine für meine Zwecke hinreichend genaue 1.Sec referenz.
    Jetzt bin ich mir aber über eine weitere Problematik nicht sicher, und zwar folgende:
    Angenommen der Mega32 misst die Drehzahl und mitten in die Drehzahlmessung platzt der Timer2 mit einem Interrupt hinein.
    Was passiert in diesem Fall? Mir ist klar das ich in der Zählroutine für die Drehzahlerfassung die Interrupts Disablen kann,
    ich vermute jedoch daß dadurch der Timer2 in seiner "Arbeit" behindert wird, da unter umständen Impulse verschluckt werden.
    Dadurch ist meine 1.sec referenz ungenau. Würde es etwas bringen wenn ich den Teiler des Timers2 heruntersetze, evtl.
    auf 128? Es müssten, wenn ich mit meiner Argumentation nicht komplett auf dem Holzweg bin, dadurch zwar immer noch
    Impulse verloren gehen, da aber mehr interrupts von Timer2 ausgelöst werden, dürfte das nicht mehr so ins gewicht fallen.
    Die Sekundenreferenz muß nicht supergenau sein, diese wird für eine Art "Timeout" verwendet. Wenn bei einem Timeout-Zeitraum
    von ca. 10 min, dieser statt der angestrebten 10 min. halt 11 min lang ist ist das nicht schlimm.

    Als andere Lösungsvariante könnte ich immer wenn Timer2 einen interrupt auslöst in der ISR von Timer2 alle anderen
    interrupts verbieten. Dadurch stimmt aber wenn ich richtig denke meine Drehzahlmessung nicht mehr.
    Wie würdet Ihr an meiner Stelle so ein Problem lösen? Als Anmerkung: Ich muß die Drehzahl nicht dauernd messen, alle
    1 oder 2 sec reicht. Damit der Wert der Drehzahlanzeige nicht so stark schwankt, habe ich mir gedacht daß ich aus sagen wir
    mal 3 bis 5 Werten einen Mittelwert bilde um die Anzeige etwas zu beruhigen. Falls das ganze zu aufwendig ist um mit einem
    Mega32 erschlagen zu werden, habe ich auch schon gedacht die Drehzahlmessroutine in einen ATTiny2313 auszulagern und
    dort ebenfalls außerhalb der ISR, die nur zur Impulserfassung genutzt, wird die ganze rechenarbeit zu erledigen.
    Der Drehzahlwert könnte dann über den eingebauten UART fertig berechnet und im Klartext jede sekunde zum Mega32
    geschickt werden. Falls sich meine Problemstellung jedoch auch ohne einen 2. AVR lösen lässt, bin ich natürlich zufriedener.

    Falls jemand Bascom-Codebeispiele hat, nur her damit, vielleicht kann ich davon etwas lernen.


    Für diejenigen die die Hintergründe interessieren hier ein paar infos wie ich auf dieses Projekt gekommen bin:
    In dem Betrieb in dem ich Arbeite (als Betriebstechniker) haben wir, da wir ein Metallbetrieb sind jede menge Drehmaschinen.
    Von ganz kleinen bis zu den etwas größeren Exemplaren die ohne Probleme ein paar Tonnen an Gewicht auf die Waage bekommen.
    Bei einer diese Maschinen haben wir das Problem, daß wenn die Steuerung abstürzt, die auch das Sollwertsignal über zwei
    DACs für den Frequenzumformer des 15KW-Spindelmotors (an dem will ich die Drehzahl messen) und des Werkzeugservos
    erzeugt dieses einfach auf 0V (von einem Bereich von 0-10V) setzt. Die Freigabe der Umrichter erlischt jedoch nicht!
    Dadurch dreht der Drehstrommotor nur mit seiner Mindestgeschwindigkeit. Das wäre ja nicht so schlimm, wenn nicht der
    Servomotor der die Werkzeugvorschübe steuert unvermindert weiterlaufen würde. Dadurch das das Material nicht mehr genügend
    schnell Rotiert schneiden die Drehwerkzeuge nicht mehr sondern werden durch den nun entstehenden
    hohen Druck mechanisch zerstört. Falls jemand weiß was anständige Drehwerkzeuge kosten, wird derjenige mir sicher
    Zustimmen daß bei jedem Crash einen haufen Geld zu Bruch geht. Weiterhin werden von der Würgerei die Achslager und die
    Motoren auch nicht besser...
    Die Steuerung einfach auszutauschen ist momentan nicht machbar da mir die Zeit dazu fehlt und diese würde ich brauchen da
    von der Betreffenden Steuerung keine richtigen Pläne mehr da sind und ich somit alles ausmessen müsste. Die französische
    Firma die die Steuerung hergestellt hat existiert leider seit Jahren nicht mehr. Die Steuerung an sich ist eigentlich recht
    gut, da diese jetzt immerhin schon fast 21 Jahre (!!!) dauerdienst auf dem Buckel hat, aber irgendwann ist alles mal
    hinüber (und was der Zahn der Zeit nicht schafft, schafft der Ölnebel der auch in noch so gut abgedichtete Schaltschränke
    seinen Weg hineinfindet)... Die Maschinen laufen alle rund um die Uhr und das 7 Tage die Woche, Jahr für Jahr.
    Die einzige Ausnahme ist der Weihnachtstag mit den daran anschließenden Feiertagen.


    Falls jemand noch Fragen hat, bitte Posten ich werde versuchen soweit es mir möglich ist, alle Fragen zu beantworten.


    Mfg,
    KiR0

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hallo,
    also du brauchst die Interrupts nicht deaktivieren, denn wenn dein Programm in der ISR von der Drehzahlmessung ist und der Sekunden Interrupt dazwischen platzt wird die Drehzahlmessung fertig bearbeitet und danach in die Sekunden ISR gesprungen. Es geht somit nie ein Interrupt verlohren. Hoffe ich konnt dir helfen.
    Mfg franz

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113

    Re: Interrupt-Problem, wie gegenseitiges Stören verhindern?

    Zitat Zitat von KiR0
    2.Problem:
    Ich möchte am Mega32 an den TOSC-Pins einen extra Quarz betreiben um den Timer2 asynchron zu betreiben. Ich möchte
    mir damit ein 1.sec signal herstellen.
    Wenn du an die TOSC1 und TOSC2 Pins einen 32768Hz Quarz anschließt, brauchst du in deinem Code nur noch

    Config Clock=Soft, Gosub Sectic

    zu schreiben. Dann wird dir alles für den 1-sec. Interrupt abgenommen und genau einmal pro Sekunde das Label Sectic angesprungen. Dort kannst du dann deinen Code ausführen.

    Gruß

    Rolf

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    18.10.2006
    Beiträge
    32
    Hi,

    Danke an franzl und for_ro, das sich die Interrupts gegenseitig ausschließen und sich somit nicht ins gehege kommen war mir nicht bekannt, man lernt halt nie aus. Das mit der Softclock ist eine feine Sache, dadurch spare ich mir das ganze gewurschtel und Bascom nimmt mir die Arbeit ab.
    Einfrage hätte ich noch, geht die Softclock nur mit dem M32, da der ja einen 2.oszillator hat oder geht das mit allen AVRs, wie z.B. ATtiny2313 auch?

    2. Frage: Was für möglichkeiten der Drehzahlmessung über einen oder mehrere Impulse gibt es noch? (Nur Neugierhalber)

    Mfg
    KiR0

Berechtigungen

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

Labornetzteil AliExpress