adept-trackball/appendices/pcbs/index.html

694 lines
20 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ploopyco.github.io/adept-trackball/appendices/pcbs/">
<link rel="prev" href="../../assembly-instructions/">
<link rel="next" href="../3d-printing/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Appendix A: Printed circuit boards - Ploopy Adept Trackball</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#appendix-a-printed-circuit-boards" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#buying-boards-from-us" class="md-nav__link">
<span class="md-ellipsis">
Buying boards from us
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#making-your-own-boards" class="md-nav__link">
<span class="md-ellipsis">
Making your own boards
</span>
</a>
<nav class="md-nav" aria-label="Making your own boards">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#step-1-order-the-pcbs-from-a-pcb-production-company" class="md-nav__link">
<span class="md-ellipsis">
Step 1: Order the PCBs from a PCB production company
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-2-order-the-electronics-components" class="md-nav__link">
<span class="md-ellipsis">
Step 2: Order the electronics components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-3-get-the-necessary-tools" class="md-nav__link">
<span class="md-ellipsis">
Step 3: Get the necessary tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-4-solder-the-components-to-the-boards" class="md-nav__link">
<span class="md-ellipsis">
Step 4: Solder the components to the boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-5-all-done" class="md-nav__link">
<span class="md-ellipsis">
Step 5: All done!
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../3d-printing/" class="md-nav__link">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../programming/" class="md-nav__link">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#buying-boards-from-us" class="md-nav__link">
<span class="md-ellipsis">
Buying boards from us
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#making-your-own-boards" class="md-nav__link">
<span class="md-ellipsis">
Making your own boards
</span>
</a>
<nav class="md-nav" aria-label="Making your own boards">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#step-1-order-the-pcbs-from-a-pcb-production-company" class="md-nav__link">
<span class="md-ellipsis">
Step 1: Order the PCBs from a PCB production company
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-2-order-the-electronics-components" class="md-nav__link">
<span class="md-ellipsis">
Step 2: Order the electronics components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-3-get-the-necessary-tools" class="md-nav__link">
<span class="md-ellipsis">
Step 3: Get the necessary tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-4-solder-the-components-to-the-boards" class="md-nav__link">
<span class="md-ellipsis">
Step 4: Solder the components to the boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-5-all-done" class="md-nav__link">
<span class="md-ellipsis">
Step 5: All done!
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="appendix-a-printed-circuit-boards">Appendix A: Printed circuit boards</h1>
<h2 id="buying-boards-from-us">Buying boards from us</h2>
<p>Getting the Ploopy boards made can be complex, and expensive, especially if you only need one set. <a href="https://ploopy.co/product-category/trackball/adept/">That's why we sell kits with everything you need to build a Ploopy Adept Trackball</a>. Here's why that's great for you:</p>
<ul>
<li>You get a PCB with all components soldered</li>
<li>The firmware is already programmed on the microcontroller, so you won't have to program it</li>
<li>It'll cost a hell of a lot less than if you do a production run of PCBs just for yourself</li>
<li>You won't have to order components and wait while they come in</li>
<li>We guarantee that it works</li>
</ul>
<p>Just something to consider. You're smart. You'll figure it out.</p>
<h2 id="making-your-own-boards">Making your own boards</h2>
<p>Want to make your own Ploopy Adept Trackball boards? Great! Less work for us. Seriously, though, only choose this option if you know what you're doing. You don't want to embarrass yourself, do you?</p>
<h3 id="step-1-order-the-pcbs-from-a-pcb-production-company">Step 1: Order the PCBs from a PCB production company</h3>
<p>Here are the most important configurations you'll need to communicate to the company:</p>
<ul>
<li>4 layers</li>
<li>FR-4, TG 150-160 (basically, whatever the cheapest option is)</li>
<li>0.8mm thickness</li>
<li>6/6mil track/spacing distance</li>
<li>0.3mm minimum hole size</li>
<li>ENIG surface finish, but you can go with HASL if you don't care about lead poisoning</li>
<li>1oz copper thickness for both outer and inner layers</li>
<li>Choose whatever colours you want for solder mask and silkscreen; we like white solder mask and black silkscreen</li>
</ul>
<p>If something is missing from here, it's not really important.</p>
<p>At some point, you'll have to upload design files to the production company. Use the <a href="https://github.com/ploopyco/adept-trackball/tree/master/hardware/electronics">electronics source files</a> to generate manufacturing files (you'll have to convert them from their native Altium format if you're using some other platform). That should contain everything you need to get the boards made. If the production company rejects this package, however, you'll need to address the issue yourself.</p>
<h3 id="step-2-order-the-electronics-components">Step 2: Order the electronics components</h3>
<p>All of the components are described in the schematics of the PCBs. Ordering the components is left as an exercise for the reader.</p>
<p>A complete list of all of the components can be found in the electrical design files.</p>
<h3 id="step-3-get-the-necessary-tools">Step 3: Get the necessary tools</h3>
<ul>
<li>PCB</li>
<li>All of the electronics components</li>
<li>A soldering iron</li>
<li>Solder</li>
<li>A printout of the schematics</li>
</ul>
<h3 id="step-4-solder-the-components-to-the-boards">Step 4: Solder the components to the boards</h3>
<p>Once you've got the PCBs and all of the components, print out the schematics. Use the schematics to match the reference designators on the PCBs to the reference designators on the schematics, and then get to soldering.</p>
<p>If you've never soldered surface mount components before, or want a refresher on how to solder, we recommend <a href="https://www.youtube.com/watch?v=3NN7UGWYmBY">this video on using an iron to solder surface mount components</a>, and <a href="https://www.youtube.com/watch?v=c_Qt5CtUlqY">this video on using a hot-air soldering station</a>.</p>
<p>Lastly, you'll need to follow a set of special instructions to assemble the PMW3360 sensor and the optic. <a href="https://d3s5r33r268y59.cloudfront.net/datasheets/9604/2017-05-07-18-19-11/PMS0058-PMW3360DM-T2QU-DS-R1.50-26092016._20161202173741.pdf">Take a look at page 11 of the official PMW3360 datasheet to find out how to do this</a> (page 8 has visuals, for those of you who like purdy pictures).</p>
<p><strong>MAKE SURE THAT THE PMW3360 IS ORIENTED CORRECTLY BEFORE YOU SOLDER IT!</strong> This is a really easy step to mess up, so <em>DOUBLE-CHECK IT!</em></p>
<h3 id="step-5-all-done">Step 5: All done!</h3>
<p>Congrats, you finished assembling the electronics! Pat yourself on the back.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>