paper: Add initial experimental results

This commit is contained in:
jaseg 2020-12-01 19:36:02 +01:00
parent 2967dcee39
commit 0e6fbeecf1
16 changed files with 6918 additions and 24 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

View 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

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

View 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

View 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

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

Binary file not shown.

View file

@ -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

View file

@ -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;

View file

@ -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