paper: Add initial experimental results
This commit is contained in:
parent
2967dcee39
commit
0e6fbeecf1
16 changed files with 6918 additions and 24 deletions
1115
doc/quick-tech-report/circuits.ipynb
Normal file
1115
doc/quick-tech-report/circuits.ipynb
Normal file
File diff suppressed because one or more lines are too long
BIN
doc/quick-tech-report/ir_tx_schema.pdf
Normal file
BIN
doc/quick-tech-report/ir_tx_schema.pdf
Normal file
Binary file not shown.
340
doc/quick-tech-report/ir_tx_schema.svg
Normal file
340
doc/quick-tech-report/ir_tx_schema.svg
Normal file
|
|
@ -0,0 +1,340 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="49.526539mm"
|
||||
height="39.935722mm"
|
||||
viewBox="0 0 49.526539 39.935722"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="ir_tx_schema.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<pattern
|
||||
inkscape:collect="always"
|
||||
xlink:href="#Strips1_8"
|
||||
id="pattern4192"
|
||||
patternTransform="matrix(0.05072907,0.02928844,-0.5039899,0.87293588,37.264239,23.578155)" />
|
||||
<pattern
|
||||
inkscape:collect="always"
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="9"
|
||||
height="1"
|
||||
patternTransform="translate(0,0) scale(10,10)"
|
||||
id="Strips1_8"
|
||||
inkscape:stockid="Stripes 1:8">
|
||||
<rect
|
||||
style="fill:black;stroke:none"
|
||||
x="0"
|
||||
y="-0.5"
|
||||
width="1"
|
||||
height="2"
|
||||
id="rect3254" />
|
||||
</pattern>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.8624494"
|
||||
inkscape:cx="93.962734"
|
||||
inkscape:cy="75.480085"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:window-width="960"
|
||||
inkscape:window-height="1019"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="3"
|
||||
fit-margin-left="3"
|
||||
fit-margin-right="3"
|
||||
fit-margin-bottom="3"
|
||||
lock-margins="true" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-15.197803,-13.213541)">
|
||||
<circle
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ededed;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.4, 0.4;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000"
|
||||
id="path1020"
|
||||
cx="39.058445"
|
||||
cy="33.180935"
|
||||
r="16.918251" />
|
||||
<path
|
||||
id="rect1039"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.4, 0.40000000000000002;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="m 39.046485,26.808772 c -1.983521,0.0037 -3.852197,0.930875 -5.055003,2.508097 h -2.015007 v 7.72812 h 2.01517 c 1.205311,1.5805 3.079093,2.508045 5.066744,2.508098 1.987708,-3e-6 3.861561,-0.927552 5.066906,-2.508098 h 2.089992 v -7.72812 H 44.125295 C 42.91995,27.736324 41.046096,26.808774 39.058389,26.808772 h -0.0119 z"
|
||||
sodipodi:nodetypes="scccccccccscs" />
|
||||
<circle
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path835-6"
|
||||
cx="39.007404"
|
||||
cy="33.180935"
|
||||
r="4.6935949" />
|
||||
<circle
|
||||
style="fill:url(#pattern4192);fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path835"
|
||||
cx="39.007404"
|
||||
cy="33.180935"
|
||||
r="4.6935945" />
|
||||
<g
|
||||
id="g903"
|
||||
transform="matrix(-0.31554927,0,0,-0.31554927,51.951482,61.938954)">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ff9900;stroke-width:0.264583"
|
||||
id="path858-7"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-91.136383"
|
||||
sodipodi:cy="60.773773"
|
||||
sodipodi:rx="20.406658"
|
||||
sodipodi:ry="20.406658"
|
||||
sodipodi:start="0.52359878"
|
||||
sodipodi:end="2.6179939"
|
||||
sodipodi:arc-type="slice"
|
||||
transform="rotate(-90)"
|
||||
d="M -73.463699,70.977102 A 20.406658,20.406658 0 0 1 -91.136383,81.180431 20.406658,20.406658 0 0 1 -108.80907,70.977102 l 17.672687,-10.203329 z" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#003399;stroke-width:0.264583"
|
||||
id="path858"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="91.136383"
|
||||
sodipodi:cy="-89.61792"
|
||||
sodipodi:rx="20.406658"
|
||||
sodipodi:ry="20.406658"
|
||||
sodipodi:start="1.3089969"
|
||||
sodipodi:end="1.8325957"
|
||||
sodipodi:arc-type="slice"
|
||||
transform="rotate(90)"
|
||||
d="m 96.418016,-69.906602 a 20.406658,20.406658 0 0 1 -10.563264,0 l 5.281631,-19.711318 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffcc00;stroke:#ff9900;stroke-width:0.264583"
|
||||
id="path837-5"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="87.192711"
|
||||
sodipodi:cy="91.708893"
|
||||
sodipodi:r1="3.7053862"
|
||||
sodipodi:r2="1.8526928"
|
||||
sodipodi:arg1="-1.5707963"
|
||||
sodipodi:arg2="-0.52359875"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
inkscape:transform-center-x="0.3538335"
|
||||
transform="rotate(90,74.439098,78.382776)"
|
||||
d="m 87.192711,88.003507 3.208958,5.558079 -6.417917,0 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#003399;stroke:none;stroke-width:0.264583"
|
||||
id="path837"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="87.192711"
|
||||
sodipodi:cy="91.708893"
|
||||
sodipodi:r1="3.7053862"
|
||||
sodipodi:r2="1.8526928"
|
||||
sodipodi:arg1="-1.5707963"
|
||||
sodipodi:arg2="-0.52359875"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
transform="rotate(-90,87.811557,90.517534)"
|
||||
inkscape:transform-center-x="0.3538335"
|
||||
d="m 87.192711,88.003507 3.208958,5.558079 -6.417917,0 z" />
|
||||
</g>
|
||||
<g
|
||||
id="g1018"
|
||||
transform="matrix(-0.31554927,0,0,-0.31554927,95.383768,61.938954)">
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#003399;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
id="path858-7-5"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="91.136383"
|
||||
sodipodi:cy="-158.90807"
|
||||
sodipodi:rx="20.406658"
|
||||
sodipodi:ry="20.406658"
|
||||
sodipodi:start="0.52359878"
|
||||
sodipodi:end="2.6179939"
|
||||
sodipodi:arc-type="slice"
|
||||
transform="rotate(90)"
|
||||
d="m 108.80907,-148.70474 a 20.406658,20.406658 0 0 1 -17.672687,10.20333 20.406658,20.406658 0 0 1 -17.672685,-10.20333 l 17.672685,-10.20333 z" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ff9900;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
id="path858-6"
|
||||
sodipodi:type="arc"
|
||||
sodipodi:cx="-91.136383"
|
||||
sodipodi:cy="130.06392"
|
||||
sodipodi:rx="20.406658"
|
||||
sodipodi:ry="20.406658"
|
||||
sodipodi:start="1.3089969"
|
||||
sodipodi:end="1.8325957"
|
||||
sodipodi:arc-type="slice"
|
||||
transform="rotate(-90)"
|
||||
d="m -85.854751,149.77524 a 20.406658,20.406658 0 0 1 -10.563264,0 l 5.281632,-19.71132 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#003399;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
id="path837-5-2"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="87.192711"
|
||||
sodipodi:cy="91.708893"
|
||||
sodipodi:r1="3.7053862"
|
||||
sodipodi:r2="1.8526928"
|
||||
sodipodi:arg1="-1.5707963"
|
||||
sodipodi:arg2="-0.52359875"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
inkscape:transform-center-x="0.3538335"
|
||||
transform="rotate(-90,122.46625,55.862834)"
|
||||
d="m 87.192711,88.003507 3.208958,5.558079 -6.417917,0 z" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffcc00;fill-opacity:1;stroke:#ff9900;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
id="path837-9"
|
||||
sodipodi:sides="3"
|
||||
sodipodi:cx="87.192711"
|
||||
sodipodi:cy="91.708893"
|
||||
sodipodi:r1="3.7053862"
|
||||
sodipodi:r2="1.8526928"
|
||||
sodipodi:arg1="-1.5707963"
|
||||
sodipodi:arg2="-0.52359875"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
transform="rotate(90,109.33693,113.2806)"
|
||||
inkscape:transform-center-x="0.3538335"
|
||||
d="m 87.192711,88.003507 3.208958,5.558079 -6.417917,0 z" />
|
||||
</g>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot932-4"
|
||||
style="font-style:normal;font-weight:normal;font-size:8.02177px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404040;fill-opacity:1;stroke:none;stroke-width:0.137469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.52773032,0,0,0.52773032,-242.95524,-93.135803)"><flowRegion
|
||||
id="flowRegion934-7"
|
||||
style="font-size:8.02177px;fill:#404040;stroke-width:0.137469px"><rect
|
||||
id="rect936-8"
|
||||
width="232.85715"
|
||||
height="202.14285"
|
||||
x="502.14285"
|
||||
y="206.8054"
|
||||
style="font-size:8.02177334px;fill:#404040;stroke-width:0.13746917px" /></flowRegion><flowPara
|
||||
id="flowPara938-6"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.02177px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#404040;stroke-width:0.137469px">1</flowPara></flowRoot>
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 29.885622,23.322353 -5.549194,-4.46386"
|
||||
id="path916-2-3-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 54.460981,34.627606 4.832125,4.83213"
|
||||
id="path916"
|
||||
inkscape:connector-curvature="0" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot932"
|
||||
style="font-style:normal;font-weight:normal;font-size:8.02177px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404040;fill-opacity:1;stroke:none;stroke-width:0.137469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.52773032,0,0,0.52773032,-247.06476,-72.695165)"><flowRegion
|
||||
id="flowRegion934"
|
||||
style="font-size:8.02177px;fill:#404040;stroke-width:0.137469px"><rect
|
||||
id="rect936"
|
||||
width="232.85715"
|
||||
height="202.14285"
|
||||
x="502.14285"
|
||||
y="206.8054"
|
||||
style="font-size:8.02177334px;fill:#404040;stroke-width:0.13746917px" /></flowRegion><flowPara
|
||||
id="flowPara938"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.02177px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#404040;stroke-width:0.137469px">5</flowPara></flowRoot>
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 23.512484,44.619905 36.004705,37.684762"
|
||||
id="path916-2-3"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot932-4-7"
|
||||
style="font-style:normal;font-weight:normal;font-size:8.02177px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404040;fill-opacity:1;stroke:none;stroke-width:0.137469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.52773032,0,0,0.52773032,-212.58381,-92.373671)"><flowRegion
|
||||
id="flowRegion934-7-7"
|
||||
style="font-size:8.02177px;fill:#404040;stroke-width:0.137469px"><rect
|
||||
id="rect936-8-2"
|
||||
width="232.85715"
|
||||
height="202.14285"
|
||||
x="502.14285"
|
||||
y="206.8054"
|
||||
style="font-size:8.02177334px;fill:#404040;stroke-width:0.13746917px" /></flowRegion><flowPara
|
||||
id="flowPara938-6-3"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.02177px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#404040;stroke-width:0.137469px">3</flowPara></flowRoot>
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 51.878367,19.657652 -11.813765,10.5679"
|
||||
id="path916-2-3-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot932-2"
|
||||
style="font-style:normal;font-weight:normal;font-size:8.02177px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404040;fill-opacity:1;stroke:none;stroke-width:0.137469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.52773032,0,0,0.52773032,-244.26978,-66.944366)"><flowRegion
|
||||
id="flowRegion934-5"
|
||||
style="font-size:8.02177px;fill:#404040;stroke-width:0.137469px"><rect
|
||||
id="rect936-3"
|
||||
width="232.85715"
|
||||
height="202.14285"
|
||||
x="502.14285"
|
||||
y="206.8054"
|
||||
style="font-size:8.02177334px;fill:#404040;stroke-width:0.13746917px" /></flowRegion><flowPara
|
||||
id="flowPara938-7"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.02177px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#404040;stroke-width:0.137469px">2</flowPara></flowRoot>
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#404040;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 20.420125,38.206721 3.376333,-3.956215"
|
||||
id="path916-2-3-7-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot932-2-9"
|
||||
style="font-style:normal;font-weight:normal;font-size:8.02177px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#404040;fill-opacity:1;stroke:none;stroke-width:0.137469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0.52773032,0,0,0.52773032,-205.60832,-71.292309)"><flowRegion
|
||||
id="flowRegion934-5-1"
|
||||
style="font-size:8.02177px;fill:#404040;stroke-width:0.137469px"><rect
|
||||
id="rect936-3-2"
|
||||
width="232.85715"
|
||||
height="202.14285"
|
||||
x="502.14285"
|
||||
y="206.8054"
|
||||
style="font-size:8.02177429px;fill:#404040;stroke-width:0.13746917px" /></flowRegion><flowPara
|
||||
id="flowPara938-7-7"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.02177px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#404040;stroke-width:0.137469px">4</flowPara></flowRoot>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
BIN
doc/quick-tech-report/mesh_gen_viz.pdf
Normal file
BIN
doc/quick-tech-report/mesh_gen_viz.pdf
Normal file
Binary file not shown.
1547
doc/quick-tech-report/mesh_gen_viz.svg
Normal file
1547
doc/quick-tech-report/mesh_gen_viz.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 83 KiB |
BIN
doc/quick-tech-report/mesh_scan_crop.jpg
Normal file
BIN
doc/quick-tech-report/mesh_scan_crop.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 391 KiB |
BIN
doc/quick-tech-report/photolink_schematic.pdf
Normal file
BIN
doc/quick-tech-report/photolink_schematic.pdf
Normal file
Binary file not shown.
43
doc/quick-tech-report/photolink_schematic.pro
Normal file
43
doc/quick-tech-report/photolink_schematic.pro
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
update=Tue Dec 1 17:26:36 2020
|
||||
version=1
|
||||
last_client=eeschema
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[pcbnew]
|
||||
version=1
|
||||
LastNetListRead=
|
||||
UseCmpFile=1
|
||||
PadDrill=0.600000000000
|
||||
PadDrillOvalY=0.600000000000
|
||||
PadSizeH=1.500000000000
|
||||
PadSizeV=1.500000000000
|
||||
PcbTextSizeV=1.500000000000
|
||||
PcbTextSizeH=1.500000000000
|
||||
PcbTextThickness=0.300000000000
|
||||
ModuleTextSizeV=1.000000000000
|
||||
ModuleTextSizeH=1.000000000000
|
||||
ModuleTextSizeThickness=0.150000000000
|
||||
SolderMaskClearance=0.000000000000
|
||||
SolderMaskMinWidth=0.000000000000
|
||||
DrawSegmentWidth=0.200000000000
|
||||
BoardOutlineThickness=0.100000000000
|
||||
ModuleOutlineThickness=0.150000000000
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
||||
[schematic_editor]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
PlotDirectoryName=
|
||||
SubpartIdSeparator=0
|
||||
SubpartFirstId=65
|
||||
NetFmtName=
|
||||
SpiceAjustPassiveValues=0
|
||||
LabSize=50
|
||||
ERC_TestSimilarLabels=1
|
||||
486
doc/quick-tech-report/photolink_schematic.sch
Normal file
486
doc/quick-tech-report/photolink_schematic.sch
Normal file
|
|
@ -0,0 +1,486 @@
|
|||
EESchema Schematic File Version 4
|
||||
EELAYER 30 0
|
||||
EELAYER END
|
||||
$Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 1 1
|
||||
Title ""
|
||||
Date ""
|
||||
Rev ""
|
||||
Comp ""
|
||||
Comment1 ""
|
||||
Comment2 ""
|
||||
Comment3 ""
|
||||
Comment4 ""
|
||||
$EndDescr
|
||||
$Comp
|
||||
L Transistor_BJT:BC847 Q1
|
||||
U 1 1 5FC67B72
|
||||
P 3450 3300
|
||||
F 0 "Q1" H 3641 3300 50 0000 L CNN
|
||||
F 1 "BC847" H 3641 3255 50 0001 L CNN
|
||||
F 2 "Package_TO_SOT_SMD:SOT-23" H 3650 3225 50 0001 L CIN
|
||||
F 3 "http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657" H 3450 3300 50 0001 L CNN
|
||||
1 3450 3300
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R_Small R1
|
||||
U 1 1 5FC6861A
|
||||
P 3050 3300
|
||||
F 0 "R1" V 3246 3300 50 0000 C CNN
|
||||
F 1 "R_Small" V 3155 3300 50 0000 C CNN
|
||||
F 2 "" H 3050 3300 50 0001 C CNN
|
||||
F 3 "~" H 3050 3300 50 0001 C CNN
|
||||
1 3050 3300
|
||||
0 -1 -1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4750 3050 4600 3050
|
||||
Wire Wire Line
|
||||
3550 2950 3550 3100
|
||||
Wire Wire Line
|
||||
3150 3300 3250 3300
|
||||
$Comp
|
||||
L power:GND1 #PWR02
|
||||
U 1 1 5FC74679
|
||||
P 3550 3500
|
||||
F 0 "#PWR02" H 3550 3250 50 0001 C CNN
|
||||
F 1 "GND1" H 3555 3327 50 0000 C CNN
|
||||
F 2 "" H 3550 3500 50 0001 C CNN
|
||||
F 3 "" H 3550 3500 50 0001 C CNN
|
||||
1 3550 3500
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4750 3250 4650 3250
|
||||
Wire Wire Line
|
||||
4600 3050 4600 2650
|
||||
Wire Wire Line
|
||||
4600 2650 4900 2650
|
||||
Connection ~ 4600 3050
|
||||
Wire Wire Line
|
||||
4900 2300 4600 2300
|
||||
Wire Wire Line
|
||||
4600 2300 4600 2650
|
||||
Connection ~ 4600 2650
|
||||
Text GLabel 9150 3350 2 50 Input ~ 0
|
||||
RX_OUT
|
||||
Text GLabel 2850 3300 0 50 Input ~ 0
|
||||
TX_IN
|
||||
Wire Wire Line
|
||||
2850 3300 2950 3300
|
||||
$Comp
|
||||
L power:+3V3 #PWR01
|
||||
U 1 1 5FC80852
|
||||
P 3550 2150
|
||||
F 0 "#PWR01" H 3550 2000 50 0001 C CNN
|
||||
F 1 "+3V3" H 3565 2323 50 0000 C CNN
|
||||
F 2 "" H 3550 2150 50 0001 C CNN
|
||||
F 3 "" H 3550 2150 50 0001 C CNN
|
||||
1 3550 2150
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:Opamp_Quad_Generic U1
|
||||
U 4 1 5FC81BCB
|
||||
P 5250 4650
|
||||
F 0 "U1" H 5250 4375 50 0000 C CNN
|
||||
F 1 "MCP6494" H 5250 4374 50 0001 C CNN
|
||||
F 2 "" H 5250 4650 50 0001 C CNN
|
||||
F 3 "~" H 5250 4650 50 0001 C CNN
|
||||
4 5250 4650
|
||||
1 0 0 1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R R2
|
||||
U 1 1 5FC87551
|
||||
P 3550 2400
|
||||
F 0 "R2" H 3620 2400 50 0000 L CNN
|
||||
F 1 "R" H 3620 2355 50 0001 L CNN
|
||||
F 2 "" V 3480 2400 50 0001 C CNN
|
||||
F 3 "~" H 3550 2400 50 0001 C CNN
|
||||
1 3550 2400
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:Opamp_Quad_Generic U1
|
||||
U 2 1 5FC77130
|
||||
P 7200 3250
|
||||
F 0 "U1" H 7200 2975 50 0000 C CNN
|
||||
F 1 "MCP6494" H 7200 2974 50 0001 C CNN
|
||||
F 2 "" H 7200 3250 50 0001 C CNN
|
||||
F 3 "~" H 7200 3250 50 0001 C CNN
|
||||
2 7200 3250
|
||||
1 0 0 1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:Opamp_Quad_Generic U1
|
||||
U 1 1 5FC6A2B7
|
||||
P 5050 3150
|
||||
F 0 "U1" H 5050 2783 50 0000 C CNN
|
||||
F 1 "MCP6494" H 5050 2874 50 0000 C CNN
|
||||
F 2 "" H 5050 3150 50 0001 C CNN
|
||||
F 3 "~" H 5050 3150 50 0001 C CNN
|
||||
1 5050 3150
|
||||
1 0 0 1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
7500 3250 7600 3250
|
||||
Wire Wire Line
|
||||
3550 2250 3550 2150
|
||||
$Comp
|
||||
L Device:D_ALT LED1
|
||||
U 1 1 5FC90B25
|
||||
P 3550 2800
|
||||
F 0 "LED1" V 3550 3100 50 0000 R CNN
|
||||
F 1 "D_ALT" V 3505 2720 50 0001 R CNN
|
||||
F 2 "" H 3550 2800 50 0001 C CNN
|
||||
F 3 "~" H 3550 2800 50 0001 C CNN
|
||||
1 3550 2800
|
||||
0 -1 -1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
3550 2550 3550 2650
|
||||
$Comp
|
||||
L Device:D_ALT PD1
|
||||
U 1 1 5FC93B60
|
||||
P 4150 2800
|
||||
F 0 "PD1" V 4150 2880 50 0000 L CNN
|
||||
F 1 "D_ALT" V 4105 2720 50 0001 R CNN
|
||||
F 2 "" H 4150 2800 50 0001 C CNN
|
||||
F 3 "~" H 4150 2800 50 0001 C CNN
|
||||
1 4150 2800
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4150 3050 4150 2950
|
||||
Wire Wire Line
|
||||
4150 3050 4600 3050
|
||||
$Comp
|
||||
L Device:R R3
|
||||
U 1 1 5FC9B279
|
||||
P 4350 4500
|
||||
F 0 "R3" H 4420 4500 50 0000 L CNN
|
||||
F 1 "R" H 4420 4455 50 0001 L CNN
|
||||
F 2 "" V 4280 4500 50 0001 C CNN
|
||||
F 3 "~" H 4350 4500 50 0001 C CNN
|
||||
1 4350 4500
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R R4
|
||||
U 1 1 5FC9B8DC
|
||||
P 4350 5000
|
||||
F 0 "R4" H 4420 5000 50 0000 L CNN
|
||||
F 1 "R" H 4420 4955 50 0001 L CNN
|
||||
F 2 "" V 4280 5000 50 0001 C CNN
|
||||
F 3 "~" H 4350 5000 50 0001 C CNN
|
||||
1 4350 5000
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:C C1
|
||||
U 1 1 5FC9BF27
|
||||
P 4650 5000
|
||||
F 0 "C1" H 4765 5000 50 0000 L CNN
|
||||
F 1 "C" H 4765 4955 50 0001 L CNN
|
||||
F 2 "" H 4688 4850 50 0001 C CNN
|
||||
F 3 "~" H 4650 5000 50 0001 C CNN
|
||||
1 4650 5000
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4350 4650 4350 4750
|
||||
Wire Wire Line
|
||||
4350 4750 4650 4750
|
||||
Wire Wire Line
|
||||
4650 4750 4650 4850
|
||||
Connection ~ 4350 4750
|
||||
Wire Wire Line
|
||||
4350 4750 4350 4850
|
||||
$Comp
|
||||
L power:GND2 #PWR05
|
||||
U 1 1 5FC9F5E3
|
||||
P 4350 5300
|
||||
F 0 "#PWR05" H 4350 5050 50 0001 C CNN
|
||||
F 1 "GND2" H 4355 5127 50 0000 C CNN
|
||||
F 2 "" H 4350 5300 50 0001 C CNN
|
||||
F 3 "" H 4350 5300 50 0001 C CNN
|
||||
1 4350 5300
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4350 5300 4350 5250
|
||||
Wire Wire Line
|
||||
4650 5150 4650 5250
|
||||
Wire Wire Line
|
||||
4650 5250 4350 5250
|
||||
Connection ~ 4350 5250
|
||||
Wire Wire Line
|
||||
4350 5250 4350 5150
|
||||
$Comp
|
||||
L power:+3V0 #PWR04
|
||||
U 1 1 5FCA206B
|
||||
P 4350 4250
|
||||
F 0 "#PWR04" H 4350 4100 50 0001 C CNN
|
||||
F 1 "+3V0" H 4365 4423 50 0000 C CNN
|
||||
F 2 "" H 4350 4250 50 0001 C CNN
|
||||
F 3 "" H 4350 4250 50 0001 C CNN
|
||||
1 4350 4250
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4350 4250 4350 4350
|
||||
Wire Wire Line
|
||||
4950 4750 4650 4750
|
||||
Connection ~ 4650 4750
|
||||
Wire Wire Line
|
||||
4950 4550 4800 4550
|
||||
Wire Wire Line
|
||||
4800 4550 4800 4150
|
||||
Wire Wire Line
|
||||
4800 4150 5700 4150
|
||||
Wire Wire Line
|
||||
5700 4150 5700 4650
|
||||
Wire Wire Line
|
||||
5700 4650 5550 4650
|
||||
Connection ~ 5700 4650
|
||||
$Comp
|
||||
L Device:R R5
|
||||
U 1 1 5FCB3FD4
|
||||
P 5050 2650
|
||||
F 0 "R5" V 4843 2650 50 0000 C CNN
|
||||
F 1 "100k" V 4934 2650 50 0000 C CNN
|
||||
F 2 "" V 4980 2650 50 0001 C CNN
|
||||
F 3 "~" H 5050 2650 50 0001 C CNN
|
||||
1 5050 2650
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:C C2
|
||||
U 1 1 5FCB45E4
|
||||
P 5050 2300
|
||||
F 0 "C2" V 5302 2300 50 0000 C CNN
|
||||
F 1 "7p" V 5211 2300 50 0000 C CNN
|
||||
F 2 "" H 5088 2150 50 0001 C CNN
|
||||
F 3 "~" H 5050 2300 50 0001 C CNN
|
||||
1 5050 2300
|
||||
0 -1 -1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
5200 2300 5500 2300
|
||||
Wire Wire Line
|
||||
5500 2300 5500 2650
|
||||
Wire Wire Line
|
||||
5500 3150 5350 3150
|
||||
$Comp
|
||||
L Device:R R6
|
||||
U 1 1 5FCB92E2
|
||||
P 6150 3150
|
||||
F 0 "R6" V 5943 3150 50 0000 C CNN
|
||||
F 1 "1k" V 6034 3150 50 0000 C CNN
|
||||
F 2 "" V 6080 3150 50 0001 C CNN
|
||||
F 3 "~" H 6150 3150 50 0001 C CNN
|
||||
1 6150 3150
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R R7
|
||||
U 1 1 5FCB995A
|
||||
P 7200 2700
|
||||
F 0 "R7" V 6993 2700 50 0000 C CNN
|
||||
F 1 "100k" V 7084 2700 50 0000 C CNN
|
||||
F 2 "" V 7130 2700 50 0001 C CNN
|
||||
F 3 "~" H 7200 2700 50 0001 C CNN
|
||||
1 7200 2700
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
5600 3150 5500 3150
|
||||
Connection ~ 5500 3150
|
||||
Wire Wire Line
|
||||
7350 2700 7600 2700
|
||||
Wire Wire Line
|
||||
7600 2700 7600 3250
|
||||
Wire Wire Line
|
||||
9150 3350 9050 3350
|
||||
Wire Wire Line
|
||||
5200 2650 5500 2650
|
||||
Connection ~ 5500 2650
|
||||
Wire Wire Line
|
||||
5500 2650 5500 3150
|
||||
$Comp
|
||||
L power:+3V0 #PWR03
|
||||
U 1 1 5FCC0528
|
||||
P 4150 2150
|
||||
F 0 "#PWR03" H 4150 2000 50 0001 C CNN
|
||||
F 1 "+3V0" H 4165 2323 50 0000 C CNN
|
||||
F 2 "" H 4150 2150 50 0001 C CNN
|
||||
F 3 "" H 4150 2150 50 0001 C CNN
|
||||
1 4150 2150
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
4150 2150 4150 2650
|
||||
$Comp
|
||||
L Graphic:SYM_Arrow_Normal #SYM1
|
||||
U 1 1 5FCC452D
|
||||
P 3850 2775
|
||||
F 0 "#SYM1" H 3850 2835 50 0001 C CNN
|
||||
F 1 "SYM_Arrow_Normal" H 3860 2725 50 0001 C CNN
|
||||
F 2 "" H 3850 2775 50 0001 C CNN
|
||||
F 3 "~" H 3850 2775 50 0001 C CNN
|
||||
1 3850 2775
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Graphic:SYM_Arrow_Normal #SYM2
|
||||
U 1 1 5FCC5099
|
||||
P 3850 2850
|
||||
F 0 "#SYM2" H 3850 2910 50 0001 C CNN
|
||||
F 1 "SYM_Arrow_Normal" H 3860 2800 50 0001 C CNN
|
||||
F 2 "" H 3850 2850 50 0001 C CNN
|
||||
F 3 "~" H 3850 2850 50 0001 C CNN
|
||||
1 3850 2850
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Notes Line
|
||||
3200 3000 4450 3000
|
||||
Wire Notes Line
|
||||
4450 3000 4450 2600
|
||||
Wire Notes Line
|
||||
4450 2600 3200 2600
|
||||
Wire Notes Line
|
||||
3200 2600 3200 3000
|
||||
Text Notes 2900 2700 0 50 ~ 0
|
||||
IR link
|
||||
Wire Wire Line
|
||||
4650 3750 5950 3750
|
||||
Wire Wire Line
|
||||
5950 4650 5950 3750
|
||||
Wire Wire Line
|
||||
5700 4650 5950 4650
|
||||
Wire Notes Line
|
||||
3850 1550 3850 5700
|
||||
Text Notes 3750 1750 2 100 ~ 0
|
||||
Stator
|
||||
Text Notes 3950 1750 0 100 ~ 0
|
||||
Rotor
|
||||
Text Label 5650 3750 2 50 ~ 0
|
||||
VGND
|
||||
Text Notes 5300 1950 2 50 ~ 0
|
||||
TIA G=100kΩ
|
||||
Text Notes 7500 2350 2 50 ~ 0
|
||||
Amplifier G=100
|
||||
Text Notes 8950 2900 2 50 ~ 0
|
||||
Comparator
|
||||
Text Notes 5650 4000 2 50 ~ 0
|
||||
Virtual Ground Buffer
|
||||
$Comp
|
||||
L Device:C C3
|
||||
U 1 1 5FC76733
|
||||
P 5750 3150
|
||||
F 0 "C3" V 5900 3150 50 0000 C CNN
|
||||
F 1 "7p" V 5911 3150 50 0001 C CNN
|
||||
F 2 "" H 5788 3000 50 0001 C CNN
|
||||
F 3 "~" H 5750 3150 50 0001 C CNN
|
||||
1 5750 3150
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
6650 3350 6650 3750
|
||||
Wire Wire Line
|
||||
6650 3350 6900 3350
|
||||
Connection ~ 6650 3750
|
||||
$Comp
|
||||
L Device:Opamp_Quad_Generic U1
|
||||
U 3 1 5FC7A609
|
||||
P 8750 3350
|
||||
F 0 "U1" H 8750 3075 50 0000 C CNN
|
||||
F 1 "MCP6494" H 8750 3074 50 0001 C CNN
|
||||
F 2 "" H 8750 3350 50 0001 C CNN
|
||||
F 3 "~" H 8750 3350 50 0001 C CNN
|
||||
3 8750 3350
|
||||
1 0 0 1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:C C4
|
||||
U 1 1 5FC8AF8D
|
||||
P 7850 3250
|
||||
F 0 "C4" V 8102 3250 50 0000 C CNN
|
||||
F 1 "7p" V 8011 3250 50 0001 C CNN
|
||||
F 2 "" H 7888 3100 50 0001 C CNN
|
||||
F 3 "~" H 7850 3250 50 0001 C CNN
|
||||
1 7850 3250
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R R8
|
||||
U 1 1 5FC9BACD
|
||||
P 6400 3400
|
||||
F 0 "R8" V 6300 3400 50 0000 C CNN
|
||||
F 1 "1k" V 6284 3400 50 0001 C CNN
|
||||
F 2 "" V 6330 3400 50 0001 C CNN
|
||||
F 3 "~" H 6400 3400 50 0001 C CNN
|
||||
1 6400 3400
|
||||
-1 0 0 1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
5950 3750 6400 3750
|
||||
Connection ~ 5950 3750
|
||||
Wire Wire Line
|
||||
6400 3550 6400 3750
|
||||
Connection ~ 6400 3750
|
||||
Wire Wire Line
|
||||
6400 3750 6650 3750
|
||||
Wire Wire Line
|
||||
6300 3150 6400 3150
|
||||
Wire Wire Line
|
||||
6400 3250 6400 3150
|
||||
Wire Wire Line
|
||||
6400 2700 7050 2700
|
||||
Connection ~ 6400 3150
|
||||
Wire Wire Line
|
||||
6400 3150 6900 3150
|
||||
Wire Wire Line
|
||||
6400 3150 6400 2700
|
||||
Wire Wire Line
|
||||
6000 3150 5900 3150
|
||||
$Comp
|
||||
L Device:R R9
|
||||
U 1 1 5FCAEC24
|
||||
P 8100 3500
|
||||
F 0 "R9" V 8000 3500 50 0000 C CNN
|
||||
F 1 "100k" V 7984 3500 50 0001 C CNN
|
||||
F 2 "" V 8030 3500 50 0001 C CNN
|
||||
F 3 "~" H 8100 3500 50 0001 C CNN
|
||||
1 8100 3500
|
||||
-1 0 0 1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
7600 3250 7700 3250
|
||||
Connection ~ 7600 3250
|
||||
Wire Wire Line
|
||||
8450 3450 8350 3450
|
||||
Wire Wire Line
|
||||
8000 3250 8100 3250
|
||||
Wire Wire Line
|
||||
6650 3750 8100 3750
|
||||
Wire Wire Line
|
||||
8350 3450 8350 3750
|
||||
Wire Wire Line
|
||||
8100 3350 8100 3250
|
||||
Connection ~ 8100 3250
|
||||
Wire Wire Line
|
||||
8100 3250 8450 3250
|
||||
Connection ~ 8100 3750
|
||||
Wire Wire Line
|
||||
8100 3750 8350 3750
|
||||
Wire Wire Line
|
||||
8100 3650 8100 3750
|
||||
Wire Wire Line
|
||||
4650 3250 4650 3750
|
||||
Text Notes 5700 3750 0 50 ~ 0
|
||||
1/2 VCC = 1.5V
|
||||
$EndSCHEMATC
|
||||
3246
doc/quick-tech-report/photolink_schematic.svg
Normal file
3246
doc/quick-tech-report/photolink_schematic.svg
Normal file
File diff suppressed because it is too large
Load diff
|
After Width: | Height: | Size: 109 KiB |
BIN
doc/quick-tech-report/proto_3d_design.jpg
Normal file
BIN
doc/quick-tech-report/proto_3d_design.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
BIN
doc/quick-tech-report/prototype_early_comms_small.jpg
Normal file
BIN
doc/quick-tech-report/prototype_early_comms_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 506 KiB |
BIN
doc/quick-tech-report/rotohsm_tech_report.pdf
Normal file
BIN
doc/quick-tech-report/rotohsm_tech_report.pdf
Normal file
Binary file not shown.
|
|
@ -315,18 +315,6 @@ In our design with a stationary payload where only the security mesh and sensors
|
|||
reports and a high-frequency alarm trigger heartbeat signal have to pass from rotor to stator. For this, a simple
|
||||
optocoupler close to the axis of rotation is a good solution.
|
||||
|
||||
% FIXME note prototype implementation here
|
||||
|
||||
\subsection{Hardware prototype}
|
||||
|
||||
% FIXME expand & update below w/ hw proto findings
|
||||
|
||||
We are currently working on a hardware prototype that demonstrates the fundamental components of our concept. The
|
||||
prototype will be based on a security mesh made with a commercial printed circuit board manufacturing process. In our
|
||||
prototype we intend to use two commercially available hollow-shaft brushless DC (BLDC) motors originally intended for
|
||||
quadcopter-mounted camera gimbals, one for driving and one for power transfer. The prototype will have a usable internal
|
||||
volume sufficient to house a small form factor PC ($\approx\SI{2}{\liter}$).
|
||||
|
||||
\section{Attacks}
|
||||
\subsection{Attacks on the mesh}
|
||||
|
||||
|
|
@ -382,7 +370,134 @@ If the rate of rotation is set to change on a schedule, it is trivially detectab
|
|||
\section{Prototype implementation}
|
||||
|
||||
%FIXME
|
||||
FIXME
|
||||
To validate our theoretical design, we have implemented a prototype rotary HSM. The main engineering challenges we
|
||||
solved in our prototype are:
|
||||
\begin{enumerate}
|
||||
\item Fundamental mechanical design suitable for rapid prototyping that can withstand a rotation of $\SI{500}{rpm}$.
|
||||
\item Automatic generation of security mesh PCB layouts for quick adaption to new form factors.
|
||||
\item Non-contact power transmission to rotor.
|
||||
\item Non-contact bidirectional data communication between stator and rotor.
|
||||
\end{enumerate}
|
||||
|
||||
\subsection{Mechanical design}
|
||||
|
||||
We sized our prototype to have space for one or two full-size Raspberry Pi boards. Each one of these boards is already
|
||||
more powerful than an ordinary HSM, but they are small enough to simplify our prototype's design. For low-cost
|
||||
prototyping we designed our prototype to use printed circuit boards as its main structural material. The interlocking
|
||||
parts were designed in FreeCAD mechanical CAD as shown in Figure \ref{proto_3d_design}. The mechanical designs were
|
||||
exported to KiCAD for electrical design before being sent to a commercial PCB manufacturer. Rotor and stator are built
|
||||
from interlocking, soldered PCBs. The components are mounted to a $\SI{6}{\milli\meter}$ brass tube using FDM 3D printed
|
||||
flanges. The rotor is driven by a small hobby quadcopter motor.
|
||||
|
||||
Security is provided by a PCB security mesh enveloping the entire system and extending to within a few millimeters of
|
||||
the shaft. For security it is not necessary to cover the entire circumference of the module with mesh, so we opted to
|
||||
use only three narrow longitudinal struts to save weight.
|
||||
|
||||
To mount the entire HSM, we chose to use ``2020'' modular aluminium profile.
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics[height=7cm]{proto_3d_design.jpg}
|
||||
\caption{The 3D CAD design of the prototype.}
|
||||
\label{proto_3d_design}
|
||||
\end{figure}
|
||||
|
||||
\subsection{PCB security mesh generation}
|
||||
|
||||
To allow a quick iteration of our design while producing results with a realistic level of security, we wrote a plugin
|
||||
for the KiCAD EDA suite that automatically generates parametrized security meshes. When KiCAD is used in conjunction
|
||||
with FreeCAD through FreeCAD's KiCAD StepUp plugin, this ends up in an efficient toolchain from mechanical CAD design to
|
||||
security mesh PCB gerber files. The mesh generation plugin can be found at its
|
||||
website\footnote{\url{https://blog.jaseg.de/posts/kicad-mesh-plugin/}}.
|
||||
|
||||
Our mesh generation plugin overlays a grid on the target area and then produces a randomized tree covering this grid.
|
||||
The individual mesh traces are then traced along a depth-first search through this tree. A visualization of the steps is
|
||||
shown in Figure \ref{mesh_gen_viz}. A sample of the production results from our prototype is shown in Figure
|
||||
\ref{mesh_gen_sample}.
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics[width=9cm]{mesh_gen_viz.pdf}
|
||||
\caption{Overview of the automatic security mesh generation process. 1 - the blob is the example target area. 2 - A
|
||||
grid is overlayed. 3 - Grid cells outside of the target area are removed. 4 - A random tree covering the remaining
|
||||
cells is generated. 5 - The mesh traces are traced along a depth-first walk of the tree. 6 - Result.}
|
||||
\label{mesh_gen_viz}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics[width=6cm]{mesh_scan_crop.jpg}
|
||||
\caption{A section of the security mesh PCB we produced with our toolchain for the prototype HSM.}
|
||||
\label{mesh_gen_sample}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Data transmission through rotating joint}
|
||||
|
||||
As a baseline solution for data transmission, we settled on a $\SI{115}{\kilo\baud}$ UART signal sent through a simple
|
||||
bidirectional infrared link. In the transmitter, the UART TX line on-off modulates a $\SI{920}{\nano\meter}$ IR LED
|
||||
through a common-emitter driver transistor. In the receiver, an IR PIN photodiode reverse-biased to
|
||||
$\frac{1}{2}V_\text{CC}$ is connected to a reasonably wideband transimpedance amplifier (TIA) with a
|
||||
$\SI{100}{\kilo\ohm}$ transimpedance. As shown in Figure \ref{photolink_schematic}, the output of this TIA is fed
|
||||
through another $G=100$ amplifier whose output is then squared up by a comparator. We used an \textsf{MCP6494} quad
|
||||
CMOS op-amp. At a specified $\SI{2}{\milli\ampere}$ current consumption it is within our rotor's power budget, and its
|
||||
Gain Bandwidth Product of $\SI{7.5}{\mega\hertz}$ yields a useful transimpedance in the photodiode-facing TIA stage.
|
||||
|
||||
To reduce the requirements on power transmission to the rotor, we have tried to reduce power consumption of the
|
||||
rotor-side receiver/transmitter pair trading off stator-side power consumption. One part of this is that we use
|
||||
a wide-angle photodiode and IR LED on the stator, but use narrow-angle components on the rotor. The two rx/tx pairs are
|
||||
arranged next to the motor on opposite sides. By placing the narrow-angle rotor rx/tx components on the outside as
|
||||
shown in Figure \ref{ir_tx_schema}, the motor shields both IR links from crosstalk. The rotor transmitter LED is
|
||||
driven at $\SI{1}{\milli\ampere}$ while the stator transmitter LED is driven at $\SI{20}{\milli\ampere}$.
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics{ir_tx_schema.pdf}
|
||||
\caption{Schema of our bidirectional IR communication link between rotor and stator, view along axis of rotation. 1
|
||||
- Rotor base PCB. 2 - Stator IR link PCB. 3 - Motor. 4 - receiver PIN photodiode. 5 - transmitter IR LED.}
|
||||
\label{ir_tx_schema}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics[width=9cm]{photolink_schematic.pdf}
|
||||
\caption{Schematic of the IR communication link. Component values are only examples. In particular C2 depends highly
|
||||
on the photodiode used and stray capacitances due to the component layout.}
|
||||
\label{photolink_schematic}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Power transmission through rotating joint}
|
||||
|
||||
Since this prototype serves only demonstration purposes, we chose to use the simplest possible method of power
|
||||
transmission: Solar cells. We mounted six series-connected solar cells made up from three commercially available modules
|
||||
on the circular PCB at the end of our cylindrical rotor. The solar cells direclty feed the rotor's logic supply with
|
||||
buffering by a large $\SI{33}{\micro\farad}$ ceramic capacitor. With six cells in series, they provide around
|
||||
$\SI{3.0}{\volt}$ at several tens of $\si{\milli\ampere}$ given sufficient illumination.
|
||||
|
||||
For simplicity and weight reduction, at this point we chose to forego large buffer capacitors on the rotor. This means
|
||||
variations in solar cell illumination directly couple into the microcontroller's supply rail. Initially, we experimented
|
||||
with regular residential LED light bulbs, but those turned out to have too much flicker and lead to our microcontroller
|
||||
frequently rebooting. Trials using an incandecent light produced a stable supply, but the large amount of infrared light
|
||||
emitted by the incandecent light bulb severely disturbed our near-infrared communication link. As a consequence of
|
||||
this, we settled on a small LED light made for photography applications that provdided us with mostly flicker-free
|
||||
light, leading to a sufficiently stable microcontroller VCC rail without any disturbance to the IR link.
|
||||
|
||||
\subsection{Evaluation}
|
||||
|
||||
During experiments, our prototype performed as intended. After some experimentation, we got both power and data
|
||||
transmission through the rotating joint working reliably. Figure \ref{prototype_early_comms} shows our prototype
|
||||
performing reliably at maximum speed for the first time. Our improvised IR link is open in both directions for about
|
||||
$\SI{60}{\degree}$ of the rotation, which allows us to reliably transfer several tens of bytes in each direction during
|
||||
each receiver's fly-by even at high speed of rotation. As a result of our prototype experiments, we consider a
|
||||
larger-scale implementation of the inertial HSM concept practical.
|
||||
|
||||
\begin{figure}
|
||||
\center
|
||||
\includegraphics[width=8cm]{prototype_early_comms_small.jpg}
|
||||
\caption{The protoype when we first achieved reliable power transfer and bidirectional communication between stator
|
||||
and rotor. In the picture, the prototype was communicating reliably up to the maximum $\approx\SI{1500}{rpm}$ that
|
||||
we could get out of its hobby quadcopter parts.}
|
||||
\label{prototype_early_comms}
|
||||
\end{figure}
|
||||
|
||||
\section{Future Work}
|
||||
|
||||
|
|
@ -416,9 +531,10 @@ or courier services after spin-up.
|
|||
\section{Conclusion}
|
||||
In this paper, we have presented inertial hardware security modules, a novel concept for the construction of highly
|
||||
secure hardware security modules from inexpensive, commonly available parts. We have elaborated the engineering
|
||||
considerations underlying a practical implementation of this concept. We have analyzed the concept for its security
|
||||
properties and highlighted its ability to significantly strengthen otherwise weak tamper detection barriers. We have
|
||||
laid out some ideas for future research on the concept.
|
||||
considerations underlying a practical implementation of this concept. We have implemented a prototype demonstrating
|
||||
practical solutions to the significant engineering challenges of this concept. We have analyzed the concept for its
|
||||
security properties and highlighted its ability to significantly strengthen otherwise weak tamper detection barriers. We
|
||||
have laid out some ideas for future research on the concept.
|
||||
|
||||
\printbibliography[heading=bibintoc]
|
||||
\appendix
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ int main(void) {
|
|||
int i = 0;
|
||||
while (23) {
|
||||
if (tx_st.remaining_bytes == 0) {
|
||||
if (i > 1000) {
|
||||
if (i > 100) {
|
||||
res_buf.req_seq = req_seq;
|
||||
res_buf.res_seq = res_seq;
|
||||
res_seq += 1;
|
||||
|
|
@ -118,7 +118,7 @@ int main(void) {
|
|||
} else {
|
||||
if (rc == sizeof(req_buf)) {
|
||||
crc32_t check_crc = pkt_crc(&req_buf, &req_buf.trailer);
|
||||
if (check_crc != req_buf.trailer.crc32) {
|
||||
if (check_crc != req_buf.trailer.crc32 || check_crc == 0 || check_crc == -1) {
|
||||
rx_crc_error += 1;
|
||||
} else {
|
||||
req_seq = req_buf.req_seq;
|
||||
|
|
|
|||
|
|
@ -32,15 +32,15 @@ if __name__ == '__main__':
|
|||
while True:
|
||||
data = ser.read()
|
||||
for c in data:
|
||||
if byte_count == 0:
|
||||
print(f'\033[38;5;244m{time.time() - start_time: 8.3f} \033[0m', end='')
|
||||
#if byte_count == 0:
|
||||
#print(f'\033[38;5;244m{time.time() - start_time: 8.3f} \033[0m', end='')
|
||||
|
||||
col = '\033[91m' if c == 0 else '\033[0m' # if c == (lastc - 1) % 256 else '\033[92m')
|
||||
print(f'{col}{c:02x}', end=' ')
|
||||
#print(f'{col}{c:02x}', end=' ')
|
||||
line += bytes([c])
|
||||
byte_count += 1
|
||||
if c == 0:
|
||||
print(' ' * (16 - byte_count), end='\033[0m\n')
|
||||
#print(' ' * (16 - byte_count), end='\033[0m\n')
|
||||
byte_count = 16
|
||||
try:
|
||||
payload = cobs.decode(packet)
|
||||
|
|
@ -51,7 +51,8 @@ if __name__ == '__main__':
|
|||
else:
|
||||
crc_ok = False
|
||||
ref_crc = ''
|
||||
print(' '.join(f'{col if col else ""}{c if c else 0:02x}' for col, c in itertools.zip_longest(field_colors,
|
||||
if len(payload) == 12:
|
||||
print(' '.join(f'{col if col else ""}{c if c else 0:02x}' for col, c in itertools.zip_longest(field_colors,
|
||||
payload)), 'OK' if crc_ok else f'WRONG')
|
||||
except cobs.DecodeError:
|
||||
print('COBS framing error')
|
||||
|
|
@ -61,7 +62,7 @@ if __name__ == '__main__':
|
|||
isprint = lambda c: c in b'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ '
|
||||
if byte_count == 16:
|
||||
printable = ''.join( chr(c) if isprint(c) else '.' for c in line )
|
||||
print(f'\033[93m | {printable}\033[0m')
|
||||
#print(f'\033[93m | {printable}\033[0m')
|
||||
byte_count = 0
|
||||
line = b''
|
||||
lastc = c
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue