Forum: Mikrocontroller und Digitale Elektronik Prinzipielle Frage zur Funktion eines Komperators


von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

Hallo Zusammen,

ich habe eine Prinzipielle Frage zur Funktion eines 
Comperators.(dsPic33FJ16GS)

ich bekomme von einen Stromwandler eine Spannung zwischen 3 und 1,8V...
der maximale Eingang am Komperator ist Avdd - 1,5V....

Der Komperator soll einen Interrupt auslösen, wenn

1) die Spannung vom Stromwandler über 3V steigt, oder
2) die Spanung vom Stromwandler unter 1,8V sinkt.

Kann ich die Spannung vom Stromwandler an einen einzigen Comperator-Pin 
vom uC legen? oder muss ich dafür zwei Pins benutzen?


Gruß Ede

von Johannes M. (johnny-m)


Lesenswert?

Das Ding heißt "Komparator" mit zwei 'a', und wenn Du danach googelst, 
findest Du auch was Hilfreiches. Ansonsten ist 
http://www.elektronik-kompendium.de immer wieder einen Besuch wert.

von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

jo danke für die rechtschreibhilfe :-)

von Stephan H. (stephan-)


Lesenswert?

wozu in die Ferne schweifen ???

http://www.mikrocontroller.net/articles/Komparator

von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

ja aber mir geht es nicht um die Funktionsweise eines Komparators, die 
hab ich schon verstanden.....sondern um die Frage, ob ich jetzt 
eigentlich zwei Pin's dafür brauche oder nicht...


aber danke für die Hilfe

von peter-neu-ulm (Gast)


Lesenswert?

Im beschriebenen Fall müsste ein Ausgang des Kontrollers auf den 
Komparatoreingang zurückgeführt werden, sodass eine Hysterese entsteht. 
Mit den passenden Widerständen lässt sich der Einschalt- und der 
Ausschaltpunkt genau festlegen. Also, ein zweiter Pin müsste draufgehen.

Andere Lösung: A/D-Wandler einsetzen und Schaltpunkte per Software 
festlegen.

von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

Aha..

Dankeschön....aber leider kann ich keine AD-Wandler verwenden....der 
braucht zu viel Zeit...ich hab nur knapp 1us um meine MOSFET's aus zu 
schalten.

von ... (Gast)


Lesenswert?

Da du offensichtlich zwei spannungswerte zum vergleichen hast und da 
gleichzeitig verglichen werden soll ... braucht man auch zwei 
komparatoren.

von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

okay alles klar!...hab ich mir eigentlich auch schon gedacht....

mein verständnisproblem ist nur:

der Komparator schaltet immer auf '1' wenn der Eingang über einem 
festgelegten Wert ist. Aber er der zweite Komparatoreingang soll 
schalten, wenn der Eingang unter(!) einem festgelegten Wert ist.

von peter-neu-ulm (Gast)


Lesenswert?

Nach dem Überschreiten einer Spannungsgrenze soll Dein Kontroller zuerst 
seinen gerade laufenden Befehl abschließen, dann in die 
Interrupt-Routine springen, da die wichtigsten Vergleichsoperationen 
ausführen und dann noch die passende Reaktion ausgeben ???

Irgendwie passt das vom Zeitablauf her schlecht in eine usec, denn das 
dauert -zig Taktimpulse.

Bei so etwas ist wohl eine Lösung mit diskreten Komparatoren angebracht, 
wobei man daran denken soll, dass die üblichen LM311 oder LM339 schon zu 
lahm sind. Siehe Reaktionszeiten (Datenblatt).

von ... (Gast)


Lesenswert?

Die zwei komparatoren sind mit einem ODER verknuepft. Wenn das eine 
kommt, oder das andere so wird ausgeloest.

von peter-neu-ulm (Gast)


Lesenswert?

Also: "Wenn Komparator A 1 abgibt und Komparator B 0 abgibt, dann darf 
der Mosfet freigegeben werden"

So etwas kann man lösen, indem man eine Tabelle mit den vier hier 
möglichen Betriebszuständen aufstellt und daraus die dazugehörige 
Logikverknüpfung ausliest, etwa :  A und B-nicht = C

von Taz (Gast)


Lesenswert?

Hallo Pic- gangster Edgar
erst mal schreibst du technischen Nonsens, was es unnötig schwer macht.
" Aber er der zweite Komparatoreingang soll schalten, wenn der Eingang 
unter(!) "
der Eingang schaltet nicht sondern der Ausgang.
Ich habe nach dsPic33FJ16GS gesucht das ist kein Komparator sondern ein 
Signalcontroller.

Aber nun zu einer möglichen Lösung. Wie schon gesagt zwei Komparatoren 
benutzen, der eine erzeugt 'High' bei über 3V der ander 'High' bei unter 
1,8V. Nun beide Oder verknüpfen (z.B. mit Dioden) und an den Interrupt 
Eingang anschliessen zusätzlich beide Komparatoren an ein Port 
anschliessen.
So lössen beide den gleichen Interrupt aus und in der Routine kann dann 
verarbeitet werden ob die eine Schwelle oder die andere ausgelöst hat.
Schön wäre natürlich zwei Interrupteingänge zu benutzen wenns geht.

von Pic- gangster E. (Firma: FH) (ede84)


Lesenswert?

Hi Taz,

ich hab schon ganz vergessen das ich mal dieses Problem hatte :-)

Dafür hab ich jetzt ein neues....ich benutze ja den Komparator um den 
Strom zu begrenzen....wenn ein bestimmter Wert überschritten wird kommt 
die "Current-Limit" Funktion und die PWM-Signale schalten aus....

Allerdings schalten bei mir die PWM-Signale komplett aus...und ich will 
eigentlich nur, dass die Signale etwas kleiner werden, oder eben nicht 
mehr steigen können...ein Grenzwert für die Breite der Pulse sozusagen..

was mach ich falsch?

Gruß
Edgar

hier der Quellcode:

//*************** UP init_PWM **************************************
void init_PWM(void)
{
PTCONbits.PTEN = 0;     //PWM disable

PTCONbits.SYNCOEN = 1;    //SYNC-OUT Disable(0)
PTCONbits.SYNCEN  = 0;  //Extern. Sync erlauben(1)

PTCON2bits.PCLKDIV = 0;    //Frequenz wird duch '1' geteilt

//************ PWM1H ******************************************
IOCON1bits.PENH = 1;    //PWM1 hat Kontrolle über H-pin
IOCON1bits.PENL = 1;    //PWM1 hat Kontrolle über L-pin

IOCON1bits.PMOD = 0;    //PWM1 im Complememtary Mode
PWMCON1bits.DTC = 2;    //keine Totzeit
PWMCON1bits.ITB = 0;    //primary Timebase

IOCON1bits.CLDAT = 0;    //PWM1H und PWM1L gehen auf Null, bei CL
FCLCON1bits.CLSRC = 0;     // CurrentLimit input "FAULT 1"
FCLCON1bits.CLPOL = 0;     // The selected current-limit source is 
active-high
FCLCON1bits.CLMOD = 1;    //Current-Limit enable(1)
FCLCON1bits.FLTMOD = 1;   //Latched Mode(0), cycle mode(1)


RPINR29bits.FLT1R = 28;     // "FAULT 1" input pin remapped to RP28

IOCON1bits.FLTDAT = 0;  // PWM1H and PWM1L are driven LOW on occurance
      // of Fault and Current limit respectively
      //Latched Condition (Latch-Mode?)


PHASE1 = 0;    //PHASE1 immer '0'(0)

PTPER = 9615;  //gewünscht 10us --> 10000ns/1.04ns = 9615
PTCONbits.PTEN = 1;  //PWM Enable
}
//*************************************************************

//*************** UP init_Komparator ***************************
void init_Komparator(void)
{

CMPCON4bits.CMPON = 0;    //Komparator 4 aus(0)

CMPCON4bits.INSEL = 3;    //Komparator 4D wählen
CMPCON4bits.RANGE = 0;    //Interne Referenz
CMPDAC4bits.CMREF = 213;  //bei 0.25V(213) soll er auslösen

CMPCON4bits.CMPON = 1;    //Komparator 4 ein(1)

}
//*********** ende UP init_Komparator ***************************

von Taz (Gast)


Lesenswert?

Hi  Pic- gangster Edgar
sorry da kann ich dir nicht helfen. Erstens benutze ich fast 
ausschliesslich den ADUC841 und zweitens die PWM Funktionen hab ich noch 
nie gebraucht.
Ich bin mir aber sicher du findest den Fehler auch selber.
MfG Taz

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.