-         

Ergebnis 1 bis 7 von 7

Thema: Brauche Dringend Hilfe beim Analog Comparator

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Bremen
    Alter
    43
    Beiträge
    63

    Brauche Dringend Hilfe beim Analog Comparator

    Anzeige

    Hi @all

    Ich drehe langsam durch
    Mein AC macht was er will und wie er will

    So hätte ich es gerne das der AC es macht.
    Ich Bestrome meine Spule und schalte sie dann ab .
    Dann soll der Ac einen Interrupt auslösen wenn die Spannung an
    Ain0 gleich der Spannung an AIN1 ist . Der Timer wird Gestoppt und ich kann mir denn Wert anschauen . Das ist leider die Theorie .

    Jetzt die Praxis .
    Also ich schalte die Spule ein.
    Ich schalte die Spule ab es kommt der Interrupt .
    Die Werte des Timers ist immer um ca 300 kleiner wie der vorher.
    ist er bei 1700 angekommen geht er wieder hoch auf 5400 und zählt wieder runter . Die Werte Passen in keiner form zu der entlade kurve die mir mein Oszi anzeigt .

    Jetzt zum Aufbau .
    An AIN0 Liegt die Motorspannung von 5V
    An AIN1 Liegt die Referenz Spannug derzeit GND lieber wäre mir aber 1V.

    Konfiguriert habe ich den AC so :
    config ACI = on , compare = off , Trigger = falling
    enable ACI
    On ACI ACI_ISR
    Enable INTERRUPTS
    Stop AC

    DO
    ocr2 = 255
    portd.2 = 1 Die SPule wird Bestromt
    waitms 500
    Start Timer1
    Start AC
    OCR = 0 Die Spule ist aus . GND bleibt offen . Auf dem Oszi habe ich
    schöne kurve die sich je nach Rotorposition ändert.
    wait 3
    loop
    end

    ACI_ISR:
    Stop timer1
    stop AC
    Print timer1
    Return

    Gruß Becki

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Mein AC macht was er will
    "Computer machen zwar nicht immer was sie sollen, aber immer was man ihnen sagt"

    (Eine unangenehme Wahrheit, ist aber so).

    Auch wenn ich nicht alles von Deinem Code verstehe (z.B. die PWM-Komponente), liegt m.E. der Fehler darin, dass Du den Timer nach dem Auslesen nicht auf 0 zurücksetzt. Er zählt daher einfach vom letzten Wert weiter, läuft regelmäßig über, und kommt deshalb immer bei etwas niedrigeren Werten an als beim vorherigen Interrupt.

    Mach´ hinter Print Timer1 mal ein Timer1=0...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Bremen
    Alter
    43
    Beiträge
    63
    Hallo Sauerbruch,
    danke für die Antwort habe es sofort Probiert .
    Es wurde besser aber das war es leider noch nicht .
    Ist es möglich die interne Referenz von 2,56 V zu benutzen um AIN1
    oder AIN0 damit zu Vergleichen ?

    Fals es möglich sein sollte bitte mit einer Erklärung wie es geht.

    Gruß Becki

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Hmmm...

    leider weiß ich nicht, mit welchem Controller Du arbeitest. Ich hab mal ins Datenblatt vom Mega8 geschaut und dort folgendes gefunden:


    The Analog Comparator compares the input values on the positive pin AIN0 and negative pin AIN1. When the voltage on the positive pin AIN0 is higher than the voltage on the negative pin AIN1, the Analog Comparator Output, ACO, is set.
    (ich nehme mal an, dass das bei anderen Typen ähnlich sein wird).

    Wenn AIN1 auf GND liegt, kann die Spannung an AIN0 ja gar nicht kleiner sein - es müsste als so eine Art Dauer-Interrupt entstehen.

    Hast Du schon mal probiert, AIN1 über einen Trimmer auf einen etwas positiveren Wert einzustellen?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Bremen
    Alter
    43
    Beiträge
    63
    Hallo,
    Ja das mit GND hatte ich mir dann auch so gedacht .
    Ich habe jetzt die interne Referenz angeschaltet .
    Sie ist zwar beim mega8 leider fest auf 2,7 V aber für erste Tests war es ausreichen .
    Und liefen auch zu meiner vollen zufriedenheit .
    Tut mir leid das ich erst so spät Antworte aber ich habe mal angefangen
    das Datenblatt zu Studieren .
    Das zieht sich leider mit meinen Englisch kenntnissen etwas hin .

    Gruß Becki

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Wenn du einen ATmega verwendest:

    Du kannst natürlich die interne Referenz-Spannung verwenden.
    Dazu mußt du den ADC aktivieren.

    Config ADC=Single, prescaler=Auto, Reference=Internal
    Start ADC

    jetzt müßtest du an ARef-Pin eine Spannung haben. Klemm ein Kondensator 100nF dran (gegen Masse) und verbinde den Pin mit deinem AINx Pin als Referenz.

    Bei anderen Controlern mußt du mal ins Datenblatt schauen.

    Mitch.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Bremen
    Alter
    43
    Beiträge
    63
    Hallo ,
    ich bin genau andersrum gegangen .
    ADC = off
    und im Register ACSR das bit ACBG auf 1 gesetzt dann hast du die
    Interne Referenz an AIN0 Liegen und kannst an AIN1 Messen .
    Ich lese dann das bit ACO aus ob es 1 oder 0 ist.
    DA ich den Multiplexer brauche habe ich es so rum gemacht.

    Gruß Becki

Berechtigungen

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