Von PWM zu sauberen Ausgang

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
Hiho,

kurze Frage.

Ich würde gerne von einem Mega (16 Bit Timer) sauber 2 Drehspulinstrumente ansteuern. Vermutlich liegen die ja so um und bei 0…200mV wenn ich mich richtig erinnere.

Klar dass da nichts "zittern" sollte. Ok, eigentlich träge genug die Dinger, aber trotzdem.
Wie würde das schaltungstechnisch am Besten aussehen? L in Serie und C gen Masse? Welche Werte nimmt man da am besten?

Nächstes Problem wäre dass VCC zwischen 2,8 und 4,2V schwanken kann (je nach Ladezustand), was sich natürlich nicht auf die Anzeige auswirken darf.
 
Kurze Antwort: LC- oder RC-Tiefpaß, wie Du selbst bereits angedeutet hast. Die Instrumente nahmen ja quasi keinen Strom auf (also insbesondere keine schwankende Last), allerdings wenn VCC schwankt,... vielleicht die tatsächliche Spannung hinter dem Tiefpaß auf den ADC und dann regeln...
Fürs rechnen kannst auf @dino03 warten - vielleicht werf ich nachher auch mal meinen "Bauch" an...;)
 
Hi,

um das spannungsunabhängig zu machen würde ich das folgendermaßen umsetzen ...

Mit ner Z-Diode eine Spannung von etwa 2V erzeugen. Damit per Widerstand einen Kondensator langsam laden.
An dem Kondensator liegt per Vorwiderstand das Drehspulinstrument.
Nun per Schottky-Diode in Reihe mit Widerstand diesen Kondensator per PWM entladen (sozusagen nen OpenCollector bauen).
Damit das Drehspulinstrument wirklich per Null anfängt anzuzeigen, könnte man noch ne 1N4148 in Reihe legen. Die vernichtet dann noch 0,6V und hebt das Instrument sozusagen etwas an.

Zum Rechnen hab ich heute aber keine Lust mehr :p

Gruß
Dino
 
Hmmm... möglicherweise dumme Idee. Aber könnte man nicht auch eigentlich statt mit Z-Diode die Spannungsreferenz zu erzeugen die 1,1V Vref vom ADC verwenden? die wären ja schon da. Ich weiß nur nicht ob die sich so stark belasten lassen… Weiß auch nicht wie sehr die Instrumente überhaupt Strom brauchen. Habe sie noch nicht hier.

Ach ja, wird n Mega der 8er Serie werden, also 8, 48, ...
 
Hi, könnte man nicht einen C parallel ans Instrument schalten und den per Pwm laden und die Spannung mit einem ad-Eingang wieder messen und dann passend hinregeln?
Ich glaub' das Zittern nicht so auffällig ist, aber sie könnten pfeifen, das hatte ich schon mal. Am End' schütteln die sich noch kaputt!
 
@Tschoeatsch: das ist quasi der Vorschlag aus #1, #2.
Dinos Vorschlag machts andersrum (entladen), und realisiert ''ne stabilere Ladespannung.

@TommyB: Hmm... die Bandgap kanibalisieren...
Im DB des Mega48/88/... (ohne P/A/usw) finde ich nur I BG (Bandgap Refference Current Consumption) typ 10 µA, aber das wird der "normale Verbrauch" sein - Du willst den ja quasi anzapfen...
Dinos Vorschlag wollte mit seiner Zener ja 'ne "geregelte" Konstantspannungsquelle realisieren, die durch das entladen des Kondensators belastet wird.
Versuchen kannst Du das (Dino hat auch schon AVRs gequält).
Entweder den Lade- (und in der Folge auch den Entlade-)Strom durch Widerständebegrenzen, oder das ganze mittels OPAMP abkoppeln (Hmm... der interne AC...*grübel*) - eber einen zusätzlichen OPAMP willst Du sicher nicht, wenn die Zener schon zu viel war...
 
@LotadaC du kennst mich doch, jedes Bauteil sind mindestens 2 zuviel :D

Das mit der Z-Diode ist nur etwas ungünstig da konstant Strom (in unbekannter Höhe) verbraten wird. Soll per Akku versorgt werden. Aber jenachdem wie viel die Instrumente brauchen wird es wohl nicht viel sein.

So sieht es bisher aus:
upload_2015-12-3_22-4-0.png

Die Spannung für die "Referenz" ziehe ich mir vom PC0, damit sollte die Spannung unter 2,8V sinken und der AVR abschaltet auch die Referenz deaktiviert wird.
Ob die 10k bei R3 reichen, kA…

Wie man sieht fehlt noch die "Pegelwandlung" vom PWM zu den Instrumenten (Pad5…8). Mosfet? Welcher wäre am Besten?

Wer sich fragt was das werden soll… Ja, eigentlich wollte ich keine Uhren mehr bauen, aber ich finde das wäre ein passendes Geschenk für meinen Chef ;)
upload_2015-12-3_22-9-8.png
… nur nicht so klobig :)
 
Ähm… Ne, bräuchte ich doch eigentlich garnicht, oder?
Wenn ich das so tu:
upload_2015-12-3_22-48-49.png

Oder ist das nu kompletter Unsinn?
 
Hi, wenn deine Instrumente 200mV und vielleicht damit 100µA brauchen, wäre es nicht stromsparender statt mit R3 von 4,2V Leistung zu verbraten, mit einem weiteren PWM und 50/50 Verhältnis eine Spannung von 1,4 -2,1V zu erzeugen und die dann mit Widerstand und Zenerdiode auf 1,3V (könnte eine Zenerwert sein) zu stabilisieren? Warum hast du C2 gedreht?
 
  • Like
Reaktionen: TommyB
Hmm...
Dir ist schon klar, daß Du damit sowas wie'n ungeregelten Aufwärtswandler aufbaust, oder!?

Statt L3/L4 würde ich Widerstände nehmen, die den jeweiligen Entladestrom begrenzen. Die sind also entsprechend der Anforderungen des Drehspulinstrumentes (und der Zener) zu dimensionieren.
Jetzt stellt sich die Frage, mit welcher PWM-Frequenz Du das ganze angehen willst. Bei internen 8MHz käme der 16bit-ter auf ca 120Hz (fastPWM oder 60Hz Phasenkorrekt). Bei internen 128kHz (WD-Oszi, vllt interessant wegen Batteriebetrieb) weniger als 2Hz (bzw 1Hz).
Wobei sich auch die Frage stellt, ob Du die Auflösung wirklich brauchst.
Wenn die Frequenz hinreichend hoch ist, brauchst Du C3/C4 nicht, da die Drehspulinstrumente den Stromfluß gemittelt anzeigen (da träge).

Nun zum PWM. Es werden ja die Pegel der OC-Pins getoggelt, also Gnd oder Vcc. Du willst aber eigentlich Gnd und not connected als Zustände. Hard-PWM kann das nicht, weswegen Du die Dioden einsetzt. Man könnte aber auch ... das Schalten selbst übernehmen, also die OC-IRQs und den TOV-IRQ nutzen, und dort gezielt die DDR-Bits manipulieren (PORT immer auf low).
Verwendet man dazu SBI/CBI, brauchen keine Register gesichert werden. Wenn Du den Mega168 nimmst, kannst Du das SBI+Reti bei den OC-Matches sogar direkt in die IVT setzen (da Doppelwort-IVT). Wären unschlagbare 10 Takte. Beim TOV müßten allerdings beide OC-Pins zurückgesetzt werden. Zwei CBIs+Reti (12 Takte) würden den OC0A-IRQ unbrauchbar machen, alternativ könnte man auch mit OUT+Reti (9 Takte) den ganzen PortB (also die Datenrichtung) der PB-Beine mit einem Schlag festlegen, was natürlich dort zu beachten ist. 'N konventioneller Sprung in eine ISR kostet zusätzliche 3 Takte.

Da Du den ADC (und den AC) nicht nutzen willst, kannst Du ja trotzdem mal 'n AVR opfern, die Belastbarkeit der Bandgap testen.
Bandgap (mit externem Abblokkerko) aktivieren (REFS-Bits in ADMUX), möglicherweise muß dann auch der ADC aktiviert sein (ADEN in ADCSRA).
Und dann mit'nem großen Trimmer (als Rheostat) gegen Gnd belasten (10MOhm und dann gaaanz langsam runterdrehen, und die Spannung dabei im Auge behalten...

Wobei es besser wäre, das direkt mit dem Drehspulinstrument zu testen - Du willst ja nicht wissen, wann die Bandgap/der AVR die Hufe hochreißt, sondern obs für Deine Instrumente reicht...
Also AREF->Drehspulinstrument->hochohmiger Rheostat->Gnd und dann gaannz langsam runterdrehen. Multimeter am AREF und das Instrument im Auge behalten...
 
Zuletzt bearbeitet:
Warum hast du C2 gedreht?
Oops, gut aufgepasst, danke!
Ist aus Versehen entstanden weil ich es erst etwas anders zeichnen wollte.
2,4V ist übrigens die kleinste Zener die ich hier so bekommen kann ohne wo anders zu bestellen, daher der Wert.

Dir ist schon klar, daß Du damit sowas wie'n ungeregelten Aufwärtswandler aufbaust, oder!?
Hmmm… Nicht wirklich? Soll ja abwärts regeln.
War als LC Glied gedacht um zu Glätten.

Statt L3/L4 würde ich Widerstände nehmen, die den jeweiligen Entladestrom begrenzen. Die sind also entsprechend der Anforderungen des Drehspulinstrumentes (und der Zener) zu dimensionieren.
Jetzt stellt sich die Frage, mit welcher PWM-Frequenz Du das ganze angehen willst. Bei internen 8MHz käme der 16bit-ter auf ca 120Hz (fastPWM oder 60Hz Phasenkorrekt). Bei internen 128kHz (WD-Oszi, vllt interessant wegen Batteriebetrieb) weniger als 2Hz (bzw 1Hz).
Wobei sich auch die Frage stellt, ob Du die Auflösung wirklich brauchst.
Wenn die Frequenz hinreichend hoch ist, brauchst Du C3/C4 nicht, da die Drehspulinstrumente den Stromfluß gemittelt anzeigen (da träge).
Das weiß ich eben alles nicht da ich die leider noch nicht hier habe. Mit etwas Glück kommen die heute oder morgen an, mal schaun. Gut möglich dass ich das alles nicht brauche, aber ich habe auch schon erlebt dass durch simples PWM an 2 LEDs ein Akku das Surren angefangen hat, daher die Glättung.

Den Timer1 nutze ich nur rein Vorsorglich :)
Ich kann ja immer noch auf den 0er umschwenken, und somit vielleicht auf einen Tiny der TWI hat (falls es die gibt).
 
Ist auch nur ähnlich, aber wenn der PWM auf Gnd schaltet, speichert die Induktivität Energie Form eines Magnetfeldes. Wenn der dann auf "offen" schaltet, bricht das Feld zusammen, was eine Spannung induziert, die mit der Zener-Spannungsquelle in Reihe liegt, oder?
Hängt natürlich alles von den fließenden Strömen und der Frequenz/Pulsweite ab...

wegen den Tinies - wirf mal'n Blick auf meine Tabelle, die kleineren stehen ja schon drin.
TWI kannst Du auch über den USI realisieren, als Master mußt Du Dich dann um die Clock-Strobes kümmern, aber sonst gehts wohl.
Der kleinste mit echtem Hardware-TWI wäre der Tiny441/841
(ok, eigentlich der Tiny20, den Du ja als WLCSP verlöten kannst - der ist Dir bestimmt nicht zu groß...)
 
Hmmm der Tiny441 sieht interessant aus. Muss nur schaun ob das AVR Studio (4.19) den auch erkennt. Sonst muss ich extra ne VM aufsetzen…

Mal hoffen dass die Instrumente morgen schon ankommen, denn kann ich etwas experimentieren. Bauteile sollte ich in ungefähr so hier haben, für ein "proof of concept" sollte es reichen.

p.s.: Diesmal nehme ich tatsächlich sogar DIP Varianten ;)
Hier kommt es auf die Größe nicht so an.
 
Allerdings ist der 441/841 recht exotisch...
auf die Pullup-Ansteuerung hatte ich ja schon mehrfach hingewiesen (wenn er kalte Füße bekommt, kannst Du das Bein auf Ausgang, Gnd setzen, und den Pullup aktivieren), Du kannst zu Laufzeit die Clocksource wechseln (nicht nur den Prescaler) - könnte in Verbindung mit dem internen Ultra Low Power Oszillator interessant sein: wenn er mit sehr geringer Aktivität rumidlen soll (aber eben nicht schlafen)-> ULP-Oszi, wenn dann brutale Rechenkraft gefordert sind der interne 8Mhz-Oszi, oder man läßt den Oszillator für den externen 16MHz-Quarz anschwingen...
In gewissen Grenzen kannst/mußt Du bei einigen Beinen die Belastbarkeit verändern.
Die Waveform-Generatoren der Timer (3x2) sind nicht mehr an je ein Bein gebunden - Du hast acht Beine zur Verfügung, auf die Du die WF-Generatoren schalten kannst.
Für den SPI und den ersten UART gibts einen alternativen "Satz Beine", falls Du auf dem ersten andere alternate functions nutzen willst (externes Programmieren über SPI geht aber nur über die Original-SPI-Beine).
Es gibt zwei ACs, bei denen Du bei Bedarf eine Hysterese einstellen kannst.
Eher am Rande: Du kannst aus der Device Signature Imprint Table neben diversen Kalibrationswerten auch die Chargennummer, die Wafernummer und die Position auslesen lassen, wo der Die aus dem Wafer geschnitten wurde. Du hast damit quasi 'ne einzigartige ID Deines Chips.

P.S.: Schade, auf Deine Versuche mit dem WLCSP wär ich gespannt gewesen...
 
P.S.: Schade, auf Deine Versuche mit dem WLCSP wär ich gespannt gewesen...
Auf Lochraster? ^^

Wobei… Man könnt den Dino raus hängen lassen. Kupferlackdraht pro Pin, schön flach aufgebaut, und dann aufkleben. Möglich bestimmt. Praktikabel? Eher nicht ;)
Reflow fällt mangels Heizeisens auch flach.
 
Hi,

Hmm...
Dir ist schon klar, daß Du damit sowas wie'n ungeregelten Aufwärtswandler aufbaust, oder!?

Statt L3/L4 würde ich Widerstände nehmen, die den jeweiligen Entladestrom begrenzen.

würde ich ähnlich sehen. Durch die PWM-Pulse bekommt man an L3 und L4 Induktionsspannungen die nicht belastet werden. Könnte im schlimmsten Fall irgendwas zerschießen. Da kommen schnell mal nen paar zig Volt zusammen.

Die Multimeter dachte ich eigentlich mit jeweils nem Vorwiderstand parallel zu den C3 + C4. Die messen sozusagen die Elkospannungen. Dann statt den jetzt eingezeichneten Meßwerken Ladewiderstände für die Elkos.

Gruß
Dino
 
Bei'nem StepUpConverter ginge der Switch nach Gnd je zwischen Spule und Diode weg, hier ist der Switch (im AVR) ja hinter der Diode. Insofern wird das ganze zwischendurch auch immer wieder entladen. Aber beim abschalten sind die induzierten Spannungen da. Deswegen hat man ja normalerweise Freilaufdioden an geschalteten induktiven Lasten. Ok, das übernehmen die internen am Pin, aber wieviel die wirklich aushalten...

Aber so ähnlich wie er das hat, müßte es doch auch gehen:
Zener-Spannungsquelle->Vorwiderstand->Drehspulinstrument->(ggf Tiefpaß)->Controllerpin (Gnd/offen), oder nicht?

...den Dino raus hängen lassen. Kupferlackdraht pro Pin, schön flach aufgebaut, und dann aufkleben.
hab ich auch schon dran gedacht, aber eigentlich macht der Controller sonst nicht so viel her. TWI und SPI, aber die nutzen dieselben Beine. Von den 4 PWMs liegen zwei auf denselben Bein, eins auf SPI/TWI. Für Deinen Drachen ist der wegen TPI auch nix...
Was der kann, kann der 441 schon lange. Wär halt wegen dem Package 'ne Herausforderung.. (*DinoSchubs*)

(Jaa... wenn die ursprünglich mal geplante integrierte qTouch-Hardware nicht aufgegeben/deaktiviert worden wäre... (*grml*))
 
Zuletzt bearbeitet:
Da Du den ADC (und den AC) nicht nutzen willst, kannst Du ja trotzdem mal 'n AVR opfern, die Belastbarkeit der Bandgap testen.
Bandgap (mit externem Abblokkerko) aktivieren (REFS-Bits in ADMUX), möglicherweise muß dann auch der ADC aktiviert sein (ADEN in ADCSRA).
Und dann mit'nem großen Trimmer (als Rheostat) gegen Gnd belasten (10MOhm und dann gaaanz langsam runterdrehen, und die Spannung dabei im Auge behalten...

Ich glaube die Spannungsregelung kann ich einsparen. Die 1v1 AREF bleiben bis ca. 1kΩ stabil, also sagen wir 1mA. Wenn die Instrumente 200µA brauchen liege ich deutlich drunter.
Getestet mit einem ATmega168 der hier grade so rumgeflogen ist.

Ausgegeben werden die 1v1 nur wenn ADEN (ADC enable) gesetzt ist, es ist aber nicht nötig den ADC auch laufen zu lassen. Die Spannung gibt er auch raus wenn er über PRR deaktiviert worden ist.

Ratsam ist das Vorhaben natürlich nicht wenn man den ADC auch nutzen will. Mache ich aber nicht, von daher egal.
 
Hi, ich habe auch schon solche Uhren gebaut und hab' dabei soft-pwm verwendet. Das erschien mir am einfachsten, weil ich die einzelnen Auflösungen nach der Abstufung der Anzeigen wählen konnte. Die Stunde hat ja nur 12 Stellungen, deine Minute hätte 60. Da brauch man auch garnix runterteilen von 8bit Auflösung. Hier mal ein link
http://bascom-forum.de/showthread.php?6319-TZZ-3-13-die-Tsch%F6atschs-Zeitzeige/page4
 
Die 1v1 AREF bleiben bis ca. 1kΩ stabil, also sagen wir 1mA. Wenn die Instrumente 200µA brauchen liege ich deutlich drunter.
Getestet mit einem ATmega168 der hier grade so rumgeflogen ist.
Mit welcher Versorgungsspannung am AVR?
Möglicherweise macht die bei geringerem Vcc eher weiche Knie. Ok, die willst ja deutlich unter dem einen mA bleiben (wobei Du 2 Instrumente parallel nimmst)
Kannst ja dann mal meinen Vorschlag aus #17 anpassen (Bandgap->Rheostat->Instrument->OC-Pin)
Rheostat erstmal auf 100k oder so, den OC-Pin dauerhaft auf Gnd, und dann den Rheostat runterleiern.
@ADEN: ok, wie ich vermutet hatte. Die REFs-Bits verbinden die Bandgap mit den AREF-Pin. Aber die muß auch aktiv sein. Neben dem ADC nutzen auch der AC (ACBG in ACSR) und die BOD die Bandgap (und aktivieren die dann bei Bedarf). Ob REFs nur bei aktiviertem ADC greifen, oder es auch mit aktivem BOD/AC laufen würde, kann ich dem DB nicht entnehmen (wobei die Frage eh nur akademisch ist)

@Tschoeatsch : hast Du da auch die Bandgap kanibalisiert? Steht im Text nichts zu, und die Schaltpläne kann ich mir mangels Zugriffsrechten dort nicht ansehen.
(Die Gehäuse sehen auf alle Fälle ... wertig aus)
(P.P.S.: ohne Möglichkeit, die irgendwie anders zu stellen, wäre das nix für mich... sämtliche kommerziellen Funkuhren syncen hier im Haus nicht (beim Sommer-/Winterzeitwechsel müssen die immer auf'n Balkon raus...
Dann lieber 'ne gute RTC, aber wenn man 'ne gute Anbindung an Frankfurt hat...)
 
Zuletzt bearbeitet:

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)