mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-22 14:11:33 +02:00
444 lines
11 KiB
TeX
444 lines
11 KiB
TeX
|
\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}
|