Skip to content
Snippets Groups Projects
Notizen.md 46.46 KiB
  • Eine Platine pro Heizung.

    • Aber einen zweiten Kanal vorsehen, damit man zwei Heizungen hängen kann.
  • RS485 Bus.

    • Bus ist ernstgemeint, d.h. eine lange Kette, keine Stichleitungen und Abschlusswiderstände am Ende.
    • Entweder an einer Stelle auf LAN brücken, z.B. mit https://www.waveshare.com/wiki/RS485_TO_POE_ETH_(B)
    • Oder per Netzwerkkabel plus USB zu vogon. Das Netzwerkkabel natürlich so, dass es nicht einfach auf Netzwerk zurücksteckbar ist.
    • Protokoll z.B. Modbus RTU oder was eigenes in Anlehnung daran.
  • Abzweigdose als Gehäuse

  • MCU

    • Warum RP2040?
      • Klassische Wahl wäre ein ATmega328.
      • Aber RP2040 hat eigentlich keine Nachteile und der USB Bootloader klärt die Frage, wie man es schafft, dass bei Problemen jeder die Firmware ohne RS485 Bootloader programmieren kann.
      • Den Flash können wir groß genug machen, dass man eine Art A/B Partition vorsehen kann.
        • Direkt A/B geht nicht, weil dem XIP kann man anscheinend keinen Offset vorgeben und dann müsste alles ohne XIP oder mit -fPIC sein.
        • Aber Leute haben sich was überlegt: https://github.com/rhulme/pico-flashloader
        • Dem könnte man noch ein "boote in die alte Version" geben, wenn man immer zwei Images da liegen hat und noch einen Button spendiert.
      • Weiterer Vorteil wäre, dass es ein richtiger ARM ist, d.h. LLVM und Rust sind kein Problem. Genug RAM für sinnvoll MicroPython, falls man das mal will. Und es ist ein Dual-Core. Wobei wir darauf hier ehrlich gesagt verzichten könnten, weil C und Mini-Programm reicht.
      • Ah, und JLC bestückt uns zwar auch den ATmega328P - aber für 3€ statt 1€!
      • Nachteil: Nur 4 ADC Pins.
      • Nachteil: Hardware-Design ist (abgesehen vom Programmer) etwas aufwändiger als beim ATmega. Aber ich würde einfach den Raspi Pico kopieren.
    • ...
  • Kabel

    • fxk8y hat 7-fach Steuerleitung vorgeschlagen, bei Alpha verfügbar. Konkret: Tronic LIYY 7x0.5
    • 2x 24V, 2x GND, 2x RS485 A/B, 1x WS2811
    • Die siebte Leitung ist frei und da noch mal GND zu machen oder so klingt nicht sinnvoll. Stattdessen einen WS2811 auf die Platine zum Signal verstärken und dann kann man quasi an beliebigen Stellen LED-Streifen verteilen.
    • Auch noch eine WS2812-4020 mit aufs PCB zum Debuggen.
    • Der WS2811 hängt am MCU. Das könnte praktisch sein für Auto-Discovery Dinge.
    • RS485 ist nicht separat verdrillt oder geschirmt. Falls das WS2811 Signal den stört, nutzen wir das Feature nicht.
  • Externe Hardware-Features

    • Pins auf Federzugklemmen:
      • 14x Bus-Kabel
        • 8x Power: 2x 24V rein, 2x raus, ebenso für GND (damit man das Kabel direkt anklemmen kann)
          • Alternativ nur 4x und Doppel-Aderendhülsen nehmen. Ist eigentlich auch ok.
          • Einige Klemmen können nur AWG18=0.8mm² - das reicht nicht.
          • KF250T-5.0-2*13P kann 1.5mm², d.h. da geht es.
        • 4x RS485: rein und raus (und beim letzten nen Widerstand statt weiteres Kabel)
        • 2x WS2812 vom/zum Kabel
      • 8x Heizung
        • 2x 24V Ausgang mit PWM für Wachsmotor, 500 mA Peak (einige sec), 85 mA continuous
        • 2x Strom messen auf den 24V Ausgängen
          • bevorzugt: high-side schalten, low-side messen -> deshalb extra Pin nötig
          • alternativ beides low-side und zum passenden Zeitpunkt messen, aber dedizierter 24V Pin ist trotzdem praktisch
          • Sofern der Wachsmotor keinen relevanten induktiven Anteil hat (gut möglich - ist ein Heizdraht), würde low-side messen+schalten reichen, weil dann müssen wir nur während angeschaltet messen.
          • Der Grund für Strom messen wäre, dass ich hoffe damit die Temperatur vom Wachs abzuschätzen, weil warum sollte sich sonst der Strom von 480 mA auf 85 mA reduzieren (laut einem Datenblatt von so einem Aktor). Ist aber nur nice-to-have, nicht nötig. Beziehungsweise schon irgendwie nötig, wenn/weil wir vorhaben die Power-Supply nicht auf Peak auszulegen und versetzt zu schalten.
        • 4x Digital-Eingang für Reed-Relay (2 pro Fenster); aber Umsetzung später, nur Eingänge vorsehen
      • 2x 5V Ausgang
        • I2C
        • WS2812
        • DS18B20
      • 1x GND
      • 1x 0-10V Eingang
      • TODO: Was wäre noch sinnvoll?
    • Features ohne extra Pin:
      • 1x 24V Versorgung messen
      • Nein: 1x DS18B20 oder DS18B20+ als Temperatur-Sensor und Unique ID
        • Eher nicht. Der kostet 1€, wird im Gehäuse nur Mist messen und eine Unique ID haben wir auch so: https://stackoverflow.com/a/74320491
        • Man könnte LM335DT nehmen, aber weil der analog ist hätten wir da auch Offset-Fehler durch die Referenzspannung wie bei dem integrierten Sensor im RP2040 (siehe Datenblatt, Section 4.9.5). Bei 1% Fehler in der Referenzspannung sind es aber nur 0.8 K statt 4 K wie bei dem integrierten.
        • Zu dem integrierten ist darüber hinaus leider nichts angegeben.
    • User Interface:
      • Ich dachte zunächst an seitwärts gerichtet und Loch ins Gehäuse machen, d.h. WS2812-4020 und 90 Grad gekippte Taster. Aber ist eigentlich nur unnötig Aufwand, weil das Gehäuse ist werkzeuglos zu öffnen und beinhaltet keine gefährlichen Spannungen.
      • 1x LED am MCU, z.B. RGB; zum Debuggen vom RS485 und MCU
      • 1x LED in der WS2812 Leitung, zum Debuggen davon
      • 1x Taster für Reset - nicht im Betrieb nutzbar
      • 1x Taster für USB Bootloader - nicht im Betrieb nutzbar, weil hängt am CS vom Flash
      • 1x Taster für unseren Bootloader (z.B. altes Image starten). Im Betrieb nutzbar, z.B. zum Adressen anlernen.
      • 1x USB. Den eventuell schon seitlich, weil sonst teuer und schwer erhältlich.
      • LEDs und Taster nicht dahin, wo Kabel lang gehen.
  • Hardware-Design

    • MCU
    • Power
      • Wir brauchen kaum Leistung, d.h. einfach nen LDO nehmen. Leistung für den Wachsmotor geht nicht durch den LDO.
      • Diode als Verpolungsschutz (nicht so richtig nötig) und um den MCU optional von USB zu versorgen.
        • Diode von USB muss so sein, dass nach dem LDO noch 3.3V raus kommt. Eventuell MOSFET nehmen.
      • Die vier 24V und GND auf der Platine nebeneinander und Plane mit Vias. Da fließen ggf 8A drüber.
    • Anschlussklemmen:
    • Platz:
      • Wir haben grob 66x66 mm und 32 in der Höhe. Das sind 43 dm². Da geht aber noch etwas weg wegen den Plastikpins und den Schrauben.
      • Der Raspi Pico hat 50x20 mm, also 10 dm². Der ist aber nicht gerade platzsparend gebaut.
      • Anschlussklemmen KF250T-5.0-2*13P mit 66x22m, also 15 dm².
        • Plus wenn wir die echt nehmen, kostet uns das 5 mm in der Tiefe, d.h. 5x66 also 3.3 dm².
        • Falls wir das doppelte nehmen können, wäre sinnvoll Platz für Beschriftung.
      • User Interface: 2x LED mit 5x5mm plus Abstand, also 0.4 dm². 3x Taster mit sagen wir mal 8x6mm, also 0.5 dm². Zusammen 2 dm².
      • Damit haben wir noch 13 dm² für MOSFETs und so. Und vielleicht bleibt dann echt noch mal 3.3 dm² für Beschriftung übrig.
    • Strom messen
      • Gut, dass ich mal LTspice dagegen geworfen habe: Wenn ich low-side den Strom messe, wird der leider negativ, sobald ich die high-side abschalte.
      • High-side Messung mit LT138 oder so mag vielleicht helfen, aber der kostet 1.5€.
      • INA2180A1IDGKR für 0.45€ würde wohl gehen. Und der hat dann schon zwei Channel.
      • Einziges Problem am INA2180 ist, dass 26V das Absolute Maximum sind. Das ist mir doch etwas knapp. Und wenn wir nur deshalb nicht die Spannung etwas hoch drehen können, wäre schade.
    • MCU Pinout:
      • 4x ADC ist klar. Da gibt's nur vier von leider.
        • GPIO26..29
      • 1x I2C, PIO, PWM für die Digital-Ausgänge. Eventuell wäre auch SPI TX hilfreich, falls das für WS2812 besser geht als PIO.
        • I2C gibt's alle zwei Pins, abwechselnd I2C0 und I2C1.
        • SPI und UART sind beides 4-er Gruppen, d.h. SPI TX und UART TX bekomme ich nicht beide (oder ich muss es mit zwei Pins verbinden).
          • Andererseits steht WS2812 mit PIO sogar als Beispiel im Datenblatt.
          • UART auch.
        • PWM gibt's quasi überall.
        • PIOs gibt's beide überall und der Start-Offset ist einstellbar.
        • -> GPIO24+25: UART1 RX/TX, I2C0, PWM4
        • Eventuell zusätzlich GPIO23 für SPI0 TX und GPIO18 für SPI0 SCK, aber eigentlich nicht sinnvoll weil langsam. Und CS müsste man über GPIO21 über den Widerstand vom Digital-Eingang treiben. -> Nein, weil sonst habe ich keine Pins für Taster mehr.
      • 2x SBU
        • ebenfalls auf UART1 und wenn möglich I2C0 -> 4+5 oder 8+9
      • 1x I2C auf Stiftleiste für optionales Display.
        • I2C0, d.h. 4*n+0
        • // 8+9, weil da ist PWM4, was wir schon benutzen. -> Nein, da ist SBU.
      • 5x PWM für LEDs.
        • Quasi überall, aber nicht PWM4 nehmen.
      • 2x PWM für Heizung.
      • 1x UART für RS485
        • UART0 nehmen -> 0+1, 12+13, 16+17
        • Erstmal 16+17 und TX_EN auf 15.
      • VBUS_DET? Der Pico hat es an GPIO24 (mit Spannungsteiler), was nicht passt. Der RP2040 Zero hat es nicht. Aber evtl wollen wir USB schlafen legen.
        • GPIO ??
      • 4x Reed / Digital-Eingang
        • Im Prinzip egal wohin, sofern man es nicht anderweitig nutzt.
        • UART RX
        • GPIO20 oder GPIO22 sind Clock Inputs. Das könnte man eventuell als Frequenzzähler nutzen.
        • GPIO19 bis GPIO22: UART1 RX, SPI0 RX
      • Taster-Matrix:
        • Dual-Purpose Ausgänge:
          • TX solange TX_EN nicht gesetzt
          • 5x LED theoretisch aber die ziehen runter und ggf wollen wir die aktiv low treiben; weiß vielleicht?
          • 2x I2C, aber die PU stören vermutlich (wenn mehr als 1 Taster gedrückt) -> Dioden hier oder in der Taster-Matrix sollten helfen
        • GPIO 7, 18, 23
  • Protokoll:

    • Modbus RTU:
      • Viel einfacher wird's nicht, solange man nur die Register-Zugriffe implementiert.
      • Es gibt zwei Python Libraries.
      • CRC sind sinnvoll. Zusätzlich Parity muss ich nicht haben, aber was soll's.
      • Abstand zwischen Nachrichten würde ich evtl nicht nach jeder machen.
      • Die Zusatzfeatures für Diagnose (Event Log) und ID klingen sinnvoll.
    • Baudrate und so:
      • Aufstarten mit Standardeinstellung (19200, 8-E-1)
      • Auto-Baud per Break und dann Zugriff auf Gerät 0x55, wenn man eine andere Baudrate möchte.
      • Mit Adresse 0x55 würde ich dann auch die sonstige Zusatzfeatures machen wie den Broadcast für Auto-Discovery.
    • Auto-Discovery:
      • Ich habe wenig Lust, die Adressen manuell zu verteilen.
      • Simpel: "setze deine Adresse auf xx, falls dein Button gedrückt ist". Das kann ein Schreibzugriff auf ein bestimmtes Register von Broadcast-Gerät 0x55 sein. Adresse wird dann in den Flash geschrieben. Bevor sie eine Adresse im Flash haben, reagieren sie nur auf 0x55.
      • Auto-Discovery ginge auch einfach mit Broadcast und Backoff. Parameter wie Anzahl der Backoff Slots, Seed und die Wahrscheinlichkeit überhaupt zu antworten stehen mit in dem Broadcast. Es gibt eine maximale Zeit und nach der darf nicht mehr geantwortet werden, damit wieder normale Kommunikation möglich ist.
        • Man setzt ein Flag im Device für "ich kenne dich schon". Das deaktiviert Reaktion auf den Broadcast (ggf optional per Flag in dem Broadcast) und erlaubt dem zentralen Controller einen Reset des Geräts festzustellen.
        • Der Vorschlag kam so halb von ChatGPT. Meine Variante wäre eher was in der Art von DS18B20 gewesen, evtl mit mehreren Zeitslots um direkt 4 bit abzufragen.
        • Der Vorteil ist, dass man mit allen Geräten reden kann, ohne sie anzulernen (und man weiß nur nicht, welches wo ist).
        • Die Adresse ist entweder permanent im Flash oder die zentrale Steuerung merkt sich die Chip-ID vom MCU und vergibt die Modbus-Adressen bei jedem Start neu.
  • Non-Features / nicht umgesetzt:

    • USB Host: Der MCU kann es und wäre cool zu haben für Erweiterungen.
      • VBUS EN per P-MOS auf VBUS (und ggf ersetzt der die existierende Diode für die andere Richtung)
      • Die 5.1k PD so mit VBUS EN verbinden, dass die zu PU werden. Es muss aber ein PD dran, damit es sich im Bootloader korrekt als USB Device meldet. Das braucht etwas Kreativität, damit in beiden Fällen der Widerstand im richtigen Bereich liegt. Oder man muss einen Pin finden, den der Bootloader auf low treibt.
      • Problem: Geht auf keinen Fall standardkonform, weil wir nicht genug Strom auf 5V zur Verfügung stellen können.
      • Und wenn man sowieso die 5V extern einspeisen muss, brauche ich auf der Platine nix weiter zu tun.
    • BJT vor den MOSFET, damit man das Gate auf höhere Spannungen bekommt? -> Nein, weil das Gate kann keine 24V.
    • Spulen mit rein zum Motor für langsamere Anstiegszeit / EMV Abstrahlung auf der Zuleitung? -> fxk8y hat sich sehr eindeutig dagegen geäußert.
  • Sonstiges

    • ADC für Strommessung und Option bauen, um wenig Strom auf die Aktoren zu geben (zum Messen)
      • Ich dachte per Widerstand die 5V drauf, aber ne, high-side schalten wir ja gar nicht.
      • Aber per Widerstand die 0V drauf würde gehen.
      • Hm, an sich würde auch reichen, den Strom 1x gemeinsam zu messen und halt kurz den anderen Abschalten zum Messen.
      • Es reicht, wenn ich das für beide gemeinsam anschalte. Dann brauchts nur einen Pin. Auch den habe ich nicht, aber man könnte einen der LED-Pins missbrauchen.
      • Aktuell erwarten wir bei 300 mA eine Spannung von 30 mV. Mit einer Referenz auf 3.0 V und 12-bit ADC sind das: 0.3×0.1/3.0×4096 = 41 counts
      • Das ist nicht toll, aber reicht locker.
      • Wenn ich 10 mA zum Messen drauf gebe, wären das 0.01×0.1/3.3×4096 = 1 count -> nope.
      • Mit OpAmp würde ich das so verstärken, dass wir maximal 0.5 A oder 1 A messen können. Nehmen wir letzteres. Das wäre dann Faktor 30 im OpAmp und wir haben 3.0V / 1 A.
      • Dann wären die 10 mA auch 30x so viel, was konkret 37 counts sind (oben war gerundet).
      • Das klingt voll ok.
      • Für 10 mA muss ich das über 2.4 kOhm mit GND verbinden.
      • Welcher OpAmp kommt in Frage? Wie viel Strom würde der brauchen?
        • OP07C ist anscheinend der einzige OpAmp in Basic Parts. Aber der will mindestens +-3V.
        • Ach ne, Suche war nur doof.
        • LM358D: Wir haben bis zu 30 mV am Eingang normalerweise und 1 mV, wenn wir mit 10 mA messen. Da klingt ein Offset von 2 mV nicht gut.
        • LMV321I: Wenig Supply Current, rail-to-rail, aber auch 2 mV Offset. Grundsätzlich gefällt der mir aber.
        • NE5532DR: Nur 0.5 mV Offset, aber 8 mA Supply.
        • Ok, die anderen sind auch nicht besser.
        • LM324DT hat auch die 2 mV Offset-Voltage - also für unseren Fall ist nix angegeben und wird etwas schlechter sein, aber die Max-Werte sind so wie bei den anderen, die auch 2 mW haben. Und der hat auch weniger Stromverbrauch und ist günstiger durch 4x in einem Package.
        • Ok, die meisten anderen haben 2x im Package und das reicht uns. Aber bezüglich Stromverbrauch und Offset kommen die nicht ran.
        • Oh, Moment... beim MCP6002T ist kein typical Wert angegeben für den Offset und +-4.5 mV maximal ist gar nicht schlecht. Und er hat weniger Power.
        • Dann nehmen wir den.
        • Fun fact: Das untere Ende sind VSS-0.3V, d.h. mit dem hätte man sogar negative Ströme messen können.
      • Ich nehme mal Faktor 60, d.h. funktioniert bis 500 mA. Wenn man mehr will, muss man halt den Shunt tauschen.
    • Wie viel Watt kann ich durch den Widerstand zum Strom messen schicken?
      • Den 0R1 hatte ich schon größer gemacht, aber der ist harmlos wegen der niedrigen Spannung und bei Kurzschluss kann ich nicht viel machen (sofern die Sicherung vor den 24V den nicht rechtzeitig abfängt).
      • Die 2.4 kOhm für die 10 mA Messstrom sind aktuell ein 0402WGF2401TCE. Das WG heißt 1/16 Watt. Es fallen aber 240 mW ab. Upps.
      • In dem Package wäre ok: 24/(1/16)×24 = 9.2 kOhm
      • Das wären 2 mA. Das wären 16 counts am ADC. Nicht so toll. Aber selbst die 0805 haben nur 1/8 W.
      • Dann wird's wohl ein Extended Part mit 1206.
      • Oder auch nicht: Es gibt Basic Parts mit 2k und 4.7k. Wir machen das nicht dauerhaft an und der Motor hat auch noch 100 bis 500 Ohm. Ab 2.3 kOhm passt die Power und wir machen das ja immer nur kurz an. Ich denke, 2k sind ok.
    • Quarz vom MCU:
      • hardware-design-with-rp2040.pdf hat da Infos zu (die aber im Prinzip nur das übliche sind).
      • Relevant ist allerdings, dass sie ggf einen Serienwiderstand empfehlen. Das könnte auch sinnvoll sein zum Strom sparen, vermute ich.
      • Deren Quarz hat ESR 50 Ohm. Ich habe X322512MSB4SI (C9002). Der hat bei 12 Mhz 80 Ohm.
      • Der will nur 20 pF Kapazität. Im PDF haben sie 18 pF als Ziel und tun dafür 27 pF daneben schalten. Hm. Vertraue ich jetzt dem Datenblatt oder dem Pico Schaltplan (und dem RP2040 Zero, die das vermutlich aus dem vom Pico abgemalt haben)?
      • Aber womöglich haben die einen Quarz mit 10 pF Lastkapazität.
      • Dann ändere ich es mal auf 27 pF. Theoretisch würde ich 3 pF mehr brauchen, damit es 20 pF statt 18.5 pF sind, aber nah genug.
      • Mit 27 pF gibt's kein Basic Part. 30 und 33 gibt's. Oder 22 pF. Tjoa, dann eben doch die 30. Ah, ne, gibt doch auch 27 pF. Die hat nur die Suche nicht gefunden.
    • Ich würde ja gerne Netzklassen einstellen, aber Kicad meint, er hätte kein Projekt.
    • Kühlfahne vom 5V Regulator und wie viel Power fällt da ab? Passt das eigentlich?
      • Oh, die 100 mA aus der Beschreibung sind Absolute Max. In echt kann er 70 mA - theoretisch.
      • SOT-89 kann 350 mW, d.h. 0.35/(24−5) = 18 mA. Mist.
      • Ok, dann ist doch etwas mehr relevant, wie viel Strom ich eigentlich brauche.
      • WS2811 ein paar mA und 2x 17.5 mA für die LEDs. Betriebsstrom steht leider nicht drin.
      • TMP102 war wenig. Rechnen wir mal 1 mA.
      • OpAmp war auch unter 1 mA.
      • MCU und Flash: Der Pico braucht 90 mA unter Last (Video) und 10 mA im Bootloader. Wir sind vermutlich eher so bei 10-30 mA, denke ich.
      • zweiter LDO: 1 mA?
      • PU auf I2C: 3 mA
      • MAX3485: 4 mA, aber 250 mA kann er auf den Bus treiben
      • Summe (Worst Case): 37+1+1+90+1+3+4+250 = 387 mA
      • Realistisch: 37+1+1+20+1+3+4+14 = 81 mA
      • Ich mache mir dann doch mal über einen DCDC Gedanken...
    • DCDC auswählen:
      • https://jlcpcb.com/parts/2nd/Power_Supply_Chip/DC-DC_Converters_154
      • Es gibt ein paar Basic Parts.
      • TPS54331 kann nur 28V.
      • XL1509 könnte gehen, aber nur 150 kHz.
      • TPS5430 könnte gehen.
      • MC34063 könnte gehen, aber nur 100 kHz.
      • Mit dem TPS5430 und 30V am Eingang bräuchte ich mindestens 92 uH und vermutlich müsste ich es dann auf die 3 A auslegen, damit er bei Überlast nicht die Spule killt (oder direkt im ersten Cycle).
      • Ich schaue mal bei Extended Parts, weil die Spule ist auch nicht Basic, d.h. beim IC sparen und dafür Spule teuer wäre doof.
      • So richtig viel tolles gibt's nicht oder ist direkt teuer. Das hier hilft sehr: https://yaqwsx.github.io/jlcparts/#/
      • TX4144 sieht ok aus. Google mag das Datenblatt nicht übersetzen, aber DeepL schon.
      • Die Formel ist wie bei TPS5430, aber sie nehmen 0.3 statt 0.2 als K_Ind und der hat halt nur 1.5 A. Damit komme ich auf 20 uH. Ihr Beispiel hat 33 uH und geht bis 60V.
      • Und der Rated Current für die Spule soll sein: 1.5A + 0.3*1.5A/2
      • Davon gibts viele und billig, z.B. https://www.lcsc.com/product-detail/Power-Inductors_cjiangChangjiang-Microelectronics-Tech-cjiangChangjiang-Microelectronics-Tech-FNR6045S220MT_C168080.html
      • Der TX4144 kostet 24ct, aber man muss mindestens 5 kaufen. Ist ok. -> Ah, ne, MOQ ist nur bei LCSC. Auch gut.
      • Als Kondensator würde der hier gehen: https://www.lcsc.com/product-detail/Aluminum-Electrolytic-Capacitors---SMD_KNSCHA-KNSCHA-RVT220UF16V67RV0015_C2887273.html (Den am Eingang spare ich mir, weil da ist schon einer.)
      • Ich bleibe bei der SMA Diode. Wird schon reichen, weil wir nutzen den Strom ja nicht voll aus.
      • Tja, trotzdem keine Chance, dass das passt. Dann muss es wohl ein aufgestecktes Board werden.
      • Auf der Basisplatine Stiftleisten (am besten die dreipoligen noch mal nutzen). In der ersten Variante Buchsenleisten am Aufsteckboard, später direkt anlöten.
      • Ja, äh, definitiv die dreipoligen, weil einpolig gibt's nur in gewinkelt und zweipolig in wenig Stock, gewinkelt oder SMD+teuer.
      • Oder ich löte die einfach per Hand ein.
      • Falls der Preis meiner Platine in Richtung 1€ geht, sollte ich erwägen, die üblichen LM2596 Platinen von Ali einzubauen (rein legen, Kabel anlöten).
      • 6ct Spule, 20ct DCDC, 3ct Elko, 7ct Diode
      • Immerhin ein Vorteil: Falls der DCDC nicht gut ist, kann ich das noch korrigieren.
      • 42€ für 30pcs. Nicht toll, aber ist ok. Wenn ich die Widerstände aus Basic Parts basteln würde, wäre es 6€ weniger.
      • Wie heiß wird der DCDC eigenntlich? Graph im Datenblatt sagt 89% für 5V+1.5A bei 25V am Eingang. 5×1.5×(1−0.89) = 825 mW. Klingt ok für verteil auf das Board.
    • Wie viel Strom nach extern geben?
      • Wir haben jetzt quasi 1.5A zur Verfügung, von denen wir 0.5 A intern brauchen.
      • Auf den 24V ziehen wir dabei (Annahme 80% Effizienz): 5×1.5/24/0.8 = 0.4 A
      • Die 24V habe ich mit 1.1A abgesichert aktuell. Geht da mehr?
        • //1.35 A gäbe es für ein paar ct mehr.
        • Nein, die andere waren 5ct - das sind 24ct. Es ist nur 2 ct teurer als eine davon. Aber warum findet er grad die von vorher nicht..?
      • 0.4 A für den DCDC plus 2x 500 mA wäre sinnvoll.
      • A72-185 mit 72V und 1.85 A. Die ist 18mm breit und Pitch 5.1 mm. Der Pitch passt, aber die alte war nur 14 mm, d.h. man kann sie dann nicht oder nur schwieriger an dem Wannenstecker vorbei biegen. Egal.
      • 3.3V: Der RT9013 kann max 500 mA und 0.4W in SOT-23-5. Also effektiv 235 mA. Die brauchen wir theoretisch schon komplett für den RS485, aber wenn der bei Kurzschluss auf dem Bus abschaltet, ist schon ok. Thermal Shutdown hat er.
      • Dann würde ich dem Display-Board mal 100 mA geben auf den 3.3V.
      • 5V: Wir haben 1.5 A und brauchen bis zu 400 mA. Wobei ich auch hier den RS485-Kurzschluss rauslassen würde, d.h. sagen wir 200 mA. Plus die 100 mA, die wir oben auf den 3.3V erlaubt haben. Also je 600 mA zum Display und nach extern? Etwas weniger vielleicht wegen der Diode.
      • Ne 100 mA Sicherung finde ich grad weder über die JLC filter noch über das Github-Parts Ding?!
      • Aber es gibt JK-SMD0603-010 (C369142), was ich anhand des Part-Namen der vorherigen gefunden habe. Hmpf.
      • Per Suche nach 100 mA findet man sie und da finde ich auch eine für 500 mA: BSMD0805-050-24V (C910822). Also noch viele mehr, aber 0603 hat nur 6V und bei 0805 kostet die mit 24V statt 15V nur 1ct mehr.
    • DS18B20 mit Parasite Power braucht einen umschaltbaren Pullup (danke an fxk8y für den Hinweis). Da wir 5V auf den Klemmen haben und kein längeres Kabel zum Sensor erwarten, lassen wir das weg, weil man kann einfach richtige Power anklemmen.
    • Strommessung im abgeschalteten Zustand erlaubt auch Erkennung von Open und Short (danke fxk8y für die Idee).
      • Einerseits als Debug-Hilfsmittel, z.B. Kabelbruch melden.
      • Bei der Inbetriebnahme kann er selbst erkennen, ob was dran hängt.
      • Vor dem Einschalten könnte man einmal kurz messen und bei Kurzschluss nicht einschalten. Eventuell tun wir das implizit, wenn wir den Widerstand regeln (d.h. wir messen sowieso und würden dann nicht anschalten), aber explizit vorsehen könnte sinnvoll sein.
    • Texte klein machen: sed '/fp_text reference/,/size\|^\s)/ s/(size 1 1)/(size 0.6 0.6)/' -i c3pb-heizung.kicad_pcb
    • Testpunkte nicht im BOM: sed '/(symbol (lib_id "Connector:TestPoint_Probe")/,/(in_bom \|^\s)/ s/(in_bom yes)/(in_bom no)/' -i *.kicad_sch
    • Wenn JLC bei F3 meckert wegen "repeated coordinate", dann "exclude from position files" anschalten für die DNP Widerstände.
    • Touch per I2C?
    • IDC auf dem Display-Board:
      • Wir verlieren sehr viel Platz, wenn wir den komplett neben das OLED setzen.
      • Unser PCB hat vermutlich 1.6mm. Das vom OLED hat 1.2mm. Dieser hier hat 2.7mm lange Beinchen, d.h. die gehen um 0.1mm gerade so nicht durch, wenn man erst das OLED einlötet und den dann drauf: C429962
      • Das ist praktisch, weil wir wollen die oben sowieso nicht überstehen haben eigentlich (oder zumindest nicht mehr als die 0.28 mm, die der Unterteil vom WS2812C-2020 dick ist).
      • Damit kann ich die innere Kante von dem Touch-Ring auf 21 mm setzen statt 23 mm (bzw. in beiden Fällen kommt ggf doch noch mehr Abstand dazu).
      • Der Stecker kollidiert mit der einen Schraube. Ich denke, man kann ihn passend "bearbeiten", aber vermutlich lässt man eher diese Schraube weg.
    • Passt eigentlich die Vbr von der Schottky? -> Ja, 100V.
    • Display-Board:
      • OLED mit SSD1306
        • OLED als Board kaufen oder irgendwie anders auf eigene Platine? -> Nicht gut ohne Breakout kaufbar und Breakout hat noch diverse Kondensatoren und so. Ich würd's einfach von unten an mein PCB löten.
        • Es scheint ein altes und ein neues zu geben. Das neue ist kleiner.
        • Ich nehme trotzdem das alte, weil das ist der einzige Artikel, wo Maße dran stehen: Link
      • Taster per Matrix oder I2C
      • Noch ein TMP102 (andere Adresse!)
      • eventuell eine LED
      • Mehr fancy:
        • Ring aus LEDs um das OLED (mit in den Deckel gefrästen Löchern) und damit Soll-Temperatur grob anzeigen. Scala aus Papier oder so drum kleben.
        • Touch-IC, z.B. MPR121 mit Touch-Flächen um das OLED.
        • Man tippt 1 sec auf die gewünschte Temperatur und dann nimmt er die.
        • Wischgesten hoch/runter rechts und links vom Display, etc.
        • Taster und OLED trotzdem (Fallback)
        • Buzzer?
      • WS2812-2020 Ring, WorldSemi, die 2020 wegen Qualität (sagt fxk8y)
        • WS2812C-2020-V1 klingt gut, weil macht 5 mA pro LED und wir wollen anzeigen, nicht beleuchten
        • bestücken per Hand, sofern doppelseitig zu teuer ist, weil die brauchen einen Kondensator und die Platine soll abseits der LEDs flächig am PVC anliegen
        • Anschließen an den Pin der weißen LED. Spannungswandlung auf 5V nicht vergessen (oder das schon auf dem Main PCB machen, weil MOSFET ist ein Extended Part).
        • Basiskosten sind $11.50 für normal PCBA, $38 für PCBA Standard statt Economic (was für diese WS2812 nötig ist) und $71 für beidseitig.
        • Ich könnte versuchen, alles auf die Vorderseite zu packen, weil die Basis vom WS2812 ist 0.28 mm hoch, d.h. ein Kondensator daneben könnte gehen.
          • Oder auch nicht: Grad habe ich C1525 gewählt und der hat "Thickness Code" 5, d.h. 0.5 mm. Und auch mit anderer Spannungsfestigkeit gibt's den nicht dünner.
          • Theoretisch könnte 0201 gehen, aber in 100 nF haben die meisten nur 6.3 V und JLC hat von keinem davon 600 pcs auf Lager.
          • (Ich dachte gerade noch "das OLED ist aber dicker", aber das dessen Platine kommt unter meine und für das Display brauchen wir ein Loch, was dann vermutlich größer sein muss als nur der aktive Bereich.)
      • Touch mit MPR121.
        • Einen der Matrix-In Pins stattdessen als IRQ nutzen.
        • Eventuell einen dedizierten LDO vor das IC setzen für weniger Noise.
      • Anschlussplan des Haupt-PCB mit ins Silk von der Display-Platine.
      • WS2811 mit ans Ende vom Ring beim Display und den mit an die Matrix hängen. Oder das Ende vom Ring mit an die Matrix und man weiß ja grob, wann man die WS2812 Signale da erwartet. So oder so per Diode, so dass es nur runter ziehen kann. Hm, und plus MOSFET oder so, weil nur wenn selektiert.
        • Eigentlich kann es mit an den Open-Drain IRQ Ausgang vom MPR121 (per Diode).
      • 2x MPR121 ?
      • Schrauben vom OLED bis durchs PVC. Die können auch Touch-Flächen werden.
      • Touch:
        • Der MPR kann auch eine Matrix: https://www.nxp.com/docs/en/application-note/AN4600.pdf
        • Aber ein Grid aus 4x4 mm (oder was Äquivalentes in rund) bekommen wir wohl eher nicht hin.
        • Die empfohlenen 0.3 mm Cover für eine Matrix werden wir deutlich überschreiten, weil der WS2812 ist schon 0.28 mm und dann kommt noch das PVC.
        • Unser Ring hat 33-21 = 12 mm Breite. Das wären also drei oder vier Ringe als Matrix.
        • Die mittlere Länge des Rings ist 227pi = 170 mm. Das wäre 42 Flächen.
        • Wenn wir zwei MPR verbauen und 2x2 für die Schrauben nehmen und vier Ringe, bleiben uns noch 24-4-4 = 16 Ring-Segmente. Oder 15, damit es zu den LEDs passt.
        • Wenn ich die Schrauben mit in die Matrix aufnehme, brauche ich definitiv vier Ringe, aber nur eine Leitung dafür.
          • Dann darf ich die Leitung nicht an die Schraube führen, sondern per Kondensator koppeln, denke ich. Weil eigentlich brauche ich zwei Touch-Flächen für die Matrix.
        • Ich bin mir unsicher, ob das wohl klug ist, zwei MPR an dieselbe Matrix zu hängen. Die werden sich vermutlich stören beim Scannen.
        • Nächster Plan: obere und untere Hälfte komplett trennen. Nur damit sind wir dann bei 4 Pins für innen/außen (und ggf Schrauben) und 8 Segmente. Ich täte dann bei dem einen ein Segment weglassen, weil 60/(7+8) passt besser als 60/(8+8).
        • Noch ne Idee: Ideal wäre ja 6x6 Matrix. Den Ring vierteln und da je 3 Ring-Abschnitte für innen/außen machen. Die beiden Viertel, die zu einem MPR gehören, bekommen je 6 Sektoren, wobei da an einem Pin dann zwei Sektoren aus verschiedenen Vierteln hängen. Das wären dann insgesamt 24 Sektoren.
          • Nachteil: Das bricht komplett zusammen bei Multitouch. Das tut eine Matrix ggf sowieso ein wenig, aber zumindest weiß ich immer den Sektor.
        • Ok, also 3 Ringe innen/außen und 8 bzw. 7 Segmente pro Hälfte. Dann habe ich dedizierte Leitungen für 3 der vier Schrauben.
        • Bei den Schrauben würde ich einen Widerstand (und ggf Kondensator) mit in die Leitung hängen. Ich glaube das stand zwar beim TS20 wegen ESD, aber ist hier vermutlich auch ganz sinnvoll, auch wenn es die Sensitivität senkt - was bei den Schrauben egal sein dürfte.
          • Die ELE Pins haben selbst schon bis zu 15 pF und sie treiben einen Strom, d.h. ein sinnvoller Widerstand dürft komplett nix ändern.
          • TS20 empfiehlt unter 50 pF und 200 bis 1000 Ohm.
      • Wie designed ich die Touch-Flächen? Die müssen ja entlang eines Kreises.
        • Grundsätzlich sollte es werden wie Figure 3 hier: https://www.nxp.com/docs/en/application-note/AN4600.pdf
        • Da steht später übrigens auch C-Code drin für die Auswertung.
        • Ich muss das "nur" entlang eines Kreises legen und meine Flächen werden vermutlich etwas platt gedrückt, weil ich radial weniger Platz habe pro Segment als entlang des Kreises.
        • Ich würde die Sektoren (nennen wir sie mal Spalten) etwas größer machen, weil zur Not reicht mir, wenn die funktionieren.
        • Ich designe mal einen Sektor in FreeCAD und hoffe, dass ich den dann nach Kicad bekomme.
        • Maße:
          • 3 Ringe von 21 mm innen bis 33 mm außen
            • Das war der Plan. Wie viel genau mit dem aktuellen Design (so dass man nur an wenigen Stellen die Polygone anpassen muss für Abstand zu anderen Dingen)?
            • Abstand von den 33 mm zum Via neben den WS2812 ist aktuell 0.7 mm.
            • Ein Ring mit 20.6 mm berührt den oberen MPR und unten links einen Widerstand (den ich aber schieben kann). Aber diverse Leitungen gehen bis fast zur 21 mm.
            • Nun gut, ich belasse es mal bei den Werte und wenn das Polygone werden in Kicad, stelle ich die auf Clearance 1 mm.
              • Oder auch nicht, weil dann wären sie ja auch 1 mm voneinander entfernt.
          • 15 Sektoren, d.h. 24 Grad pro Sektor.
          • Die App-Note empfiehlt grob 4x4 mm, aber wenn wir interpolieren wollen, muss es eine Raute über die komplette Breite sein.
          • Bezogen auf den Sektor nach oben: Die Zeilen haben links und rechts ein halbes Feld (das dann mit dem Nachbarn kombiniert wird) und die Spalte startet unten und oben mit einem halben Feld. Das ist dann wie das Layout in der App-Note.
          • Abstand zwischen den Flächen ist 0.5 mm.
          • Der Sektor ist oben 14 mm breit.
        • (Hmpf, ich hab mir in Kicad angewöhnt, immer direkt Esc zu drücken, wenn es nicht tut, was es soll. Das ist in FreeCAD unpraktisch, weil schließt den Sketch.)
        • Im ersten Sketch habe ich den Gap nach links/rechts, d.h. zum nächsten Sektor vergessen. Upps.
        • Ich habe jetzt die Variante gemacht, wo die Zeilen sich mit der Spitze berühren. Aber eigentlich wollte ich ja die Spalten bevorzugen und da die anderen Leitungen auf der Rückseite entlang des Kreise laufen, wäre es praktisch, wenn die Wires zum Verbinden der Segmente das auch tun.
        • So, jetzt ist's anders herum. Ich vermute, eigentlich würde man es so machen, dass sich von beiden die Spitzen nicht berühren, sondern dass da eine Hilfslinie läuft und alle Flächen sind gleich weit davon entfernt. Aber ich wollte ja die Spalten-Flächen bevorzugen.
        • So, dann noch kleine Korrektur: Die Zeilen-Flächen aus zwei Hälften ist nicht gut, aber ich kann ja quasi die rechte Hälfte direkt links dran kleben.
        • Wie nach Kicad?
          • StepUp wäre evtl eine Option, aber keine Lust mich da jetzt reinzuarbeiten.
          • https://forum.kicad.info/t/circle-segment-shaped-pad-error-custom-pad-shape-must-resolve-to-a-single-polygon/40847/2
            • Korrigierter Code: " ".join([("(xy " + " ".join([str(round(v, 3)) for v in line.StartPoint][0:2]) + ") ") for i, line in enumerate(ActiveSketch.Geometry) if not ActiveSketch.getConstruction(i)])
            • Aus jedem ein NPTH machen funktioniert ganz ok: (pad "" np_thru_hole circle (at 0 27) (size 0.2 0.2) (drill 0.762) (layers F&B.Cu *.Mask) (tstamp 8aea934d-50d1-459d-8ff6-21a24e0864e7))
            • Ein paar Punkte fehlten, aber man sieht in der Python-Console die Koordinate, wenn man einen selektiert.
          • Das funktioniert, aber tut den Arc mit Linien approximieren. Gut genug.
            • Wobei in der Datei steht sogar der (arc) als Teil des Pads noch drin, aber ich meine in der GUI wären es Punkte gewesen.
          • Es könnte cool sein, die oberste und unterste Fläche wegzulassen bzw. nur die geraden Linien davon und den Rest per Polygon, damit es sich automatisch anpasst. Durch die Linien wird es dann hoffentlich so, dass es die Clearance nicht zu den benachbarten Flächen einhält.
      • Randnotiz: Kicad kann jetzt Kreisbögen in Tracks, aber es gibt kein direktes UI dafür. Es geht mit Fillet Tracks oder Routing Modus per CTRL+/ umschalten. Aber der beste Weg für ganz gezielte Bögen ist, sie als grafischen Bogen auf dem Cu Layer zu zeichnen und dann "Create from Selection -> Tracks". Einzige Falle dabei ist, dass man das grafische Element noch löschen muss, bevor man das andere sinnvoll selektieren kann.
    • Buzzer
      • Ich mag die eigentlich nicht, aber leises Piepsen als User-Feedback scheint durchaus eine gute Idee zu sein.
      • Einziges Problem: Der ist echt groß.
      • Wenn es so gar nicht passt, notfalls über andere Bauteile und manuell einlöten.
      • Ich würde den an die rote LED hängen, weil abseits von User-Input dürfte die Nutzung gewisse Ähnlichkeiten aufweisen.
      • Theoretisch kann ich den direkt an einen MCU Pin hängen, aber praktisch steuert man die wohl besser mit einem echten Rechteck an, d.h. positiv und negativ, weil das ist ein Kondensator.
      • Das geht relativ einfach: https://www.mikrocontroller.net/topic/520259#6725889 https://www.mikrocontroller.net/attachment/380125/piezo-circuits.pdf
      • Direkt oberhalb vom Elko und schräg einlöten. Mit 15 mm Beinchen oder so und nur 12 mm Durchmesser sollte das wohl gehen.
    • VCC ist im Board plötzlich durch +3.3V ersetzt und wenn ich das ändere, macht er's beim Board-Update wieder so.
      • 74LVC2G04 hat den Power-Pin VCC genannt und den habe ich auf 3.3V gelegt.
      • Uff! Das ist ne böse Falle!
      • Und... dann muss ich jetzt echt mein VCC umbenennen?
  • Review:

    • Hatte ich nicht eigentlich einen SPxxx als RS485 Transceiver ausgesucht? Aber der MAX3485AEASA+T hat ESD-Schutz und 20 Mbit.
      • //Oh, und er kann 128 Geräte am Bus. Das ist praktisch!
      • Nein, kann die Variante nicht. Meh. MAX3485AEASA vs. MAX3490AEGSA. Letzterer kostet 6€ und ist nicht verfügbar.
      • Dann teilen wir lieber die Busse wenn nötig.
    • Mal alle Footprints und Symbols durchgehen, die ich selbst gebaut habe. -> Scheint alles zu passen.
  • Das mit dem Export für JLC hatte ich schon mal in besser gesehen mit Zusatztools, also insbesondere Rotation korrigieren.

  • Bekomme ich den KF250T doch in 3D? Angeblich kann KiBot das von EasyEDA laden (aber ggf nur für Blender)?

  • Package vom WS2811: LCSC sagt SOP-8, ich habe SOIC-8. Die Maße passen aber.

  • Von LCSC separat bestellen - erledigt:

    • KF250T (weil bei JLCPCB nicht genug verfügbar und ist sinnvoll, die Platine erst zu testen) KF250T-5.0-2*13P
    • Material für 10-polige Flachbandkabel
      • 20x IDC crimp
      • Kabel scheinen sie nicht zu haben bzw. finde ich nicht, aber müsste ich noch haben.
    • 10-poliger IDC: 12x IDC 2x05
    • Eventuell Schrauben für Displayplatine an Gehäuse
      • 1mm Plastik (sehr grob geschätzt), 0.28 mm WS2812 Basis, 1.6 mm PCB, 1.0 mm OLED PCB, 1.75 Mutter, 2x0.45 sollte rausstehen -> 6.53 mm
      • 50x M2.5 mit Federring
      • //oder M2 normal -> das ist M2, d.h. dann andere Muttern!
      • 50x M2.5 Mutter (nicht die günstigste, aber sieht besser aus bzgl. Qualität)
    • 30x PS1240P02BT (C76871)
    • Eventuell Kabelbinder
    • Auch einmal in die dedizierten BOMs schauen, die KiBot dafür jetzt generiert.
  • Beim Bestellen:

    • Auf Rotation der Komponenten achten! Die sind nicht alle richtig, aber kann man bei JLC im Online-Editor noch drehen.
      • Ist eventuell schon durch KiBot behoben.
    • Wannenstecker und Stiftleisten sizten falsch. Kicad hat den Ursprung auf Pin 1, JLC legt die Mitte auf den Ursprung. -> Behoben durch modifizierten Footprint.
    • Rechnungsadresse passend einstellen.
  • Fräsen: User.4 layer, DXF wird automatisch exportiert, siehe README

  • TODO:

    • bestellen
  • TODO später: