Ich habe eine Leiterplatte für die Kleinserienfertigung entworfen; Derzeit löte ich sie in Chargen von 20 Stück von Hand. Diese Platine verwendet einen ATMEGA168-Mikrocontroller, den ich vor dem Löten auf die Platine programmiere - diese Methode funktioniert im Moment gut für mich.
Ich habe vor, eine Charge von 200 Boards für mich herstellen und montieren zu lassen, da das von mir entworfene Produkt ziemlich beliebt zu sein scheint. Wäre es besser, entweder einen ICSP-Header auf die Platine zu integrieren oder die ICs weiterhin selbst vorzuprogrammieren? Die Neuprogrammierung der Platine nach der Herstellung oder Montage ist keine beabsichtigte oder erforderliche Funktion.
Ich bin mir nicht sicher, wie das in einer größeren Produktionsumgebung gemacht wird? Das Hinzufügen eines ICSP-Headers würde die Herstellungskosten leicht erhöhen, ist die Vorprogrammierung also eine Standardpraxis?
Ich würde vorschlagen, immer einen Header in dieser Menge (klein) einzufügen. Wenn Sie zu größeren Mengen kommen, können Sie Pads für Pogo-Pins in Betracht ziehen (Sie müssten eine Halterung herstellen, um die PCB in Ausrichtung zu halten) oder in Ihren Mengen eines der Tag Connect-Kabel verwenden , die nur Löcher benötigen und unbestückt sind Pads (sie rasten auf der Platine ein).
Dies ermöglicht Ihnen nicht nur, sich von der Notwendigkeit einer Programmieraktualisierung zu erholen, sondern ermöglicht es Ihnen auch, die Platinen vor der Programmierung von einem Montagehaus bestücken zu lassen, was die Logistik verbessern könnte.
Vorprogrammierung ist sicherlich eine Option, auch in Produktionsmengen (Sie können dies sogar vom Händler für Sie erledigen lassen), scheint jedoch hauptsächlich in den einfachsten Anwendungen verwendet zu werden. Gewöhnlich werden Chips auf Platinen nach dem Zusammenbau programmiert (oder können programmiert werden).
Wenn Sie Platz für einen Header haben, ist dies wahrscheinlich die beste Option, und die leicht versetzten Stifte, die Majenko empfiehlt, sind eine gute Möglichkeit, einen Steckverbinder an Ort und Stelle zu halten, ohne die Komplexität zu erhöhen.
Aber hier ist ein alternativer Ansatz für Boards, bei denen Sie keinen Platz für einen Header haben oder der Standard-Header nicht alle Ihre Programmier-/Setup-/Board-Testaufgaben erfüllt.
Bei einer Leiterplatte mit kleinem Formfaktor wie hier (33 mm Durchmesser)
Sie können es mit Testpunkten belegen (auf der Rückseite beschriftet)
und erstellen Sie eine Testvorrichtung dafür (mit Pogo Pins )
Dies erfordert eine gewisse Bearbeitungsfähigkeit und mindestens einen Säulenbohrer (weil die Pogo-Stifte genau vertikal sein müssen). Wenn Sie jedoch bereit sind, eine Prototyp-Leiterplatte zu riskieren, können Sie sie an eine Materialbahn klemmen und durch die Testpunktlöcher "stellen", um die Pogo-Stifte genau an der richtigen Stelle zu platzieren. (Ich bekomme 10 PCBs für einen lächerlich niedrigen Preis von Itead, also ist es keine große Sache, eine zu verlieren).
Mit einer Drehbank und Fräse ist es ein Kinderspiel, die Säulen und Klemmen herzustellen, um die Leiterplatte genau an der richtigen Stelle zu platzieren, aber mit einfacheren Werkzeugen ist es nicht allzu schwierig.
Dann bestücken Sie einfach jede Leiterplatte, programmieren und testen sie. Der lose Stecker geht normalerweise zu Header-Pins auf einem TI Launchpad, das zum Programmieren dieser MPU (TI MSP430) über die SBW-Schnittstelle verwendet wird, aber das gleiche Prinzip würde für JTAG oder andere Schnittstellen gelten. (Das braune Kabel oben ist ein Koaxialkabel, das ein Kalibrierungssignal zu einem Frequenzzähler überträgt).
Der Sockel aus poliertem Mahagoni ist optional; Ich bevorzuge einfach einen Steampunk-Stil für meine Testvorrichtungen.
Ich füge immer Platz für einen ICSP-Header hinzu, auch wenn er nicht ausgefüllt ist. Ich habe im Moment drei Möglichkeiten, dies je nach Situation zu tun.
Eines meiner Designs hat einen Stift mit sehr feinem Raster, für den ich einen Adapter gebaut habe (0,6 mm Vollkerndraht ist perfekt dafür):
Ich verwende diesen Anschluss, wenn der Platz knapp ist. (Entschuldigung, es ist verschwommen, die Kamera meines Telefons ist naff).
Die zweite Anordnung, die ich oft verwende, besteht darin, den ICSP in einen anderen Header einzufügen. Wenn die ICSP-Pins auch als GPIO-Pins verwendet werden können und Sie sie mit einer lösbaren Verbindung verwenden können, ist es einfach genug, alle anderen ICSP-Verbindungen, die Sie möglicherweise benötigen (z. B. MCLR), zu minimalen Kosten hinzuzufügen. Dann stecken Sie einfach Ihren Programmierer mit einem Adapter, der einfach genug zu machen sein sollte, in diesen Header.
Der dritte Weg besteht darin, einen "gestaffelten" oder "versetzten" Header-Footprint für ICSP bereitzustellen. Ich verwende dies hauptsächlich auf Entwicklungsboards, auf denen der Endbenutzer vielleicht ICSP machen möchte, aber sein Board nicht ruinieren möchte, indem er einen Header dauerhaft einlötet. Diese Grundfläche ermöglicht es einem Standard-Header, ohne Lötmittel einzustecken und einen guten festen Kontakt herzustellen:
Wenn Sie anfangen, mit viel größeren Mengen zu handeln, kann es sicherlich kostengünstiger sein, den Chiphersteller zu bitten, die Chips für Sie mit Ihrer Firmware vorzuprogrammieren. Ich denke, alle großen Hersteller bieten diese Möglichkeit an.
Wenn man einen Prozessor verwendet, der in der Schaltung neu programmiert werden kann, würde ich dringend empfehlen, die Platinen so zu gestalten, dass sie verwendet werden können, selbst wenn die tatsächliche Verwendung der Funktion den Bau eines Geräts für diesen speziellen Zweck erfordern würde und man dies tut Planen Sie nicht, einen zu bauen. Wenn nach der Herstellung einer großen Charge von Platinen ein Firmware-Problem entdeckt wird, kann der Bau einer Vorrichtung, die diese Platinen neu programmieren kann, viel billiger sein, als sie zu überarbeiten oder neu zu bauen.
In einigen Fällen kann es ein guter Ansatz sein, das E/A-Layout einer Platine so auszuwählen, dass die für die In-Circuit-Neuprogrammierung erforderlichen Controller-Pins für Zwecke verwendet werden, die "natürlich" dazu führen, dass sie leicht zugänglichen Kontaktpunkten ausgesetzt sind. Beispielsweise könnten bei einer Platine, die für die Verwendung mit Metallkuppelkontakten ausgelegt ist, die Kontakte selbst mit den In-Circuit-Programmierstiften verdrahtet sein. Ein solches Design würde keinen Platz im Layout für einen Programmierstecker erfordern, sondern – insbesondere wenn der Batteriekontakt auch allgemein bemessen wäre – ermöglichen, dass ein Programmierstecker mit einfachen federbelasteten Kontakten auskommt.
Beachten Sie, dass es nicht unbedingt wichtig ist, ob der Code gut getestet zu sein scheint; Änderungen von einer Charge Chips zur nächsten können immer noch unerwartete Probleme verursachen. Zum Beispiel entwarf ich ein Produkt, das sich unter Prozessorsteuerung selbst ausschalten sollte, indem der Prozessor an einem Pin "high" ausgab, wenn es "an" sein sollte. Bei der ersten Charge von 10.000 Einheiten funktionierte alles einwandfrei, aber bei einer späteren Charge begann der Prozessor zu versagen, wenn seine Spannung etwa 2 Volt erreichte, und konnte diesen Pin wieder auf "hoch" schalten; Der 2-Volt-Ausgang "high" reichte kaum aus, um das Gerät wieder einzuschalten. Da der Prozessor so spezifiziert wurde, dass er bis zu IIRC 1,6 Volt im Ruhemodus bleibt, Es war möglich, das Problem zu beheben, indem die Einheiten neu programmiert wurden, sodass sie beim Aktivieren des Abschaltzustands in den Schlafmodus wechseln würden. Wäre eine solche Neuprogrammierung nicht möglich gewesen, wäre eine viel teurere Nacharbeit (oder auch Verschrottung und Neuaufbau) erforderlich gewesen.
edcs
Ben Jackson