Initial commit
All checks were successful
KiBot CI / test (push) Successful in 49s

This commit is contained in:
2026-03-10 23:04:58 +00:00
commit 862bd3b95f
70 changed files with 9502 additions and 0 deletions

215
.gitea/workflows/ci.yaml Normal file
View File

@@ -0,0 +1,215 @@
name: KiBot CI
on:
workflow_dispatch:
push:
tags:
- release/rev-**
branches:
- main
- dev
- review/rev-**
paths-ignore:
- '*.md'
env:
# KiBot Configuration
kibot_cache: kibot/cache
kibot_config: kibot/yaml/kibot_main.yaml
kibot_draft: true
kibot_log: kibot_run.log
# Update these to correspond to the KiCad version
kibot_group: "all_group"
kibot_tag: "dev"
jobs:
test:
runs-on: ubuntu-latest
container: ghcr.io/inti-cmnb/kicad9_auto_full:${{ env.kibot_tag }}
if: ${{ github.ref_type == 'tag' || !startsWith(github.event.head_commit.message, 'Merge pull request') }}
steps:
- name: Install NodeJS
run: |
apt-get update && apt -y install --no-install-recommends nodejs
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
sparse-checkout: null
- name: Determine Release Stage
shell: bash
run: |
stage=unknown
if [ "${{ github.ref == 'refs/heads/dev' }}" = "true" ] ; then
if [ "${{ env.kibot_draft }}" = "true" ] ; then
stage=DRAFT
else
stage=WORKING
fi
else
if [ "${{ env.kibot_draft}}" == "true" ] ; then
echo "Error: kibot_draft is set outside of dev branch"
exit 1
fi
if [ "${{ startsWith(github.ref, 'refs/heads/review/rev-') }}" = "true" ] ; then
stage=REVIEW
elif [ "${{ github.ref_type == 'tag' }}" = "true" ] ; then
stage=RELEASE
else
echo "Error: could not determine release stage"
exit 1
fi
fi
echo "Release Stage: $stage"
echo "kibot_stage=$stage" > $GITHUB_ENV
- name: Setup KiBot Arguments
shell: bash
run: |
last_tag=$(git describe --tags --abbrev=0 || echo "NO_TAG")
echo "Last tag: ${last_tag}"
if [ "${{ github.ref_type }}" = "tag" ]; then
version_arg="-E RELEASE_STATE='RELEASE' -E REVISION='${last_tag##release/rev-}'"
echo "Overriding kibot_variant to 'RELEASE' for tag"
echo "kibot_variant=RELEASE" >> $GITHUB_ENV
else
version_arg="-E RELEASE_STATE='${{ env.kibot_stage }}' -E REVISION='${last_tag##release/rev-}+ (Unreleased)'"
echo "kibot_variant=${{ env.kibot_stage }}" >> $GITHUB_ENV
fi
case "$kibot_stage" in
"DRAFT")
additional_args="--skip-pre draw_fancy_stackup,erc,drc ${version_arg} --log ${{ env.kibot_log }} draft_group"
;;
"WORKING")
additional_args="--skip-pre erc,drc ${version_arg} -E BLENDER_SAMPLES=2 --log ${{ env.kibot_log }} ${{ env.kibot_group }}"
;;
"REVIEW"|"RELEASE")
additional_args="${version_arg} --log ${{ env.kibot_log }} ${{ env.kibot_group }}"
;;
*)
echo "Unknown Stage: $kibot_stage"
exit 1
;;
esac
echo "version_arg=${version_arg}" >> $GITHUB_ENV
echo "additional_args=${additional_args}" >> $GITHUB_ENV
- name: Remove KiRi Files from Prior Revisions
shell: bash
run: '[ -d kiri ] && git rm -rf kiri/* || echo "No KiRi files to delete"'
- name: Retrieve Cached 3d Models
id: cache-models-restore
uses: actions/cache/restore@v4
with:
path: ${{ env.kibot_cache }}/3d_models
key: 3d_models
- name: Check KiBot Version Information
shell: bash
run: |
kibot --version | awk '{ print $1 ": " $2 }'
echo KiCad: `dpkg --robot -l kicad | grep kicad | awk '{print $3}'`
echo Debian: `cat /etc/debian_version`
pcbnew_do --version | awk 'BEGIN{ done=0 } { if (done == 0) { print "KiAuto: " $2; done=1 } }'
echo "iBoM:" `INTERACTIVE_HTML_BOM_NO_DISPLAY=True generate_interactive_bom.py --version 2> /dev/null | grep "^v" | tr -d 'v'`
- name: Run KiBot (Update XML)
shell: bash
run: |
/usr/bin/kicad-git-filters.py
kibot -c kibot/yaml/kibot_pre_update_xml.yaml -d . --log kibot_run_xml.log
- name: Run KiBot (Preprocessing)
shell: bash
run: |
/usr/bin/kicad-git-filters.py
kibot -c ${{ env.kibot_config }} \
-d . \
--log kibot_run_preprocess.log \
--skip-pre all \
${{ env.version_arg }} \
preprocess_group
- name: Run KiBot (Outputs)
shell: bash
run: |
/usr/bin/kicad-git-filters.py
export KIBOT_3D_MODELS="${{ env.kibot_cache }}/3d_models"
echo Exporting KIBOT_3D_MODELS=$KIBOT_3D_MODELS
kibot -c ${{ env.kibot_config }} -d . ${{ env.additional_args }}
- name: Save Cached 3d Models
id: cache-models-save
if: always()
uses: actions/cache/save@v4
with:
path: ${{ env.kibot_cache }}/3d_models
key: ${{ steps.cache-models-restore.outputs.cache-primary-key }}
- name: Pull latest changes
shell: bash
run: |
git config --global user.email "gitea-actions[bot]@users.noreply.git.asymworks.com"
git config --global user.name "Gitea Actions"
if [ "${{ github.ref_type }}" = "tag" ]; then
echo "Triggered by a tag, committing changes in detached HEAD state"
git add -A
git commit -m "[bot]: Update Outputs (release)"
DETACHED_COMMIT=$(git rev-parse HEAD)
echo "Checking out the main branch"
git fetch origin main
git checkout main
echo "Merging detached HEAD commit into main"
git merge --no-ff $DETACHED_COMMIT -m "[bot]: Merge release artifacts from workflow" -X theirs
echo "Pushing to main branch"
git push origin main
else
echo "Triggered by a branch, using the current branch"
git pull origin ${{ github.ref_name }} --tags --force
fi
- name: Discard changes to .kicad_pcb files and remove temp files
run: |
git checkout HEAD -- $(git ls-files "*.kicad_pcb")
git clean -f -e "panels/*" "*.kicad_pcb"
git clean -f -e "panels/*" "*.kicad_pro"
git clean -f -e "panels/*" "*.kicad_dru"
git clean -f -e "panels/*" "*.kicad_prl"
- name: Push Outputs
uses: stefanzweifel/git-auto-commit-action@v5
with:
branch: ${{ github.ref_name }}
commit_message: '[bot]: Update Outputs'
- name: Upload XML Update Log
if: ${{ always() }}
uses: christopherhx/gitea-upload-artifact@v4
with:
name: log_file_xml
path: kibot_run_xml.log
- name: Upload Preprocessing Log
if: ${{ always() }}
uses: christopherhx/gitea-upload-artifact@v4
with:
name: log_file_preprocess
path: kibot_run_preprocess.log
- name: Upload KiBot Log
if: ${{ always() }}
uses: christopherhx/gitea-upload-artifact@v4
with:
name: log_file_kibot
path: ${{ env.kibot_log }}

46
.gitignore vendored Normal file
View File

@@ -0,0 +1,46 @@
# ---> KiBot
*-backups
\#auto_saved_files#
_autosave-*
*.lck
*.bak
*.ini
*.kicad_sch-bak
*.kicad_pro-bak
*.kicad_pcb-bak
*.kicad_prl-bak
fp-info-cache
*Zone.Identifier
kibot_*.kicad_pcb
kibot_*.kicad_dru
kibot_*.kicad_prl
kibot_*.kicad_pro
kibot_*.log
pcbnew.kicad_wks
schematic.kicad_wks
kibot/cache/
# ---> KiCad
# For PCBs designed using KiCad: https://www.kicad.org/
# Format documentation: https://kicad.org/help/file-formats/
# Temporary files
*.000
*.bak
*.bck
*.kicad_pcb-bak
*.kicad_sch-bak
*-backups
*.kicad_prl
*.sch-bak
*~
_autosave-*
*.tmp
*-save.pro
*-save.kicad_pcb
fp-info-cache
~*.lck
\#auto_saved_files#
# MacOS Cruft
.DS_Store

View File

@@ -0,0 +1,242 @@
(version 1)
# Custom Design Rules (DRC) for KiCAD 9.0 (Stored in '<project>.kicad_dru' file).
#
# Matching JLCPCB capabilities: https://jlcpcb.com/capabilities/pcb-capabilities
#
# KiCad documentation: https://docs.kicad.org/master/id/pcbnew/pcbnew_advanced.html#custom_design_rules
#
# Inspiration
# - https://gist.github.com/darkxst/f713268e5469645425eed40115fb8b49 (with comments)
# - https://gist.github.com/denniskupec/e163d13b0a64c2044bd259f64659485e (with comments)
# - https://github.com/labtroll/KiCad-DesignRules/blob/main/JLCPCB/JLCPCB.kicad_dru
# ======================================================================================================
# Drilling and Pads
# Minimum Drill Diameter (All Holes)
# Note that JLCPCB supports drills down to 0.15mm for multilayer boards, but it incurs additional
# cost. This design rule assumes the 0.2mm "preferred" minimum via size callout.
(rule "Hole Diameter"
(constraint hole_size (min 0.2mm) (max 6.3mm))
)
# Blind/Buried Vias Not Supported
(rule "No Blind or Buried Vias"
(constraint disallow buried_via)
)
# Minimum Via Diameter
# JLCPCB: "Multilayer: 0.15 mm hole size / 0.25 mm via diameter"
# "1. Via diameter should be 0.1mm (0.15mm preferred) larger than Via hole size."
# "2. Preferred Min. Via hole size: 0.2mm"
(rule "Via Diameter"
(layer outer)
(condition "A.isPlated() && A.Type == 'Via'")
(constraint annular_width (min 0.05mm) (opt 0.075mm))
)
# Minimum NPTH
# JLCPCB: "Please draw NPTHs in the mechanical layer or keep out layer."
(rule "Hole (NPTH) Diameter"
(condition "!A.isPlated()")
(constraint hole_size (min 0.5mm))
)
# Minimum Plated Slot Width
# JLCPCB: "The minimum plated slot width is 0.5mm, which is drawn with a pad."
(rule "Plated Slot Size"
(constraint hole_size (min 0.5mm))
(condition "A.isPlated() && A.Hole_Size_X != A.Hole_Size_Y")
)
# TODO: Plated Slot Minimum Aspect Ratio
# JLCPCB: "The length of the slot should be at least 2 times of the width."
# Minimum Unplated Slot Width
# JLCPCB: "The minimum Non-Plated Slot Width is 1.0mm, please draw the slot outline in the mechanical layer (GM1 or GKO)"
(rule "Unplated Slot Size"
(constraint hole_size (min 1.0mm))
(condition "!A.isPlated() && A.Hole_Size_X != A.Hole_Size_Y")
)
# Via Hole-to-Hole Spacing
(rule "Clearance: Via Hole to Hole"
(layer outer)
(condition "A.isPlated() && B.isPlated() && A.Type == 'Via' && B.Type == 'Via' && A.Net != B.Net")
(constraint hole_to_hole (min 0.2mm))
)
# Pad Hole-to-Hole Spacing
(rule "Clearance: Pad Hole to Hole"
(layer outer)
(condition "A.isPlated() && B.isPlated() && A.Type == 'Pad' && B.Type == 'Pad' && A.Net != B.Net")
(constraint hole_to_hole (min 0.45mm))
)
# Castellated Hole Size
# JLCPCB: "Hole diameter (Φ): ≥ 0.5 mm"
# JLCPCB: "Hole to hole (D): ≥ 0.5 mm"
(rule "Castellated Hole Diameter and Spacing"
(layer outer)
(condition "A.Type == 'Pad' && A.Fabrication_Property == 'Castellated pad'")
(constraint hole_size (min 0.5mm))
(constraint hole_to_hole (min 0.5mm))
)
# TODO: Castellated Hole to Board Edge
# JLCPCB: "Hole to board edge (L): ≥ 1 mm"
# TODO: Castellated Hole Minimum Board Size
# JLCPCB: "Min. PCB size10 × 10 mm"
# TODO: Castellated Hole Minimum Board Thickness
# JLCPCB: "Min. PCB thickness: 0.6 mm"
# TODO: Blind Slots
# TODO: Slot Minimum Radius
# JLCPCB: "Rectangular holes and slots without rounded corners are not supported."
# ======================================================================================================
# Traces
# Track Width and Spacing (1oz copper outer / 0.5oz copper inner)
# JLCPCB: "Multilayer: 0.09 / 0.09 mm (3.5 / 3.5 mil). 3 mil is acceptable in BGA fan-outs."
# Adjust these down when doing BGA breakouts
(rule "Track Width, Outer Layer, 1oz Copper"
(layer outer)
(condition "A.Type == 'track'")
(constraint track_width (min 0.1mm))
)
(rule "Track Spacing, Outer Layer, 1oz Copper"
(layer outer)
(condition "A.Type == 'track' && B.Type == A.Type")
(constraint clearance (min 0.1mm))
)
(rule "Track Width, Inner Layer, 0.5oz Copper"
(layer inner)
(condition "A.Type == 'track'")
(constraint track_width (min 0.09mm))
)
(rule "Track Spacing, Inner Layer, 0.5oz Copper"
(layer inner)
(condition "A.Type == 'track' && B.Type == A.Type")
(constraint clearance (min 0.09mm))
)
# PTH Annular Ring
# JLCPCB: "1 oz: Recommended 0.20 mm or above; absolute minimum 0.15 mm"
(rule "Annular Ring (PTH), 1.0oz Copper"
(layer outer)
(condition "A.isPlated() && A.Type == 'Pad'")
(constraint annular_width (min 0.15mm) (opt 0.2mm))
)
# NPTH Annular Ring
# JLCPCB: "Recommended 0.45 mm or more. This is to allow a 0.2 mm ring of copper to be removed around the hole for the sealing film to attach. Pad sizes smaller than the recommended value can result in the annular ring being very thin or completely missing."
(rule "Annular Ring (NPTH)"
(layer outer)
(condition "!A.isPlated() && A.Type == 'Pad'")
(constraint annular_width (min 0.45mm))
)
# TODO: BGA Pad Size
# JLCPCB: "1. BGA pad diameter ≥ 0.25 mm"
# "2. BGA pad to trace clearance ≥ 0.1 mm (min. 0.09 mm for multilayer boards)"
# "3. Vias can be placed within BGA pads using filled and plated-over vias"
# TODO: Same-Net Track Spacing
# Inner Layer Via to Trace Clearance
(rule "Via to Trace Clearance (Inner Layer)"
(layer inner)
(condition "A.Type == 'Via' && B.Type == 'Track' && A.Net != B.Net")
(constraint hole_clearance (min 0.2mm))
)
# Inner Layer PTH to Trace Clearance
(rule "Hole to Trace Clearance (Inner Layer)"
(layer inner)
(condition "A.Type == 'Pad' && B.Type == 'Track' && A.Net != B.Net")
(constraint hole_clearance (min 0.3mm))
)
# Outer Layer Pad to Track Clearance
# JLCPCB: "Min. 0.1 mm (stay well above if possible). Min. 0.09 mm locally for BGA pads"
(rule "Pad to Trace Clearance (Outer Layer)"
(layer outer)
(condition "A.Type == 'Pad' && B.Type == 'Track' && A.Net != B.Net")
(constraint clearance (min 0.1mm))
)
# SMD Pad-to-Pad Clearance
(rule "Pad to Pad Clearance"
(layer outer)
(condition "A.Type == 'Pad' && B.Type == A.Type && A.Net != B.Net")
(constraint clearance (min 0.15mm))
)
# Outer Layer Via Hole to Trace Clearance
(rule "Via to Trace Clearance (Outer Layer)"
(layer outer)
(condition "A.Type == 'Via' && B.Type == 'Track' && A.Net != B.Net")
(constraint hole_clearance (min 0.2mm))
)
# Outer Layer PTH to Trace Clearance
(rule "PTH to Trace Clearance (Outer Layer)"
(layer outer)
(condition "A.isPlated() && A.Type != 'Via' && B.Type == 'Track' && A.Net != B.Net")
(constraint hole_clearance (min 0.28mm))
)
# Outer Layer NPTH to Trace Clearance
(rule "NPTH to Trace Clearance (Outer Layer)"
(layer outer)
(condition "!A.isPlated() && B.Type == 'Track'")
(constraint hole_clearance (min 0.2mm))
)
# ======================================================================================================
# Silkscreen
# Minimum Line Width
(rule "Silkscreen Minimum Width (Lines)"
(layer "?.Silkscreen")
(condition "A.Type == 'Graphic' && A.Line_Width <= 0.153mm")
(constraint disallow graphic)
)
# Minimum Text Width / Height
(rule "Silkscreen Minimum Width (Text)"
(layer "?.Silkscreen")
(condition "A.Type == 'Text' || A.Type == 'TextBox'")
(constraint text_thickness (min 0.15mm))
(constraint text_height (min 1mm))
)
# Pad to Silkscreen Clearance
(rule "Pad to Sillkscreen Clearance"
(layer outer)
(condition "A.Type == 'Pad' && B.Layer == '?.Silkscreen'")
(constraint silk_clearance (min 0.15mm))
)
# ======================================================================================================
# Outline
# Copper to Edge Clearance
(rule "Copper to Routed Edge Clearance"
(condition "A.Type == 'track'")
(constraint edge_clearance (min 0.2mm))
)
# Copper to V-Cut Clearance
# (rule "Copper to V-Cut Edge Clearance"
# (condition "A.Type == 'track'")
# (constraint edge_clearance (min 0.4mm))
# )

2076
Asymworks_Template.kicad_pcb Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,694 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": true,
"text_position": 0,
"units_format": 0
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.8,
"height": 1.27,
"width": 2.54
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"creepage": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_to_hole": "warning",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_on_edge_cuts": "error",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpthpad": true,
"td_onroundshapesonly": false,
"td_onsmdpad": true,
"td_ontrackend": false,
"td_onvia": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "error",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"undefined_netclass": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Asymworks_Template.kicad_pro",
"version": 3
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 4
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": "kicad-embed://Asymworks_PCB.kicad_wks"
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": true,
"label": "Exclude from BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
},
{
"group_by": true,
"label": "Exclude from Board",
"name": "${EXCLUDE_FROM_BOARD}",
"show": true
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": true,
"name": "Default Editing",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": true,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "KiCad",
"page_layout_descr_file": "kicad-embed://Asymworks_SCH.kicad_wks",
"plot_directory": "",
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b",
"Root"
],
[
"28ad8293-baaf-4ee1-8056-ad34096542a0",
"Block Diagram"
],
[
"f6afef58-d841-4ad6-baf9-746b0a35f011",
"Project Architecture"
],
[
"a5aa3c11-5084-4ea5-9da5-c9ff4a86f01f",
"Circuit 1"
],
[
"9da43fd7-7a0a-403c-bf2c-ba67cd8fa669",
"Circuit 2"
],
[
"6c8ce547-8e28-496a-9003-0e7dbfd93e8c",
"Circuit 3"
]
],
"text_variables": {
"ASSEMBLY_NAME": "",
"ASSEMBLY_NUMBER": "",
"ASSEMBLY_SCALE": "",
"COMPANY": "Asymworks, LLC",
"DESIGNER": "JPK",
"DWG_NUMBER_PCB": "",
"DWG_NUMBER_SCH": "",
"DWG_TITLE_ASSY": "",
"DWG_TITLE_PCB": "",
"DWG_TITLE_SCH": "",
"GIT_HASH": "",
"GIT_HASH_PCB": "",
"GIT_HASH_SCH": "",
"GIT_URL": "",
"PROJECT_CODE": "",
"RELEASE_DATE": "",
"RELEASE_STATE": "",
"REVISION": "${REVISION}",
"SCALE": "1:1",
"SHEET_NAME_01": "Cover Page",
"SHEET_NAME_02": "Block Diagram",
"SHEET_NAME_03": "Project Architecture",
"SHEET_NAME_04": "Circuit 1",
"SHEET_NAME_05": "Circuit 2",
"SHEET_NAME_06": "Circuit 3",
"SHEET_NAME_07": "Parts List",
"SHEET_NAME_08": "......................................",
"SHEET_NAME_09": "......................................",
"SHEET_NAME_10": "......................................",
"SHEET_NAME_11": "......................................",
"SHEET_NAME_12": "......................................",
"SHEET_NAME_13": "......................................",
"SHEET_NAME_14": "......................................",
"SHEET_NAME_15": "......................................",
"SHEET_NAME_16": "......................................",
"SHEET_NAME_17": "......................................",
"SHEET_NAME_18": "......................................",
"SHEET_NAME_19": "......................................",
"SHEET_NAME_20": "......................................",
"STATE": "TEMPLATE",
"VARIANT": ""
}
}

View File

@@ -0,0 +1,928 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b")
(paper "A3")
(title_block
(title "Title Page")
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
(text "${SHEET_NAME_10}"
(exclude_from_sim no)
(at 35.56 64.77 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#10")
)
(uuid "0d8238a6-a26e-410a-a396-b84eb366acdd")
)
(text "Sheet 15"
(exclude_from_sim no)
(at 76.2 45.72 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#15")
)
(uuid "12257cc1-f441-406a-b206-5f9f6abdae62")
)
(text "${SHEET_NAME_15}"
(exclude_from_sim no)
(at 86.36 45.72 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#15")
)
(uuid "12cf5bc2-996e-4d2d-9d59-08f5928edc34")
)
(text "Sheet 16"
(exclude_from_sim no)
(at 76.2 49.53 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#16")
)
(uuid "1f7fbefc-60b0-4ef1-a843-df27827f4a57")
)
(text "Sheet 11"
(exclude_from_sim no)
(at 76.2 30.48 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#11")
)
(uuid "31c54666-5e5b-4c26-a755-807ffc9d912a")
)
(text "Sheet 19"
(exclude_from_sim no)
(at 76.2 60.96 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#19")
)
(uuid "36a549fb-00fb-4d38-b358-b84e28b9afea")
)
(text "Sheet 17"
(exclude_from_sim no)
(at 76.2 53.34 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#17")
)
(uuid "397c491c-915f-4dc9-be8f-a023d44ecaa4")
)
(text "Sheet 6"
(exclude_from_sim no)
(at 25.4 49.53 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#6")
)
(uuid "3d430d38-1ba9-4a85-81eb-c55b6b4df09a")
)
(text "${SHEET_NAME_12}"
(exclude_from_sim no)
(at 86.36 34.29 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#12")
)
(uuid "3e0737e6-d0e9-4d49-a0a1-2e7f24b692d4")
)
(text "${SHEET_NAME_19}"
(exclude_from_sim no)
(at 86.36 60.96 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#19")
)
(uuid "4a4593ec-30ce-4058-b38e-4715dbb5513e")
)
(text "Sheet 3"
(exclude_from_sim no)
(at 25.4 38.1 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#3")
)
(uuid "52c055ef-1235-44c3-bcc1-af0a77aeb5ec")
)
(text "${SHEET_NAME_07}"
(exclude_from_sim no)
(at 35.56 53.34 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#7")
)
(uuid "52c1f26a-1bd8-46e4-8232-05acf4e428a5")
)
(text "Sheet 18"
(exclude_from_sim no)
(at 76.2 57.15 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#18")
)
(uuid "58d3cb55-c0c9-4146-8f82-08b5635468c0")
)
(text "Sheet 1"
(exclude_from_sim no)
(at 25.4 30.48 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#1")
)
(uuid "5ecc74bb-919a-476c-bd7f-9fecef959dfe")
)
(text "${SHEET_NAME_01}"
(exclude_from_sim no)
(at 35.56 30.48 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#1")
)
(uuid "616a8d75-edc5-4fa1-b87d-1fabac30fcbc")
)
(text "${SHEET_NAME_02}"
(exclude_from_sim no)
(at 35.56 34.29 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#2")
)
(uuid "6d436dbd-1cf6-4c61-b6c6-716b295a48a7")
)
(text "${SHEET_NAME_06}"
(exclude_from_sim no)
(at 35.56 49.53 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#6")
)
(uuid "6d886c7c-2b93-4843-8180-1a80cc4028c0")
)
(text "${SHEET_NAME_03}"
(exclude_from_sim no)
(at 35.56 38.1 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#3")
)
(uuid "6eebeec5-502b-4a22-851a-75421f457b86")
)
(text "${SHEET_NAME_18}"
(exclude_from_sim no)
(at 86.36 57.15 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#18")
)
(uuid "74dfded3-150a-403d-bab4-4249652d2126")
)
(text "${SHEET_NAME_08}"
(exclude_from_sim no)
(at 35.56 57.15 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#8")
)
(uuid "75704f4a-74dc-4dcc-9528-8e82f84cc12f")
)
(text "${SHEET_NAME_20}"
(exclude_from_sim no)
(at 86.36 64.77 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#20")
)
(uuid "7ae381d0-130a-4840-8a49-73e0bcbe7b37")
)
(text "SCHEMATIC NOTES"
(exclude_from_sim no)
(at 25.4 74.93 0)
(effects
(font
(face "Arial Narrow")
(size 2.54 2.54)
(color 0 0 0 1)
)
(justify left bottom)
)
(uuid "80cb4d06-1500-4227-86cb-d09e41384a4e")
)
(text "Sheet 12"
(exclude_from_sim no)
(at 76.2 34.29 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#12")
)
(uuid "85c38101-b296-4cce-bd25-c66c8be77842")
)
(text "${SHEET_NAME_17}"
(exclude_from_sim no)
(at 86.36 53.34 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#17")
)
(uuid "8710a76c-86f9-4860-91c6-f93270c02cbd")
)
(text "${SHEET_NAME_05}"
(exclude_from_sim no)
(at 35.56 45.72 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#5")
)
(uuid "8b9e299c-61e8-461f-9708-e81c0cdde029")
)
(text "${SHEET_NAME_14}"
(exclude_from_sim no)
(at 86.36 41.91 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#14")
)
(uuid "935d930b-82d5-4dd0-abb6-284a8acc2dbf")
)
(text "Sheet 4"
(exclude_from_sim no)
(at 25.4 41.91 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#4")
)
(uuid "997bd171-a05d-4693-a8c9-79e57b1b96d8")
)
(text "PCBA RENDERS"
(exclude_from_sim no)
(at 278.13 49.53 0)
(effects
(font
(face "Arial Narrow")
(size 2.54 2.54)
(color 0 0 0 1)
)
(justify left bottom)
)
(uuid "9b8b4979-e7c2-414c-ad6a-28d852f29a05")
)
(text "TABLE OF CONTENTS"
(exclude_from_sim no)
(at 25.4 24.13 0)
(effects
(font
(face "Arial Narrow")
(size 2.54 2.54)
(color 0 0 0 1)
)
(justify left bottom)
)
(uuid "9d98cb42-7342-42e1-855a-da79d8cff176")
)
(text "${SHEET_NAME_11}"
(exclude_from_sim no)
(at 86.36 30.48 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#11")
)
(uuid "a7b5ffea-9e37-4616-aa94-cbde595bf314")
)
(text "${SHEET_NAME_04}"
(exclude_from_sim no)
(at 35.56 41.91 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#4")
)
(uuid "a8e92d65-a91a-4a60-ba8a-7ff3352ca6ef")
)
(text "${SHEET_NAME_16}"
(exclude_from_sim no)
(at 86.36 49.53 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#16")
)
(uuid "b0c386ac-5568-40c4-a802-a92dd108fcd3")
)
(text "Sheet 14"
(exclude_from_sim no)
(at 76.2 41.91 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#14")
)
(uuid "be0c7bf9-8a53-41a4-96c8-1b1cc07c8dd2")
)
(text "DESIGN NOTES"
(exclude_from_sim no)
(at 17.78 266.7 0)
(effects
(font
(face "Arial Narrow")
(size 2.54 2.54)
(color 0 0 0 1)
)
(justify left bottom)
)
(uuid "be18267d-084e-44ca-8de9-8034fbb5679d")
)
(text "${SHEET_NAME_13}"
(exclude_from_sim no)
(at 86.36 38.1 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#13")
)
(uuid "c2fbc0d5-399f-4475-89de-17f0eb981dd1")
)
(text "Sheet 5"
(exclude_from_sim no)
(at 25.4 45.72 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#5")
)
(uuid "c3909cef-d271-4962-9737-86a97f208fbd")
)
(text "Sheet 9"
(exclude_from_sim no)
(at 25.4 60.96 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#9")
)
(uuid "c6d60970-4975-4f0c-997a-bddd6955d8d5")
)
(text "Sheet 7"
(exclude_from_sim no)
(at 25.4 53.34 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#7")
)
(uuid "c7798015-3d82-4040-957d-290b73c90188")
)
(text "Sheet 13"
(exclude_from_sim no)
(at 76.2 38.1 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#13")
)
(uuid "d3561853-77cb-4a66-b906-e9a4cdb9d7b0")
)
(text "Sheet 10"
(exclude_from_sim no)
(at 25.4 64.77 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#10")
)
(uuid "ddb8ef5d-af61-46a4-86f6-271c3fac1c00")
)
(text "Sheet 20"
(exclude_from_sim no)
(at 76.2 64.77 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#20")
)
(uuid "de35d7f9-a7e7-4c50-9ffd-c89960ab2af3")
)
(text "Sheet 2"
(exclude_from_sim no)
(at 25.4 34.29 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#2")
)
(uuid "eafb43cf-53a5-4310-be03-07b3a24c075e")
)
(text "${SHEET_NAME_09}"
(exclude_from_sim no)
(at 35.56 60.96 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#9")
)
(uuid "f8903c8d-677e-478c-bc7b-8e6f4b0a6923")
)
(text "Sheet 8"
(exclude_from_sim no)
(at 25.4 57.15 0)
(effects
(font
(face "Arial Narrow")
(size 2.032 2.032)
(color 0 0 0 1)
)
(justify left bottom)
(href "#8")
)
(uuid "fff721b6-41b0-4009-b57e-54214f1ae51d")
)
(text_box "DESIGN NOTE:\nExample text for debug notes."
(exclude_from_sim no)
(at 71.12 267.97 0)
(size 25.4 10.16)
(margins 1.27 1.27 1.27 1.27)
(stroke
(width 0.635)
(type solid)
(color 255 165 0 1)
)
(fill
(type none)
)
(effects
(font
(face "Arial")
(size 1.27 1.27)
(color 0 0 0 1)
)
(justify left top)
)
(uuid "56a6fee7-5c63-44e0-8b96-244e4ce15659")
)
(text_box "DESIGN NOTE:\nExample text for cautionary design notes."
(exclude_from_sim no)
(at 44.45 267.97 0)
(size 25.4 10.16)
(margins 1.27 1.27 1.27 1.27)
(stroke
(width 0.508)
(type solid)
(color 250 236 0 1)
)
(fill
(type none)
)
(effects
(font
(face "Arial")
(size 1.27 1.27)
(color 0 0 0 1)
)
(justify left top)
)
(uuid "606d42aa-4355-4c3d-96b4-10778d0031a7")
)
(text_box "${SCHEMATIC_NOTES}"
(exclude_from_sim no)
(at 25.4 76.2 0)
(size 127 152.4)
(margins 0 0 0 0)
(stroke
(width -0.0001)
(type solid)
)
(fill
(type none)
)
(effects
(font
(face "Inconsolata")
(size 2.54 2.54)
(thickness 0.254)
(color 0 0 0 1)
)
(justify left top)
)
(uuid "93470195-2585-4f38-8fd4-6a6d463aa451")
)
(text_box "Replace this text with \"kibot_image_blender_3d_angled_bottom\" to invoke the Blender 3D Rendering output."
(exclude_from_sim no)
(at 279.4 139.7 0)
(size 101.6 76.2)
(margins 0.9525 0.9525 0.9525 0.9525)
(stroke
(width 0)
(type solid)
)
(fill
(type none)
)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
(uuid "bf1fa8e6-3d16-4dab-9141-73217f66d51f")
)
(text_box "LAYOUT NOTE:\nExample text for critical layout guidelines."
(exclude_from_sim no)
(at 97.79 267.97 0)
(size 25.4 10.16)
(margins 1.27 1.27 1.27 1.27)
(stroke
(width 0.635)
(type solid)
(color 0 0 255 1)
)
(fill
(type none)
)
(effects
(font
(face "Arial")
(size 1.27 1.27)
(thickness 0.4)
(bold yes)
(color 0 0 255 1)
)
(justify left top)
)
(uuid "ce23ffec-a353-4172-bf8e-55b9d63592b6")
)
(text_box "DESIGN NOTE:\nExample text for critical design notes."
(exclude_from_sim no)
(at 124.46 267.97 0)
(size 25.4 10.16)
(margins 1.27 1.27 1.27 1.27)
(stroke
(width 0.635)
(type solid)
(color 255 0 0 1)
)
(fill
(type none)
)
(effects
(font
(face "Arial")
(size 1.27 1.27)
(thickness 0.4)
(bold yes)
(color 255 0 0 1)
)
(justify left top)
)
(uuid "ee2ce514-b261-4f0a-9d2c-365116209738")
)
(text_box "Replace this text with \"kibot_image_blender_3d_angled_top\" to invoke the Blender 3D Rendering output."
(exclude_from_sim no)
(at 278.13 50.8 0)
(size 102.87 76.2)
(margins 0.9525 0.9525 0.9525 0.9525)
(stroke
(width 0)
(type solid)
)
(fill
(type none)
)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
(uuid "f1b74e04-bfcf-4140-95ea-db16e5a9780b")
)
(text_box "DESIGN NOTE:\nExample text for informational design notes."
(exclude_from_sim no)
(at 17.78 267.97 0)
(size 25.4 10.16)
(margins 1.27 1.27 1.27 1.27)
(stroke
(width 0.508)
(type solid)
(color 200 200 200 1)
)
(fill
(type none)
)
(effects
(font
(face "Arial")
(size 1.27 1.27)
(color 0 0 0 1)
)
(justify left top)
)
(uuid "f455215d-ebdc-4ea9-9798-407046434784")
)
(sheet
(at 280.67 307.34)
(size 27.94 7.62)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "28ad8293-baaf-4ee1-8056-ad34096542a0")
(property "Sheetname" "Block Diagram"
(at 280.67 306.6284 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "sheets/Block_Diagram.kicad_sch"
(at 280.67 315.5446 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(instances
(project "Asymworks_Template"
(path "/8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b"
(page "2")
)
)
)
)
(sheet
(at 322.58 307.34)
(size 27.94 7.62)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "f6afef58-d841-4ad6-baf9-746b0a35f011")
(property "Sheetname" "Project Architecture"
(at 322.58 306.6284 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "sheets/Architecture.kicad_sch"
(at 322.58 315.5446 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(instances
(project "Asymworks_Template"
(path "/8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b"
(page "3")
)
)
)
)
(sheet_instances
(path "/"
(page "1")
)
)
(embedded_fonts no)
(embedded_files
(file
(name "Asymworks_SCH.kicad_wks")
(type worksheet)
(data |KLUv/WDBHEUnAGZwkyfwsOgB+FDFmiD3lqIi+C74plZ6LHe96wNcyhfCWNApSrPAM1BuoSGIAIQA
igA1929yYyzFxVc/ne1zOPeCgdn7XnN1cue2N8a+O9c8No1ok7QzvnL2PP2cy+bLY87N+Vo6N280
FbvXtmrwxbFy5rEB+ZrrTcZUi7cVG5Dt9WfULF98fjgcAB2K/Jlr9LEefHPFvIV1nsY3X/jtax4O
gIHovQfdedtbM/wVDwdANmFhYa5LnXgEkWuxn7t88RWCB0FZqFRUpCcLVEU5TJT4JgRFslEqaRSb
fBJ6Dl+7O9dc5O10vq0SgsfRfBYdbNRl8zefa/TJJjHGGPiz/UtjZGrOKCSk95MwXLazWCzuwYfD
3sxr6Z3dzvOezhefLVk6KL2dxLjAF1vz9Z3H+C2+l4y1a/dMXC5m6cdykUqKWBUKYZNdkc4VwfmM
HhuVEGtqqCrKTYhXpEplTZU0SSYKhd5mvnLVn12PPcVfNEkkg4pG+th1gWZsUaRMDhZEMqASnHZ8
M5ozwglfgxsBnbm9EaAh4DCCGuwJ8/+moi2CpslCxIPeYIwVBopiUE0QaE5/Hd3xxe5FOgotLsbX
pLGrYunpv1yZAANUPnefzjXotcdG/dmFxnzWACEpUJiqSqLO+ZsgUNUUwdfi82c1NfsozuZgtDdf
6062KMaovUlSoSoQatFzrdDIG+QOncoHTcpUoNAwsRAeIA5dcxm1uEGZGCSGOe2tWa14CoTfwqGY
tMZWiwtDoITazKgV55r0Y/UggqDmnlSQJpOEOogYVFaBGKCBsUKoSEYKCpJkmAPxCDGMUOmY9b9Y
BGh7r2hMnqK242fOaqINra6qJ0D6qdcqw+/0Sw7Xkhc4osYQvBojsdtEp3BzzCETEbaXTtfv+la7
dHleONlTKomTqlljV9NFR+2VYLbIjHkhZOxmbSAssUToJCjLELGifUFwagqUXd4roKxn4RnWHYoO
jnvJgSRGYuN0rBmWYHD8vjYHZ+MCIRBgCtq/cKobeWmeaFZUwncirtp9fcI6oKWiCReDrD9NZgzh
v9HvScdIL/WXJoYPsw0vs4GI7elhFx1+yw7kQ2S6et5Ga3dITIQnF3I+eQT/TqJijMMOmqctfPAz
JY9TxooS+WLnSRqfZGAu8JyqECfQqQB21HVL9iTZOR3iMkeHOR2edUgNyJOnLTfUA5vOKPeRGiKP
v4RwCn3gOpUQ+Kj3uCQIRAxaBuyG5jW19sb4UIlFDNMAzjeyxnKivKIPN6mHFw1U4gT5tdrBCQJS
K8P5KOi3KbN4VBBrnm8dwezosxvArI6BCaRhSRwDDYwphFIYqnQzeOcSKK+LXLdDCRygJN8q1K0D
DpHhXWq7YSYSR6sSj9c8edkmFkLHGgo2wIq1Qo0HxIg0wB5Ad9L2UIAY2Qdu3IkT0qsi35+ItQPE
XENBk3NSANPYlndRZG30mlMKN6zJ13IYj7iWQ2G6/kZH35sWw8x1IoEbFr4kn/qNwSNBDQL0DBNc
QUwsSBxPn6D0QaAkHOCUqRm/Yh6aLI0g/omcqRzFv047+yLJla/2tdW/vHBZDbJ8okLNIenWJlZE
OBAX4RVCU5EXA427n3lEKTd8YXtfFB6jZr4ktMh4Bfwd6BpHua5DdNvEevjDVHR9jKP5qnFyV5PR
iO6N7/FVNzEbH0YV|
)
(checksum "B1BB6376E1D9DA80DB045BB70219177D")
)
)
)

170
LICENSE Normal file
View File

@@ -0,0 +1,170 @@
Creative Commons Attribution-ShareAlike 4.0 International
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensors permission is not necessary for any reasonfor example, because of any applicable exception or limitation to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
Creative Commons Attribution-ShareAlike 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. Downstream recipients.
A. Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. Additional offer from the Licensor Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapters License You apply.
C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
1. The Adapters License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org.

170
README.md Normal file
View File

@@ -0,0 +1,170 @@
# KiBot_Template
Template for a KiCad project using the KiBot Workflow
## TODO
Things that are still open or not implemented in the template:
- [ ] Verify the Blender settings hold over multiple board sizes, otherwise add a statement here about how to configure
- [ ] Generate Panel Fabpacks (CI Post-Processing Steps)
- [x] Validate ERC/DRC ruleset in the template and add JLCPCB `kicad_dru` files
- [ ] The Worksheet Frame situation is still broken. Need to do more focused testing with the `dev` image to see if it can be debugged.
At this point it seems like the best course of action right now is to finalize the PCB and SCH templates themselves--namely the ERC/DRC rulesets--and from there start sort of from scratch with the KiBot scripts, building it back up to something useful. Now that all the moving parts are in place, it is clear there is much optimization needed to make it useful. It's also worth revisiting (again) if it makes sense to actually keep all of the generated files in the repo proper or to use Action Assets to hold some of the items. There might be a mix-and-match strategy here.
## GETTING STARTED
1. Create a new repository using the `pdm/KiBot_Template` as the template. Make sure to select the `Git Content (Default Branch)` option to copy the files and default `main` branch into the new repository.
2. Check out the new repository (`pdm/A99-9000` in this example) and run the bootstrapping script to set up the Asymworks KiCad library, add the `dev` working branch, and rename the project based on the current directory.
```shell
$ git clone https://git.asymworks.com/pdm/A99-9000
$ cd A99-9000
$ source kibot/scripts/bootstrap.sh
Created Development Branch
Added Asymworks KiCad Library
Renamed KiCad Project to "A99-9000.kicad_pro"
```
3. The Gitea action will run on the server in response to the bootstrap script pushing the `dev` branch. Wait for it to complete and then run `git pull` to finish setting up the project.
## USAGE
1. Open KiCad and start drafting the schematic. The KiBot script will start in the `DRAFT` state, which generates the Schematic Netlist, PDF, and BOM. After each `git push`, assuming the KiBot script ran successfully, run a `git pull` to download the generated outputs.
2. Once the schematic is done and the PCB has been initialized with parts and a board outline, change the `kibot_draft` parameter in `.gitea/workflows/ci.yaml` to `false`. This will cause the KiBot script to run in `WORKING` mode, which generates all outputs. It will error out if the board outline does not exist.
3. When the board is ready to review, create a release branch named `review/rev-XX` where `XX` is the revision code. The revision code should start at `NC` (or `100`) and from there increment as specified in the Asymworks product management guidelines. KiBot will run in `REVIEW` mode when a release branch exists.
4. When the board is ready to release, create a Pull Request from the review branch into `main`. Merge the PR and create a tag named `release/rev-XX`. KiBot will run on the `main` branch and create the Gitea Release from the release tag.
5. Continue with the next revision by merging `main` back into `dev`.
## PROJECT CONVERSION GUIDE
This section will describe the necessary steps to convert an existing project to work with this template. This will also give more insights into how the template works in general. For more information, you should refer to the template.
***
### Folders
You should keep the folder structure as defined in [DIRECTORY STRUCTURE](#directory-structure). The folders marked as optional are not mandatory for the project to work, as long as the relevant file paths are correct. You should then go through the same steps as in [GETTING STARTED](#getting-started) and [USAGE](#usage).
### Schematic
You should select [`templates/Asymworks_SCH.kicad_wks`](templates/Asymworks_Sch.kicad_wks) as your Drawing Sheet in:
**File → Page Settings → Drawing Sheet**
On the same page, The `Revision` and `Company` fields should be set to `${REVISION}` and `${COMPANY}` and exported to all sheets.
For an automated table of contents, you should copy the root page of the template into your project, or use the `${SHEET_NAME_X}` text variables. These variables will be replaced by the sheet name (page `X`) when running KiBot. Currently the maximum number of pages is set to 20. You are free to add new text variables in [`kibot/yaml/kibot_pre_set_text_variables`](kibot_yaml/kibot_pre_set_text_variables.yaml#L69).
The `${RELEASE_STATE}` text variable is replaced by the current variant name (e.g. DRAFT or RELEASED).
The `${RELEASE_DATE}` text variable will be replaced by the tag release date (for example, `${RELEASE_DATE} = 2024-12-17`).
To get 3D pictures of the PCB in the schematic, you can create text boxes with the desired size, with the following names: `kibot_image_blender_3d_angled_top` and `kibot_image_blender_3d_angled_bottom`.
> You can add any image generated by a KiBot output using by changing the name to `kibot_image_<output_name>`.
***
### PCB
The layer names of the PCB should follow the ones defined in [kibot_main.yaml](kibot/yaml/kibot_main.yaml#L754).
```
LAYER_TITLE_PAGE: AssyTitlePage
LAYER_DNP_TOP: F.DNP
LAYER_DNP_BOTTOM: B.DNP
LAYER_DRILL_MAP: DrillMap
LAYER_TP_LIST_TOP: F.TestPointList
LAYER_TP_LIST_BOTTOM: B.TestPointList
LAYER_ASSEMBLY_TEXT_TOP: F.AssemblyText
LAYER_ASSEMBLY_TEXT_BOTTOM: B.AssemblyText
LAYER_DNP_CROSS_TOP: F.DNP
LAYER_DNP_CROSS_BOTTOM: B.DNP
```
The layer names can be set in
**File → Board Setup → Board Stackup → Board Editor Layers**
Each layer has a specific function, and must be setup in a particular way.
In the following explanation, when a group must be created, this can be done using KiCad's **Draw Rectangle** tool, and then a group can be created with:
**Right-Click → Grouping → Group Items**
Pressing **E** then allows you to rename the group. The size and position of the group usually determines the size and location of the element to be drawn. To change the font inside a group, you can create a textbox with the desired font in the group. You can set the border width to 0.
### Summary in table format
| **Layer** | **Description** | **Changes/Included Items** |
|-------------------------------|----------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| **AssyTitlePage** | First page of the assembly document. | Add groups: `kibot_image_png_3d_viewer_angled_top` and `kibot_image_png_3d_viewer_angled_bottom`. |
| **User.Comments** | Reserved for project-specific comments. | Not used by default; customize as needed. |
| **F.DNP / B.DNP** | Holds red crosses for components marked as *Do Not Populate*. | Keep these layers empty. |
| **DrillMap** | Draws drill map drawings and tables in the fabrication document, aligned by default with the PCB. | Add group: `kibot_table_csv_drill_table`. |
| **F.TestPoint / B.TestPoint** | Highlights testpoint locations in the fabrication document. | Keep these layers empty. |
| **F.AssemblyText** | Contains component count, assembly notes, drawings, and 3D renders for the top side of the PCB. | Add group: `kibot_table_csv_comp_count` (table) and `kibot_image_png_3d_viewer_top` (image). Include `${ASSEMBLY_NOTES}` text.|
| **B.AssemblyText** | Holds assembly drawings and 3D render for the bottom side of the PCB. | Add group: `kibot_image_png_3d_viewer_bottom` for the 3D render. |
| **F.Dimensions** | Holds PCB stackup, dimensions, impedance table, and fabrication notes. | Add groups: `kibot_fancy_stackup` (stackup), `kibot_table_csv_impedance_table` (impedance table), and `${FABRICATION_NOTES}`. |
| **B.Dimensions** | Holds dimensions of the PCB, seen from the backside. | Use KiCad **Dimensions** tool to add details. |
| **F.TestPointList** | Lists testpoint locations and nets for the top layer. | Add group: `kibot_table_csv_testpoints_top`. Use slicing (e.g., `[:32]`) for multiple tables. |
| **B.TestPointList** | Lists testpoint locations and nets for the bottom layer. | Add group: `kibot_table_csv_testpoints_bottom`. Adjust left-side placements for inverted print alignment. |
## DIRECTORY STRUCTURE
The following directory structure is used in the template. Folders marked as 'optional' are not crucial for KiBot to work. Other folders will be generated automatically during a KiBot run.
```
├─ design # Misc design and analysis (optional)
├─ html # HTML files for generated webpage
├─ kibot
│ ├─ colors # Color theme for KiCad
│ ├─ fonts # Fonts used in the project
│ ├─ scripts # External scripts used with KiBot
│ ├─ templates # Templates for KiBot generated reports
│ └─ yaml # KiBot YAML config files
├─ lib # Footprint and symbol libraries
│ ├─ asymworks # Asymworks KiCad library
│ └─ ... # Additional libraries (optional)
├─ mfg
│ ├─ assembly # Assembly documents (BoM, pos, notes)
│ ├─ fab # Fabrication documents (ZIP, notes)
│ │ ├─ drill-tables # CSV drill tables
│ │ └─ gerbers # Gerbers
│ │
│ └─ jlcpcb # JLCPCB documents (Gerber, BOM, CPL)
├─ models # Generated 3D models (step, gITF)
├─ notes # Drawing note text templates
├─ panels # KiKit panel definitions and outputs
├─ renders # 2D and 3D PCB renders
├─ schematic # PDF of schematic
├─ sheets # Schematic sheets
├─ templates # Title block templates
└─ test
└─ testpoints # Testpoints tables
```
## CREDITS
[@set-soft](https://github.com/set-soft) for his amazing work on [KiBot](https://github.com/INTI-CMNB/KiBot/tree/master). Check out the [documentation](https://kibot.readthedocs.io/en/latest/) for more!
[@nguyen-v](https://github.com/nguyen-v) for the original version of this CI workflow [KDT_Hierarchical_KiBot](https://github.com/nguyen-v/KDT_Hierarchical_KiBot?tab=readme-ov-file#pcb).
## RESOURCES
- [(Outdated) Best practices and tips for good schematics](https://www.youtube.com/watch?v=_ZjyeltLMAg)
- [GitHub Actions Documentation](https://docs.github.com/en/actions)
- [KiBot Documentation](https://kibot.readthedocs.io/en/latest/)
- [KiBot Repository](https://github.com/INTI-CMNB/KiBot)
- [KiBot Report Sample](https://github.com/INTI-CMNB/KiBot/blob/master/kibot/resources/report_templates/report_full.txt)
- [KiCost Documentation](https://hildogjr.github.io/KiCost/docs/_build/singlehtml/index.html)
- [KiCost Repository](https://github.com/hildogjr/KiCost)
- [KiRI Repository](https://github.com/leoheck/kiri)

View File

@@ -0,0 +1,312 @@
{
"3d_viewer": {
"background_bottom": "rgb(102, 102, 128)",
"background_top": "rgb(204, 204, 230)",
"board": "rgba(51, 43, 23, 0.902)",
"copper": "rgb(179, 156, 0)",
"silkscreen_bottom": "rgb(230, 230, 230)",
"silkscreen_top": "rgb(230, 230, 230)",
"soldermask_bottom": "rgba(20, 51, 36, 0.831)",
"soldermask_top": "rgba(20, 51, 36, 0.831)",
"solderpaste": "rgb(128, 128, 128)",
"use_board_stackup_colors": true,
"user_1": "rgb(194, 194, 194)",
"user_10": "rgb(89, 148, 220)",
"user_11": "rgb(180, 219, 210)",
"user_12": "rgb(216, 200, 82)",
"user_13": "rgb(194, 194, 194)",
"user_14": "rgb(89, 148, 220)",
"user_15": "rgb(180, 219, 210)",
"user_16": "rgb(216, 200, 82)",
"user_17": "rgb(194, 194, 194)",
"user_18": "rgb(89, 148, 220)",
"user_19": "rgb(180, 219, 210)",
"user_2": "rgb(89, 148, 220)",
"user_20": "rgb(216, 200, 82)",
"user_21": "rgb(194, 194, 194)",
"user_22": "rgb(89, 148, 220)",
"user_23": "rgb(180, 219, 210)",
"user_24": "rgb(216, 200, 82)",
"user_25": "rgb(194, 194, 194)",
"user_26": "rgb(89, 148, 220)",
"user_27": "rgb(180, 219, 210)",
"user_28": "rgb(216, 200, 82)",
"user_29": "rgb(194, 194, 194)",
"user_3": "rgb(180, 219, 210)",
"user_30": "rgb(89, 148, 220)",
"user_31": "rgb(180, 219, 210)",
"user_32": "rgb(216, 200, 82)",
"user_33": "rgb(194, 194, 194)",
"user_34": "rgb(89, 148, 220)",
"user_35": "rgb(180, 219, 210)",
"user_36": "rgb(216, 200, 82)",
"user_37": "rgb(194, 194, 194)",
"user_38": "rgb(89, 148, 220)",
"user_39": "rgb(180, 219, 210)",
"user_4": "rgb(216, 200, 82)",
"user_40": "rgb(216, 200, 82)",
"user_41": "rgb(194, 194, 194)",
"user_42": "rgb(89, 148, 220)",
"user_43": "rgb(180, 219, 210)",
"user_44": "rgb(216, 200, 82)",
"user_45": "rgb(194, 194, 194)",
"user_5": "rgb(194, 194, 194)",
"user_6": "rgb(89, 148, 220)",
"user_7": "rgb(180, 219, 210)",
"user_8": "rgb(216, 200, 82)",
"user_9": "rgb(232, 178, 167)"
},
"board": {
"anchor": "rgb(255, 38, 226)",
"aux_items": "rgb(255, 255, 255)",
"b_adhes": "rgb(0, 0, 132)",
"b_crtyd": "rgb(38, 233, 255)",
"b_fab": "rgb(88, 93, 132)",
"b_mask": "rgba(2, 255, 238, 0.400)",
"b_paste": "rgba(0, 194, 194, 0.902)",
"b_silks": "rgb(232, 178, 167)",
"background": "rgb(0, 16, 35)",
"cmts_user": "rgb(89, 148, 220)",
"conflicts_shadow": "rgba(255, 0, 5, 0.502)",
"copper": {
"b": "rgb(77, 127, 196)",
"f": "rgb(200, 52, 52)",
"in1": "rgb(127, 200, 127)",
"in10": "rgb(237, 124, 51)",
"in11": "rgb(91, 195, 235)",
"in12": "rgb(247, 111, 142)",
"in13": "rgb(167, 165, 198)",
"in14": "rgb(40, 204, 217)",
"in15": "rgb(232, 178, 167)",
"in16": "rgb(242, 237, 161)",
"in17": "rgb(237, 124, 51)",
"in18": "rgb(91, 195, 235)",
"in19": "rgb(247, 111, 142)",
"in2": "rgb(206, 125, 44)",
"in20": "rgb(167, 165, 198)",
"in21": "rgb(40, 204, 217)",
"in22": "rgb(232, 178, 167)",
"in23": "rgb(242, 237, 161)",
"in24": "rgb(237, 124, 51)",
"in25": "rgb(91, 195, 235)",
"in26": "rgb(247, 111, 142)",
"in27": "rgb(167, 165, 198)",
"in28": "rgb(40, 204, 217)",
"in29": "rgb(232, 178, 167)",
"in3": "rgb(79, 203, 203)",
"in30": "rgb(242, 237, 161)",
"in4": "rgb(219, 98, 139)",
"in5": "rgb(167, 165, 198)",
"in6": "rgb(40, 204, 217)",
"in7": "rgb(232, 178, 167)",
"in8": "rgb(242, 237, 161)",
"in9": "rgb(141, 203, 129)"
},
"cursor": "rgb(255, 255, 255)",
"drc_error": "rgba(215, 91, 107, 0.800)",
"drc_exclusion": "rgba(255, 255, 255, 0.800)",
"drc_warning": "rgba(255, 208, 66, 0.800)",
"dwgs_user": "rgb(194, 194, 194)",
"eco1_user": "rgb(180, 219, 210)",
"eco2_user": "rgb(216, 200, 82)",
"edge_cuts": "rgb(208, 210, 205)",
"f_adhes": "rgb(132, 0, 132)",
"f_crtyd": "rgb(255, 38, 226)",
"f_fab": "rgb(175, 175, 175)",
"f_mask": "rgba(216, 100, 255, 0.400)",
"f_paste": "rgba(180, 160, 154, 0.902)",
"f_silks": "rgb(242, 237, 161)",
"footprint_text_invisible": "rgb(132, 132, 132)",
"grid": "rgb(132, 132, 132)",
"grid_axes": "rgb(194, 194, 194)",
"locked_shadow": "rgba(255, 38, 226, 0.502)",
"margin": "rgb(255, 38, 226)",
"pad_net_names": "rgba(255, 255, 255, 0.902)",
"pad_plated_hole": "rgb(194, 194, 0)",
"pad_through_hole": "rgb(227, 183, 46)",
"page_limits": "rgb(132, 132, 132)",
"plated_hole": "rgb(26, 196, 210)",
"ratsnest": "rgba(0, 248, 255, 0.349)",
"track_net_names": "rgba(255, 255, 255, 0.702)",
"user_1": "rgb(194, 194, 194)",
"user_10": "rgb(89, 148, 220)",
"user_11": "rgb(180, 219, 210)",
"user_12": "rgb(216, 200, 82)",
"user_13": "rgb(194, 194, 194)",
"user_14": "rgb(89, 148, 220)",
"user_15": "rgb(180, 219, 210)",
"user_16": "rgb(216, 200, 82)",
"user_17": "rgb(194, 194, 194)",
"user_18": "rgb(89, 148, 220)",
"user_19": "rgb(180, 219, 210)",
"user_2": "rgb(89, 148, 220)",
"user_20": "rgb(216, 200, 82)",
"user_21": "rgb(194, 194, 194)",
"user_22": "rgb(89, 148, 220)",
"user_23": "rgb(180, 219, 210)",
"user_24": "rgb(216, 200, 82)",
"user_25": "rgb(194, 194, 194)",
"user_26": "rgb(89, 148, 220)",
"user_27": "rgb(180, 219, 210)",
"user_28": "rgb(216, 200, 82)",
"user_29": "rgb(194, 194, 194)",
"user_3": "rgb(180, 219, 210)",
"user_30": "rgb(89, 148, 220)",
"user_31": "rgb(180, 219, 210)",
"user_32": "rgb(216, 200, 82)",
"user_33": "rgb(194, 194, 194)",
"user_34": "rgb(89, 148, 220)",
"user_35": "rgb(180, 219, 210)",
"user_36": "rgb(216, 200, 82)",
"user_37": "rgb(194, 194, 194)",
"user_38": "rgb(89, 148, 220)",
"user_39": "rgb(180, 219, 210)",
"user_4": "rgb(216, 200, 82)",
"user_40": "rgb(216, 200, 82)",
"user_41": "rgb(194, 194, 194)",
"user_42": "rgb(89, 148, 220)",
"user_43": "rgb(180, 219, 210)",
"user_44": "rgb(216, 200, 82)",
"user_45": "rgb(194, 194, 194)",
"user_5": "rgb(194, 194, 194)",
"user_6": "rgb(89, 148, 220)",
"user_7": "rgb(180, 219, 210)",
"user_8": "rgb(216, 200, 82)",
"user_9": "rgb(232, 178, 167)",
"via_blind_buried": "rgb(187, 151, 38)",
"via_hole": "rgb(227, 183, 46)",
"via_hole_walls": "rgb(236, 236, 236)",
"via_micro": "rgb(0, 132, 132)",
"via_net_names": "rgba(50, 50, 50, 0.902)",
"via_through": "rgb(236, 236, 236)",
"worksheet": "rgb(200, 114, 171)"
},
"gerbview": {
"axes": "rgb(0, 0, 132)",
"background": "rgb(0, 0, 0)",
"dcodes": "rgb(255, 255, 255)",
"grid": "rgb(132, 132, 132)",
"layers": [
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)",
"rgb(242, 237, 161)",
"rgb(141, 203, 129)",
"rgb(237, 124, 51)",
"rgb(91, 195, 235)",
"rgb(247, 111, 142)",
"rgb(77, 127, 196)",
"rgb(200, 52, 52)",
"rgb(127, 200, 127)",
"rgb(206, 125, 44)",
"rgb(79, 203, 203)",
"rgb(219, 98, 139)",
"rgb(167, 165, 198)",
"rgb(40, 204, 217)",
"rgb(232, 178, 167)"
],
"negative_objects": "rgb(132, 132, 132)",
"page_limits": "rgb(132, 132, 132)",
"worksheet": "rgb(0, 0, 132)"
},
"meta": {
"name": "Altium_Theme",
"version": 5
},
"schematic": {
"anchor": "rgb(0, 0, 255)",
"aux_items": "rgb(0, 0, 0)",
"background": "rgb(245, 244, 239)",
"brightened": "rgb(255, 0, 255)",
"bus": "rgb(0, 0, 132)",
"bus_junction": "rgb(0, 0, 132)",
"component_body": "rgb(255, 255, 194)",
"component_outline": "rgb(132, 0, 0)",
"cursor": "rgb(15, 15, 15)",
"dnp_marker": "rgba(220, 9, 13, 0.851)",
"erc_error": "rgba(230, 9, 13, 0.800)",
"erc_exclusion": "rgba(94, 194, 194, 0.800)",
"erc_warning": "rgba(209, 146, 0, 0.800)",
"excluded_from_sim": "rgba(194, 194, 194, 0.949)",
"fields": "rgb(132, 0, 132)",
"grid": "rgb(181, 181, 181)",
"grid_axes": "rgb(0, 0, 132)",
"hidden": "rgb(94, 194, 194)",
"hovered": "rgb(0, 0, 255)",
"junction": "rgb(0, 0, 0)",
"label_global": "rgb(132, 0, 0)",
"label_hier": "rgb(114, 86, 0)",
"label_local": "rgb(132, 0, 0)",
"netclass_flag": "rgb(72, 72, 72)",
"no_connect": "rgb(0, 0, 132)",
"note": "rgb(0, 0, 194)",
"note_background": "rgba(0, 0, 0, 0.000)",
"op_currents": "rgb(224, 0, 12)",
"op_voltages": "rgb(132, 0, 50)",
"override_item_colors": false,
"page_limits": "rgb(181, 181, 181)",
"pin": "rgb(0, 0, 0)",
"pin_name": "rgb(0, 0, 0)",
"pin_number": "rgb(0, 0, 0)",
"private_note": "rgb(72, 72, 255)",
"reference": "rgb(0, 0, 194)",
"rule_area": "rgb(255, 0, 0)",
"shadow": "rgba(102, 179, 255, 0.800)",
"sheet": "rgb(0, 0, 0)",
"sheet_background": "rgba(255, 255, 255, 0.000)",
"sheet_fields": "rgb(132, 0, 132)",
"sheet_filename": "rgb(0, 0, 132)",
"sheet_label": "rgb(0, 0, 0)",
"sheet_name": "rgb(0, 0, 132)",
"value": "rgb(0, 0, 194)",
"wire": "rgb(0, 0, 0)",
"worksheet": "rgb(0, 0, 0)"
}
}

BIN
kibot/fonts/Arial Bold.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
kibot/fonts/Arial.ttf Normal file

Binary file not shown.

BIN
kibot/fonts/Inconsolata.ttf Normal file

Binary file not shown.

View File

@@ -0,0 +1,34 @@
#!/bin/sh
# ============================================================================
# KiBot Template Bootstrapping Script
# ============================================================================
# Create the Development Branch
git checkout -qb dev
echo "Created Development Branch"
# Add the Asymworks KiCad Library
git remote add -qf asymworks-kicad-lib https://git.asymworks.com/asymworks/kicad-library
git subtree add -q --prefix lib/asymworks asymworks-kicad-lib main --squash -m "[bootstrap] Add subtree 'Asymworks/KiCad-Library' at 'lib/asymworks'"
echo "Added Asymworks KiCad Library"
# Initialize the Project Metadata
python kibot/scripts/metadata.py init
python kibot/scripts/metadata.py update Asymworks_Template.kicad_pro
ASSY_NUMBER=$(python kibot/scripts/metadata.py print AssemblyNumber)
# Rename the KiCad Project based on the directory name
git mv -q Asymworks_Template.kicad_dru "${ASSY_NUMBER}.kicad_dru"
git mv -q Asymworks_Template.kicad_pro "${ASSY_NUMBER}.kicad_pro"
git mv -q Asymworks_Template.kicad_sch "${ASSY_NUMBER}.kicad_sch"
git mv -q Asymworks_Template.kicad_pcb "${ASSY_NUMBER}.kicad_pcb"
echo "Renamed project to \"${ASSY_NUMBER}.kicad_pro\""
# Push the Develpment Branch to Gitea
git add -q project.json
git commit -aq -m 'Initialize Project'
git push -qu origin dev
echo "Initialized and Committed Project"
# Bootstrap Complete
echo "Bootstrap complete. Please run 'git pull' after the CI action finishes.'"

View File

@@ -0,0 +1,49 @@
import argparse
import xml.etree.ElementTree as ET
import sys
def get_sheet_title(file_path, page_number, dots_number):
try:
tree = ET.parse(file_path)
root = tree.getroot()
page_number = str(page_number)
titles = []
for sheet in root.findall(".//sheet"):
number = sheet.get("number")
if number == page_number:
# Get the last part of the 'name' attribute after '/'
name = sheet.get("name")
title_block = sheet.find("title_block")
title = title_block.find("title").text if title_block is not None else None
if name:
titles.append(name.split("/")[-2 if name.endswith("/") else -1])
if not titles:
print('.'*dots_number)
elif len(set(titles)) > 1:
print("Conflicting page numbers")
else:
print(titles[0])
except ET.ParseError:
print("Error: Invalid XML format")
except FileNotFoundError:
print("Error: XML File not found")
except Exception as e:
print(f"Error: {e}")
def main():
parser = argparse.ArgumentParser(description="Get the sheet title based on page number from a KiCad XML file")
parser.add_argument("-p", "--page-number", type=int, required=True, help="Page number to search")
parser.add_argument("-f", "--file", type=str, required=True, help="Path to the schematic XML file")
parser.add_argument("-d", "--dots-number", type=int, required=True, help="Number of dots for empty lines")
args = parser.parse_args()
get_sheet_title(args.file, args.page_number, args.dots_number)
if __name__ == "__main__":
main()

257
kibot/scripts/metadata.py Normal file
View File

@@ -0,0 +1,257 @@
#!/usr/bin/python3
#
# Script to maintain the project.json metadata file
import argparse
import json
import os
import re
import shutil
import sys
from dataclasses import dataclass, asdict
@dataclass
class ProjectMetadata:
AssemblyName: str = ''
AssemblyNumber: str = ''
AssemblyTitle: str = ''
Company: str = 'Asymworks, LLC'
Designer: str = 'JPK'
FabNumber: str = ''
FabTitle: str = ''
ProjectNumber: str = ''
SchematicNumber: str = ''
SchematicTitle: str = ''
#: Mapping from `ProjectMetadata` key to KiCad Text Variable name
TEXT_VARS = {
'AssemblyName': 'ASSEMBLY_NAME',
'AssemblyNumber': 'ASSEMBLY_NUMBER',
'AssemblyTitle': 'DWG_TITLE_ASSY',
'Company': 'COMPANY',
'Designer': 'DESIGNER',
'FabNumber': 'DWG_NUMBER_PCB',
'FabTitle': 'DWG_TITLE_PCB',
'ProjectNumber': 'PROJECT_CODE',
'SchematicNumber': 'DWG_NUMBER_SCH',
'SchematicTitle': 'DWG_TITLE_SCH',
}
def read_input(
prompt: str,
default: str | None = None,
*,
format_help: str | None = None,
optional: bool = False,
regex: str | re.Pattern | None = None,
use_color: bool = True
) -> str | None:
"""Read an input string from the console, with defaults and retry."""
prompt_str = f'{prompt} [{default or None}]'
if use_color:
prompt_str = f'{prompt} [\033[1;34m{default or None}\033[0m]'
check_re = None
if isinstance(regex, re.Pattern):
check_re = regex
elif isinstance(regex, str):
check_re = re.compile(regex, re.I)
error = None
while True:
error_str = f'\033[31m({error})\033[0m ' if error is not None else ''
value = input(f'{error_str}{prompt_str}: ')
if not value and not default and not optional:
error = 'input required'
continue
if not value:
value = default
if check_re and not check_re.match(value):
error = 'invalid format' if not format_help else format_help
continue
break
if not value and optional:
return None
return value
def load_file(filename: str) -> ProjectMetadata:
"""Load the Project Metadata from a JSON File."""
with open(filename, 'r') as f:
data = json.load(f)
return ProjectMetadata(**data)
def load_interactive(defaults: ProjectMetadata | None = None) -> ProjectMetadata:
"""Load the Project Metadata from an interactive console questionnaire."""
md = defaults or ProjectMetadata()
# Get the Company and Designer information first.
md.Company = read_input('Company', md.Company)
md.Designer = read_input('Designer', md.Designer)
# Next get the Assembly Number and Name; this will allow us to
# generate sensible defaults for the rest.
md.AssemblyNumber = read_input('Assembly Number', md.AssemblyNumber)
md.AssemblyName = read_input('Assembly Name', md.AssemblyName)
if not md.AssemblyTitle:
md.AssemblyTitle = f'Assembly, {md.AssemblyName}'
if not md.FabNumber:
md.FabNumber = f'P{md.AssemblyNumber[1:]}'
if not md.FabTitle:
md.FabTitle = f'PCB Fabrication, {md.AssemblyName}'
if not md.SchematicNumber:
md.SchematicNumber = f'S{md.AssemblyNumber[1:]}'
if not md.SchematicTitle:
md.SchematicTitle = f'Schematic, {md.AssemblyName}'
md.AssemblyTitle = read_input('Assembly Drawing Title', md.AssemblyTitle)
md.FabNumber = read_input('Fabrication Drawing Number', md.FabNumber)
md.FabTitle = read_input('Fabrication Drawing Title', md.FabTitle)
md.SchematicNumber = read_input('Schematic Drawing Number', md.SchematicNumber)
md.SchematicTitle = read_input('Schematic Drawing Title', md.SchematicTitle)
# Finally load the Project Number
if not md.ProjectNumber:
md.ProjectNumber = f'P{md.AssemblyNumber[1:3]}'
md.ProjectNumber = read_input(
'Project Number',
md.ProjectNumber,
format_help='Format as P##',
regex=r'^P[0-9]{2}$',
)
return md
def run_init(filename: str) -> int:
"""Run the `init` subcommand to initialize the Metadata."""
md = None
if os.path.isfile(filename):
md = load_file(filename)
md = load_interactive(md)
with open(filename, 'w') as f:
json.dump(asdict(md), f, indent=2)
return 0
def run_print(filename: str, variable: str) -> int:
"""Run the `print` subcommand to echo Metadata to `stdout`."""
try:
md = load_file(filename)
except FileNotFoundError:
sys.stderr.write(f'{filename} not found\n')
return 1
except TypeError as e:
sys.stderr.write(f'{filename} has unexpected data\n {str(e)}\n')
return 1
var_lcase = variable.lower()
for md_key, txt_var in TEXT_VARS.items():
if var_lcase != md_key.lower() and var_lcase != txt_var.lower():
continue
var_found = True
if not hasattr(md, md_key):
sys.stderr.write(f'Internal error: {md_key} not defined in metadata')
return 2
sys.stdout.write(getattr(md, md_key))
return 0
sys.stderr.write(f'{variable} is not a valid Metadata variable\n')
return 1
def run_update(filename: str, kicad_project: str) -> int:
"""Run the `update` subcommand to update the KiCad Project."""
try:
md = load_file(filename)
except FileNotFoundError:
sys.stderr.write(f'{filename} not found\n')
return 1
except TypeError as e:
sys.stderr.write(f'{filename} has unexpected data\n {str(e)}\n')
return 1
kicad_filepath = os.path.abspath(kicad_project)
if not os.path.isfile(kicad_filepath):
sys.stderr.write(f'{kicad_filepath} does not exist\n')
return 1
if os.path.splitext(kicad_filepath)[1] != '.kicad_pro':
sys.stderr.write(f'{kicad_filepath} is not a KiCad Project file\n')
return 1
kicad_data = None
try:
with open(kicad_filepath, 'r') as f:
kicad_data = json.load(f)
if 'text_variables' not in kicad_data:
sys.stderr.write(f'Warning: "text-variables" is not set in KiCad Project')
for md_key, txt_var in TEXT_VARS.items():
if not hasattr(md, md_key):
sys.stderr.write(f'Internal error: {md_key} not defined in metadata')
return 2
if txt_var not in kicad_data['text_variables']:
sys.stderr.write(f'Warning: creating KiCad text variable {txt_var}')
kicad_data['text_variables'][txt_var] = getattr(md, md_key)
shutil.copy(kicad_filepath, f'{kicad_filepath}-bak')
with open(kicad_filepath, 'w') as f:
json.dump(kicad_data, f, indent=2)
except FileNotFoundError:
sys.stderr.write(f'{kicad_filepath} does not exist\n')
return 1
return 0
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Script to maintain the project.json metadata file')
parser.add_argument('-f', '--filename', type=str, default='project.json', help='Project Metadata filename (default is "project.json")')
subparsers = parser.add_subparsers(dest='command', metavar='command', help='subcommands')
init_parser = subparsers.add_parser('init', help='Initialize the Project Metadata')
print_parser = subparsers.add_parser('print', help='Print Metadata values')
print_parser.add_argument('variable', help='Metadata variable name to print')
update_parser = subparsers.add_parser('update', help='Update the KiCad Project with the Metadata')
update_parser.add_argument('kicad_project', help='KiCad project to update with the Metadata')
# parser.add_argument('-i', '--interactive', action='store_true', help='Run in interactive mode to prompt for each data field.')
# parser.add_argument('-u', '--update', nargs=1, metavar='KICAD-PROJECT', help='Write the text variables in the KiCad Project file')
args = parser.parse_args()
filepath = os.path.abspath(args.filename)
if args.command == 'init':
sys.exit(run_init(filepath))
elif args.command == 'print':
sys.exit(run_print(filepath, args.variable))
elif args.command == 'update':
sys.exit(run_update(filepath, args.kicad_project))
sys.stderr.write(f'Unknown command: {args.command}\n')
sys.exit(1)

View File

@@ -0,0 +1,17 @@
# KiBot Filter for excluding testpoints
kibot:
version: 1
filters:
- name: '@NAME@'
comment: '@COMMENT@'
type: generic
exclude_any:
- column: Reference
regex: "TP"
...
definitions:
COMMENT: Exclude only testpoints
NAME: exclude_testpoints

View File

@@ -0,0 +1,21 @@
# KiBot Filter for renaming Manufacturer Part Number field
kibot:
version: 1
filters:
- name: '@NAME@'
comment: '@COMMENT@'
type: field_rename
rename:
- field: '@MPN_FIELD@'
name: manf#
- field: '@MAN_FIELD@'
name: manf
...
definitions:
COMMENT: Rename fields
NAME: field_rename
MPN_FIELD: 'Manufacturer PN'
MAN_FIELD: 'Manufacturer'

View File

@@ -0,0 +1,17 @@
# KiBot Filter for components with an LCSC Part Number
kibot:
version: 1
filters:
- name: @NAME@
comment: '@COMMENT@'
type: generic
include_only:
- column: _field_lcsc_part
regex: '^C\d+'
...
definitions:
COMMENT: Only parts with LCSC Part Number
NAME: only_lcsc_parts

View File

@@ -0,0 +1,25 @@
# KiBot Filter for testpoints
# These filters are used for multiple outputs to highlight testpoints
# or generate testpoint lists for top and bottom layers
kibot:
version: 1
filters:
- name: '@NAME@'
comment: '@COMMENT@'
type: generic
exclude_top: @EXCLUDE_TOP@
exclude_bottom: @EXCLUDE_BOTTOM@
include_only:
- column: Reference
regex: "TP"
exclude_refs: @EXCLUDE_REFS@
...
definitions:
COMMENT: Select only testpoints
NAME: only_testpoints
EXCLUDE_TOP: false
EXCLUDE_BOTTOM: false
EXCLUDE_REFS: '[MB*]'

View File

@@ -0,0 +1,20 @@
# KiBot Globals
# https://kibot.readthedocs.io/en/latest/configuration/global.html
kibot:
version: 1
global:
resources_dir: 'kibot'
out_dir: '@OUTPUT_DIR@'
dnp_cross_top_layer: '@LAYER_DNP_TOP@'
dnp_cross_bottom_layer: '@LAYER_DNP_BOTTOM@'
disable_kicad_cross_on_fab: true
extra_pth_drill: 0 # for annular ring computation.
filters: []
...
definitions:
OUTPUT_DIR: ./
LAYER_DNP_TOP: F.DNP
LAYER_DNP_BOTTOM: B.DNP

852
kibot/yaml/kibot_main.yaml Normal file
View File

@@ -0,0 +1,852 @@
# KiBot configuration file for Asymworks_KiBot Template
# KiCad 9.0
kibot:
version: 1
variants: []
# ============================================================================
# Output Groups
groups:
# Top-Level Groups =========================================================
# Pre-Process Group (generates Notes and Netlist for set_text_variables) ---
- name: preprocess_group
outputs:
- @NETLIST_OUTPUT@
- @TXT_SCH_NOTES_OUTPUT@
- @TXT_FAB_NOTES_OUTPUT@
- @TXT_ASSY_NOTES_OUTPUT@
- tables
# Draft Outputs Group (used in DRAFT state only) ---------------------------
- name: draft_group
outputs:
- @NETLIST_OUTPUT@
- @TXT_SCH_NOTES_OUTPUT@
- @PDF_SCHEMATIC_OUTPUT@
- @CSV_BOM_OUTPUT@
- @HTML_BOM_OUTPUT@
# All Outputs Group (used in all other states) -----------------------------
- name: all_group
outputs:
- bom
- renders
- models
- fab
- jlcpcb
- panels
- assembly
- @PDF_SCHEMATIC_OUTPUT@
- @HTML_NAV_RES_OUTPUT@
# All Outputs Group, including KiRi (not enabled by default) ---------------
- name: all_group_kiri
outputs:
- bom
- renders
- models
- fab
- jlcpcb
- panels
- assembly
- @PDF_SCHEMATIC_OUTPUT@
- @HTML_KIRI_OUTPUT@
- @HTML_NAV_RES_OUTPUT@
# Panel Fabrication Outputs Group (not used in DRAFT state) ----------------
- name: panel_fab_jlcpcb_group
outputs: []
# Output Sub-Groups ========================================================
# Bill of Material Outputs -------------------------------------------------
- name: bom
outputs:
- @CSV_BOM_OUTPUT@
- @HTML_BOM_OUTPUT@
- @HTML_IBOM_OUTPUT@
# PCB Render Outputs -------------------------------------------------------
- name: renders
outputs:
- @PCBDRAW_2D_TOP_PCB_OUTPUT@
- @PCBDRAW_2D_BOT_PCB_OUTPUT@
- @BLENDER_3D_TOP@
- @BLENDER_3D_BOT@
- @BLENDER_3D_ANGLED_TOP@
- @BLENDER_3D_ANGLED_BOT@
# KiCad 3D Viewer Renders (render_3d) are currently disabled as they do
# not look very good in KiCad 9 and they cause a warning in the KiBot
# output.
# - @PNG_3D_VIEWER_TOP@
# - @PNG_3D_VIEWER_BOT@
# - @PNG_3D_VIEWER_ANGLED_TOP@
# - @PNG_3D_VIEWER_ANGLED_BOT@
# PCB 3d Model Outputs -----------------------------------------------------
- name: models
outputs:
- @STEP_OUTPUT@
- @GLB_OUTPUT@
# Fabrication Outputs ------------------------------------------------------
- name: fab
outputs:
- @GERBER_OUTPUT@
- @EXCELLON_DRILL_OUTPUT@
- @ODB_OUTPUT@
- @PDF_DRILL_MAP_OUTPUT@
- @PDF_FABRICATION_OUTPUT@
- @ZIP_COMPRESS_FAB_OUTPUT@
- name: tables
outputs:
- @CSV_COMP_COUNT_OUPUT@
- @CSV_IMPEDANCE_TABLE_OUTPUT@
- @CSV_DRILL_TABLE_OUTPUT@
- testpoints
- name: testpoints
outputs:
- @CSV_TP_OUTPUT@
- @CSV_TP_TOP_OUTPUT@
- @CSV_TP_BOTTOM_OUTPUT@
# JLCPCB Fabrication and Assembly Outputs ----------------------------------
- name: jlcpcb
outputs:
- @JLCPCB_GERBER_OUTPUT@
- @JLCPCB_FABPACK_OUTPUT@
- @JLCPCB_BOM_OUTPUT@
- @JLCPCB_CPL_OUTPUT@
# Assembly Outputs ---------------------------------------------------------
- name: assembly
outputs:
- @CSV_POS_OUTPUT@
- @PDF_ASSEMBLY_OUTPUT@
# Panelization Outputs -----------------------------------------------------
- name: panels
outputs: [ @PANEL_800_OUTPUT@ ]
# ============================================================================
# Imports
import:
# Global Parameters ========================================================
- file: kibot_globals.yaml
definitions:
OUTPUT_DIR: @OUTPUT_DIR@
LAYER_DNP_TOP: @LAYER_DNP_TOP@
LAYER_DNP_BOT: @LAYER_DNP_BOTTOM@
# Filters ==================================================================
- file: kibot_filt_field_rename.yaml
definitions:
NAME: @FILT_FIELD_RENAME@
COMMENT: Rename fields
MPN_FIELD: @MPN_FIELD@
MAN_FIELD: @MAN_FIELD@
- file: kibot_filt_testpoints.yaml
definitions:
NAME: @FILT_TP_ONLY@
COMMENT: Include only testpoints
- file: kibot_filt_exclude_testpoints.yaml
definitions:
NAME: @FILT_TP_EXCLUDE@
COMMENT: Exclude only testpoints
- file: kibot_filt_testpoints.yaml
definitions:
NAME: @FILT_TP_TOP_ONLY@
COMMENT: Select only top testpoints
EXCLUDE_BOTTOM: true
EXCLUDE_REFS: "@TP_EXCLUDE_REFS@"
- file: kibot_filt_testpoints.yaml
definitions:
NAME: @FILT_TP_BOTTOM_ONLY@
COMMENT: Select only bottom testpoints
EXCLUDE_TOP: true
EXCLUDE_REFS: "@TP_EXCLUDE_REFS@"
- file: kibot_filt_lcsc_parts.yaml
definitions:
NAME: @FILT_LCSC_PARTS@
COMMENT: Only parts with LCSC Part Number
# Preflights ===============================================================
- file: kibot_pre_set_text_variables.yaml
definitions:
PROJECT_CODE: @PROJECT_CODE@
ASSEMBLY_NUMBER: @ASSEMBLY_NUMBER@
ASSEMBLY_NAME: @ASSEMBLY_NAME@
COMPANY: @COMPANY@
DESIGNER: @DESIGNER@
SCRIPTS_DIR: @SCRIPTS_DIR@
FABRICATION_DIR: @FABRICATION_DIR@
ASSEMBLY_DIR: @ASSEMBLY_DIR@
# Generate ERC Report
- file: kibot_pre_erc_report.yaml
definitions:
DIR: @REPORT_DIR@
# Generate DRC Report
- file: kibot_pre_drc_report.yaml
definitions:
CHECK_ZONE_FILLS: @CHECK_ZONE_FILLS@
DIR: @REPORT_DIR@
# Draw stackup table in PCB. Needs gerber output
- file: kibot_pre_draw_stackup.yaml
definitions:
GERBER_OUTPUT: @GERBER_OUTPUT@
NOTE: @STACKUP_TABLE_NOTE@
# Include tables for PCB and Assembly Drawings
- file: kibot_pre_include_table.yaml
definitions:
NAME_TP_TOP: @CSV_TP_TOP_OUTPUT@
NAME_TP_BOTTOM: @CSV_TP_BOTTOM_OUTPUT@
NAME_COMP_COUNT: @CSV_COMP_COUNT_OUPUT@
NAME_CSV_DRILL_TABLE: @CSV_DRILL_TABLE_OUTPUT@
NAME_IMPEDANCE_TABLE: @CSV_IMPEDANCE_TABLE_OUTPUT@
# Generated Outputs ========================================================
# Schematic Netlist --------------------------------------------------------
- file: kibot_out_netlist.yaml
definitions:
NAME: @NETLIST_OUTPUT@
COMMENT: Schematic netlist in KiCad format
# Drawings in PDF format ---------------------------------------------------
- file: kibot_out_pdf_schematic.yaml
definitions:
NAME: @PDF_SCHEMATIC_OUTPUT@
COMMENT: Schematic in PDF format
COLOR_THEME: @COLOR_THEME@
DIR: @SCHEMATIC_DIR@
DEFAULT_FONT: 'Arial Narrow'
SHEET_WKS: @SHEET_WKS_SCH@
# Bills of Materials (BOMs) ------------------------------------------------
- file: kibot_out_csv_bom.yaml
definitions:
NAME: @CSV_BOM_OUTPUT@
COMMENT: Bill of Materials in CSV format
DIR: @ASSEMBLY_DIR@
IPN_FIELD: @IPN_FIELD@
MPN_FIELD: @MPN_FIELD@
MAN_FIELD: @MAN_FIELD@
- file: kibot_out_html_bom.yaml
definitions:
NAME: @HTML_BOM_OUTPUT@
COMMENT: Bill of Materials in HTML format
DIR: @ASSEMBLY_DIR@
IPN_FIELD: @IPN_FIELD@
MPN_FIELD: @MPN_FIELD@
MAN_FIELD: @MAN_FIELD@
- file: kibot_out_html_ibom.yaml
definitions:
NAME: @HTML_IBOM_OUTPUT@
COMMENT: Bill of Materials in HTML format
DIR: @ASSEMBLY_DIR@
IPN_FIELD: @IPN_FIELD@
MPN_FIELD: @MPN_FIELD@
MAN_FIELD: @MAN_FIELD@
# Generate Webpage with Diff's ---------------------------------------------
- file: kibot_out_html_kiri.yaml
definitions:
NAME: @HTML_KIRI_OUTPUT@
COMMENT: KiRI webpage
DIR: kiri
# Generate HTML Navigation of Outputs --------------------------------------
- file: kibot_out_navigate_results.yaml
definitions:
NAME: @HTML_NAV_RES_OUTPUT@
COMMENT: Results webpage in HTML format
DIR: html
TITLE: '@ASSEMBLY_NUMBER@ (@ASSEMBLY_NAME@)'
# LOGO: @LOGO@
# LOGO_URL: @GIT_URL@
# PCB 2D Renders (Bare Board) ------------------------------------------
- file: kibot_out_pcbdraw.yaml
definitions:
NAME: @PCBDRAW_2D_TOP_PCB_OUTPUT@
COMMENT: PCB 2D Render (Top)
DIR: @RENDER_DIR@
FORMAT: svg
BOTTOM: false
COMPONENTS: none
- file: kibot_out_pcbdraw.yaml
definitions:
NAME: @PCBDRAW_2D_BOT_PCB_OUTPUT@
COMMENT: PCB 2D Render (Bottom)
DIR: @RENDER_DIR@
FORMAT: svg
BOTTOM: true
COMPONENTS: none
# PCBA 3D Renders (Populated Board; KiCad Viewer) --------------------------
- file: kibot_out_png_3d_viewer.yaml
definitions:
NAME: @PNG_3D_VIEWER_TOP@
COMMENT: Top 3D viewer PCB render in PNG format
DIR: @RENDER_DIR@
SUFFIX: top
VIEW: top
KEY_COLOR: '@KEY_COLOR@'
RAYTRACING: false
- file: kibot_out_png_3d_viewer.yaml
definitions:
NAME: @PNG_3D_VIEWER_BOT@
COMMENT: Bottom 3D viewer PCB render in PNG format
DIR: @RENDER_DIR@
SUFFIX: bottom
VIEW: bottom
KEY_COLOR: '@KEY_COLOR@'
RAYTRACING: false
- file: kibot_out_png_3d_viewer.yaml
definitions:
NAME: @PNG_3D_VIEWER_ANGLED_TOP@
COMMENT: Top (angled) 3D viewer PCB render in PNG format
DIR: @RENDER_DIR@
SUFFIX: angled_top
VIEW: top
ROTATE_X: @3D_VIEWER_ROT_X@
ROTATE_Y: @3D_VIEWER_ROT_Y@
ROTATE_Z: @3D_VIEWER_ROT_Z@
ZOOM: @3D_VIEWER_ZOOM@
KEY_COLOR: '@KEY_COLOR@'
RAYTRACING: false
- file: kibot_out_png_3d_viewer.yaml
definitions:
NAME: @PNG_3D_VIEWER_ANGLED_BOT@
COMMENT: Bottom (angled) 3D viewer PCB render in PNG format
DIR: @RENDER_DIR@
SUFFIX: angled_bottom
VIEW: bottom
ROTATE_X: @3D_VIEWER_ROT_X@
ROTATE_Y: @3D_VIEWER_ROT_Y@
ROTATE_Z: -@3D_VIEWER_ROT_Z@
ZOOM: @3D_VIEWER_ZOOM@
KEY_COLOR: '@KEY_COLOR@'
RAYTRACING: false
# PCBA 3D Renders (Populated Board; Blender) -------------------------------
- file: kibot_out_blender.yaml
definitions:
NAME: @BLENDER_3D_TOP@
COMMENT: High Quality 3D Render (Top)
DIR: @RENDER_DIR@
VIEW: top
ROTATE_X: 0
ROTATE_Y: 0
ROTATE_Z: 0
SAMPLES: @BLENDER_SAMPLES@
RESOLUTION_X: @BLENDER_RESOLUTION_X@
RESOLUTION_Y: @BLENDER_RESOLUTION_Y@
TEXTURE_DPI: @BLENDER_TEXTURE_DPI@
DNF_FILTER: @RENDER_DNF_FILTER@
DIFFUSE_RADIUS: @BLENDER_DIFFUSE_RADIUS@
DIFFUSE_HEIGHT: @BLENDER_DIFFUSE_HEIGHT@
DIFFUSE_LIGHT: 0.7
ACCENT_LIGHT: 0.1
SPOT_LIGHT: 0.1
- file: kibot_out_blender.yaml
definitions:
NAME: @BLENDER_3D_BOT@
COMMENT: High Quality 3D Render (Bottom)
DIR: @RENDER_DIR@
VIEW: bottom
ROTATE_X: 0
ROTATE_Y: 0
ROTATE_Z: 0
SAMPLES: @BLENDER_SAMPLES@
RESOLUTION_X: @BLENDER_RESOLUTION_X@
RESOLUTION_Y: @BLENDER_RESOLUTION_Y@
TEXTURE_DPI: @BLENDER_TEXTURE_DPI@
DNF_FILTER: @RENDER_DNF_FILTER@
DIFFUSE_RADIUS: @BLENDER_DIFFUSE_RADIUS@
DIFFUSE_HEIGHT: @BLENDER_DIFFUSE_HEIGHT@
DIFFUSE_LIGHT: 0.7
ACCENT_LIGHT: 0.1
SPOT_LIGHT: 0.1
- file: kibot_out_blender.yaml
definitions:
NAME: @BLENDER_3D_ANGLED_TOP@
COMMENT: High Quality 3D Render (Angled Top)
DIR: @RENDER_DIR@
VIEW: top
ROTATE_X: @BLENDER_ROT_X@
ROTATE_Y: @BLENDER_ROT_Y@
ROTATE_Z: @BLENDER_ROT_Z@
SAMPLES: @BLENDER_SAMPLES@
RESOLUTION_X: @BLENDER_RESOLUTION_X@
RESOLUTION_Y: @BLENDER_RESOLUTION_Y@
TEXTURE_DPI: @BLENDER_TEXTURE_DPI@
DNF_FILTER: @RENDER_DNF_FILTER@
DIFFUSE_RADIUS: @BLENDER_DIFFUSE_RADIUS@
DIFFUSE_HEIGHT: @BLENDER_DIFFUSE_HEIGHT@
DIFFUSE_LIGHT: 0.4
ACCENT_LIGHT: 0.1
SPOT_LIGHT: 2.0
- file: kibot_out_blender.yaml
definitions:
NAME: @BLENDER_3D_ANGLED_BOT@
COMMENT: High Quality 3D Render (Angled Bottom)
DIR: @RENDER_DIR@
VIEW: bottom
ROTATE_X: -@BLENDER_ROT_X@
ROTATE_Y: @BLENDER_ROT_Y@
ROTATE_Z: @BLENDER_ROT_Z@
SAMPLES: @BLENDER_SAMPLES@
RESOLUTION_X: @BLENDER_RESOLUTION_X@
RESOLUTION_Y: @BLENDER_RESOLUTION_Y@
TEXTURE_DPI: @BLENDER_TEXTURE_DPI@
DNF_FILTER: @RENDER_DNF_FILTER@
DIFFUSE_RADIUS: @BLENDER_DIFFUSE_RADIUS@
DIFFUSE_HEIGHT: @BLENDER_DIFFUSE_HEIGHT@
DIFFUSE_LIGHT: 0.4
ACCENT_LIGHT: 0.1
SPOT_LIGHT: 2.0
# STEP File ----------------------------------------------------------------
- file: kibot_out_3d_model.yaml
definitions:
NAME: @STEP_OUTPUT@
COMMENT: PCB 3D model in STEP format
FORMAT: step
DIR: @MODELS_DIR@
INCLUDE_SILKSCREEN: false
INCLUDE_SOLDERMASK: false
INCLUDE_TRACKS: false
- file: kibot_out_3d_model.yaml
definitions:
NAME: @GLB_OUTPUT@
COMMENT: PCB 3D model in GLB/gITF format
FORMAT: glb
DIR: @MODELS_DIR@
INCLUDE_SILKSCREEN: true
INCLUDE_SOLDERMASK: false
INCLUDE_TRACKS: false
# Fabrication Files (Non-Vendor Specific) ----------------------------------
- file: kibot_out_gerber.yaml
definitions:
NAME: @GERBER_OUTPUT@
COMMENT: Gerbers in GBR format
DIR: @GERBERS_DIR@
PLOT_REFS: @PLOT_REFS@
PROTEL_EXTENSIONS: @PROTEL_EXTENSIONS@
SUBTRACT_MASK: @SUBTRACT_MASK@
# Excellon Drill
- file: kibot_out_excellon_drill.yaml
definitions:
NAME: @EXCELLON_DRILL_OUTPUT@
COMMENT: Drill in Excellon format
DIR: @GERBERS_DIR@
METRIC_UNITS: @EXCELLON_METRIC_UNITS@
# ODB++
- file: kibot_out_odb.yaml
definitions:
NAME: @ODB_OUTPUT@
COMMENT: ODB++ in ZIP format
DIR: @FABRICATION_DIR@
# PDF Drill Map
- file: kibot_out_excellon_drill.yaml
definitions:
NAME: @PDF_DRILL_MAP_OUTPUT@
COMMENT: Drill Map in PDF format
DIR: @GERBERS_DIR@
METRIC_UNITS: @EXCELLON_METRIC_UNITS@
GENERATE_DRILL: false
PTH_NPTH: @GROUP_PTH_NPTH_DRL@
MAP_FORMAT: pdf
# CSV Drill Table
- file: kibot_out_csv_drill_table.yaml
definitions:
NAME: @CSV_DRILL_TABLE_OUTPUT@
COMMENT: Drill Table in CSV format
DIR: @FAB_DRILL_TABLES_DIR@
PTH_NPTH: '@GROUP_PTH_NPTH@'
GROUP_ROUND_SLOTS: @GROUP_ROUND_SLOTS@
# CSV Component Placement File
- file: kibot_out_csv_position.yaml
definitions:
NAME: @CSV_POS_OUTPUT@
COMMENT: Position file in CSV format
DIR: @ASSEMBLY_DIR@
# CSV Test Point Files
- file: kibot_out_csv_testpoints.yaml
definitions:
NAME: @CSV_TP_OUTPUT@
COMMENT: Testpoint report in CSV format
DIR: @TESTPOINTS_DIR@
EXCLUDE_FILTER: @FILT_TP_ONLY@
- file: kibot_out_csv_testpoints_simple.yaml
definitions:
NAME: @CSV_TP_TOP_OUTPUT@
COMMENT: Top testpoint report in CSV format
DIR: @TESTPOINTS_DIR@
SUFFIX: -top
EXCLUDE_FILTER: @FILT_TP_TOP_ONLY@
- file: kibot_out_csv_testpoints_simple.yaml
definitions:
NAME: @CSV_TP_BOTTOM_OUTPUT@
COMMENT: Bottom testpoint report in CSV format
DIR: @TESTPOINTS_DIR@
SUFFIX: -bottom
EXCLUDE_FILTER: @FILT_TP_BOTTOM_ONLY@
# Fabrication and Assembly Drawings
- file: kibot_out_pdf_fabrication.yaml
definitions:
NAME: @PDF_FABRICATION_OUTPUT@
COMMENT: Fabrication document in PDF format
DIR: @FABRICATION_DIR@
COLOR_THEME: @COLOR_THEME@
SHEET_WKS: @SHEET_WKS_PCB@
SCALING: @FAB_SCALING@
PTH_NPTH: '@GROUP_PTH_NPTH@'
GROUP_ROUND_SLOTS: @GROUP_ROUND_SLOTS@
FAB_EXCLUDE_FILTER: @FILT_TP_ONLY@
LAYER_DRILL_MAP: @LAYER_DRILL_MAP@
LAYER_TP_LIST_TOP: @LAYER_TP_LIST_TOP@
LAYER_TP_LIST_BOTTOM: @LAYER_TP_LIST_BOTTOM@
NAME_TP_TOP: @CSV_TP_TOP_OUTPUT@
NAME_TP_BOTTOM: @CSV_TP_BOTTOM_OUTPUT@
NAME_IMPEDANCE_TABLE: @CSV_IMPEDANCE_TABLE_OUTPUT@
NAME_DRILL_TABLE: @CSV_DRILL_TABLE_OUTPUT@
- file: kibot_out_pdf_assembly.yaml
definitions:
NAME: @PDF_ASSEMBLY_OUTPUT@
COMMENT: Assembly document in PDF format
DIR: @ASSEMBLY_DIR@
COLOR_THEME: @COLOR_THEME@
SHEET_WKS: @SHEET_WKS_ASSY@
SCALING: @ASSEMBLY_SCALING@
FAB_EXCLUDE_FILTER: @FILT_TP_EXCLUDE@
LAYER_TITLE_PAGE: @LAYER_TITLE_PAGE@
LAYER_ASSEMBLY_TEXT_TOP: @LAYER_ASSEMBLY_TEXT_TOP@
LAYER_ASSEMBLY_TEXT_BOTTOM: @LAYER_ASSEMBLY_TEXT_BOTTOM@
LAYER_DNP_CROSS_TOP: @LAYER_DNP_CROSS_TOP@
LAYER_DNP_CROSS_BOTTOM: @LAYER_DNP_CROSS_BOTTOM@
NAME_COMP_COUNT: @CSV_COMP_COUNT_OUPUT@
# Zip File of Fabrication Data
- file: kibot_out_compress_fab.yaml
definitions:
NAME: @ZIP_COMPRESS_FAB_OUTPUT@
COMMENT: Generates a ZIP file with gerbers, drill and fabrication document
DIR: @FABRICATION_DIR@
GERBER_OUTPUT: @GERBER_OUTPUT@
DRILL_MAP_OUTPUT: @PDF_DRILL_MAP_OUTPUT@
DRILL_OUTPUT: @EXCELLON_DRILL_OUTPUT@
FABRICATION_OUTPUT: @PDF_FABRICATION_OUTPUT@
# Fabrication and Assembly Files (JLCPCB) ----------------------------------
- file: kibot_out_gerber.yaml
definitions:
NAME: @JLCPCB_GERBER_OUTPUT@
COMMENT: Gerbers in GBR format for JLCPCB
DIR: @JLCPCB_GERBERS_DIR@
PLOT_REFS: true
PROTEL_EXTENSIONS: true
SUBTRACT_MASK: false
- file: kibot_out_jlcpcb_fabpack.yaml
definitions:
NAME: @JLCPCB_FABPACK_OUTPUT@
COMMENT: Zipped Fabpack for JLCPCB
DIR: @JLCPCB_FAB_DIR@
GERBER_OUTPUT: @JLCPCB_GERBER_OUTPUT@
DRILL_OUTPUT: @EXCELLON_DRILL_OUTPUT@
- file: kibot_out_jlcpcb_bom.yaml
definitions:
NAME: @JLCPCB_BOM_OUTPUT@
COMMENT: Bill of Materials for JLCPCB
DIR: @JLCPCB_ASSY_DIR@
EXCLUDE_FILTER: @FILT_LCSC_PARTS@
- file: kibot_out_jlcpcb_cpl.yaml
definitions:
NAME: @JLCPCB_CPL_OUTPUT@
COMMENT: Component Placement File for JLCPCB
DIR: @JLCPCB_ASSY_DIR@
EXCLUDE_FILTER: @FILT_LCSC_PARTS@
# Notes and Reports --------------------------------------------------------
- file: kibot_out_csv_report.yaml
definitions:
NAME: @CSV_COMP_COUNT_OUPUT@
COMMENT: Component report (count) in CSV format
DIR: @ASSEMBLY_DIR@
OUTPUT_ID: components_count
TEMPLATE: total_components
- file: kibot_out_csv_report.yaml
definitions:
NAME: @CSV_IMPEDANCE_TABLE_OUTPUT@
COMMENT: Impedance table in CSV format
DIR: @FABRICATION_DIR@
OUTPUT_ID: impedance_table
TEMPLATE: @NOTES_DIR@/impedance_table.txt
- file: kibot_out_txt_report.yaml
definitions:
NAME: @TXT_SCH_NOTES_OUTPUT@
COMMENT: Schematic notes in TXT format
DIR: @SCHEMATIC_DIR@
OUTPUT_ID: schematic_notes
TEMPLATE: @NOTES_DIR@/schematic_notes.txt
- file: kibot_out_txt_report.yaml
definitions:
NAME: @TXT_FAB_NOTES_OUTPUT@
COMMENT: Fabrication notes in TXT format
DIR: @FABRICATION_DIR@
OUTPUT_ID: fabrication_notes
TEMPLATE: @NOTES_DIR@/fabrication_notes.txt
- file: kibot_out_txt_report.yaml
definitions:
NAME: @TXT_ASSY_NOTES_OUTPUT@
COMMENT: Assembly notes in TXT format
DIR: @ASSEMBLY_DIR@
OUTPUT_ID: assembly_notes
TEMPLATE: @NOTES_DIR@/assembly_notes.txt
# Panelization Outputs -----------------------------------------------------
- file: kibot_out_panelize.yaml
definitions:
NAME: @PANEL_800_OUTPUT@
DIR: '@PANELS_DIR@/panel-800'
CONFIG: '@PANEL_800_CONFIG@'
TITLE: '@PANEL_800_TITLE@'
# ============================================================================
# Definitions
...
definitions:
# Project Metadata =========================================================
PROJECT_CODE: P99
ASSEMBLY_NUMBER: A99-9000
ASSEMBLY_NAME: Assembly Name
GIT_URL: /jkrauss/Test_4
COMPANY: Asymworks, LLC
DESIGNER: JPK
DWG_NUMBER_SCH: S99-9000
DWG_TITLE_SCH: Schematic, Assembly Name
DWG_NUMBER_PCB: P99-9000
DWG_TITLE_PCB: PCB, Assembly Name
DWG_TITLE_ASSY: PCB Assembly, Assembly Name
# Panel Configurations -----------------------------------------------------
PANEL_800_OUTPUT: panel_801
PANEL_800_CONFIG: '@PANELS_DIR@/panel-800.json'
PANEL_800_TITLE: Panel Fabrication (Panel -800)
# Preflight ================================================================
CHECK_ZONE_FILLS: false
STACKUP_TABLE_NOTE: external layer thicknesses are specified after plating
# BOM ======================================================================
IPN_FIELD: 'Asymworks IPN'
MPN_FIELD: 'Manufacturer PN'
MAN_FIELD: 'Manufacturer'
# Drill Table and Drill Map Parameters =====================================
GROUP_ROUND_SLOTS: true # whether or not to group round holes and slots
GROUP_PTH_NPTH: 'no' # for drill tables (CSV, PCB Print)
GROUP_PTH_NPTH_DRL: false # for .drl files
# Gerber Parameters ========================================================
PLOT_REFS: true # reference designators
PROTEL_EXTENSIONS: false # use Protel extensions
SUBTRACT_MASK: false # subtract Solder Mask from Silkscreen
EXCELLON_METRIC_UNITS: true # use Metric units for Excellon drill file
# References to exclude from testpoint highlighting ========================
TP_EXCLUDE_REFS: '[MB*]' # for components on the PCB but not on the schematic
# Schematic parameters =====================================================
COLOR_THEME: Altium_Theme
SHEET_WKS_SCH: templates/Asymworks_SCH.kicad_wks
SHEET_WKS_PCB: templates/Asymworks_PCB.kicad_wks
SHEET_WKS_ASSY: templates/Asymworks_PCBA.kicad_wks
FAB_SCALING: 1
ASSEMBLY_SCALING: 1
# 3D Render parameters =====================================================
RENDER_DNF_FILTER: _kibom_dnf_Config
3D_VIEWER_ROT_X: 2
3D_VIEWER_ROT_Y: -1
3D_VIEWER_ROT_Z: 1
3D_VIEWER_ZOOM: -1
KEY_COLOR: '#FF00FF' # Background color to remove. Use a color different from your PCB
BLENDER_SAMPLES: 20 # Overridden to 2 samples for WORKING state by CI Script
BLENDER_ROT_X: 30
BLENDER_ROT_Y: 10
BLENDER_ROT_Z: 10
BLENDER_RESOLUTION_X: 1500
BLENDER_RESOLUTION_Y: 1500
BLENDER_TEXTURE_DPI: 1031.0
BLENDER_DIFFUSE_HEIGHT: 10.0
BLENDER_DIFFUSE_RADIUS: 6.0
# Directories ==============================================================
# Root
OUTPUT_DIR: ./
# Relative to root
REPORT_DIR: reports
SCHEMATIC_DIR: schematic
MANUFACTURING_DIR: mfg
ASSEMBLY_DIR: '@MANUFACTURING_DIR@/assembly'
FABRICATION_DIR: '@MANUFACTURING_DIR@/fab'
GERBERS_DIR: '@FABRICATION_DIR@/gerbers'
FAB_DRILL_TABLES_DIR: '@FABRICATION_DIR@/drill-tables'
TESTING_DIR: test
TESTPOINTS_DIR: '@TESTING_DIR@/testpoints'
RESOURCES_DIR: kibot
MODELS_DIR: models
NOTES_DIR: notes
RENDER_DIR: renders
REPORT_TEMPLATE_DIR: '@RESOURCES_DIR@/templates'
SCRIPTS_DIR: '@RESOURCES_DIR@/scripts'
PANELS_DIR: panels
PANEL_FAB_DIR: '@FABRICATION_DIR@/panels'
JLCPCB_FAB_DIR: '@MANUFACTURING_DIR@/jlcpcb'
JLCPCB_ASSY_DIR: '@MANUFACTURING_DIR@/jlcpcb'
JLCPCB_GERBERS_DIR: '@MANUFACTURING_DIR@/jlcpcb/gerbers'
# Layer Names - should match user-defined names in the PCB. ===============
LAYER_TITLE_PAGE: AssyTitlePage
LAYER_DNP_TOP: F.DNP
LAYER_DNP_BOTTOM: B.DNP
LAYER_DRILL_MAP: DrillMap
LAYER_TP_LIST_TOP: F.TestPointList
LAYER_TP_LIST_BOTTOM: B.TestPointList
LAYER_ASSEMBLY_TEXT_TOP: F.AssemblyText
LAYER_ASSEMBLY_TEXT_BOTTOM: B.AssemblyText
LAYER_DNP_CROSS_TOP: F.DNP
LAYER_DNP_CROSS_BOTTOM: B.DNP
# Filter Names =============================================================
FILT_FIELD_RENAME: field_rename
FILT_LCSC_PARTS: only_lcsc_parts
FILT_TP_ONLY: only_testpoints
FILT_TP_EXCLUDE: exclude_testpoints
FILT_TP_TOP_ONLY: only_testpoints_top
FILT_TP_BOTTOM_ONLY: only_testpoints_bottom
# Output Names ============================================================
NETLIST_OUTPUT: netlist
PDF_SCHEMATIC_OUTPUT: pdf_schematic
PDF_FABRICATION_OUTPUT: pdf_fabrication
PDF_ASSEMBLY_OUTPUT: pdf_assembly
CSV_BOM_OUTPUT: csv_bom
HTML_IBOM_OUTPUT: html_bom_interactive
HTML_BOM_OUTPUT: html_bom
CSV_COMP_COUNT_OUPUT: csv_comp_count
CSV_IMPEDANCE_TABLE_OUTPUT: csv_impedance_table
GERBER_OUTPUT: gbr_gerbers
ODB_OUTPUT: zip_odb
EXCELLON_DRILL_OUTPUT: drl_excellon
PDF_DRILL_MAP_OUTPUT: pdf_drill_map
DXF_DRILL_MAP_OUTPUT: dxf_drill_map
CSV_DRILL_TABLE_OUTPUT: csv_drill_table
CSV_POS_OUTPUT: csv_position
CSV_TP_OUTPUT: csv_testpoints
CSV_TP_TOP_OUTPUT: csv_testpoints_top
CSV_TP_BOTTOM_OUTPUT: csv_testpoints_bottom
ZIP_COMPRESS_FAB_OUTPUT: zip_compress_fab
STEP_OUTPUT: step
GLB_OUTPUT: glb
PCBDRAW_2D_TOP_PCB_OUTPUT: pcbdraw_top
PCBDRAW_2D_BOT_PCB_OUTPUT: pcbdraw_bottom
PNG_3D_VIEWER_TOP: png_3d_viewer_top
PNG_3D_VIEWER_BOT: png_3d_viewer_bottom
PNG_3D_VIEWER_ANGLED_TOP: png_3d_viewer_angled_top
PNG_3D_VIEWER_ANGLED_BOT: png_3d_viewer_angled_bottom
BLENDER_3D_TOP: blender_3d_top
BLENDER_3D_BOT: blender_3d_bottom
BLENDER_3D_ANGLED_TOP: blender_3d_angled_top
BLENDER_3D_ANGLED_BOT: blender_3d_angled_bottom
TXT_SCH_NOTES_OUTPUT: txt_schematic_notes
TXT_FAB_NOTES_OUTPUT: txt_fabrication_notes
TXT_ASSY_NOTES_OUTPUT: txt_assembly_notes
HTML_KIRI_OUTPUT: html_kiri
HTML_NAV_RES_OUTPUT: html_navigate_results
JLCPCB_GERBER_OUTPUT: jlcpcb_gerbers
JLCPCB_FABPACK_OUTPUT: jlcpcb_fabpack
JLCPCB_BOM_OUTPUT: jlcpcb_bom
JLCPCB_CPL_OUTPUT: jlcpcb_cpl

View File

@@ -0,0 +1,32 @@
# KiBot output for generating PCB 3D models in various formats (Requires KiCad 9+)
# https://kibot.readthedocs.io/en/latest/configuration/outputs/export_3d.html
kibot:
version: 1
outputs:
- name: @NAME@
output_id: @NAME@
comment: '@COMMENT@'
type: export_3d
category: '@DIR@'
dir: '@DIR@'
options:
format: @FORMAT@
origin: drill
output: '%f-%I%v.%x'
# Configurable for higher-fidelity outputs (e.g. gITF)
include_silkscreen: @INCLUDE_SILKSCREEN@
include_soldermask: @INCLUDE_SOLDERMASK@
include_tracks: @INCLUDE_TRACKS@
...
definitions:
NAME: step
COMMENT: PCB 3D model in STEP format
DIR: models
FORMAT: step
INCLUDE_SILKSCREEN: false
INCLUDE_SOLDERMASK: false
INCLUDE_TRACKS: false

View File

@@ -0,0 +1,150 @@
# KiBot output for generating PCB 3D model PCB3D Blender format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/PCB2Blender_ToolsOptions.html
# The lighting setup allows for even, diffuse background lighting as well as
# a focused light for shadows/depth. The eight area lights form a ring around
# the top of the board, while the spot light illuminates from behind and to the
# right of the camera. The accent lights illuminate from behind the board at a
# low angle to help light up solder pads.
#
# For top/bottom renders that look directly down at the board, set @SPOT_LIGHT@
# to 0.1 and @ADIFFUSE_LIGHT@ to 0.7. For angle renders, start with @SPOT_LIGHT@
# set to 2.0 and @DIFFUSE_LIGHT@ at 0.4. Some experimentation, including with
# the ring radius and height, may be required to get good results.
kibot:
version: 1
outputs:
- name: @NAME@
output_id: @NAME@
comment: '@COMMENT@'
type: blender_export
category: '@DIR@'
dir: '@DIR@'
options:
auto_camera_z_axis_factor: 1.1
pcb_import:
enhance_materials: true
texture_dpi: @TEXTURE_DPI@
pcb3d:
download: true
download_lcsc: true
dnf_filter:
- @DNF_FILTER@
render_options:
auto_crop: true
transparent_background: true
samples: @SAMPLES@
resolution_x: @RESOLUTION_X@
resolution_y: @RESOLUTION_Y@
point_of_view:
rotate_x: @ROTATE_X@
rotate_y: @ROTATE_Y@
rotate_z: @ROTATE_Z@
view: @VIEW@
outputs:
- type: render
output: '%f-%I%v.%x'
light:
- name: spot
energy: @SPOT_LIGHT@
pos_x: -size*3.33
pos_y: size*3.33
pos_z: size*5
type: POINT
- name: accent_1
energy: @ACCENT_LIGHT@
pos_x: -size*2
pos_y: size*6
pos_z: size*3
type: AREA
- name: accent_2
energy: @ACCENT_LIGHT@
pos_x: size*2
pos_y: size*6
pos_z: size*3
type: AREA
- name: ring_1
energy: @DIFFUSE_LIGHT@
pos_x: size*@DIFFUSE_RADIUS@
pos_y: 0
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_2
energy: @DIFFUSE_LIGHT@
pos_x: -size*@DIFFUSE_RADIUS@
pos_y: 0
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_3
energy: @DIFFUSE_LIGHT@
pos_x: 0
pos_y: size*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_4
energy: @DIFFUSE_LIGHT@
pos_x: 0
pos_y: -size*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_5
energy: @DIFFUSE_LIGHT@
pos_x: size*0.71*@DIFFUSE_RADIUS@
pos_y: size*0.71*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_6
energy: @DIFFUSE_LIGHT@
pos_x: -size*0.71*@DIFFUSE_RADIUS@
pos_y: size*0.71*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_7
energy: @DIFFUSE_LIGHT@
pos_x: size*0.71*@DIFFUSE_RADIUS@
pos_y: -size*0.71*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
- name: ring_8
energy: @DIFFUSE_LIGHT@
pos_x: -size*0.71*@DIFFUSE_RADIUS@
pos_y: -size*0.71*@DIFFUSE_RADIUS@
pos_z: size*@DIFFUSE_HEIGHT@
type: AREA
...
definitions:
NAME: blender_3d_angled_top
COMMENT: PCB 3D model in PCB3D Blender format
DIR: renders
DNF_FILTER: _kibom_dnf_Config
RESOLUTION_X: 1280
RESOLUTION_Y: 1280
TEXTURE_DPI: 1031.0
SAMPLES: 5
ROTATE_X: 30
ROTATE_Y: 10
ROTATE_Z: 10
VIEW: top
DIFFUSE_RADIUS: 6.0
DIFFUSE_HEIGHT: 10.0
DIFFUSE_LIGHT: 0.4
ACCENT_LIGHT: 0.1
SPOT_LIGHT: 2.0

View File

@@ -0,0 +1,34 @@
# KiBot output for compressing Fabrication files to a ZIP archive
# https://kibot.readthedocs.io/en/latest/configuration/outputs/compress.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: compress
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f-GERBERS%I%v.%x'
move_files: false
files:
- from_output: @GERBER_OUTPUT@
dest: '/'
- from_output: @DRILL_MAP_OUTPUT@
dest: '/'
- from_output: @DRILL_OUTPUT@
dest: '/'
- from_output: @FABRICATION_OUTPUT@
dest: '/'
...
definitions:
NAME: zip_compress_fab
COMMENT: Generates a ZIP file with gerbers, drill and fabrication document
DIR: Manufacturing/Fabrication
GERBER_OUTPUT: gbr_gerbers
DRILL_MAP_OUTPUT: pdf_drill_map
DRILL_OUTPUT: drl_excellon
FABRICATION_OUTPUT: pdf_fabrication

View File

@@ -0,0 +1,48 @@
# KiBot output for generating Bill of Materials in CSV format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/bom.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: bom
category: '@DIR@'
dir: '@DIR@'
options:
format: CSV
csv:
hide_pcb_info: true
hide_stats_info: true
group_fields: ['@MPN_FIELD@', '@IPN_FIELD@', 'Value']
columns:
- "Row"
- "Quantity Per PCB"
- "References"
- "Value"
- "Datasheet"
- "Footprint"
- "Description"
- "@IPN_FIELD@"
- "@MAN_FIELD@"
- "@MPN_FIELD@"
- "LCSC"
# - "arrow#"
# - "digikey#"
# - "farnell#"
# - "mouser#"
# - "newark#"
# - "rs#"
# - "tme#"
...
definitions:
NAME: csv_bom
COMMENT: Bill of Materials in CSV format
DIR: mfg/assembly
IPN_FIELD: 'Asymworks IPN'
MPN_FIELD: 'Manufacturer PN'
MAN_FIELD: 'Manufacturer'

View File

@@ -0,0 +1,25 @@
# KiBot output for generating Drill Tables
# https://kibot.readthedocs.io/en/latest/configuration/outputs/excellon.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: excellon
category: '@DIR@'
dir: '@DIR@'
options:
generate_drill_files: false
table:
unify_pth_and_npth: '@PTH_NPTH@'
group_slots_and_round_holes: @GROUP_ROUND_SLOTS@
...
definitions:
NAME: csv_drill_table
COMMENT: Drill Table in CSV format
DIR: mfg/fab/tables
PTH_NPTH: 'yes'
GROUP_ROUND_SLOTS: true

View File

@@ -0,0 +1,24 @@
# KiBot output for generating Position file in CSV format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/position.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: position
category: '@DIR@'
dir: '@DIR@'
options:
format: 'CSV'
only_smd: false
include_virtual: false
output: '%f-CPL%I%v.%x'
separate_files_for_front_and_back: false
...
definitions:
NAME: csv_position
COMMENT: Position file in CSV format
DIR: Manufacturing/Assembly

View File

@@ -0,0 +1,26 @@
# KiBot output for CSV Report
# https://kibot.readthedocs.io/en/latest/configuration/outputs/report.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: report
category: '@DIR@'
dir: '@DIR@'
output_id: @OUTPUT_ID@
options:
output: '%f-%I%v.csv'
template: @TEMPLATE@
exclude_filter: '_mechanical'
csv_remove_leading_spaces: true
...
definitions:
NAME: csv_report
COMMENT: Report in CSV format
DIR: mfg
OUTPUT_ID: ''
TEMPLATE: total_components

View File

@@ -0,0 +1,51 @@
# KiBot output for generating CSV Tespoints
# https://kibot.readthedocs.io/en/latest/configuration/outputs/bom.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: bom
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f-testpoints@SUFFIX@%I%v.%x'
csv:
hide_pcb_info: True
hide_stats_info: True
pre_transform: ['_kicost_rename']
exclude_filter: '@EXCLUDE_FILTER@'
dnf_filter: '_null'
exclude_marked_in_sch: false
group_fields: []
sort_style: ref
use_aux_axis_as_origin: true
ignore_dnf: false
format: CSV
footprint_type_values: 'SMT,THRU,'
columns:
- field: References
name: Testpoint Ref.
- field: Net Name
name: Net
- field: Net Class
- field: Footprint X
name: X
- field: Footprint Y
name: Y
- field: Footprint Side
name: Side
- field: Footprint Type
name: Pad Type
- field: Value
- field: Footprint
...
definitions:
NAME: csv_testpoints
COMMENT: Testpoint report in CSV format
DIR: Testing/Testpoints
SUFFIX: ""
EXCLUDE_FILTER: only_testpoints

View File

@@ -0,0 +1,45 @@
# KiBot output for generating CSV Tespoints
# https://kibot.readthedocs.io/en/latest/configuration/outputs/bom.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: bom
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f-testpoints@SUFFIX@%I%v.%x'
csv:
hide_pcb_info: True
hide_stats_info: True
pre_transform: ['_kicost_rename']
exclude_filter: '@EXCLUDE_FILTER@'
dnf_filter: '_null'
exclude_marked_in_sch: false
group_fields: []
sort_style: ref
use_aux_axis_as_origin: true
ignore_dnf: false
format: CSV
footprint_type_values: 'SMT,THRU,'
right_digits: 2
columns:
- field: References
name: Ref.
- field: Net Label
name: Net
- field: Footprint X
name: X [mm]
- field: Footprint Y
name: Y [mm]
...
definitions:
NAME: csv_testpoints
COMMENT: Testpoint report in CSV format
DIR: Testing/Testpoints
SUFFIX: ""
EXCLUDE_FILTER: only_testpoints

View File

@@ -0,0 +1,30 @@
# KiBot output for generating drill Gerber files
# https://kibot.readthedocs.io/en/latest/configuration/outputs/excellon.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: excellon
category: '@DIR@'
dir: '@DIR@'
options:
generate_drill_files: @GENERATE_DRILL@
pth_and_npth_single_file: @PTH_NPTH@
pth_id: '-pth'
npth_id: '-npth'
map: '@MAP_FORMAT@'
metric_units: @METRIC_UNITS@
use_aux_axis_as_origin: true
...
definitions:
NAME: drl_excellon
COMMENT: Drill in Excellon format
DIR: mfg/fab/gerbers
GENERATE_DRILL: true
PTH_NPTH: false
MAP_FORMAT: None
METRIC_UNITS: true

View File

@@ -0,0 +1,29 @@
# KiBot output for generating Gerber files
# https://kibot.readthedocs.io/en/latest/configuration/outputs/gerber.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: gerber
category: '@DIR@'
dir: '@DIR@'
layers: ['copper', 'Edge.Cuts', 'F.Silkscreen', 'F.Mask', 'F.Paste', 'B.Silkscreen', 'B.Mask', 'B.Paste']
options:
subtract_mask_from_silk: @SUBTRACT_MASK@
plot_footprint_refs: @PLOT_REFS@
plot_footprint_values: false
create_gerber_job_file: false
use_aux_axis_as_origin: true
use_protel_extensions: @PROTEL_EXTENSIONS@
...
definitions:
NAME: gbr_gerbers
COMMENT: Gerbers in GBR format
DIR: mfg/fab/gerbers
PLOT_REFS: true
PROTEL_EXTENSIONS: false
SUBTRACT_MASK: false

View File

@@ -0,0 +1,51 @@
# KiBot output for generating Interactive HTML BoM
# https://kibot.readthedocs.io/en/latest/configuration/outputs/ibom.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: bom
category: '@DIR@'
dir: '@DIR@'
options:
format: HTML
html:
title: 'Bill of Materials'
datasheet_as_link: "Datasheet"
lcsc_link: true
logo: false
style: modern-blue
group_fields: ['@MPN_FIELD@', 'Value']
columns:
- "Row"
- "Quantity Per PCB"
- "References"
- "Value"
- "Datasheet"
- "Footprint"
- "Description"
- "@IPN_FIELD@"
- "@MAN_FIELD@"
- "@MPN_FIELD@"
- "LCSC"
# - "arrow#"
# - "digikey#"
# - "farnell#"
# - "mouser#"
# - "newark#"
# - "rs#"
# - "tme#"
...
definitions:
NAME: html_bom
COMMENT: BOM in HTML format
DIR: mfg/assembly
IPN_FIELD: 'Asymworks IPN'
MPN_FIELD: 'Manufacturer PN'
MAN_FIELD: 'Manufacturer'

View File

@@ -0,0 +1,36 @@
# KiBot output for generating Interactive HTML BoM
# https://kibot.readthedocs.io/en/latest/configuration/outputs/ibom.html
# This output is currently somewhat buggy, and fails at odd times complaining
# about missing embedded Schematic WKS frame files.
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: ibom
dir: '@DIR@'
category: '@DIR@'
options:
# extra_data_file: '%F.net'
dark_mode: true
show_fields: 'Value,Footprint,@IPN_FIELD@,@MPN_FIELD@'
group_fields: 'Value,@IPN_FIELD@'
show_fabrication: true
highlight_pin1: "selected"
exclude_filter: '@EXCLUDE_FILTER@'
hide_excluded: true
forced_name: '@TITLE@'
mark_when_checked: 'Placed'
...
definitions:
NAME: html_bom_interactive
COMMENT: Interactive BOM in HTML format
DIR: mfg/assembly
EXCLUDE_FILTER: exclude_testpoints
TITLE: ""
IPN_FIELD: 'Asymworks IPN'
MPN_FIELD: 'Manufacturer PN'

View File

@@ -0,0 +1,24 @@
# KiBot output for diff web page between commits
# https://kibot.readthedocs.io/en/latest/configuration/outputs/kiri.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: kiri
category: '@DIR@'
dir: '@DIR@'
layers: all
options:
keep_generated: true
max_commits: 3
revision: 'HEAD'
zones: 'global'
...
definitions:
NAME: html_kiri
COMMENT: KiRi webpage
DIR: kiri

View File

@@ -0,0 +1,35 @@
# KiBot output for generating Bill of Materials in CSV format for JLCPCB
# https://kibot.readthedocs.io/en/latest/configuration/outputs/bom.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: bom
category: '@DIR@'
dir: '@DIR@'
options:
exclude_filter: @EXCLUDE_FILTER@
format: CSV
csv:
hide_pcb_info: true
hide_stats_info: true
quote_all: true
columns:
- field: Value
name: Comment
- field: References
name: Designator
- Footprint
- field: _field_lcsc_part
name: 'LCSC Part #'
ref_separator: ','
...
definitions:
NAME: jlcpcb_bom
COMMENT: Bill of Materials for JLCPCB
DIR: mfg/assembly/jlcpcb
EXCLUDE_FILTER: only_lcsc_parts

View File

@@ -0,0 +1,48 @@
# KiBot output for generating Position file in CSV format for JLCPCB
# https://kibot.readthedocs.io/en/latest/configuration/outputs/position.html
kibot:
version: 1
filters:
- name: fix_rotation
comment: Adjust rotation for JLCPCB
type: rot_footprint
negative_bottom: false
mirror_bottom: true
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: position
category: '@DIR@'
dir: '@DIR@'
options:
format: 'CSV'
output: '%f-cpl%I%v.%x'
separate_files_for_front_and_back: false
units: millimeters
only_smd: true
include_virtual: false
exclude_filter: @EXCLUDE_FILTER@
pre_transform: '_rot_footprint_jlcpcb'
columns:
- id: Ref
name: Designator
- Val
- Package
- id: PosX
name: "Mid X"
- id: PosY
name: "Mid Y"
- id: Rot
name: Rotation
- id: Side
name: Layer
...
definitions:
NAME: jlcpcb_cpl
COMMENT: Component Placement for JLCPCB
DIR: mfg/assembly/jlcpcb
EXCLUDE_FILTER: only_lcsc_parts

View File

@@ -0,0 +1,28 @@
# KiBot output for compressing Fabrication files to a ZIP archive for JLCPCB
# https://kibot.readthedocs.io/en/latest/configuration/outputs/compress.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: compress
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f-Fabpack%I%v.%x'
move_files: false
files:
- from_output: @GERBER_OUTPUT@
dest: '/'
- from_output: @DRILL_OUTPUT@
dest: '/'
...
definitions:
NAME: jlcpcb_fabpack
COMMENT: Generates a ZIP file with gerbers and drill for JLCPCB
DIR: mfg/fab
GERBER_OUTPUT: jlcpcb_gerbers
DRILL_OUTPUT: drl_excellon

View File

@@ -0,0 +1,32 @@
# KiBot output for generating an HTML page for navigating the results
# https://kibot.readthedocs.io/en/latest/configuration/outputs/navigate_results_rb.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: navigate_results_rb
# category: '@DIR@'
dir: '@DIR@'
options:
link_from_root: 'index.html'
logo: '@LOGO@'
logo_force_height: 40
logo_url: '@LOGO_URL@'
nav_bar: true
render_markdown: true
display_category_images: false
display_kibot_version: false
title: '@TITLE@'
title_url: '@LOGO_URL@'
...
definitions:
NAME: html_navigate_results
COMMENT: Results webpage in HTML format
DIR: html
TITLE: ''
LOGO: ''
LOGO_URL: ''

View File

@@ -0,0 +1,18 @@
# KiBot output for generating netlist in KiCad format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/netlist.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: netlist
options:
format: '@FORMAT@'
...
definitions:
NAME: netlist
FORMAT: classic
COMMENT: Schematic netlist in KiCad format

View File

@@ -0,0 +1,20 @@
# KiBot output for generating ODB++ files
# https://kibot.readthedocs.io/en/latest/configuration/outputs/odb.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: odb
category: '@DIR@'
dir: '@DIR@'
options:
dnf_filter: _kibom_dnf_Config
...
definitions:
NAME: zip_odb
COMMENT: ODB++ in ZIP format
DIR: mfg/fab

View File

@@ -0,0 +1,27 @@
# KiBot output for generating PCB Panels with KiKit
# https://kibot.readthedocs.io/en/latest/configuration/outputs/panelize.html
kibot:
version: 1
outputs:
- name: @NAME@
output_id: @NAME@
comment: '@COMMENT@'
type: panelize
category: '@DIR@'
dir: '@DIR@'
options:
configs: @CONFIG@
output: '%f-%I%v.%x'
create_preview: true
title: '@TITLE@'
...
definitions:
NAME: panel
COMMENT: PCB Panelization
CATEGORY: Panels
DIR: fab/panel
CONFIG: ''
TITLE: ''

View File

@@ -0,0 +1,24 @@
# KiBot output for generating PCB 2D renders with PcbDraw
# https://kibot.readthedocs.io/en/latest/configuration/outputs/pcbdraw.html
kibot:
version: 1
outputs:
- name: @NAME@
output_id: @NAME@
comment: '@COMMENT@'
type: pcbdraw
category: '@DIR@'
dir: '@DIR@'
options:
bottom: @BOTTOM@
format: @FORMAT@
output: '%f-%I%v.%x'
...
definitions:
NAME: pcbdraw_top
COMMENT: PCB 2D Render (Top)
DIR: renders
BOTTOM: false

View File

@@ -0,0 +1,117 @@
# KiBot output for generating Assembly Document in PDF format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/pcb_print.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: pcb_print
category: '@DIR@'
dir: '@DIR@'
options:
colored_vias: false
colored_pads: false
color_theme: '@COLOR_THEME@'
output: '%f-assembly%I%v.%x'
format: 'PDF'
title: '@DOC_TITLE@ Document'
realistic_solder_mask: false
dpi: 1200
dnf_filter: _kibom_dnf_Config
# dnf_filter: '_null'
sheet_reference_layout: '@SHEET_WKS@'
include_table:
outputs:
- name: '@NAME_COMP_COUNT@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.4
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
row_spacing: 3
column_spacing: 2
pages:
- scaling: @SCALING@
layer_var: ''
title: '@DOC_TITLE@'
sheet: Top/Bottom View
sheet_reference_color: '#000000'
layers:
- layer: '@LAYER_TITLE_PAGE@'
color: '#000000'
- scaling: @SCALING@
layer_var: "Top Assembly (Scale @SCALING@:1)"
title: '@DOC_TITLE@'
sheet: Top Assembly (Scale @SCALING@:1)
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: F.Cu
color: '#EEDAB5'
- layer: F.Mask
color: '#B9B9B9'
- layer: F.Paste
color: '#E1A98E'
- layer: F.Silkscreen
color: '#DB9DE1'
- layer: F.Fab
exclude_filter: '@FAB_EXCLUDE_FILTER@'
color: '#744679'
- layer: '@LAYER_ASSEMBLY_TEXT_TOP@'
color: '#000000'
- layer: '@LAYER_DNP_CROSS_TOP@'
color: '#D63034'
- scaling: @SCALING@
layer_var: "Bottom Assembly (Scale @SCALING@:1)"
mirror: true
mirror_pcb_text: false
title: '@DOC_TITLE@'
sheet: Bottom Assembly (Scale @SCALING@:1)
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: B.Cu
color: '#D5DBF4'
- layer: B.Mask
color: '#B9B9B9'
- layer: B.Paste
color: '#BCB9DD'
- layer: B.Silkscreen
color: '#DB9DE1'
- layer: B.Fab
exclude_filter: '@FAB_EXCLUDE_FILTER@'
color: '#400080'
- layer: '@LAYER_ASSEMBLY_TEXT_BOTTOM@'
color: '#000000'
- layer: '@LAYER_DNP_CROSS_BOTTOM@'
color: '#D63034'
...
definitions:
NAME: pdf_assembly
COMMENT: Assembly document in PDF format
DIR: mfg/assembly
DOC_TITLE: Assembly
COLOR_THEME: Altium_Theme
SHEET_WKS: ${KIPRJMOD}/templates/Asymworks_PCB.kicad_wks
SCALING: 1.0
FAB_EXCLUDE_FILTER: exclude_testpoints
LAYER_TITLE_PAGE: AssyTitlePage
LAYER_ASSEMBLY_TEXT_TOP: F.AssemblyText
LAYER_ASSEMBLY_TEXT_BOTTOM: B.AssemblyText
LAYER_DNP_CROSS_TOP: F.DNP
LAYER_DNP_CROSS_BOTTOM: B.DNP
NAME_COMP_COUNT: csv_comp_count

View File

@@ -0,0 +1,234 @@
# KiBot output for generating Fabrication Document in PDF format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/pcb_print.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: pcb_print
category: '@DIR@'
dir: '@DIR@'
options:
colored_pads: false
colored_vias: false
color_theme: '@COLOR_THEME@'
output: '%f-fabrication%I%v.%x'
format: 'PDF'
title: '@DOC_TITLE@ Document'
realistic_solder_mask: false
dpi: 1200
dnf_filter: _kibom_dnf_Config
frame_plot_mechanism: 'internal'
sheet_reference_layout: '@SHEET_WKS@'
drill:
unify_pth_and_npth: '@PTH_NPTH@'
group_slots_and_round_holes: @GROUP_ROUND_SLOTS@
include_table:
outputs:
- name: '@NAME_TP_TOP@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.4
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0.2
top_rule_width: 0.2
bottom_rule_width: 0.2
column_spacing: 2
force_font_width: 1.27 # mm
- name: '@NAME_TP_BOTTOM@'
text_alignment: 'right'
invert_columns_order: true
border_width: 0.4
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0.2
top_rule_width: 0.2
bottom_rule_width: 0.2
column_spacing: 2
force_font_width: 1.27 # mm
- name: '@NAME_IMPEDANCE_TABLE@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.4
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0.2
top_rule_width: 0.2
bottom_rule_width: 0.2
row_spacing: 3
column_spacing: 2
row_spacing: 3
- name: '@NAME_DRILL_TABLE@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.4
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0.2
top_rule_width: 0.2
bottom_rule_width: 0.2
row_spacing: 3
column_spacing: 2
force_font_width: 1 # mm
pages:
- scaling: @SCALING@
title: '@DOC_TITLE@'
sheet: 'Top Fabrication (Scale @SCALING@:1)'
layer_var: 'Top Fabrication (Scale @SCALING@:1)'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: F.Cu
color: '#F2F2F2'
- layer: F.Mask
color: '#E2E2E2'
- layer: F.Paste
color: '#E2E2E2'
- layer: F.Silkscreen
color: '#DBDBDB'
- layer: F.Fab
plot_footprint_refs: false
plot_footprint_values: false
color: '#818181'
- layer: F.Dimensions
color: '#000000'
- scaling: @SCALING@
mirror: true
mirror_pcb_text: false
title: '@DOC_TITLE@'
sheet: 'Bottom Fabrication (Scale @SCALING@:1)'
layer_var: 'Bottom Fabrication (Scale @SCALING@:1)'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: B.Cu
color: '#F2F2F2'
- layer: B.Mask
color: '#E2E2E2'
- layer: B.Paste
color: '#E2E2E2'
- layer: B.Silkscreen
color: '#DBDBDB'
- layer: B.Fab
plot_footprint_refs: false
plot_footprint_values: false
color: '#818181'
- layer: B.Dimensions
color: '#000000'
- scaling: @SCALING@
title: '@DOC_TITLE@'
sheet: 'Drill Drawing (%lp)'
layer_var: 'Drill Drawing %lp (Scale @SCALING@:1)'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
repeat_for_layer: '@LAYER_DRILL_MAP@'
repeat_layers: 'drill_pairs'
layers:
- layer: '@LAYER_DRILL_MAP@'
color: '#000000'
- layer: 'Edge.Cuts'
color: '#000000'
- scaling: @SCALING@
title: '@DOC_TITLE@'
sheet: 'Top Test Points (Scale @SCALING@:1)'
layer_var: 'Top Test Points (Scale @SCALING@:1)'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: F.Cu
color: '#E5E5E5'
- layer: F.Mask
color: '#CECECE'
- layer: F.Paste
color: '#CECECE'
- layer: F.Silkscreen
color: '#C7C7C7'
- layer: F.Fab
exclude_filter: '@FAB_EXCLUDE_FILTER@'
plot_footprint_values: false
sketch_pads_on_fab_layers: false
color: '#E10000'
- layer: '@LAYER_TP_LIST_TOP@'
color: '#000000'
- scaling: @SCALING@
mirror : true
mirror_pcb_text: true
title: '@DOC_TITLE@'
sheet: 'Bottom Test Points (Scale @SCALING@:1)'
layer_var: 'Bottom Test Points (Scale @SCALING@:1)'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: B.Cu
color: '#E5E5E5'
- layer: B.Mask
color: '#CECECE'
- layer: B.Paste
color: '#CECECE'
- layer: B.Silkscreen
color: '#C7C7C7'
- layer: B.Fab
exclude_filter: '@FAB_EXCLUDE_FILTER@'
plot_footprint_values: false
sketch_pads_on_fab_layers: false
color: '#0B00CC'
- layer: '@LAYER_TP_LIST_BOTTOM@'
color: '#000000'
- scaling: @SCALING@
sheet: '%ln (Scale @SCALING@:1)'
layer_var: '%ln (Scale @SCALING@:1)'
title: '@DOC_TITLE@'
sheet_reference_color: '#000000'
colored_holes: true
holes_color: "#FFFFFF"
repeat_for_layer: 'F.Cu'
repeat_layers: 'copper'
layers:
- layer: Edge.Cuts
color: '#000000'
- layer: 'F.Cu'
...
definitions:
NAME: pdf_fabrication
COMMENT: Fabrication document in PDF format
DIR: mfg/fab
DOC_TITLE: Fabrication
COLOR_THEME: Altium_Theme
SHEET_WKS: ${KIPRJMOD}/templates/Asymworks_PCB.kicad_wks
SCALING: 1.0
FAB_EXCLUDE_FILTER: only_testpoints
LAYER_DRILL_MAP: DrillMap
LAYER_TP_LIST_TOP: F.TestPointList
LAYER_TP_LIST_BOTTOM: B.TestPointList
PTH_NPTH: 'yes'
GROUP_ROUND_SLOTS: true
NAME_TP_TOP: csv_testpoints_top
NAME_TP_BOTTOM: csv_testpoints_bottom
NAME_IMPEDANCE_TABLE: csv_impedance_table
NAME_DRILL_TABLE: csv_drill_table

View File

@@ -0,0 +1,26 @@
# KiBot output for generating schematics in PDF format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/pdf_sch_print.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: pdf_sch_print
dir: '@DIR@'
category: '@DIR@'
options:
background_color: false
color_theme: '@COLOR_THEME@'
default_font: '@DEFAULT_FONT@'
sheet_reference_layout: '@SHEET_WKS@'
...
definitions:
NAME: pdf_schematic
COMMENT: Schematic in PDF format
COLOR_THEME: Altium_Theme
DEFAULT_FONT: Arial
DIR: schematic
SHEET_WKS: ${KIPRJMOD}/templates/Asymworks_SCH.kicad_wks

View File

@@ -0,0 +1,43 @@
# KiBot output for 3D Viewer renders in PNG format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/render_3d.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: render_3d
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f-@SUFFIX@%I%v.%x'
auto_crop: true
enable_crop_workaround: true
rotate_x: @ROTATE_X@
rotate_y: @ROTATE_Y@
rotate_z: @ROTATE_Z@
zoom: @ZOOM@
height: @HEIGHT@
width: @WIDTH@
view: '@VIEW@'
force_stackup_colors: true
orthographic: true
transparent_background: true
transparent_background_color: '@KEY_COLOR@'
transparent_background_fuzz: 40
...
definitions:
NAME: png_3d_viewer
COMMENT: 3D viewer PCB render in PNG format
DIR: renders
SUFFIX: ""
VIEW: top
ROTATE_X: 0
ROTATE_Y: 0
ROTATE_Z: 0
ZOOM: 0
HEIGHT: 2000
WIDTH: 2000
KEY_COLOR: '#FF00FF'

View File

@@ -0,0 +1,20 @@
# KiBot output for generating PCB 3D model in STEP format
# https://kibot.readthedocs.io/en/latest/configuration/outputs/step.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: step
category: '@DIR@'
dir: '@DIR@'
options:
output: '%f%I%v.%x'
...
definitions:
NAME: step
COMMENT: PCB 3D model in STEP format
DIR: 3d_model

View File

@@ -0,0 +1,27 @@
# KiBot output for TXT Report (e.g. Fabrication/Assembly notes)
# https://kibot.readthedocs.io/en/latest/configuration/outputs/report.html
kibot:
version: 1
outputs:
- name: @NAME@
comment: '@COMMENT@'
type: report
category: '@DIR@'
dir: '@DIR@'
output_id: @OUTPUT_ID@
options:
output: '%f-%I%v.txt'
template: @TEMPLATE@
exclude_filter: '_mechanical'
mm_digits: 3
display_trailing_zeros: True
...
definitions:
NAME: txt_fabrication_notes
COMMENT: Report
DIR: mfg
OUTPUT_ID: _notes
TEMPLATE: notes/fabrication_notes.txt

View File

@@ -0,0 +1,25 @@
# KiBot preflight for Draw Fancy Stackup feature
# https://kibot.readthedocs.io/en/latest/configuration/preflights/draw_fancy_stackup.html
kibot:
version: 1
preflight:
update_xml: true
draw_fancy_stackup:
gerber: '@GERBER_OUTPUT@'
gerber_extension_only: True
draw_stackup: True
draw_vias: True
columns:
- 'material'
- 'layer'
- 'thickness'
- 'dielectric'
- 'layer_type'
note: '@NOTE@'
...
definitions:
GERBER_OUTPUT: gbr_gerbers
NOTE: external layer thicknesses are specified after plating

View File

@@ -0,0 +1,20 @@
# KiBot preflight for generating DRC reports
# https://kibot.readthedocs.io/en/latest/configuration/preflights/drc.html
kibot:
version: 1
preflight:
check_zone_fills: @CHECK_ZONE_FILLS@
drc:
category: '@DIR@'
dir: '@DIR@'
dont_stop: true
format: 'HTML, RPT'
output: 'report_%f-%i%I%v.%x'
...
definitions:
CHECK_ZONE_FILLS: true
CATEGORY: Schematic
DIR: reports

View File

@@ -0,0 +1,17 @@
# KiBot preflight for generating ERC reports
# https://kibot.readthedocs.io/en/latest/configuration/preflights/erc.html
kibot:
version: 1
preflight:
erc:
category: '@DIR@'
dir: '@DIR@'
format: 'HTML, RPT'
output: 'report_%f-%i%I%v.%x'
...
definitions:
CATEGORY: Schematic
DIR: reports

View File

@@ -0,0 +1,75 @@
# KiBot preflight for Include Table feature
# https://kibot.readthedocs.io/en/latest/configuration/preflights/include_table.html
kibot:
version: 1
preflight:
include_table:
outputs:
- name: '@NAME_TP_TOP@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.2
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
column_spacing: 1
# force_font_width: 1.27 # mm
- name: '@NAME_TP_BOTTOM@'
text_alignment: 'right'
invert_columns_order: true
border_width: 0.2
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
column_spacing: 1
# force_font_width: 1.27 # mm
- name: '@NAME_COMP_COUNT@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.2
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
row_spacing: 3
column_spacing: 1
- name: '@NAME_CSV_DRILL_TABLE@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.2
header_rule_width: 0.2
horizontal_rule_width: 0
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
row_spacing: 3
column_spacing: 1
- name: '@NAME_IMPEDANCE_TABLE@'
text_alignment: 'left'
invert_columns_order: false
border_width: 0.2
header_rule_width: 0.2
vertical_rule_width: 0
top_rule_width: 0
bottom_rule_width: 0
row_spacing: 3
column_spacing: 1
...
definitions:
NAME_TP_TOP: csv_testpoints_top
NAME_TP_BOTTOM: csv_testpoints_bottom
NAME_COMP_COUNT: csv_comp_count
NAME_CSV_DRILL_TABLE: csv_drill_table
NAME_IMPEDANCE_TABLE: csv_impedance_table

View File

@@ -0,0 +1,132 @@
# KiBot preflight for setting Text Variables
# https://kibot.readthedocs.io/en/latest/configuration/preflights/set_text_variables.html
kibot:
version: 1
preflight:
update_xml: true
set_text_variables:
# Git-related information
- variable: 'REVISION'
text: '@REVISION@'
- variable: 'RELEASE_STATE'
text: '@RELEASE_STATE@'
- variable: 'RELEASE_DATE'
command: 'git log -1 --format="%ad" --date=short'
- variable: 'GIT_HASH_SCH'
command: 'git log -1 --format="%h" $KIBOT_SCH_NAME'
- variable: 'GIT_HASH_PCB'
command: 'git log -1 --format="%h" $KIBOT_PCB_NAME'
- variable: 'GIT_HASH'
command: 'git log -1 --format="%h"'
- variable: 'GIT_URL'
text: '@GIT_URL@'
# Metadata
- variable: 'PROJECT_CODE'
text: '@PROJECT_CODE@'
- variable: 'ASSEMBLY_NUMBER'
text: '@ASSEMBLY_NUMBER@'
- variable: 'ASSEMBLY_NAME'
text: '@ASSEMBLY_NAME@'
- variable: 'ASSEMBLY_SCALE'
text: '@ASSEMBLY_SCALING@'
- variable: 'DWG_NUMBER_PCB'
text: '@DWG_NUMBER_PCB@'
- variable: 'DWG_NUMBER_SCH'
text: '@DWG_NUMBER_SCH@'
- variable: 'DWG_TITLE_PCB'
text: '@DWG_TITLE_PCB@'
- variable: 'DWG_TITLE_SCH'
text: '@DWG_TITLE_SCH@'
- variable: 'DWG_TITLE_ASSY'
text: '@DWG_TITLE_ASSY@'
- variable: 'COMPANY'
text: '@COMPANY@'
- variable: 'DESIGNER'
text: '@DESIGNER@'
- variable: 'VARIANT'
text: '%V'
# Schematic notes
- variable: 'SCHEMATIC_NOTES'
expand_in_command: true
command: '[ -f "@SCHEMATIC_DIR@/%f-schematic_notes%v.txt" ] && cat "@SCHEMATIC_DIR@/%f-schematic_notes%v.txt" || echo ""'
# Fabrication notes
- variable: 'FABRICATION_NOTES'
expand_in_command: true
command: '[ -f "@FABRICATION_DIR@/%f-fabrication_notes%v.txt" ] && cat "@FABRICATION_DIR@/%f-fabrication_notes%v.txt" || echo ""'
# Assembly notes
- variable: 'ASSEMBLY_NOTES'
expand_in_command: true
command: '[ -f "@ASSEMBLY_DIR@/%f-assembly_notes%v.txt" ] && cat "@ASSEMBLY_DIR@/%f-assembly_notes%v.txt" || echo ""'
# Page titles for automatic ToC
- variable: '@SHEET_NAME_VAR@01'
text: 'Cover Page'
- variable: '@SHEET_NAME_VAR@02'
command: '@GET_SHEET_CMD@ 2'
- variable: '@SHEET_NAME_VAR@03'
command: '@GET_SHEET_CMD@ 3'
- variable: '@SHEET_NAME_VAR@04'
command: '@GET_SHEET_CMD@ 4'
- variable: '@SHEET_NAME_VAR@05'
command: '@GET_SHEET_CMD@ 5'
- variable: '@SHEET_NAME_VAR@06'
command: '@GET_SHEET_CMD@ 6'
- variable: '@SHEET_NAME_VAR@07'
command: '@GET_SHEET_CMD@ 7'
- variable: '@SHEET_NAME_VAR@08'
command: '@GET_SHEET_CMD@ 8'
- variable: '@SHEET_NAME_VAR@09'
command: '@GET_SHEET_CMD@ 9'
- variable: '@SHEET_NAME_VAR@10'
command: '@GET_SHEET_CMD@ 10'
- variable: '@SHEET_NAME_VAR@11'
command: '@GET_SHEET_CMD@ 11'
- variable: '@SHEET_NAME_VAR@12'
command: '@GET_SHEET_CMD@ 12'
- variable: '@SHEET_NAME_VAR@13'
command: '@GET_SHEET_CMD@ 13'
- variable: '@SHEET_NAME_VAR@14'
command: '@GET_SHEET_CMD@ 14'
- variable: '@SHEET_NAME_VAR@15'
command: '@GET_SHEET_CMD@ 15'
- variable: '@SHEET_NAME_VAR@16'
command: '@GET_SHEET_CMD@ 16'
- variable: '@SHEET_NAME_VAR@17'
command: '@GET_SHEET_CMD@ 17'
- variable: '@SHEET_NAME_VAR@18'
command: '@GET_SHEET_CMD@ 18'
- variable: '@SHEET_NAME_VAR@19'
command: '@GET_SHEET_CMD@ 19'
- variable: '@SHEET_NAME_VAR@20'
command: '@GET_SHEET_CMD@ 20'
...
definitions:
PROJECT_CODE: ''
ASSEMBLY_NUMBER: ''
ASSEMBLY_NAME: ''
ASSEMBLY_SCALING: ''
DWG_NUMBER_SCH: ''
DWG_TITLE_SCH: ''
DWG_NUMBER_PCB: ''
DWG_TITLE_PCB: ''
DWG_TITLE_ASSY: ''
COMPANY: ''
DESIGNER: ''
REVISION: ''
RELEASE_STATE: ''
RELEASE_DATE: ''
GIT_URL: ''
SHEET_NAME_VAR: SHEET_NAME_
SCRIPTS_DIR: kibot/scripts
FABRICATION_DIR: mfg/fab
ASSEMBLY_DIR: mfg/assembly
GET_SHEET_CMD: python3 @SCRIPTS_DIR@/get_sheet_title.py -f "${KIBOT_SCH_NAME%.kicad_sch}.xml" --dots-number 38 -p

View File

@@ -0,0 +1,9 @@
# KiBot preflight for updating the Schematic XML
# https://kibot.readthedocs.io/en/latest/configuration/preflights/update_xml.html
kibot:
version: 1
preflight:
update_xml: true

11
notes/assembly_notes.txt Normal file
View File

@@ -0,0 +1,11 @@
ASSEMBLY NOTES (UNLESS OTHERWISE SPECIFIED)
1) DO NOT POPULATE COMPONENTS ARE MARKED WITH A RED CROSS
2) DO NOT POPULATE COMPONENTS ARE NOT PRESENT IN THE BOM
3) IF CONFLICTING INFORMATION IS FOUND BETWEEN THE ASSEMBLY
FILE AND BOM, BOM SHOULD BE USED AS THE MAIN SOURCE.
4) DOT IDENTIFIES PIN #1 LOCATION AND DEVICE ORIENTATION
WHEN VIEWED FROM THE TOP.

View File

@@ -0,0 +1,62 @@
FABRICATION NOTES (UNLESS OTHERWISE SPECIFIED)
1) FABRICATE PER IPC-6012A CLASS 2.
2) OUTLINE DEFINED IN SEPARATE GERBER FILE WITH
"Edge_Cuts.GBR" SUFFIX.
3) SEE SEPARATE DRILL FILES WITH ".DRL" SUFFIX
FOR HOLE LOCATIONS.
SELECTED HOLE LOCATIONS SHOWN ON THIS DRAWING
FOR REFERENCE ONLY.
4) SURFACE FINISH: ${pcb_finish_cap}
5) SOLDERMASK ON BOTH SIDES OF THE BOARD SHALL
BE LPI, COLOR ${solder_mask_color_text_cap}.
6) SILK SCREEN LEGEND TO BE APPLIED PER LAYER
STACKUP USING ${silk_screen_color_text_cap} NON-CONDUCTIVE EPOXY INK.
7) ALL VIAS ARE TENTED ON BOTH SIDES UNLESS
SOLDERMASK OPENED IN GERBER.
8) RESERVED
9) PCB MATERIAL REQUIREMENTS:
A. FLAMMABILITY RATING MUST MEET OR EXCEED
UL94V-0 REQUIREMENTS.
B. Tg 135 C OR EQUIVALENT.
10) DESIGN GEOMETRY MINIMUM FEATURE SIZES:
BOARD SIZE ${bb_w_mm} × ${bb_h_mm} mm
BOARD THICKNESS ${thickness_mm} mm
TRACE WIDTH ${track_mm} mm
TRACE TO TRACE ${clearance_mm} mm
MIN. HOLE (PTH) ${drill_pth_real_mm} mm
MIN. HOLE (NPTH) ${drill_npth_real_mm} mm
ANNULAR RING ${oar_mm} mm
COPPER TO HOLE ${c2h_mm} mm
COPPER TO EDGE ${c2e_mm} mm
HOLE TO HOLE ${h2h_mm} mm
11) ALL DIMENSIONS ARE IN MILLIMETERS UNLESS OTHERWISE
SPECIFIED.
12) FOR REFERENCE ONLY THE STACKUP CORRESPONDS TO JLCPCB
STACKUP JLC04161H-7628.
#?stackup and impedance_controlled
#?stackup and impedance_controlled
13) REFER TO IMPEDANCE TABLE FOR IMPEDANCE CONTROL REQUIREMENTS.
#?stackup and impedance_controlled
THE SUPPLIED ARTWORK MAY OR MAY NOT CONTAIN THE SPECIFIED
#?stackup and impedance_controlled
TRACE GEOMETRIES ON EVERY LAYERS SPECIFIED.
#?stackup and impedance_controlled
#?stackup and impedance_controlled
14) CONFIRM SPACE WIDTHS AND SPACINGS.

View File

@@ -0,0 +1,4 @@
Layer, Ref1, Ref2, Type, Impedance, Width, Space, Tolerance
L1, AIR, L2, SE, 50, 0.349, -----, 10%
L1, AIR, L2, DIFF, 90, 0.286, 0.203, 10%
L1, AIR, L2, DIFF, 100, 0.221, 0.203, 10%

View File

@@ -0,0 +1 @@
Unless otherwise specified, components Values are in ohms, µF, and µH.

View File

@@ -0,0 +1,139 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "012d7bf9-8223-4140-afc5-ecb09d57c558")
(paper "A3")
(title_block
(title "Project Architecture")
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
(sheet
(at 127 152.4)
(size 115.57 26.67)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "6c8ce547-8e28-496a-9003-0e7dbfd93e8c")
(property "Sheetname" "Circuit 3"
(at 127 151.6884 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "Circuit-3.kicad_sch"
(at 127 179.6546 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(instances
(project "Asymworks_Template"
(path "/8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b/f6afef58-d841-4ad6-baf9-746b0a35f011"
(page "6")
)
)
)
)
(sheet
(at 190.5 63.5)
(size 52.07 63.5)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "9da43fd7-7a0a-403c-bf2c-ba67cd8fa669")
(property "Sheetname" "Circuit 2"
(at 190.5 62.7884 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "Circuit-2.kicad_sch"
(at 190.5 127.5846 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(instances
(project "Asymworks_Template"
(path "/8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b/f6afef58-d841-4ad6-baf9-746b0a35f011"
(page "5")
)
)
)
)
(sheet
(at 127 63.5)
(size 50.8 63.5)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "a5aa3c11-5084-4ea5-9da5-c9ff4a86f01f")
(property "Sheetname" "Circuit 1"
(at 127 62.7884 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "Circuit-1.kicad_sch"
(at 127 127.5846 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(instances
(project "Asymworks_Template"
(path "/8bfb0b6c-9e3a-4761-bc1e-4eb40915aa0b/f6afef58-d841-4ad6-baf9-746b0a35f011"
(page "4")
)
)
)
)
)

View File

@@ -0,0 +1,13 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "b8d4aec6-3776-46e2-a068-8f537360a721")
(paper "A3")
(title_block
(title "Block Diagram")
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
)

View File

@@ -0,0 +1,13 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "ae274b30-ea86-4fd2-9b53-0688fcc83854")
(paper "A3")
(title_block
(title "Circuit 1")
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
)

View File

@@ -0,0 +1,13 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "9862af89-a2d7-4c8f-b21b-98b3a07ff6c9")
(paper "A3")
(title_block
(title "Circuit 2")
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
)

View File

@@ -0,0 +1,12 @@
(kicad_sch
(version 20250114)
(generator "eeschema")
(generator_version "9.0")
(uuid "3e6e4bf0-cb66-44ec-867d-d511c2b5b480")
(paper "A3")
(title_block
(rev "${REVISION}")
(company "${COMPANY}")
)
(lib_symbols)
)

10
sym-lib-table Normal file
View File

@@ -0,0 +1,10 @@
(sym_lib_table
(version 7)
(lib (name "Asym_Battery_Management")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Battery_Management.kicad_sym")(options "")(descr "Asymworks Battery Management"))
(lib (name "Asym_Interface")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Interface.kicad_sym")(options "")(descr "Asymworks Digital Interface"))
(lib (name "Asym_MCU_Module")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_MCU_Module.kicad_sym")(options "")(descr "Asymworks MCU Modules"))
(lib (name "Asym_Regulator_Linear")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Regulator_Linear.kicad_sym")(options "")(descr "Asymworks Linear Regulators"))
(lib (name "Asym_Regulator_Switching")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Regulator_Switching.kicad_sym")(options "")(descr "Asymworks Switching Regulators"))
(lib (name "Asym_Switch_THT")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Switch_THT.kicad_sym")(options "")(descr "Asymworks Switches (THT)"))
(lib (name "Asym_Transistor_FET")(type "KiCad")(uri "${KIPRJMOD}/lib/asymworks/symbols/Asym_Transistor_FET.kicad_sym")(options "")(descr "Asymworks Transistors (FET)"))
)

View File

@@ -0,0 +1,502 @@
(kicad_wks
(version 20231118)
(generator "pl_editor")
(generator_version "9.0")
(setup
(textsize 1.5 1.5)
(linewidth 0.15)
(textlinewidth 0.15)
(left_margin 10)
(right_margin 10)
(top_margin 10)
(bottom_margin 10)
)
(rect
(name "")
(start 95.989 42.002)
(end 2 2)
(option page1only)
(comment "rect around the title block")
)
(rect
(name "")
(start 0 0 ltcorner)
(end 0 0)
(repeat 2)
(incrx 2)
(incry 2)
)
(line
(name "")
(start 50 2 ltcorner)
(end 50 0 ltcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 ltcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 50 2 lbcorner)
(end 50 0 lbcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 lbcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 0 50 ltcorner)
(end 2 50 ltcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 ltcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 0 50 rtcorner)
(end 2 50 rtcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 rtcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 95.989 5.512)
(end 2 5.512)
)
(line
(name "")
(start 95.989 9.017)
(end 2 9.017)
)
(line
(name "")
(start 95.989 12.522)
(end 2 12.522)
)
(line
(name "")
(start 95.989 19.304)
(end 2 19.304)
)
(line
(name "segm1:Line")
(start 79.9892 2 rtcorner)
(end 80.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm2:Line")
(start 71.0022 6 rtcorner)
(end 71.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm5:Line")
(start 15.4892 6 rtcorner)
(end 15.5022 13 rtcorner)
(option page1only)
)
(line
(name "segm9:Line")
(start 1.9892 9.5 rtcorner)
(end 80.0022 9.5 rtcorner)
(option page1only)
)
(line
(name "segm8:Line")
(start 1.9892 6 rtcorner)
(end 80.0022 6 rtcorner)
(option page1only)
)
(line
(name "segm7:Line")
(start 1.989 2 rtcorner)
(end 141.989 2 rtcorner)
)
(tbtext "REVISION HISTORY"
(name "text1:Text")
(pos 41.021 4.08 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(size 1.905 1.905)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "REV"
(name "text2:Text")
(pos 75.4892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "DESCRIPTION"
(name "text4:Text")
(pos 43.2312 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "ZONE"
(name "text6:Text")
(pos 8.9892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "Sheet"
(name "")
(pos 23.987 3.6832)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${#} of ${##}"
(name "")
(pos 3.137 3.734)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(line
(name "")
(start 71.984 9.002)
(end 71.984 2)
)
(tbtext "${KICAD_VERSION}"
(name "")
(pos 48.476 3.683)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Scale"
(name "")
(pos 94.989 3.683)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${SCALE}"
(name "")
(pos 81.989 3.6832)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Release State"
(name "")
(pos 94.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${RELEASE_STATE}"
(name "")
(pos 82.989 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Release Date"
(name "")
(pos 70.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${ISSUE_DATE}"
(name "")
(pos 59.489 7.2392)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(line
(name "")
(start 24.987 9.0022)
(end 24.987 2.0002)
)
(tbtext "Git Hash"
(name "")
(pos 23.987 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${GIT_HASH_PCB}"
(name "")
(pos 3.137 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(tbtext "${FILENAME}"
(name "")
(pos 85.989 10.668)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "File Name"
(name "")
(pos 94.989 10.668)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Size"
(name "")
(pos 94.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Drawing Number"
(name "")
(pos 76.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Revision"
(name "")
(pos 23.987 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 24.989 19.304)
(end 24.989 12.522)
)
(line
(name "")
(start 77.989 19.304)
(end 77.989 12.522)
)
(tbtext "${PAPER}"
(name "")
(pos 94.989 14.8592)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "${DWG_NUMBER_PCB}"
(name "")
(pos 76.989 14.859)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(tbtext "${REVISION}"
(name "")
(pos 23.989 14.8592)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(line
(name "")
(start 95.989 26.289)
(end 2 26.289)
)
(tbtext "Drawing Title"
(name "")
(pos 94.989 24.638)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DWG_TITLE_PCB}"
(name "")
(pos 94.989 21.844)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "Sheet Title"
(name "")
(pos 94.989 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${TITLE}"
(name "")
(pos 85.489 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(rect
(name "")
(start 95.989 30.748)
(end 2 2)
(option notonpage1)
(comment "rect around the title block")
)
(tbtext "Designer"
(name "")
(pos 128.9892 14.1382)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DESIGNER}"
(name "")
(pos 120.9892 14.0982)
(option page1only)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "${ASSEMBLY_NUMBER}"
(name "")
(pos 120.989 3.683)
(option page1only)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Used On"
(name "")
(pos 128.989 3.683)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 129.489 12.522)
(end 95.989 12.522)
(option page1only)
)
(line
(name "")
(start 129.489 9.017)
(end 95.989 9.017)
(option page1only)
)
(line
(name "")
(start 129.489 5.512)
(end 95.989 5.512)
(option page1only)
)
(rect
(name "")
(start 129.4892 16.0072)
(end 96.0022 2.0002)
(option page1only)
(comment "rect around the title block")
)
(line
(name "segm9:Line")
(start 2.0022 13 rtcorner)
(end 80.0152 13 rtcorner)
(option page1only)
)
(tbtext "Used On"
(name "")
(pos 129.002 7.239)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Used On"
(name "")
(pos 129.002 10.668)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
)

View File

@@ -0,0 +1,493 @@
(kicad_wks
(version 20231118)
(generator "pl_editor")
(generator_version "9.0")
(setup
(textsize 1.5 1.5)
(linewidth 0.15)
(textlinewidth 0.15)
(left_margin 10)
(right_margin 10)
(top_margin 10)
(bottom_margin 10)
)
(rect
(name "")
(start 95.989 42.002)
(end 2 2)
(option page1only)
(comment "rect around the title block")
)
(rect
(name "")
(start 0 0 ltcorner)
(end 0 0)
(repeat 2)
(incrx 2)
(incry 2)
)
(line
(name "")
(start 50 2 ltcorner)
(end 50 0 ltcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 ltcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 50 2 lbcorner)
(end 50 0 lbcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 lbcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 0 50 ltcorner)
(end 2 50 ltcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 ltcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 0 50 rtcorner)
(end 2 50 rtcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 rtcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 95.989 5.512)
(end 2 5.512)
)
(line
(name "")
(start 95.989 9.017)
(end 2 9.017)
)
(line
(name "")
(start 95.989 12.522)
(end 2 12.522)
)
(line
(name "")
(start 95.989 19.304)
(end 2 19.304)
)
(line
(name "segm1:Line")
(start 79.9892 2 rtcorner)
(end 80.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm2:Line")
(start 71.0022 6 rtcorner)
(end 71.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm5:Line")
(start 15.4892 6 rtcorner)
(end 15.5022 13 rtcorner)
(option page1only)
)
(line
(name "segm9:Line")
(start 1.9892 9.5 rtcorner)
(end 80.0022 9.5 rtcorner)
(option page1only)
)
(line
(name "segm8:Line")
(start 1.9892 6 rtcorner)
(end 80.0022 6 rtcorner)
(option page1only)
)
(line
(name "segm7:Line")
(start 1.989 2 rtcorner)
(end 141.989 2 rtcorner)
)
(tbtext "REVISION HISTORY"
(name "text1:Text")
(pos 41.021 4.08 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(size 1.905 1.905)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "REV"
(name "text2:Text")
(pos 75.4892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "DESCRIPTION"
(name "text4:Text")
(pos 43.2312 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "ZONE"
(name "text6:Text")
(pos 8.9892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "Sheet"
(name "")
(pos 23.987 3.6832)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${#} of ${##}"
(name "")
(pos 3.137 3.734)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(line
(name "")
(start 71.984 9.002)
(end 71.984 2)
)
(tbtext "${KICAD_VERSION}"
(name "")
(pos 48.476 3.683)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Scale"
(name "")
(pos 94.989 3.683)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${ASSEMBLY_SCALE}:1"
(name "")
(pos 81.989 3.683)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Release State"
(name "")
(pos 94.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${RELEASE_STATE}"
(name "")
(pos 82.989 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Release Date"
(name "")
(pos 70.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${ISSUE_DATE}"
(name "")
(pos 59.489 7.2392)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(line
(name "")
(start 24.987 9.0022)
(end 24.987 2.0002)
)
(tbtext "Git Hash"
(name "")
(pos 23.987 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${GIT_HASH}"
(name "")
(pos 3.137 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(tbtext "${FILENAME}"
(name "")
(pos 85.989 10.668)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "File Name"
(name "")
(pos 94.989 10.668)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Size"
(name "")
(pos 94.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Drawing Number"
(name "")
(pos 76.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Revision"
(name "")
(pos 23.987 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 24.989 19.304)
(end 24.989 12.522)
)
(line
(name "")
(start 77.989 19.304)
(end 77.989 12.522)
)
(tbtext "${PAPER}"
(name "")
(pos 94.989 14.8592)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "${ASSEMBLY_NUMBER}"
(name "")
(pos 76.989 14.859)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(tbtext "${REVISION}"
(name "")
(pos 23.989 14.8592)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(line
(name "")
(start 95.989 26.289)
(end 2 26.289)
)
(tbtext "Drawing Title"
(name "")
(pos 94.989 24.638)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DWG_TITLE_ASSY}"
(name "")
(pos 94.989 21.844)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "Sheet Title"
(name "")
(pos 94.989 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${TITLE}"
(name "")
(pos 85.489 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(rect
(name "")
(start 95.989 30.748)
(end 2 2)
(option notonpage1)
(comment "rect around the title block")
)
(tbtext "Designer"
(name "")
(pos 128.9892 14.1382)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DESIGNER}"
(name "")
(pos 120.9892 14.0982)
(option page1only)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Used On"
(name "")
(pos 128.989 3.683)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 129.489 12.522)
(end 95.989 12.522)
(option page1only)
)
(line
(name "")
(start 129.489 9.017)
(end 95.989 9.017)
(option page1only)
)
(line
(name "")
(start 129.489 5.512)
(end 95.989 5.512)
(option page1only)
)
(rect
(name "")
(start 129.4892 16.0072)
(end 96.0022 2.0002)
(option page1only)
(comment "rect around the title block")
)
(line
(name "segm9:Line")
(start 2.0022 13 rtcorner)
(end 80.0152 13 rtcorner)
(option page1only)
)
(tbtext "Used On"
(name "")
(pos 129.002 7.239)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Used On"
(name "")
(pos 129.002 10.668)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
)

View File

@@ -0,0 +1,502 @@
(kicad_wks
(version 20231118)
(generator "pl_editor")
(generator_version "9.0")
(setup
(textsize 1.5 1.5)
(linewidth 0.15)
(textlinewidth 0.15)
(left_margin 10)
(right_margin 10)
(top_margin 10)
(bottom_margin 10)
)
(rect
(name "")
(start 95.989 42.002)
(end 2 2)
(option page1only)
(comment "rect around the title block")
)
(rect
(name "")
(start 0 0 ltcorner)
(end 0 0)
(repeat 2)
(incrx 2)
(incry 2)
)
(line
(name "")
(start 50 2 ltcorner)
(end 50 0 ltcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 ltcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 50 2 lbcorner)
(end 50 0 lbcorner)
(repeat 30)
(incrx 50)
)
(tbtext "1"
(name "")
(pos 25 1 lbcorner)
(font
(size 1.3 1.3)
)
(repeat 100)
(incrx 50)
)
(line
(name "")
(start 0 50 ltcorner)
(end 2 50 ltcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 ltcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 0 50 rtcorner)
(end 2 50 rtcorner)
(repeat 30)
(incry 50)
)
(tbtext "A"
(name "")
(pos 1 25 rtcorner)
(font
(size 1.3 1.3)
)
(justify center)
(repeat 100)
(incry 50)
)
(line
(name "")
(start 95.989 5.512)
(end 2 5.512)
)
(line
(name "")
(start 95.989 9.017)
(end 2 9.017)
)
(line
(name "")
(start 95.989 12.522)
(end 2 12.522)
)
(line
(name "")
(start 95.989 19.304)
(end 2 19.304)
)
(line
(name "segm1:Line")
(start 79.9892 2 rtcorner)
(end 80.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm2:Line")
(start 71.0022 6 rtcorner)
(end 71.0022 13 rtcorner)
(option page1only)
)
(line
(name "segm5:Line")
(start 15.4892 6 rtcorner)
(end 15.5022 13 rtcorner)
(option page1only)
)
(line
(name "segm9:Line")
(start 1.9892 9.5 rtcorner)
(end 80.0022 9.5 rtcorner)
(option page1only)
)
(line
(name "segm8:Line")
(start 1.9892 6 rtcorner)
(end 80.0022 6 rtcorner)
(option page1only)
)
(line
(name "segm7:Line")
(start 1.989 2 rtcorner)
(end 141.989 2 rtcorner)
)
(tbtext "REVISION HISTORY"
(name "text1:Text")
(pos 41.021 4.08 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(size 1.905 1.905)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "REV"
(name "text2:Text")
(pos 75.4892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "DESCRIPTION"
(name "text4:Text")
(pos 43.2312 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "ZONE"
(name "text6:Text")
(pos 8.9892 7.906 rtcorner)
(option page1only)
(font
(face "Arial Narrow")
(linewidth 0.35)
(color 0 0 224 1)
)
(justify center)
)
(tbtext "Sheet"
(name "")
(pos 23.987 3.6832)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${#} of ${##}"
(name "")
(pos 3.137 3.734)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(line
(name "")
(start 71.984 9.002)
(end 71.984 2)
)
(tbtext "${KICAD_VERSION}"
(name "")
(pos 48.476 3.683)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Scale"
(name "")
(pos 94.989 3.683)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${SCALE}"
(name "")
(pos 81.989 3.6832)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify center)
)
(tbtext "Release State"
(name "")
(pos 94.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${RELEASE_STATE}"
(name "")
(pos 82.989 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Release Date"
(name "")
(pos 70.989 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${ISSUE_DATE}"
(name "")
(pos 59.489 7.2392)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(line
(name "")
(start 24.987 9.0022)
(end 24.987 2.0002)
)
(tbtext "Git Hash"
(name "")
(pos 23.987 7.239)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${GIT_HASH_SCH}"
(name "")
(pos 3.137 7.239)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
(justify right)
)
(tbtext "${FILENAME}"
(name "")
(pos 85.989 10.668)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "File Name"
(name "")
(pos 94.989 10.668)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Size"
(name "")
(pos 94.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Drawing Number"
(name "")
(pos 76.989 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Revision"
(name "")
(pos 23.987 17.653)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 24.989 19.304)
(end 24.989 12.522)
)
(line
(name "")
(start 77.989 19.304)
(end 77.989 12.522)
)
(tbtext "${PAPER}"
(name "")
(pos 94.989 14.8592)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "${DWG_NUMBER_SCH}"
(name "")
(pos 76.989 14.859)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(tbtext "${REVISION}"
(name "")
(pos 23.989 14.8592)
(font
(face "Arial Narrow")
(size 2.159 2.159)
)
)
(line
(name "")
(start 95.989 26.289)
(end 2 26.289)
)
(tbtext "Drawing Title"
(name "")
(pos 94.989 24.638)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DWG_TITLE_SCH}"
(name "")
(pos 94.989 21.844)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(tbtext "Sheet Title"
(name "")
(pos 94.989 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${TITLE}"
(name "")
(pos 85.489 28.502)
(option notonpage1)
(font
(face "Arial Narrow")
(size 2.032 2.032)
)
)
(rect
(name "")
(start 95.989 30.748)
(end 2 2)
(option notonpage1)
(comment "rect around the title block")
)
(tbtext "Designer"
(name "")
(pos 128.9892 14.1382)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "${DESIGNER}"
(name "")
(pos 120.9892 14.0982)
(option page1only)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "${ASSEMBLY_NUMBER}"
(name "")
(pos 120.989 3.683)
(option page1only)
(font
(face "Arial Narrow")
(size 1.778 1.778)
)
)
(tbtext "Used On"
(name "")
(pos 128.989 3.683)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(line
(name "")
(start 129.489 12.522)
(end 95.989 12.522)
(option page1only)
)
(line
(name "")
(start 129.489 9.017)
(end 95.989 9.017)
(option page1only)
)
(line
(name "")
(start 129.489 5.512)
(end 95.989 5.512)
(option page1only)
)
(rect
(name "")
(start 129.4892 16.0072)
(end 96.0022 2.0002)
(option page1only)
(comment "rect around the title block")
)
(line
(name "segm9:Line")
(start 2.0022 13 rtcorner)
(end 80.0152 13 rtcorner)
(option page1only)
)
(tbtext "Used On"
(name "")
(pos 129.002 7.239)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
(tbtext "Used On"
(name "")
(pos 129.002 10.668)
(option page1only)
(font
(face "Arial Narrow")
(color 0 0 224 1)
)
)
)