Zuerst habe ich nach diesem Problem gesucht und konnte nichts mit diesem spezifischen finden.
Ich verwende NE555, um Frequenzen zu erzeugen. Ich verwende die Berechnungen dieser Website . Ich benutze 10nf, wie es sagt. Mein Problem ist, dass ich keine Frequenzen über 100 kHz erzeugen kann.
Ich verwende 0,1 uF als C, 47 Ohm für R1 und R2. Laut Website sollte es 102 kHz geben, aber NE555 gibt das nicht. Ich habe es mit einem Oszilloskop gemessen und es zeigt nur Rauschen. Ich habe [Datenblatt] [3] durchsucht und herausgefunden, dass NE555 fast 1 MHz erreichen sollte.
Was denkst du, ist mein Problem? Wie kann ich es lösen und die Signale über 100 kHz erreichen?
Die von Texas Instruments „NE555“ empfohlenen R-Werte betragen 1 kOhm und mehr, und der 1-MHz-Betrieb dieses Teils wird nicht garantiert. 100kHz ist die Empfehlung. NE555 Datenblatt
Modernere Variantendesigns können problemlos mit 1 MHz umgehen, einschließlich (wieder von Texas Instruments) TLC555 TLC555-Datenblatt und DIESES Datenblatt weist ausdrücklich auf den Entladungsinnenwiderstand (etwa 20 Ohm) hin, was bedeutet, dass R1 und R2 viel höher sein sollten (4 kOhm wären gut). ).
Was denkst du, ist mein Problem?
nicht alle 555er sind gleich und einige von ihnen können nicht so hoch gehen.
Wenn Sie so hoch gehen müssen, suchen Sie nach einem Teil, der das kann. Alle verbinden den Kondensator mit dem Ausgangspin und verwenden einen Widerstand mit niedrigem Wert.
Es gibt andere, oft einfachere Wege, um Sie dorthin zu bringen.
Bearbeiten: Ich habe schnell eine kleine Routine zusammengestellt, um das Konzept zu demonstrieren.
//measure rc time to charge to '1' on RC_READ pin
uint32_t rctmr_get(uint8_t ch_pin) {
uint32_t tmp;
IO_IN(RC_DDR, ch_pin); //discharge. ch_pin idles high/input
IO_OUT(RC_DDR, RC_READ); //discharges the capacitor (RC_READ idles low/output)
while (IO_GET(RC_PORTIN, RC_READ)) continue; //until the capacitor is fully discharged
IO_OUT(RC_PORT, ch_pin); //start to charge through the ch_pin
IO_IN(RC_DDR, RC_READ); //start to charge up the capacitor
tmp = ticks(); //time stamp tmp
while (IO_GET(RC_PORTIN, RC_READ)==0) continue; //wait for READ pin to go high
tmp = ticks() - tmp; //measure the time elapsed
IO_OUT(RC_DDR, RC_READ); //discharge the capacitor
IO_IN(RC_DDR, ch_pin); //start to discharge from the charge pin (idles high / input)
return tmp;
}
Bei einem 16 MHz PIC16F1936 @ 2,5 V, 100 K Widerstand habe ich eine Zählung von 183xx für einen 104 Kondensator erhalten - die letzten beiden Ziffern variieren ein wenig.
Mit ein wenig Filterung sollten Sie glattere Ergebnisse erzielen.
Es hat also einen Bereich von bis zu 2 ^ 32/18350 * 0,1 u = 24 F und eine Auflösung von 5,5 pf. Mit verschiedenen Widerständen, die zum Laden des Kondensators verwendet werden, können Sie diesen Bereich noch erweitern.
Der Code ist ziemlich portabel und sollte auf so ziemlich jedem MCU laufen können.
Transistor
HVK
Harry Swensson
Transistor
HVK
glen_geek
Neil_DE
Jim Dearden
HVK
Harry Swensson