\documentclass[14pt,trans]{beamer} \usepackage{color} \usepackage{url} \usepackage{colortbl} %\usepackage{soul} %\usepackage{verbatim} \usefonttheme{structurebold} \setbeamertemplate{navigation symbols}{} \setbeamertemplate{items}[ball] %\setbeamersize{sidebar width left=-5mm} \title{\Large Making Hardware with KiCad and Friends} \author{Werner Almesberger \\\url{werner@almesberger.net}} \date{July 21, 2012} %\setul{}{1.5pt} \begin{document} \begin{frame} \titlepage \end{frame} % --- Overview ---------------------------------------------------------------- \begin{frame}{Overview} \begin{itemize} \item KiCad introduction \item Qi-Hardware workflow \item $\dots$ and tools \end{itemize} \url{downloads.qi-hardware.com/people/werner/fisl13.pdf} \end{frame} % --- KiCad Introduction ------------------------------------------------------ \begin{frame}{KiCad} \begin{itemize} \item Complete EDA solution \item Free Software: GPL, LGPL \item Text files $\rightarrow$ extensible \item C++, wxWidgets \item Multi-platform: Linux, Windows, Mac \end{itemize} \end{frame} % --- Schematics -------------------------------------------------------------- \begin{frame}{KiCad: Schematics} eeschema + component editor: netlist, BOM SCREENSHOTS \end{frame} % --- Layout ------------------------------------------------------------------ \begin{frame}{KiCad: Layout} cvpcb + pcbnew + module editor -> gerbers (gerbv) SCREENSHOTS \end{frame} % --- Fped -------------------------------------------------------------------- \begin{frame}{Footprint Editor (fped)} %\begin{center} % \includegraphics[height=6cm]{fped.png} %\end{center} SCREENSHOT (highlight vector) \begin{itemize} \item Fully parametric \item Automated repetition (loops, tables, sub-frames) \item GUI or text-based \item Automatic measurements \item Output: KiCad, Postscript, Gnuplot \end{itemize} \end{frame} % --- Qi-Hardware ------------------------------------------------------------- \begin{frame}{Qi-Hardware} \begin{itemize} \item Collection of loosely connected projects \item Loose collective of like-minded developers \item Copyleft Hardware with Free Software \item Development and manufacturing \item Toolmaking \end{itemize} Products: \begin{itemize} \item Ben NanoNote (Handheld computer) \item Ben-WPAN (IEEE 802.15.4 wireless) \item Milkymist One (FPGA-based Video synthesizer) \end{itemize} \end{frame} % --- Collaborative Design ---------------------------------------------------- \begin{frame}{Collaborative Design} \begin{itemize} \item Track other people's work \item Review other people's work (libraries) \item Shared design information \item Shared version control (git) \item Shared procedures and rules \end{itemize} \end{frame} % --- KiCad Limitations ------------------------------------------------------- \begin{frame}{KiCad Limitations} \begin{itemize} \item No integrated version control system support \item Integration leads to weak peripheral tools \begin{itemize} \item Footprint editor \item Component catalog \item Module catalog \end{itemize} \item Scattered libraries CHECK \end{itemize} \end{frame} % --- Qi-Wardware Adaptation -------------------------------------------------- \begin{frame}{Qi-Hardware Adaptation} \begin{itemize} \item Command-line oriented use \item Extend KiCad with patches \item External scripts/programs \item Own component and module libraries with common rules \end{itemize} \end{frame} % --- What goes into git ------------------------------------------------------ \begin{frame}{What goes into git} KiCad: \begin{itemize} \item Project file: {\tt {\em project}.pro} \item Schematics: {\tt {\em project}.sch}, {\tt {\em subsheet}.sch} \item Footprint mapping: {\tt {\em project}.cmp} \item Layout: {\tt {\em project}.brd} \end{itemize} Qi-Hardware: \begin{itemize} \item Makefile ({\tt sch}, {\tt brd}, {\tt fab}, {\tt clean}) \item Bookshelf (for dsv) \item Project-local libraries \end{itemize} \end{frame} % --- What doesn't ------------------------------------------------------------ \begin{frame}{What doesn't} KiCad: \begin{itemize} \item Netlist: {\tt {\em project}.net} \\ Generate with eeschema from {\tt *.sch} and {\tt {\em project}.cmp} \item Caches and backups: {\tt {\em project}.bak}, {\tt {\em project}.000}, {\tt {\em project}-cache.lib} \item Postscript: {\tt {\em project}-{\em layer}.g{\em XX}} \item Gerbers: {\tt {\em project}-{\em layer}.g{\em XX}} \item BOMs: {\tt {\em project}.lst}, {\tt {\em project}.cvs} \item Fab outputs: {\tt {\em project}.drl}, {\tt {\em project}.pos} \item And so on: {\tt {\em project}.erc}, {\tt {\em project}.rpt}, {\tt {\em project}.wrl}, $\ldots$ \end{itemize} \end{frame} % --- Project File ------------------------------------------------------------ \begin{frame}{Project File} Project settings. Lists of libraries. Issues: \begin{itemize} \item Local absolute paths \item Default libraries \item Timestamps $\rightarrow$ commit noise \end{itemize} Solution: \begin{itemize} \item Maintain manually \item {\tt purge} script \\ \url{wernermisc/bin/purge} \end{itemize} \end{frame} % --- Makefile ---------------------------------------------------------------- \begin{frame}[fragile]{Makefile} Issues: \begin{itemize} \item Shortcuts \item Glue tools together \item Avoid mistakes \item Share common procedures \end{itemize} Example: \begin{verbatim} front: pcbnew --plot=ps --plot-fill-all-zones --layers=Front \ --plot-mirror $(PROJECT).brd lpr $(PROJECT)-Front.ps \end{verbatim} \end{frame} % --- KiCad Command-Line Patches ---------------------------------------------- \begin{frame}{KiCad Command-Line Patches} Original hack by Werner Almesberger, clean rewrite by Wolfgang Spraul. \begin{itemize} \item Idea: command-line access to main output functions \item eeschema \begin{itemize} \item Visualization: Postscript (and SVG, DXF) \item BOM $\rightarrow$ BOOM \item Netlist, ERC \end{itemize} \item pcbnew \begin{itemize} \item Fabrication: Gerbers, drill (Excellon), component positions \item Visualization and DIY: Postscript \item Attributes: mirror, size, origin, fill zones, $\ldots$ \end{itemize} \end{itemize} \url{eda-tools/kicad-patches} \end{frame} % --- Data Sheet Viewer (dsv) ------------------------------------------------- \begin{frame}[fragile]{Data Sheet Viewer (dsv)} \begin{itemize} \item Bookshelf: name and aliases $rightarrow$ PDF or ZIP with PDF \item Download (wget) to local cache \item Hierarchical lookup by name or alias \item Example: \\ {\tt dsv avr} $\rightarrow$ ATtiny87 ({\tt doc8265.pdf}) $\rightarrow$ xpdf \end{itemize} Bookshelf example: \begin{verbatim} N: attiny87 A: attiny167 A: avr D: http://www.atmel.com/Images/doc8265.pdf \end{verbatim} \end{frame} % --- Data Sheet Viewer (dsv) ------------------------------------------------- \begin{frame}{dsv Motivation} \begin{itemize} \item Make sure everybody uses the same data sheet \begin{itemize} \item Same component \item Same manufacturer \item Same data sheet revision \end{itemize} \item Copyright: can't just check in PDF \item Industrial pragmatism: mail or ``internal'' repository \item Qi-Hardware: send {\tt BOOKSHELF} around \end{itemize} \url{eda-tools/dsv} \end{frame} % --- Schematics Symbol Catalog ---------------------------------------------- \begin{frame}{Schematics Symbol Catalog} \begin{itemize} \item For selection, review \item Hierarchical order with alphabetic index \item Short descriptions and data sheet links \item Added value: indicate pin types \item TODO: connect to dsv \end{itemize} DRAWING (hierarchy + descr + com libs ---genkicat--> PDF) \end{frame} % --- Footprint Catalog ------------------------------------------------------ \begin{frame}{Footprint Catalog} \begin{itemize} \item Likewise, for footprints \item Added value: measurements, pad types \end{itemize} DRAWING (hierarchy + descr + com libs ---genkicat--> PDF) \url{eda-tools/genkicat} \end{frame} % --- Schematics History ------------------------------------------------------ \begin{frame}{Schematics History} \begin{itemize} \item Schematics revision history \item {\tt git diff} produces gibberish \end{itemize} EXAMPLE \url{http://projects.qi-hardware.com/schhist/} \end{frame} % --- Schematics History (cont'd) --------------------------------------------- \begin{frame}{Schematics History (cont'd)} How it works: \begin{itemize} \item Walk git revision history \item Check out project whenever schematics change \item Run eeschema to make Postscript \item Convert to PNG (find diffs, with highlighting) and PDF \item Wrap in HTML \end{itemize} Issues: \begin{itemize} \item Nasty shell script \item Resource-hungry (partial caching) \item Large schematics get confusing \item Projects spanning multiple repositories \end{itemize} \url{eda-tools/schhist} \end{frame} % --- Layout History ---------------------------------------------------------- \begin{frame}{Layout History} \begin{itemize} \item Layout revision history \item To do $\ldots$ \end{itemize} \url{eda-tools/brdhist} \end{frame} % --- Gerber Renderer --------------------------------------------------------- \begin{frame}{Gerber Renderer} \begin{itemize} \item ``Photorealistic'' view of PCB \item Combines Gerber and Excellon \item Easy see issues with solder paste, silk screen, solder mask, $\ldots$ \item Uses gerbv for rendering \end{itemize} EXAMPLE \url{eda-tools/prettygerbv} \end{frame} % --- BOM Processor ----------------------------------------------------------- \begin{frame}{BOM Processor (BOOM)} \begin{itemize} \item BOM $\rightarrow$ select components $\rightarrow$ find supplier $\rightarrow$ shopping list \item Work in progress. Rewrite from Perl to C \begin{itemize} \item Faster \item Less headache with data structures \item Better parsing \end{itemize} \item Snag: Digi-Key spider no longer works \item Future: help with component selection \end{itemize} \url{eda-tools/b2} \end{frame} % --- BOOM Data Flow ---------------------------------------------------------- \begin{frame}{BOOM Data Flow} DRAWING \end{frame} % --- Schematics Design Rules ------------------------------------------------- \begin{frame}{Schematics Design Rules} ... URL \end{frame} % --- Libraries --------------------------------------------------------------- \begin{frame}{Libraries} Goals: \begin{itemize} \item Consistent naming \item Known origin of design information \item Documented development process \end{itemize} To do: \begin{itemize} \item Improve organization \item Better integrate background information \item Reviews ! \end{itemize} \url{kicad-libs/components}, \url{kicad-libs/modueles} \end{frame} % --- Qi-Hardware Workflow ---------------------------------------------------- \begin{frame}{Qi-Hardware Workflow} DIAGRAM \end{frame} % --- Conclusion -------------------------------------------------------------- \begin{frame}{Conclusion} \begin{itemize} \item KiCad is a good basis for collaborative projects \item Open design allows extension with scripts \item Workflow is complex and needs careful consideration \end{itemize} To do: \begin{itemize} \item Spread the word \item Improve quality of libraries \item Integrate patches into mainline KiCad \item Finish BOOM and write brdhist \end{itemize} \end{frame} \end{document}