KiCad 51 – SMD print laten maken met BOM
In vorige hoofdstukken heb je een printplaat gemaakt, en een export gemaakt naar GERBER bestanden, wil je een SMD printplaat laten fabriceren inclusief componenten, dan komt er ook een BOM (Bill Of Materials = Lijst met te gebruiken onderdelen) en XY POS bestand bij.
Stap 1
Om de BOM te genereren kan je de optie in het menu van de PCB editor openen, maar deze BOM is te algemeen en geeft weinig informatie, om een goede BOM te genereren kan je in de schema editor in het menu een optie vinden onder “Tools > Generate Bill of Materials”:
Daarin vind je een scala aan “plugins” om BOMs te genereren, een betere optie is deze gekozen generator omdat hierin veel informatie staat wat in het schema is opgenomen:
Ps. De plugins genereren een bestand zonder extensie (bijv. .csv) in de werkmap van het project, je kan veelal dit bestand een .csv extensie geven.
De inhoud van een BOM lijst ziet er bijvoorbeeld zo uit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
"Source:","C:\SCHEMA\SCHEMA.sch" "Date:","18-8-2019 14:06:40" "Tool:","Eeschema (5.1.2)-2" "Generator:","C:\Program Files\KiCad\bin\scripting\plugins/bom_csv_grouped_by_value_with_fp.py" "Component Count:","20" "Ref","Qnty","Value","Cmp name","Footprint","Description","Vendor" "C1, C2, ","2","4.7uf","C","Capacitors_SMD:C_0603","Unpolarized capacitor","" "C3, ","1","1uf","C","Capacitors_SMD:C_0603","Unpolarized capacitor","" "C4, ","1","0.1uf","C","Capacitors_SMD:C_0603","Unpolarized capacitor","" "D1, ","1","Red LED (TX)","LED","LEDs:LED_0603","Light emitting diode","" "D2, ","1","Red LED (RX)","LED","LEDs:LED_0603","Light emitting diode","" "F1, ","1","1A PPTC PolySwitch","Fuse","Fuse_Holders_and_Fuses:Fuse_SMD1206_Wave","Fuse","" "J1, ","1","USB_B","USB_B","Connectors:USB_B","USB Type B connector","" "J2, ","1","Screw_Terminal_01x03","Screw_Terminal_01x03","TerminalBlocks_Phoenix:TerminalBlock_Phoenix_MPT-2.54mm_3pol","Generic screw terminal, single row, 01x03, script generated (kicad-library-utils/schlib/autogen/connector/)","" "R1, R3, R2, ","3","4.7K","R","Resistors_SMD:R_0603","Resistor","" "R4, ","1","120","R","Resistors_SMD:R_0603","Resistor","" "R5, R6, ","2","220","R","Resistors_SMD:R_0603","Resistor","" "TVS3, TVS2, TVS1, ","3","P6KE6","D_TVS","Diodes_SMD:D_SMB","Bidirectional transient-voltage-suppression diode","" "U1, ","1","CP2104","CP2104","Housings_DFN_QFN:QFN-24-1EP_4x4mm_Pitch0.5mm","Single-Chip USB-to-UART Bridge, USB 2.0 Full-Speed, 2Mbps UART, QFN package","" "U2, ","1","MAX485E","MAX485E","Package_SO:SOP-8_3.76x4.96mm_P1.27mm","Half duplex RS-485/RS-422, 2.5 Mbps, Ā±15kV electro-static discharge (ESD) protection, no slew-rate, no low-power shutdown, with receiver/driver enable, 32 receiver drive kapacitity, DIP-8 and SOIC-8","" |
Stap 2
Om een PCB fabrikant de componenten op de print te laten zetten, heeft diegene een coƶrdinatenlijst nodig waar de componenten in YX vermeld staan, zodat de pick and place machine deze op de juiste plek op de print kan plaatsen.
In de PCB editor ga naar “Bestand > Fabrication Outpus > Footprint Position (.pos) File..”
Er volgt een popup, selecteer de opties: “CSV” en “Millimeters” en klik op “Generate Position File”.
Er worden nu CSV bestanden gegenereerd met daarin de POS XY en rotatie van de componenten, deze kan je aanleveren aan de PCB maker, voorbeeld van het CSV bestand:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Ref,Val,Package,PosX,PosY,Rot,Side "C1","4.7uf","C_0603",142.875000,-79.375000,180.000000,top "C2","4.7uf","C_0603",147.955000,-69.215000,0.000000,top "C3","1uf","C_0603",149.860000,-81.280000,0.000000,top "C4","0.1uf","C_0603",142.875000,-81.280000,180.000000,top "D1","TX","LED_0603",153.047600,-67.297300,0.000000,top "D2","RX","LED_0603",153.035000,-69.215000,0.000000,top "F1","Fuse","Fuse_SMD1206_Wave",139.700000,-72.390000,180.000000,top "R1","4.7K","R_0603",149.860000,-79.375000,0.000000,top "R2","4.7K","R_0603",172.085000,-71.120000,270.000000,top "R3","4.7K","R_0603",172.085000,-80.010000,270.000000,top "R4","120","R_0603",172.085000,-75.680000,270.000000,top "R5","220","R_0603",156.172600,-67.297300,0.000000,top "R6","220","R_0603",156.210000,-69.215000,0.000000,top "TVS1","P6KE6","D_SMB",163.830000,-81.915000,180.000000,top "TVS2","P6KE6","D_SMB",163.830000,-67.945000,0.000000,top "TVS3","P6KE6","D_SMB",165.735000,-74.930000,270.000000,top "U1","CP2104","QFN-24-1EP_4x4mm_Pitch0.5mm",146.050000,-74.930000,45.000000,top "U2","MAX485E","SOP-8_3.76x4.96mm_P1.27mm",156.210000,-74.930000,0.000000,top |
Troubleshooting
Mocht je foutmeldingen tegenkomen zoals deze:
1 2 3 4 5 6 7 8 9 10 11 12 |
Run command: python "M:\KiCad\bin\scripting\plugins/bom_csv_sorted_by_ref.py" "C:\" Command error. Return code 3 Error messages: Could not find platform independent libraries <prefix> Could not find platform dependent libraries <exec_prefix> Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>] Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Current thread 0x00002dac (most recent call first): |
Dan kan het programma python niet vinden (de pad naam er naar toe), je kan het pad handmatig invullen…heb je geen python?, dan is dit pakket te downloaden en te installeren.
Bestellen bij JLCPCB
Het merendeel hieronder beschreven staat ook op hun pagina:
https://support.jlcpcb.com/article/84-how-to-generate-the-bom-and-centroid-file-from-kicad
Zoals bij iedere fabrikant, moet je de BOM en XY gegevens specifiek aanleveren, hieronder de beschrijving zoals het bij JLCPBC aangeleverd moet worden.
BOM
De bom moet in de volgende format aangeleverd worden:
Er is voor de bestellijst een aparte plugin geschreven, deze is te downloaden op github:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
<!--XSL style sheet to convert EESCHEMA XML Partlist Format to grouped CSV BOM Format Copyright (C) 2014, Wolf Walter. Copyright (C) 2013, Stefan Helmert. Copyright (C) 2018, Kicad developers. Copyright (C) 2019, arturo182. GPL v2. Functionality: Generation of JLCPCB PCBA compatible BOM How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the netlist exporter using a new (custom) tab in the netlist export dialog. The command line is xsltproc -o "%O.csv" "full_path/bom2grouped_csv_jlcpcb.xsl" "%I" --> <!-- @package Generates a JLCPCB PCBA service compatible BOM Functionality: * Generate a comma separated value BOM list (csv file type). * Components are sorted by ref and grouped by same value+footprint * One value per line * Fields are: Comment,Designator,Footprint,LCSC Usage: xsltproc -o "%O.csv" "full_path/bom2grouped_csv_jlcpcb.xsl" "%I" --> <!DOCTYPE xsl:stylesheet [ <!ENTITY nl "
"> <!--new line CR, LF, or LF, your choice --> ]> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:variable name="digits" select="'1234567890'" /> <!-- for matching grouping of footprint and value combination --> <xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(footprint, '-', value)" /> <!-- for table head and empty table fields--> <xsl:key name="headentr" match="field" use="@name"/> <!-- main part --> <xsl:template match="/export"> <xsl:text>Comment,Designator,Footprint,LCSC</xsl:text> <!-- find all existing table head entries and list each one once --> <xsl:for-each select="components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]"> <xsl:text>, </xsl:text> <xsl:value-of select="@name"/> </xsl:for-each> <!-- all table entries --> <xsl:apply-templates select="components"/> </xsl:template> <xsl:template match="components"> <!-- for Muenchian grouping of footprint and value combination --> <xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(footprint, '-', value))[1]) = 1]"> <xsl:sort select="@ref" /> <xsl:text>&nl;</xsl:text> <xsl:text>"</xsl:text> <xsl:value-of select="value"/> <xsl:text>","</xsl:text> <!-- list of all designators --> <xsl:for-each select="key('partTypeByValueAndFootprint', concat(footprint, '-', value))"> <!-- strip non-digits from reference and sort based on remaining number --> <xsl:sort select="translate(@ref, translate(@ref, digits, ''), '')" data-type="number" /> <xsl:value-of select="@ref"/> <xsl:if test="position() != last()"> <xsl:text>,</xsl:text> </xsl:if> </xsl:for-each> <xsl:text>","</xsl:text> <xsl:value-of select="footprint"/> <xsl:text>","</xsl:text> <xsl:value-of select="LCSC"/> <xsl:text>"</xsl:text> <xsl:apply-templates select="fields"/> </xsl:for-each> </xsl:template> <!-- table entries with dynamic table head --> <xsl:template match="fields"> <!-- remember current fields section --> <xsl:variable name="fieldvar" select="field"/> <!-- for all existing head entries --> <xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]"> <xsl:variable name="allnames" select="@name"/> <xsl:text>,"</xsl:text> <!-- for all field entries in the remembered fields section --> <xsl:for-each select="$fieldvar"> <!-- only if this field entry exists in this fields section --> <xsl:if test="@name=$allnames"> <!-- content of the field --> <xsl:value-of select="."/> </xsl:if> <!-- If it does not exist, use an empty cell in output for this row. Every non-blank entry is assigned to its proper column. --> </xsl:for-each> <xsl:text>"</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
Download dit bestand en plaats deze bijvoorbeeld in de folder “Kicad\bin\scripting\plugins\”
Maar dan is de plugin immers nog niet geladen!, deze moet nog toegevoegd worden aan de BOM plugins, dat kan fdoor op het plusje te klikken om een bestand toe te voegen:
Om de plugin beter te laten werken en een mooi bestandsnaam te genereren kan je de “%O” vervangen in “%O_BOM_JLCPCB.csv”
Dit bestand kan je dan uploaden naar JLC PCB
X en Y coƶrdinaten
Het bestand voor de X en Y coordinaten kan gegenereerd wordne zoals hierboven beschreven, echter moet de header (1e regel) iets aangepast worden (men kan het csv bestand eenvoudig bewerken met kladblok):
Aanpassen in
Sla het csv bestand op en het kan geupload worden naar JLC PCB.
Bestellen
Bij het bestellen moet je grotendeels nog de juiste componenten selecteren, daar worden ook meteen de kosten bij vermeld:
Ps. kijk ook heel goed of de oriƫntatie van de componenten goed staan op JLC PCB, in mijn XY bestand stond deze niet goed:
heel vreemd…, deze heb ik handmatig aangepast.