Prinzipielle Frage zur Funktion eines Komperators

OP (Firma: FH) #1238632
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
Gast #1238865
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.
OP (Firma: FH) #1239126
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.
Gast #1239130
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).
Gast #1239152
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
Gast #1293989
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.
OP (Firma: FH) #1294453
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 ***************************
Gast #1294695
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren