17 Commits

Author SHA1 Message Date
AlexanderHD27
51ce3af221 Added MCP2541 to Rpi Pico 2024-11-07 12:24:12 +01:00
AlexanderHD27
e091d4df18 Squashed commit of the following:
commit c6fd825e39
Author: AlexanderHD27 <alexander@hal>
Date:   Wed Nov 6 23:14:14 2024 +0100

    Moved CAN Interface code to comment libary folder with symlink

commit e7a0035041
Author: AlexanderHD27 <alexander@hal>
Date:   Wed Nov 6 22:01:28 2024 +0100

    Got MCP2521 to work

commit 4bfb1f533e
Author: AlexanderHD27 <alexander@hal>
Date:   Wed Oct 16 21:29:35 2024 +0200

    Did something to YGantryMount. It works. trust me

commit 5683168a47
Author: AlexanderHD27 <alexander@hal>
Date:   Wed Oct 16 21:28:36 2024 +0200

    Implemented Command-Level Interaction with CAN Interface

commit 9c0c676be8
Author: AlexanderHD27 <alexander@hal>
Date:   Mon Oct 14 09:20:37 2024 +0200

    Added Vscode Profile file

commit b150a905a3
Author: AlexanderHD27 <alexander@hal>
Date:   Mon Oct 14 09:19:00 2024 +0200

    Implemented Low Level Compunications

commit 7eebf619ae
Author: AlexanderHD27 <alexander@hal>
Date:   Mon Oct 7 14:46:15 2024 +0200

    Created Head Pipe Mount

commit 93c40e1805
Author: AlexanderHD27 <alexander@hal>
Date:   Mon Oct 7 14:44:11 2024 +0200

    First Revision of YGantryMount

commit 91c2125458
Author: AlexanderHD27 <alexander@hal>
Date:   Thu Oct 3 19:52:37 2024 +0200

    Added Kicad Backups 2 gitignore

commit 096a6c18d6
Author: AlexanderHD27 <alexander@hal>
Date:   Thu Oct 3 19:49:21 2024 +0200

    Created ESP-IDF for can-interface

commit 48fded7981
Author: AlexanderHD27 <alexander@hal>
Date:   Sat Sep 28 19:54:29 2024 +0200

    Added files from Pico sdk to gitignore

commit ec5e5cbf13
Author: AlexanderHD27 <alexander@hal>
Date:   Sat Sep 14 21:09:50 2024 +0200

    Create Marker for position Calibration

commit 58d31964b2
Author: AlexanderHD27 <alexander@hal>
Date:   Wed Sep 11 23:32:55 2024 +0200

    Upgrade to pico SDK 2.0.0
2024-11-06 23:18:12 +01:00
AlexanderHD27
f002a01308 Updated gitmodeles 2024-10-19 20:08:24 +02:00
AlexanderHD27
6ba0535af9 Got Free RTOS 2 work 2024-10-17 12:52:39 +02:00
AlexanderHD27
46f3514c6a Added constant for RGB LEd Pins 2024-10-12 18:54:14 +02:00
AlexanderHD27
a755a954f6 Update Motor Driver Board (fixed connection to RUN pin) 2024-10-12 18:53:26 +02:00
AlexanderHD27
c7c5cea341 Created v2.2 of Stepper Driver (added RGB Leds) 2024-10-07 14:19:12 +02:00
AlexanderHD27
f0ae696c4d Added Kicad Backups 2 gitignore 2024-10-03 19:52:37 +02:00
AlexanderHD27
51587757b1 Create Mount for Raspberry Pi 4B# 2024-10-03 19:51:02 +02:00
AlexanderHD27
f4b591a5e6 Added some mystery kicad files 2024-10-03 19:46:21 +02:00
AlexanderHD27
a2032d72fd Merge branch 'motor-ctrl-firmware' of gitea.mintcalc.com:alexander/gobot into motor-ctrl-firmware 2024-10-03 19:44:14 +02:00
AlexanderHD27
57e73127cc Merge branch 'motor-ctrl-firmware' of gitea.mintcalc.com:alexander/gobot into motor-ctrl-firmware 2024-10-03 19:44:00 +02:00
AlexanderHD27
53a5c10cee Merge branch 'motor-ctrl-firmware' of gitea.mintcalc.com:alexander/gobot into motor-ctrl-firmware
# Conflicts:
#	motor-control/motor-driver-breakout-v2/motor-driver-breakout-v2.kicad_sch
2024-10-03 19:29:44 +02:00
AlexanderHD27
f5281e37c8 Created PCB for Driver Board 2024-10-03 19:28:53 +02:00
AlexanderHD27
783799832c Created PCB for Driver Board 2024-10-03 19:20:02 +02:00
AlexanderHD27
61abb16b83 Create Mount for Raspberry Pi for 2020 Profiles 2024-09-28 19:53:05 +02:00
AlexanderHD27
0dc0f82938 Fixed invalid terminal symbol in expect script 2024-09-28 19:52:38 +02:00
106 changed files with 127800 additions and 56 deletions

BIN
.gitignore (Stored with Git LFS) vendored

Binary file not shown.

BIN
.gitmodules (Stored with Git LFS) vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
3d-print/RPi_Mount.3mf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
3d-print/slicers/BoardPositionMarker.3mf (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,47 @@
FROM espressif/idf
ARG DEBIAN_FRONTEND=nointeractive
ARG CONTAINER_USER=esp
ARG USER_UID=1050
ARG USER_GID=$USER_UID
RUN apt-get update \
&& apt install -y -q \
cmake \
git \
libglib2.0-0 \
libnuma1 \
libpixman-1-0 \
&& rm -rf /var/lib/apt/lists/*
# QEMU
ENV QEMU_REL=esp_develop_8.2.0_20240122
ENV QEMU_SHA256=e7c72ef5705ad1444d391711088c8717fc89f42e9bf6d1487f9c2a326b8cfa83
ENV QEMU_DIST=qemu-xtensa-softmmu-${QEMU_REL}-x86_64-linux-gnu.tar.xz
ENV QEMU_URL=https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/${QEMU_DIST}
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN wget --no-verbose ${QEMU_URL} \
&& echo "${QEMU_SHA256} *${QEMU_DIST}" | sha256sum --check --strict - \
&& tar -xf $QEMU_DIST -C /opt \
&& rm ${QEMU_DIST}
ENV PATH=/opt/qemu/bin:${PATH}
RUN groupadd --gid $USER_GID $CONTAINER_USER \
&& adduser --uid $USER_UID --gid $USER_GID --disabled-password --gecos "" ${CONTAINER_USER} \
&& usermod -a -G root $CONTAINER_USER && usermod -a -G dialout $CONTAINER_USER
RUN chmod -R 775 /opt/esp/python_env/
USER ${CONTAINER_USER}
ENV USER=${CONTAINER_USER}
WORKDIR /home/${CONTAINER_USER}
RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc
ENTRYPOINT [ "/opt/esp/entrypoint.sh" ]
CMD ["/bin/bash", "-c"]

View File

@@ -0,0 +1,36 @@
{
"name": "ESP-IDF QEMU",
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"idf.espIdfPath": "/opt/esp/idf",
"idf.customExtraPaths": "",
"idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python",
"idf.toolsPath": "/opt/esp",
"idf.gitPath": "/usr/bin/git"
},
"extensions": [
"espressif.esp-idf-extension"
]
},
"codespaces": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"idf.espIdfPath": "/opt/esp/idf",
"idf.customExtraPaths": "",
"idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python",
"idf.toolsPath": "/opt/esp",
"idf.gitPath": "/usr/bin/git"
},
"extensions": [
"espressif.esp-idf-extension",
"espressif.esp-idf-web"
]
}
},
"runArgs": ["--privileged"]
}

BIN
can-interface/.gitignore (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,23 @@
{
"configurations": [
{
"name": "ESP-IDF",
"compilerPath": "${config:idf.toolsPath}/tools/xtensa-esp-elf/esp-13.2.0_20240530/xtensa-esp-elf/bin/xtensa-esp32-elf-gcc",
"compileCommands": "${config:idf.buildPath}/compile_commands.json",
"includePath": [
"${config:idf.espIdfPath}/components/**",
"${config:idf.espIdfPathWin}/components/**",
"${workspaceFolder}/**"
],
"browse": {
"path": [
"${config:idf.espIdfPath}/components",
"${config:idf.espIdfPathWin}/components",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true
}
}
],
"version": 4
}

15
can-interface/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "gdbtarget",
"request": "attach",
"name": "Eclipse CDT GDB Adapter"
},
{
"type": "espidf",
"name": "Launch",
"request": "launch"
}
]
}

29
can-interface/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,29 @@
{
"C_Cpp.intelliSenseEngine": "default",
"idf.adapterTargetName": "esp32",
"idf.customExtraPaths": "/home/alexander/.espressif/tools/xtensa-esp-elf-gdb/14.2_20240403/xtensa-esp-elf-gdb/bin:/home/alexander/.espressif/tools/riscv32-esp-elf-gdb/14.2_20240403/riscv32-esp-elf-gdb/bin:/home/alexander/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240530/xtensa-esp-elf/bin:/home/alexander/.espressif/tools/riscv32-esp-elf/esp-13.2.0_20240530/riscv32-esp-elf/bin:/home/alexander/.espressif/tools/esp32ulp-elf/2.38_20240113/esp32ulp-elf/bin:/home/alexander/.espressif/tools/openocd-esp32/v0.12.0-esp32-20240318/openocd-esp32/bin:/home/alexander/.espressif/tools/ninja/1.11.1:/home/alexander/.espressif/tools/esp-rom-elfs/20240305",
"idf.customExtraVars": {
"OPENOCD_SCRIPTS": "/home/alexander/.espressif/tools/openocd-esp32/v0.12.0-esp32-20240318/openocd-esp32/share/openocd/scripts",
"ESP_ROM_ELF_DIR": "/home/alexander/.espressif/tools/esp-rom-elfs/20240305/"
},
"idf.espIdfPath": "/opt/esp/v5.3.1/esp-idf",
"idf.openOcdConfigs": [
"board/esp32-wrover-kit-3.3v.cfg"
],
"idf.port": "/dev/ttyUSB0",
"idf.pythonBinPath": "/home/alexander/.espressif/python_env/idf5.3_py3.12_env/bin/python",
"idf.toolsPath": "/home/alexander/.espressif",
"idf.flashType": "UART",
"files.associations": {
"*.tcc": "cpp",
"cstdint": "cpp",
"random": "cpp",
"future": "cpp",
"bitset": "cpp",
"string_view": "cpp",
"regex": "cpp",
"array": "cpp",
"string": "cpp",
"span": "cpp"
}
}

259
can-interface/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,259 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build - Build project",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py build",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Set ESP-IDF Target",
"type": "shell",
"command": "${command:espIdf.setTarget}",
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "Clean - Clean the project",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py fullclean",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
]
},
{
"label": "Flash - Flash the device",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.flashBaudRate} flash",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.flashBaudRate}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
]
},
{
"label": "Monitor: Start the monitor",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} monitor",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py -p ${config:idf.portWin} monitor",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
],
"dependsOn": "Flash - Flash the device"
},
{
"label": "OpenOCD: Start openOCD",
"type": "shell",
"presentation": {
"echo": true,
"reveal": "never",
"focus": false,
"panel": "new"
},
"command": "openocd -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
"windows": {
"command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "adapter",
"type": "shell",
"command": "${config:idf.pythonBinPath}",
"isBackground": true,
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}",
"PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
}
},
"problemMatcher": {
"background": {
"beginsPattern": "\bDEBUG_ADAPTER_STARTED\b",
"endsPattern": "DEBUG_ADAPTER_READY2CONNECT",
"activeOnStart": true
},
"pattern": {
"regexp": "(\\d+)-(\\d+)-(\\d+)\\s(\\d+):(\\d+):(\\d+),(\\d+)\\s-(.+)\\s(ERROR)",
"file": 8,
"line": 2,
"column": 3,
"severity": 4,
"message": 9
}
},
"args": [
"${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter_main.py",
"-e",
"${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"-s",
"$OPENOCD_SCRIPTS",
"-dn",
"esp32",
"-om",
"connect_to_instance",
"-t",
"xtensa-esp32-elf-"
],
"windows": {
"command": "${config:idf.pythonBinPathWin}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}",
"PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
}
}
}
}
]
}

6
can-interface/CMakeLists.txt Executable file
View File

@@ -0,0 +1,6 @@
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(can-interface)

File diff suppressed because one or more lines are too long

BIN
can-interface/README.md (Stored with Git LFS) Executable file

Binary file not shown.

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521_hardware_interface

View File

@@ -0,0 +1,6 @@
idf_component_register(SRCS "hello_world_main.cpp"
REQUIRES driver
REQUIRES mcp2521
REQUIRES mcp2521_hardware_interface
REQUIRES spi_flash
INCLUDE_DIRS "")

View File

@@ -0,0 +1,7 @@
{
"folders": [
{
"path": ".."
}
]
}

View File

@@ -0,0 +1,105 @@
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "driver/spi_master.h"
#include "mcp2521.hpp"
#define SPI_PIN_CS0 GPIO_NUM_5
#define SPI_PIN_SCLK GPIO_NUM_18
#define SPI_PIN_MISO GPIO_NUM_19
#define SPI_PIN_MOSI GPIO_NUM_23
#define CAN_INT_PIN GPIO_NUM_21
#define EXTERNAL_TRIGGER GPIO_NUM_26
void onRX(void *arg) {
MCP2521 *mcp2521 = (MCP2521 *)arg;
rx_info info = mcp2521->get_rx_id(MCP2521_RX_BUFFER::RXB0);
uint8_t data[8];
mcp2521->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
printf("RX: (%x) ", info.id);
for (int i = 0; i < info.length; i++) {
printf("%x ", data[i]);
}
printf("\n");
}
extern "C" void app_main() {
printf("Hello world!\n");
const gpio_num_t LED_PIN = GPIO_NUM_2;
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(EXTERNAL_TRIGGER, GPIO_MODE_OUTPUT);
gpio_set_level(EXTERNAL_TRIGGER, true);
vTaskDelay(100 / portTICK_PERIOD_MS);
spi_bus_config_t spi_bus;
MCP2521_Hardware_Handle_ESP hardware_mcp2521(
VSPI_HOST,
&spi_bus,
SPI_PIN_MOSI,
SPI_PIN_MISO,
SPI_PIN_SCLK,
SPI_PIN_CS0,
CAN_INT_PIN
);
MCP2521 mcp2521(&hardware_mcp2521);
uint8_t data[4] = {0xf0, 0x42, 0x13, 0x37};
gpio_set_level(EXTERNAL_TRIGGER, false);
mcp2521.reset();
mcp2521.enable_interrupts(true, true, true, true, true, true, true, true);
mcp2521.register_rx0_handler(onRX, &mcp2521);
mcp2521.register_rx1_handler(onRX, &mcp2521);
mcp2521.set_mode_of_operation(MCP2521_OPERATION_MODE::LOOPBACK, true);
vTaskDelay(3 / portTICK_PERIOD_MS);
mcp2521.prepare_tx(
MCP2521_TX_BUFFER::TXB0, 0x042, data, 4, false, false);
mcp2521.request_to_send(MCP2521_TX_BUFFER::TXB0);
mcp2521.set_tx_id(MCP2521_TX_BUFFER::TXB0, 0x041, false);
mcp2521.request_to_send(MCP2521_TX_BUFFER::TXB0);
vTaskDelay(20 / portTICK_PERIOD_MS);
bool flag = true;
while (true) {
gpio_set_level(LED_PIN, flag);
flag = !flag;
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}

Binary file not shown.

Binary file not shown.

BIN
can-interface/pytest_hello_world.py (Stored with Git LFS) Executable file

Binary file not shown.

2008
can-interface/sdkconfig Normal file

File diff suppressed because it is too large Load Diff

0
can-interface/sdkconfig.ci Executable file
View File

View File

@@ -0,0 +1,8 @@
idf_component_register(SRCS
"interface_commands.cpp"
"interface_interrupts.cpp"
"toplevel_commands.cpp"
INCLUDE_DIRS "include"
REQUIRES driver
REQUIRES mcp2521_hardware_interface
)

View File

View File

@@ -0,0 +1,177 @@
#pragma once
#include <cstdint>
/**
* @brief RXnBF PIN CONTROL AND STATUS REGISTER (ADDRESS: 0Ch)
*
*/
struct BFPCTRL {
uint8_t B0BFM : 1;
uint8_t B1BFM : 1;
uint8_t B0BFE : 1;
uint8_t B1BFE : 1;
uint8_t B0BFS : 1;
uint8_t B1BFS : 1;
uint8_t : 2;
};
/**
* @brief TXnRTS PIN CONTROL AND STATUS REGISTER
*
*/
struct TXRTSCTRL {
uint8_t B0RTSM : 1;
uint8_t B1RTSM : 1;
uint8_t B2RTSM : 1;
uint8_t B0RTS : 1;
uint8_t B1RTS : 1;
uint8_t B2RTS : 1;
uint8_t : 2;
};
struct CANSTAT {
uint8_t ICOD0 : ;
uint8_t : 1;
uint8_t OPMOD0 : 1;
uint8_t OPMOD1 : 1;
uint8_t OPMOD2 : 1;
uint8_t : 1;
};
struct CANCTRL {
uint8_t CLKPRE0 : 1;
uint8_t CLKPRE1 : 1;
uint8_t CLKEN : 1;
uint8_t OSM : 1;
uint8_t ABAT : 1;
uint8_t REQOP0 : 1;
uint8_t REQOP1 : 1;
uint8_t REQOP2 : 1;
};
struct TEC {
uint8_t TEC;
};
struct REC {
uint8_t REC;
};
struct CNF3 {
uint8_t PHSEG20 : 1;
uint8_t PHSEG21 : 1;
uint8_t PHSEG22 : 1;
uint8_t : 3;
uint8_t WAKFIL : 1;
uint8_t SOF : 1;
};
struct CNF2 {
uint8_t PRSEG0 : 1;
uint8_t PRSEG1 : 1;
uint8_t PRSEG2 : 1;
uint8_t PHSEG10 : 1;
uint8_t PHSEG11 : 1;
uint8_t PHSEG12 : 1;
uint8_t SAM : 1;
uint8_t BTLMODE : 1;
};
struct CNF1 {
uint8_t BRP0 : 1;
uint8_t BRP1 : 1;
uint8_t BRP2 : 1;
uint8_t BRP3 : 1;
uint8_t BRP4 : 1;
uint8_t BRP5 : 1;
uint8_t SJW0 : 1;
uint8_t SJW1 : 1;
};
struct CANINTE {
uint8_t RX0IE : 1;
uint8_t RX1IE : 1;
uint8_t TX0IE : 1;
uint8_t TX1IE : 1;
uint8_t TX2IE : 1;
uint8_t ERRIE : 1;
uint8_t WAKIE : 1;
uint8_t MERRE : 1;
};
struct CANINTF {
uint8_t RX0IF : 1;
uint8_t RX1IF : 1;
uint8_t TX0IF : 1;
uint8_t TX1IF : 1;
uint8_t TX2IF : 1;
uint8_t ERRIF : 1;
uint8_t WAKIF : 1;
uint8_t MERRF : 1;
};
struct EFLG {
uint8_t EWARN : 1;
uint8_t RXWAR : 1;
uint8_t TXWAR : 1;
uint8_t RXEP : 1;
uint8_t TXEP : 1;
uint8_t TXBO : 1;
uint8_t RX0OVR : 1;
uint8_t RX1OVR : 1;
};
struct TXB0CTRL {
uint8_t TXP0 : 1;
uint8_t TXP1 : 1;
uint8_t : 1;
uint8_t TXREQ : 1;
uint8_t TXERR : 1;
uint8_t MLOA : 1;
uint8_t ABTF : 1;
uint8_t : 1;
};
struct TXB1CTRL {
uint8_t TXP0 : 1;
uint8_t TXP1 : 1;
uint8_t : 1;
uint8_t TXREQ : 1;
uint8_t TXERR : 1;
uint8_t MLOA : 1;
uint8_t ABTF : 1;
uint8_t : 1;
};
struct TXB2CTRL {
uint8_t TXP0 : 1;
uint8_t TXP1 : 1;
uint8_t : 1;
uint8_t TXREQ : 1;
uint8_t TXERR : 1;
uint8_t MLOA : 1;
uint8_t ABTF : 1;
uint8_t : 1;
};
struct RXB0CTRL {
uint8_t FILHIT0 : 1;
uint8_t BUKT1 : 1;
uint8_t BUKT : 1;
uint8_t RXRTR : 1;
uint8_t : 1;
uint8_t RXM0 : 1;
uint8_t RXM1 : 1;
uint8_t : 1;
};
struct RXB1CTRL {
uint8_t FILHIT0 : 1;
uint8_t FILHIT1 : 1;
uint8_t FILHIT2 : 1;
uint8_t RXRTR : 1;
uint8_t : 1;
uint8_t RXM0 : 1;
uint8_t RXM1 : 1;
uint8_t : 1;
};

View File

@@ -0,0 +1,6 @@
#pragma once
#include "mcp2521_toplevel.hpp"
#include "mcp2521_command.hpp"
#include "mcp2521_hardware_esp.hpp"
#include "mcp2521_addresses.hpp"

View File

@@ -0,0 +1,192 @@
#pragma once
#include <stdint.h>
#define MCP2521_BFPCTRL 0x0C
#define MCP2521_BFPCTRL_B1BFS (1 << 5)
#define MCP2521_BFPCTRL_B0BFS (1 << 4)
#define MCP2521_BFPCTRL_B1BFE (1 << 3)
#define MCP2521_BFPCTRL_B0BFE (1 << 2)
#define MCP2521_BFPCTRL_B1BFM (1 << 1)
#define MCP2521_BFPCTRL_B0BFM (1 << 0)
#define MCP2521_TXRTSCTRL 0x0D
#define MCP2521_TXRTSCTRL_B2RTS (1 << 5)
#define MCP2521_TXRTSCTRL_B1RTS (1 << 4)
#define MCP2521_TXRTSCTRL_B0RTS (1 << 3)
#define MCP2521_TXRTSCTRL_B2RTSM (1 << 2)
#define MCP2521_TXRTSCTRL_B1RTSM (1 << 1)
#define MCP2521_TXRTSCTRL_B0RTSM (1 << 0)
#define MCP2521_CANSTAT 0x0E
#define MCP2521_CANSTAT_OPMOD2 (1 << 7)
#define MCP2521_CANSTAT_OPMOD1 (1 << 6)
#define MCP2521_CANSTAT_OPMOD0 (1 << 5)
#define MCP2521_CANSTAT_ICOD2 (1 << 2)
#define MCP2521_CANSTAT_ICOD1 (1 << 1)
#define MCP2521_CANSTAT_ICOD0 (1 << 0)
struct CANSTAT_Register {
uint8_t ICOD : 3;
uint8_t : 1; // Unused bit
uint8_t OPMOD : 3;
uint8_t : 1; // Unused bit
};
#define MCP2521_CANCTRL 0x0F
#define MCP2521_CANCTRL_REQOP2 (1 << 7)
#define MCP2521_CANCTRL_REQOP1 (1 << 6)
#define MCP2521_CANCTRL_REQOP0 (1 << 5)
#define MCP2521_CANCTRL_ABAT (1 << 4)
#define MCP2521_CANCTRL_OSM (1 << 3)
#define MCP2521_CANCTRL_CLKEN (1 << 2)
#define MCP2521_CANCTRL_CLKPRE1 (1 << 1)
#define MCP2521_CANCTRL_CLKPRE0 (1 << 0)
#define MCP2521_TEC 0x1C
#define MCP2521_REC 0x1D
#define MCP2521_CNF3 0x28
#define MCP2521_CNF3_SOF (1 << 7)
#define MCP2521_CNF3_WAKFIL (1 << 6)
#define MCP2521_CNF3_PHSEG22 (1 << 2)
#define MCP2521_CNF3_PHSEG21 (1 << 1)
#define MCP2521_CNF3_PHSEG20 (1 << 0)
#define MCP2521_CNF2 0x29
#define MCP2521_CNF2_BTLMODE (1 << 7)
#define MCP2521_CNF2_SAM (1 << 6)
#define MCP2521_CNF2_PHSEG12 (1 << 5)
#define MCP2521_CNF2_PHSEG11 (1 << 4)
#define MCP2521_CNF2_PHSEG10 (1 << 3)
#define MCP2521_CNF2_PRSEG2 (1 << 2)
#define MCP2521_CNF2_PRSEG1 (1 << 1)
#define MCP2521_CNF2_PRSEG0 (1 << 0)
#define MCP2521_CNF1 0x2A
#define MCP2521_CNF1_SJW1 (1 << 7)
#define MCP2521_CNF1_SJW0 (1 << 6)
#define MCP2521_CNF1_BRP5 (1 << 5)
#define MCP2521_CNF1_BRP4 (1 << 4)
#define MCP2521_CNF1_BRP3 (1 << 3)
#define MCP2521_CNF1_BRP2 (1 << 2)
#define MCP2521_CNF1_BRP1 (1 << 1)
#define MCP2521_CNF1_BRP0 (1 << 0)
#define MCP2521_CANINTE 0x2B
#define MCP2521_CANINTE_MERRE (1 << 7)
#define MCP2521_CANINTE_WAKIE (1 << 6)
#define MCP2521_CANINTE_ERRIE (1 << 5)
#define MCP2521_CANINTE_TX2IE (1 << 4)
#define MCP2521_CANINTE_TX1IE (1 << 3)
#define MCP2521_CANINTE_TX0IE (1 << 2)
#define MCP2521_CANINTE_RX1IE (1 << 1)
#define MCP2521_CANINTE_RX0IE (1 << 0)
#define MCP2521_CANINTF 0x2C
#define MCP2521_CANINTF_MERRF (1 << 7)
#define MCP2521_CANINTF_WAKIF (1 << 6)
#define MCP2521_CANINTF_ERRIF (1 << 5)
#define MCP2521_CANINTF_TX2IF (1 << 4)
#define MCP2521_CANINTF_TX1IF (1 << 3)
#define MCP2521_CANINTF_TX0IF (1 << 2)
#define MCP2521_CANINTF_RX1IF (1 << 1)
#define MCP2521_CANINTF_RX0IF (1 << 0)
#define MCP2521_EFLG 0x2D
#define MCP2521_EFLG_RX1OVR (1 << 7)
#define MCP2521_EFLG_RX0OVR (1 << 6)
#define MCP2521_EFLG_TXBO (1 << 5)
#define MCP2521_EFLG_TXEP (1 << 4)
#define MCP2521_EFLG_RXEP (1 << 3)
#define MCP2521_EFLG_TXWAR (1 << 2)
#define MCP2521_EFLG_RXWAR (1 << 1)
#define MCP2521_EFLG_EWARN (1 << 0)
#define MCP2521_TXB0CTRL 0x30
#define MCP2521_TXB0CTRL_ABTF (1 << 6)
#define MCP2521_TXB0CTRL_MLOA (1 << 5)
#define MCP2521_TXB0CTRL_TXERR (1 << 4)
#define MCP2521_TXB0CTRL_TXREQ (1 << 3)
#define MCP2521_TXB0CTRL_TXP1 (1 << 1)
#define MCP2521_TXB0CTRL_TXP0 (1 << 0)
#define MCP2521_TXB0DLC 0x35
#define MCP2521_TXB1DLC 0x45
#define MCP2521_TXB2DLC 0x55
#define MCP2521_TXB1CTRL 0x40
#define MCP2521_TXB1CTRL_ABTF (1 << 6)
#define MCP2521_TXB1CTRL_MLOA (1 << 5)
#define MCP2521_TXB1CTRL_TXERR (1 << 4)
#define MCP2521_TXB1CTRL_TXREQ (1 << 3)
#define MCP2521_TXB1CTRL_TXP1 (1 << 1)
#define MCP2521_TXB1CTRL_TXP0 (1 << 0)
#define MCP2521_TXB2CTRL 0x50
#define MCP2521_TXB2CTRL_ABTF (1 << 6)
#define MCP2521_TXB2CTRL_MLOA (1 << 5)
#define MCP2521_TXB2CTRL_TXERR (1 << 4)
#define MCP2521_TXB2CTRL_TXREQ (1 << 3)
#define MCP2521_TXB2CTRL_TXP1 (1 << 1)
#define MCP2521_TXB2CTRL_TXP0 (1 << 0)
struct TXBnCTRL_Register {
uint8_t TXP : 2;
uint8_t : 1; // Unused bit
uint8_t TXREQ : 1;
uint8_t TXERR : 1;
uint8_t MLOA : 1;
uint8_t ABTF : 1;
uint8_t : 1; // Unused bit
};
#define MCP2521_RXB0CTRL 0x60
#define MCP2521_RXB0CTRL_RXM1 (1 << 6)
#define MCP2521_RXB0CTRL_RXM0 (1 << 5)
#define MCP2521_RXB0CTRL_RXRTR (1 << 3)
#define MCP2521_RXB0CTRL_BUKT (1 << 2)
#define MCP2521_RXB0CTRL_BUKT1 (1 << 1)
#define MCP2521_RXB0CTRL_FILHIT0 (1 << 0)
#define MCP2521_RXB1CTRL 0x70
#define MCP2521_RXB1CTRL_RXM1 (1 << 6)
#define MCP2521_RXB1CTRL_RXM0 (1 << 5)
#define MCP2521_RXB1CTRL_RXRTR (1 << 3)
#define MCP2521_RXB1CTRL_FILHIT2 (1 << 2)
#define MCP2521_RXB1CTRL_FILHIT1 (1 << 1)
#define MCP2521_RXB1CTRL_FILHIT0 (1 << 0)
#define MCP2521_OP_RESET 0b11000000
#define MCP2521_OP_READ 0b00000011
#define MCP2521_OP_READ_RX_BUFFER 0b10010000
#define MCP2521_OP_WRITE 0b00000010
#define MCP2521_OP_LOAD_TX_BUFFER 0b01000000
#define MCP2521_OP_RTS 0b10000000
#define MCP2521_OP_READ_STATUS 0b10100000
#define MCP2521_OP_RX_STATUS 0b10110000
#define MCP2521_OP_BIT_MODIFY 0b00000101
#define MCP2521_TXB0SIDH 0x31
#define MCP2521_TXB1SIDH 0x41
#define MCP2521_TXB2SIDH 0x51
#define MCP2521_TXB0SIDL 0x32
#define MCP2521_TXB1SIDL 0x42
#define MCP2521_TXB2SIDL 0x52
#define MCP2521_RXB0SIDH 0x61
#define MCP2521_RXB1SIDH 0x71
#define MCP2521_RXB0SIDL 0x62
#define MCP2521_RXB1SIDL 0x72
#define MCP2521_RXB0EID8 0x63
#define MCP2521_RXB1EID8 0x73
#define MCP2521_RXB0EID0 0x64
#define MCP2521_RXB1EID0 0x74
#define MCP2521_RXB0DLC 0x65
#define MCP2521_RXB1DLC 0x75

View File

@@ -0,0 +1,102 @@
#pragma once
#include "mcp2521_addresses.hpp"
#include "mcp2521_hardware_handle.hpp"
#include <stdint.h>
enum MCP2521_RX_BUFFER {
RXB0 = 0,
RXB1 = 1
};
enum MCP2521_TX_BUFFER {
TXB0 = 0,
TXB1 = 1,
TXB2 = 2
};
enum MCP2521_BUFFER_TYPE {
ID = 0,
DATA = 1
};
enum MCP2521_OPERATION_MODE {
NORMAL = 0b000,
SLEEP = 0b001,
LOOPBACK = 0b010,
LISTEN_ONLY = 0b011,
CONFIG = 0b100
};
struct rx_info {
bool extended;
uint16_t id;
uint32_t extended_id;
bool rtr;
bool extended_rtr;
uint8_t length;
};
class MCP2521_Command_Interface {
private:
MCP2521_Hardware_Handle * hardware_handle;
intHandlerFunction_t rx0_handler;
intHandlerFunction_t rx1_handler;
intHandlerFunction_t tx0_handler;
intHandlerFunction_t tx1_handler;
intHandlerFunction_t tx2_handler;
intHandlerFunction_t error_handler;
intHandlerFunction_t wakeup_handler;
intHandlerFunction_t message_error_handler;
void * rx0_handler_arg;
void * rx1_handler_arg;
void * tx0_handler_arg;
void * tx1_handler_arg;
void * tx2_handler_arg;
void * error_handler_arg;
void * wakeup_handler_arg;
void * message_error_handler_arg;
public:
MCP2521_Command_Interface(
MCP2521_Hardware_Handle * hardware_handle
);
void handleInterrupt();
void reset();
void read_reg(uint8_t address, uint8_t *data, size_t length);
uint8_t read_reg(uint8_t address);
void read_rx_buf(MCP2521_RX_BUFFER buffer, MCP2521_BUFFER_TYPE type, uint8_t *data, size_t length);
void write_reg(uint8_t address, uint8_t *data, size_t length);
void write_reg(uint8_t address, uint8_t data);
void write_tx_buf(MCP2521_TX_BUFFER buffer, MCP2521_BUFFER_TYPE type, uint8_t *data, size_t length);
void request_to_send(bool txb2, bool txb1, bool txb0);
void request_to_send(MCP2521_TX_BUFFER buffer);
uint8_t read_status();
uint8_t read_rx_status();
void bit_modify(uint8_t address, uint8_t mask, uint8_t data);
// Registering Handlers for Interrupts
void register_rx0_handler(intHandlerFunction_t handler, void * arg);
void register_rx1_handler(intHandlerFunction_t handler, void * arg);
void register_tx0_handler(intHandlerFunction_t handler, void * arg);
void register_tx1_handler(intHandlerFunction_t handler, void * arg);
void register_tx2_handler(intHandlerFunction_t handler, void * arg);
void register_error_handler(intHandlerFunction_t handler, void * arg);
void register_wakeup_handler(intHandlerFunction_t handler, void * arg);
void register_message_error_handler(intHandlerFunction_t handler, void * arg);
};

View File

@@ -0,0 +1,38 @@
#pragma once
#include <stdint.h>
#include "mcp2521.hpp"
#include "mcp2521_command.hpp"
#include "mcp2521_addresses.hpp"
class MCP2521 : public MCP2521_Command_Interface {
private:
public:
void set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended);
/**
* @brief Loads the Data Length Code register for the specified buffer
*
* @param buffer What Buffer to load the DLC register for
* @param length How many bytes are in the message (0-8)
* @param rtr: Remote Transmission Request
*/
void set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr);
/**
* @brief Loads the data and id into the specified buffer
*
* @param buffer
* @param id
* @param data
* @param length
*/
void prepare_tx(MCP2521_TX_BUFFER buffer, uint32_t id, uint8_t *data, size_t length, bool rtr, bool extended);
void set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot);
void set_singleshot_mode(bool enable);
void enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1);
rx_info get_rx_id(MCP2521_RX_BUFFER buffer);
};

View File

@@ -0,0 +1,100 @@
#include <cstring>
#include "mcp2521.hpp"
#include "mcp2521_addresses.hpp"
void runIntHandler(void *arg) {
MCP2521_Command_Interface *command_interface = (MCP2521_Command_Interface *)arg;
command_interface->handleInterrupt();
}
MCP2521_Command_Interface::MCP2521_Command_Interface(
MCP2521_Hardware_Handle * hardware_handle
) {
this->hardware_handle = hardware_handle;
this->hardware_handle->registerIntHandler(runIntHandler, (void *)this);
rx0_handler = NULL;
rx1_handler = NULL;
tx0_handler = NULL;
tx1_handler = NULL;
tx2_handler = NULL;
error_handler = NULL;
wakeup_handler = NULL;
message_error_handler = NULL;
rx0_handler_arg = NULL;
rx1_handler_arg = NULL;
tx0_handler_arg = NULL;
tx1_handler_arg = NULL;
tx2_handler_arg = NULL;
error_handler_arg = NULL;
wakeup_handler_arg = NULL;
message_error_handler_arg = NULL;
}
void MCP2521_Command_Interface::reset() {
hardware_handle->execute(MCP2521_OP_RESET);
}
void MCP2521_Command_Interface::read_reg(uint8_t address, uint8_t *data, size_t length) {
hardware_handle->read(MCP2521_OP_READ, data, length, address);
}
uint8_t MCP2521_Command_Interface::read_reg(uint8_t address) {
return hardware_handle->read(MCP2521_OP_READ, address);
}
void MCP2521_Command_Interface::read_rx_buf(MCP2521_RX_BUFFER buffer, MCP2521_BUFFER_TYPE type, uint8_t *data, size_t length) {
uint8_t address = (buffer << 1) | (type << 2);
hardware_handle->read(MCP2521_OP_READ_RX_BUFFER | address, data, length);
}
void MCP2521_Command_Interface::write_reg(uint8_t address, uint8_t *data, size_t length) {
hardware_handle->write(MCP2521_OP_WRITE, data, length, address);
}
void MCP2521_Command_Interface::write_reg(uint8_t address, uint8_t data) {
hardware_handle->write(MCP2521_OP_WRITE, data, address);
}
void MCP2521_Command_Interface::write_tx_buf(MCP2521_TX_BUFFER buffer, MCP2521_BUFFER_TYPE type, uint8_t *data, size_t length) {
uint8_t address = (buffer << 1) | (type);
hardware_handle->write(MCP2521_OP_LOAD_TX_BUFFER | address, data, length);
}
void MCP2521_Command_Interface::request_to_send(bool txb2, bool txb1, bool txb0) {
uint8_t data = (txb2 << 2) | (txb1 << 1) | txb0;
hardware_handle->execute(MCP2521_OP_RTS | data);
}
void MCP2521_Command_Interface::request_to_send(MCP2521_TX_BUFFER buffer) {
uint8_t mask = 0;
switch (buffer) {
case MCP2521_TX_BUFFER::TXB0:
mask = 0b001;
break;
case MCP2521_TX_BUFFER::TXB1:
mask = 0b010;
break;
case MCP2521_TX_BUFFER::TXB2:
mask = 0b100;
break;
}
hardware_handle->execute(MCP2521_OP_RTS | mask);
}
uint8_t MCP2521_Command_Interface::read_status() {
return hardware_handle->read(MCP2521_OP_READ_STATUS);
}
uint8_t MCP2521_Command_Interface::read_rx_status() {
return hardware_handle->read(MCP2521_OP_RX_STATUS);
}
void MCP2521_Command_Interface::bit_modify(uint8_t address, uint8_t mask, uint8_t data) {
uint8_t data_array[3] = {address, mask, data};
hardware_handle->write(MCP2521_OP_BIT_MODIFY, data_array, 3);
}

View File

@@ -0,0 +1,113 @@
#include "mcp2521.hpp"
#include "mcp2521_addresses.hpp"
void MCP2521_Command_Interface::register_rx0_handler(intHandlerFunction_t handler, void* args) {
rx0_handler = handler;
rx0_handler_arg = args;
}
void MCP2521_Command_Interface::register_rx1_handler(intHandlerFunction_t handler, void* args) {
rx1_handler = handler;
rx1_handler_arg = args;
}
void MCP2521_Command_Interface::register_tx0_handler(intHandlerFunction_t handler, void* args) {
tx0_handler = handler;
tx0_handler_arg = args;
}
void MCP2521_Command_Interface::register_tx1_handler(intHandlerFunction_t handler, void* args) {
tx1_handler = handler;
tx1_handler_arg = args;
}
void MCP2521_Command_Interface::register_tx2_handler(intHandlerFunction_t handler, void* args) {
tx2_handler = handler;
tx2_handler_arg = args;
}
void MCP2521_Command_Interface::register_error_handler(intHandlerFunction_t handler, void* args) {
error_handler = handler;
error_handler_arg = args;
}
void MCP2521_Command_Interface::register_wakeup_handler(intHandlerFunction_t handler, void* args) {
wakeup_handler = handler;
wakeup_handler_arg = args;
}
void MCP2521_Command_Interface::register_message_error_handler(intHandlerFunction_t handler, void* args) {
message_error_handler = handler;
message_error_handler_arg = args;
}
void MCP2521_Command_Interface::handleInterrupt() {
uint8_t flags = read_reg(MCP2521_CANINTF);
uint8_t clearBits = 0;
if (flags & MCP2521_CANINTF_RX0IF) {
if (rx0_handler) {
rx0_handler(rx0_handler_arg);
}
flags &= ~MCP2521_CANINTF_RX0IF;
clearBits |= MCP2521_CANINTF_RX0IF;
}
if (flags & MCP2521_CANINTF_RX1IF) {
if (rx1_handler) {
rx1_handler(rx1_handler_arg);
}
flags &= ~MCP2521_CANINTF_RX1IF;
clearBits |= MCP2521_CANINTF_RX1IF;
}
if (flags & MCP2521_CANINTF_TX0IF) {
if (tx0_handler) {
tx0_handler(tx0_handler_arg);
}
flags &= ~MCP2521_CANINTF_TX0IF;
clearBits |= MCP2521_CANINTF_TX0IF;
}
if (flags & MCP2521_CANINTF_TX1IF) {
if (tx1_handler) {
tx1_handler(tx1_handler_arg);
}
flags &= ~MCP2521_CANINTF_TX1IF;
clearBits |= MCP2521_CANINTF_TX1IF;
}
if (flags & MCP2521_CANINTF_TX2IF) {
if (tx2_handler) {
tx2_handler(tx2_handler_arg);
}
flags &= ~MCP2521_CANINTF_TX2IF;
clearBits |= MCP2521_CANINTF_TX2IF;
}
if (flags & MCP2521_CANINTF_ERRIF) {
if (error_handler) {
error_handler(error_handler_arg);
}
flags &= ~MCP2521_CANINTF_ERRIF;
clearBits |= MCP2521_CANINTF_ERRIF;
}
if (flags & MCP2521_CANINTF_WAKIF) {
if (wakeup_handler) {
wakeup_handler(wakeup_handler_arg);
}
flags &= ~MCP2521_CANINTF_WAKIF;
clearBits |= MCP2521_CANINTF_WAKIF;
}
if (flags & MCP2521_CANINTF_MERRF) {
if (message_error_handler) {
message_error_handler(message_error_handler_arg);
}
flags &= ~MCP2521_CANINTF_MERRF;
clearBits |= MCP2521_CANINTF_MERRF;
}
bit_modify(MCP2521_CANINTF, clearBits, 0);
}

View File

@@ -0,0 +1,119 @@
#include <cstring>
#include "mcp2521.hpp"
#include "mcp2521_addresses.hpp"
void MCP2521::set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended) {
uint8_t addr_offset = 0;
switch (buffer)
{
case MCP2521_TX_BUFFER::TXB0:
addr_offset = 0x00;
break;
case MCP2521_TX_BUFFER::TXB1:
addr_offset = 0x10;
break;
case MCP2521_TX_BUFFER::TXB2:
addr_offset = 0x20;
break;
}
uint8_t upper_id = (id >> 3) & 0xFF;
uint8_t lower_id = ((id & 0b111) << 5);
if(extended) {
lower_id |= 0b1000;
lower_id |= (id >> 8) & 0b11;
}
write_reg(MCP2521_TXB0SIDH | addr_offset, upper_id);
write_reg(MCP2521_TXB0SIDL | addr_offset, lower_id);
}
void MCP2521::set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr) {
uint8_t data = length;
if (rtr)
data |= 0b01000000;
uint8_t reg_address = 0;
switch (buffer) {
case MCP2521_TX_BUFFER::TXB0:
reg_address = MCP2521_TXB0DLC;
break;
case MCP2521_TX_BUFFER::TXB1:
reg_address = MCP2521_TXB1DLC;
break;
case MCP2521_TX_BUFFER::TXB2:
reg_address = MCP2521_TXB2DLC;
break;
}
write_reg(reg_address, data);
}
void MCP2521::set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot) {
uint8_t single = singleshot ? 0b00001000 : 0x0;
bit_modify(MCP2521_CANCTRL, 0b11101000 , (mode << 5) | single);
}
void MCP2521::set_singleshot_mode(bool enable) {
uint8_t data = enable ? 0x08 : 0x00;
bit_modify(MCP2521_CANCTRL, 0x08, data);
}
void MCP2521::enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1) {
uint8_t interrupt_flags = 0;
if (MessageError) interrupt_flags |= 0b10000000;
if (WakeUp) interrupt_flags |= 0b01000000;
if (ErrorInterrupt) interrupt_flags |= 0b00100000;
if (TXB2) interrupt_flags |= 0b00010000;
if (TXB1) interrupt_flags |= 0b00001000;
if (TXB0) interrupt_flags |= 0b00000100;
if (RXB1) interrupt_flags |= 0b00000010;
if (RXB0) interrupt_flags |= 0b00000001;
write_reg(MCP2521_CANINTE, interrupt_flags);
}
rx_info MCP2521::get_rx_id(MCP2521_RX_BUFFER buffer) {
uint8_t data[5];
uint8_t addr_offset = MCP2521_RXB0SIDH;
switch (buffer) {
case MCP2521_RX_BUFFER::RXB0:
addr_offset |= 0x00;
break;
case MCP2521_RX_BUFFER::RXB1:
addr_offset |= 0x10;
break;
}
read_reg(addr_offset, data, 5);
rx_info res;
res.extended = data[1] & 0b1000;
res.id = (data[0] << 3) | (data[1] >> 5);
res.extended_id = ((data[1] & 0b11) << 16) | (data[2] << 8) | data[3];
res.rtr = data[1] & 0b10000;
res.extended_rtr = (data[4] & 0b1000000);
res.length = (data[4] & 0b1111);
return res;
}
void MCP2521::prepare_tx(
MCP2521_TX_BUFFER buffer,
uint32_t id,
uint8_t *data,
size_t length,
bool rtr, bool extended) {
set_tx_id(buffer, id, extended);
set_DLC_reg(buffer, length, rtr);
write_tx_buf(buffer, MCP2521_BUFFER_TYPE::DATA, data, length);
}

View File

@@ -0,0 +1,5 @@
idf_component_register(SRCS "esp_implementation_init.cpp"
"esp_implementation_cmd.cpp"
"esp_implementation_int.cpp"
INCLUDE_DIRS "include"
REQUIRES driver)

View File

@@ -0,0 +1,209 @@
#include "mcp2521_hardware_handle.hpp"
#ifdef ESP_PLATFORM
#include "mcp2521_hardware_esp.hpp"
const uint8_t null_buffer[32] = {0};
void MCP2521_Hardware_Handle_ESP::spi_transmit(spi_transaction_t *t) {
xSemaphoreTake(spiMutex, portMAX_DELAY);
spi_device_transmit(this->spi_device_handle, t);
xSemaphoreGive(spiMutex);
}
void MCP2521_Hardware_Handle_ESP::execute(uint8_t cmd) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = 0,
.length = 0,
.rxlength = 0,
.tx_buffer = NULL,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::execute(uint8_t cmd, uint8_t address) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = address,
.length = 0,
.rxlength = 0,
.tx_buffer = NULL,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 8,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::read(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = address,
.length = 8*length,
.rxlength = 8*length,
.tx_buffer = null_buffer,
.rx_buffer = data
},
.command_bits = 8,
.address_bits = 8,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::read(uint8_t cmd, uint8_t *data, size_t length) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = 0,
.length = 8*length,
.rxlength = 8*length,
.tx_buffer = NULL,
.rx_buffer = data
},
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
uint8_t MCP2521_Hardware_Handle_ESP::read(uint8_t cmd, uint8_t address) {
uint8_t result = 0;
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = address,
.length = 8,
.rxlength = 8,
.tx_buffer = null_buffer,
.rx_buffer = &result
},
.command_bits = 8,
.address_bits = 8,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
return result;
}
uint8_t MCP2521_Hardware_Handle_ESP::read(uint8_t cmd) {
uint8_t result;
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = 0,
.length = 8,
.rxlength = 8,
.tx_buffer = null_buffer,
.rx_buffer = &result
},
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
return result;
}
void MCP2521_Hardware_Handle_ESP::write(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) {
uint8_t result;
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = address,
.length = 8*length,
.rxlength = 0,
.tx_buffer = data,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 8,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::write(uint8_t cmd, uint8_t *data, size_t length) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = 0,
.length = 8*length,
.rxlength = 0,
.tx_buffer = data,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::write(uint8_t cmd, uint8_t data, uint8_t address) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = address,
.length = 8,
.rxlength = 0,
.tx_buffer = &data,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 8,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
void MCP2521_Hardware_Handle_ESP::write(uint8_t cmd, uint8_t data) {
spi_transaction_ext_t t = {
.base = {
.flags = SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_ADDR,
.cmd = cmd,
.addr = 0,
.length = 8,
.rxlength = 0,
.tx_buffer = &data,
.rx_buffer = NULL
},
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
};
spi_transmit((spi_transaction_t*)(&t));
}
#endif

View File

@@ -0,0 +1,92 @@
#include "mcp2521_hardware_handle.hpp"
#ifdef ESP_PLATFORM
#include "mcp2521_hardware_esp.hpp"
#include "driver/gpio.h"
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
MCP2521_Hardware_Handle_ESP::MCP2521_Hardware_Handle_ESP(
spi_host_device_t spi_host,
spi_bus_config_t *bus_config,
gpio_num_t mosi,
gpio_num_t miso,
gpio_num_t sclk,
gpio_num_t cs,
gpio_num_t int_pin
) {
initPins(int_pin);
initSPIBus(spi_host, mosi, miso, sclk, bus_config);
this->spi_bus_config = bus_config;
initSPIDevice(spi_host, cs);
}
MCP2521_Hardware_Handle_ESP::MCP2521_Hardware_Handle_ESP(
spi_host_device_t spi_host,
spi_bus_config_t *bus_config,
gpio_num_t cs,
gpio_num_t int_pin
) {
initPins(int_pin);
this->spi_bus_config = bus_config;
initSPIDevice(spi_host, cs);
}
MCP2521_Hardware_Handle_ESP::~MCP2521_Hardware_Handle_ESP() {
}
void MCP2521_Hardware_Handle_ESP::initSPIBus(
spi_host_device_t spi_host,
gpio_num_t mosi,
gpio_num_t miso,
gpio_num_t sclk,
spi_bus_config_t *bus_config
) {
memset(bus_config, 0, sizeof(spi_bus_config_t));
bus_config->mosi_io_num = mosi;
bus_config->miso_io_num = miso;
bus_config->sclk_io_num = sclk;
bus_config->quadwp_io_num = -1;
bus_config->quadhd_io_num = -1;
bus_config->flags = SPICOMMON_BUSFLAG_MASTER;
spi_bus_initialize(spi_host, bus_config, SPI_DMA_CH_AUTO);
}
void MCP2521_Hardware_Handle_ESP::initSPIDevice(
spi_host_device_t spi_host,
gpio_num_t cs
) {
memset(&this->spi_device_config, 0, sizeof(spi_device_interface_config_t));
this->spi_device_config = {
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
.mode = 0,
.duty_cycle_pos = 128,
// cs_ena_pretrans = 0 and cs_ena_posttrans = 0 need to be set to zero, if not its not compatible with full-duplex mode
// Learned this the hard way
.cs_ena_pretrans = 0,
.cs_ena_posttrans = 0,
.clock_speed_hz = 10000,
.spics_io_num = cs,
.flags = SPI_DEVICE_NO_DUMMY,
.queue_size = 5,
};
spi_bus_add_device(spi_host, &this->spi_device_config, &this->spi_device_handle);
spiMutex = xSemaphoreCreateMutex();
}
spi_bus_config_t * MCP2521_Hardware_Handle_ESP::getSPI_bus_config() {
return this->spi_bus_config;
}
#endif

View File

@@ -0,0 +1,65 @@
#include "mcp2521_hardware_handle.hpp"
#ifdef ESP_PLATFORM
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "mcp2521_hardware_esp.hpp"
static void IRAM_ATTR gpio_isr_can_handler(void* arg) {
MCP2521_Hardware_Handle_ESP * handle = (MCP2521_Hardware_Handle_ESP *)arg;
handle->isr_can_interrupt();
}
static void handleInteruptTaskCallerFn(void *arg) {
MCP2521_Hardware_Handle_ESP * handle = (MCP2521_Hardware_Handle_ESP *)arg;
handle->handleIntteruptTaskFn();
}
void MCP2521_Hardware_Handle_ESP::initPins(
gpio_num_t int_pin
) {
canInterruptSemaphore = xSemaphoreCreateBinary();
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_NEGEDGE;
io_conf.mode = GPIO_MODE_INPUT;
io_conf.pin_bit_mask = 1 << int_pin;
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
gpio_config(&io_conf);
gpio_install_isr_service(0);
gpio_isr_handler_add(int_pin, gpio_isr_can_handler, this);
xTaskCreate(
(TaskFunction_t)&handleInteruptTaskCallerFn,
"canInterruptTask",
2048,
this,
5,
&canInterruptTaskHandle
);
}
void MCP2521_Hardware_Handle_ESP::handleIntteruptTaskFn() {
while(true) {
xSemaphoreTake(canInterruptSemaphore, portMAX_DELAY);
intHandler(intHandlerArg);
}
}
void MCP2521_Hardware_Handle_ESP::isr_can_interrupt() {
BaseType_t wokenTask = pdFALSE;
xSemaphoreGiveFromISR(canInterruptSemaphore, &wokenTask);
if(wokenTask) {
portYIELD_FROM_ISR();
}
}
void MCP2521_Hardware_Handle_ESP::registerIntHandler(intHandlerFunction_t handler, void * arg) {
intHandlerArg = arg;
intHandler = handler;
}
#endif

View File

@@ -0,0 +1,87 @@
#pragma once
#include "mcp2521_hardware_handle.hpp"
#ifdef ESP_PLATFORM
#include "driver/gpio.h"
#include "driver/spi_master.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
class MCP2521_Hardware_Handle_ESP : public MCP2521_Hardware_Handle {
char spi_tmp_buffer;
spi_bus_config_t * spi_bus_config;
spi_device_interface_config_t spi_device_config;
spi_device_handle_t spi_device_handle;
SemaphoreHandle_t canInterruptSemaphore = NULL;
SemaphoreHandle_t spiMutex = NULL;
TaskHandle_t canInterruptTaskHandle = NULL;
void spi_transmit(spi_transaction_t *t);
void * intHandlerArg = NULL;
intHandlerFunction_t intHandler = NULL;
public:
MCP2521_Hardware_Handle_ESP(
spi_host_device_t spi_host,
spi_bus_config_t *bus_config,
gpio_num_t mosi,
gpio_num_t miso,
gpio_num_t sclk,
gpio_num_t cs,
gpio_num_t int_pin
);
MCP2521_Hardware_Handle_ESP(
spi_host_device_t spi_host,
spi_bus_config_t *bus_config,
gpio_num_t cs,
gpio_num_t int_pin
);
static void initSPIBus(
spi_host_device_t spi_host,
gpio_num_t mosi,
gpio_num_t miso,
gpio_num_t sclk,
spi_bus_config_t *bus_config
);
void initSPIDevice(
spi_host_device_t spi_host,
gpio_num_t cs
);
void initPins(
gpio_num_t int_pin
);
~MCP2521_Hardware_Handle_ESP();
spi_bus_config_t * getSPI_bus_config();
// ISR Stuff
void isr_can_interrupt();
void handleIntteruptTaskFn();
// Inherited from MCP2521_Hardware_Handle
void execute(uint8_t cmd);
void execute(uint8_t cmd, uint8_t address);
void read(uint8_t cmd, uint8_t *data, size_t length, uint8_t address);
void read(uint8_t cmd, uint8_t *data, size_t length);
uint8_t read(uint8_t cmd, uint8_t address);
uint8_t read(uint8_t cmd);
void write(uint8_t cmd, uint8_t *data, size_t length, uint8_t address);
void write(uint8_t cmd, uint8_t *data, size_t length);
void write(uint8_t cmd, uint8_t data, uint8_t address);
void write(uint8_t cmd, uint8_t data);
void registerIntHandler(intHandlerFunction_t handler, void * arg);
};
#endif

View File

@@ -0,0 +1,24 @@
#pragma once
#include <cstdint>
#include <strings.h>
typedef void (*intHandlerFunction_t)(void *);
class MCP2521_Hardware_Handle {
public:
virtual void registerIntHandler(intHandlerFunction_t handler, void * arg) = 0;
virtual void execute(uint8_t cmd) = 0;
virtual void execute(uint8_t cmd, uint8_t address) = 0;
virtual void read(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) = 0;
virtual void read(uint8_t cmd, uint8_t *data, size_t length) = 0;
virtual uint8_t read(uint8_t cmd, uint8_t address) = 0;
virtual uint8_t read(uint8_t cmd) = 0;
virtual void write(uint8_t cmd, uint8_t *data, size_t length, uint8_t address) = 0;
virtual void write(uint8_t cmd, uint8_t *data, size_t length) = 0;
virtual void write(uint8_t cmd, uint8_t data, uint8_t address) = 0;
virtual void write(uint8_t cmd, uint8_t data) = 0;
};

BIN
motor-control/.gitignore (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@@ -13,7 +13,7 @@
"type": "cortex-debug", "type": "cortex-debug",
"servertype": "external", "servertype": "external",
"gdbPath" : "gdb-multiarch", "gdbPath" : "gdb-multiarch",
"gdbTarget": "localhost:3333", "gdbTarget": "gobot-rpi:3333",
"device": "RP2040", "device": "RP2040",
"configFiles": [ "configFiles": [
"interface/cmsis-dap.cfg", "interface/cmsis-dap.cfg",

View File

@@ -102,6 +102,64 @@
"cwd": "${workspaceRoot}" "cwd": "${workspaceRoot}"
}, },
"problemMatcher": [] "problemMatcher": []
},
{
"type": "shell",
"label": "Pico Remote: Launch OpenOCD",
"command": [
"scripts/remote/run_openocd.exp",
"gobot-rpi",
],
"options": {
"cwd": "${workspaceRoot}"
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "dedicated",
"showReuseMessage": true,
"clear": true
},
"isBackground": true
},
{
"type": "shell",
"label": "Pico Remote: flash main",
"command": [
"scripts/remote/flash.sh",
"${workspaceRoot}/build/bin/main.elf",
"gobot-rpi",
],
"options": {
"cwd": "${workspaceRoot}"
},
"group": "test",
"dependsOn": [
"CMake: build main"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "dedicated",
"showReuseMessage": true,
"clear": true
} }
},
{
"type": "shell",
"label": "Pico Remote: Reset Device",
"command": [
"scripts/remote/reset.exp",
"gobot-rpi"
],
"options": {
"cwd": "${workspaceRoot}"
},
"isBackground": true,
"problemMatcher": []
},
] ]
} }

View File

@@ -9,9 +9,10 @@ else()
endif() endif()
#SET(PICO_TOOLCHAIN_PATH "${PICO_SDK_PATH}/cmake/preload/toolchains/") #SET(PICO_TOOLCHAIN_PATH "${PICO_SDK_PATH}/cmake/preload/toolchains/")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
include(${PICO_SDK_PATH}/pico_sdk_init.cmake) include(${PICO_SDK_PATH}/pico_sdk_init.cmake)
include(cmake/freeRTOS.cmake)
#include(pico_extras_import_optional.cmake) #include(pico_extras_import_optional.cmake)
@@ -45,6 +46,7 @@ add_executable(main
target_include_directories(main PUBLIC target_include_directories(main PUBLIC
include/ include/
include/freeRTOS
build/ build/
) )
@@ -56,12 +58,17 @@ pico_generate_pio_header(main ${CMAKE_CURRENT_LIST_DIR}/src/tmc2209/pulser.pio)
# pull in common dependencies # pull in common dependencies
target_link_libraries(main target_link_libraries(main
pico_stdlib pico_stdlib
pico_time
pico_multicore pico_multicore
pico_stdio_usb
hardware_pio hardware_pio
tmc2209_driver tmc2209_driver
FreeRTOS
) )
pico_enable_stdio_usb(main 1)
pico_enable_stdio_uart(main 0)
# create map/bin/hex file etc. # create map/bin/hex file etc.
pico_add_extra_outputs(main) pico_add_extra_outputs(main)

BIN
motor-control/firmware/README.md (Stored with Git LFS)

Binary file not shown.

View File

@@ -0,0 +1,14 @@
SET(FreeRTOS_DIR ${CMAKE_CURRENT_LIST_DIR}/../lib/FreeRTOS-Kernel)
FILE(GLOB FreeRTOS_src ${FreeRTOS_DIR}/*.c)
add_library(FreeRTOS STATIC
${FreeRTOS_src}
${FreeRTOS_DIR}/portable/GCC/ARM_CM0/port.c
${FreeRTOS_DIR}/portable/MemMang/heap_4.c
)
target_include_directories(FreeRTOS PUBLIC
${FreeRTOS_DIR}/portable/GCC/ARM_CM0/
${FreeRTOS_DIR}/include/
${CMAKE_CURRENT_LIST_DIR}/../include/freeRTOS
)

View File

@@ -0,0 +1,101 @@
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
#define configENABLE_MPU 1
#define configUSE_PREEMPTION 1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
#define configUSE_TICKLESS_IDLE 0
#define configCPU_CLOCK_HZ 133000000
#define configSYSTICK_CLOCK_HZ 1000000
#define configTICK_RATE_HZ 1000
#define configMAX_PRIORITIES 4
#define configMINIMAL_STACK_SIZE 256
#define configMAX_TASK_NAME_LEN 16
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_TASK_NOTIFICATIONS 1
#define configTASK_NOTIFICATION_ARRAY_ENTRIES 3
#define configUSE_MUTEXES 0
#define configUSE_RECURSIVE_MUTEXES 0
#define configUSE_COUNTING_SEMAPHORES 1
#define configUSE_ALTERNATIVE_API 0 /* Deprecated! */
#define configQUEUE_REGISTRY_SIZE 10
#define configUSE_QUEUE_SETS 0
#define configUSE_TIME_SLICING 1
#define configUSE_NEWLIB_REENTRANT 0
#define configENABLE_BACKWARD_COMPATIBILITY 0
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 5
#define configSTACK_DEPTH_TYPE uint16_t
#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
/* Memory allocation related definitions. */
#define configSUPPORT_STATIC_ALLOCATION 0
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configTOTAL_HEAP_SIZE 50000
#define configAPPLICATION_ALLOCATED_HEAP 0
/* Hook function related definitions. */
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCHECK_FOR_STACK_OVERFLOW 0
#define configUSE_MALLOC_FAILED_HOOK 0
#define configUSE_DAEMON_TASK_STARTUP_HOOK 0
/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS 0
#define configUSE_TRACE_FACILITY 0
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
/* Co-routine related definitions. */
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES 1
/* Software timer related definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY 3
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE
/* Interrupt nesting behaviour configuration. */
#define configKERNEL_INTERRUPT_PRIORITY [dependent of processor]
#define configMAX_SYSCALL_INTERRUPT_PRIORITY [dependent on processor and application]
#define configMAX_API_CALL_INTERRUPT_PRIORITY [dependent on processor and application]
/* Define to trap errors during development. */
//#define configASSERT( ( x ) ) assert()
/* FreeRTOS MPU specific definitions. */
#define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0
#define configTOTAL_MPU_REGIONS 8 /* Default value. */
#define configTEX_S_C_B_FLASH 0x07UL /* Default value. */
#define configTEX_S_C_B_SRAM 0x07UL /* Default value. */
#define configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY 1
/* Optional functions - most linkers will remove unused functions anyway. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_xResumeFromISR 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_xTaskGetCurrentTaskHandle 1
#define INCLUDE_uxTaskGetStackHighWaterMark 0
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_eTaskGetState 0
#define INCLUDE_xEventGroupSetBitFromISR 1
#define INCLUDE_xTimerPendFunctionCall 0
#define INCLUDE_xTaskAbortDelay 0
#define INCLUDE_xTaskGetHandle 0
#define INCLUDE_xTaskResumeFromISR 1
#define vPortSVCHandler isr_svcall
#define xPortPendSVHandler isr_pendsv
#define xPortSysTickHandler isr_systick
/* A header file that defines trace macro can be included here. */
#endif /* FREERTOS_CONFIG_H */

Submodule motor-control/firmware/lib/FreeRTOS-Kernel updated: 310ace5dd0...0240cd55f2

View File

@@ -17,6 +17,4 @@ send "rp2040.core1 arp_reset assert 0\n"
expect "> " expect "> "
send "rp2040.core0 arp_reset assert 0\n" send "rp2040.core0 arp_reset assert 0\n"
expect "> " expect "> "
send "exit\n"
exit exit

21
motor-control/firmware/scripts/remote/run_openocd.exp Normal file → Executable file
View File

@@ -4,17 +4,18 @@ set timeout 30
spawn ssh [lindex $argv 0] spawn ssh [lindex $argv 0]
expect "# " expect "$ "
send "cd ~/gobot/" send "cd ~/gobot/\n"
expect "# " expect "$ "
send "git fetch" send "git fetch\n"
expect "# " expect "$ "
send "git checkout motor-ctrl-firmware" send "git checkout motor-ctrl-firmware\n"
expect "# " expect "$ "
send "cd motor-control/firmware/scripts/remote" send "cd motor-control/firmware/scripts/remote\n"
expect "# " expect "$ "
send "./run_openocd.sh" send "./run_openocd.sh\n"
expect "Kill Me Please, this is should not be triggered!"

2
motor-control/firmware/scripts/remote/run_openocd.sh Normal file → Executable file
View File

@@ -1,3 +1,3 @@
#!/usr/bin/bash #!/usr/bin/bash
src/openocd -f interface/cmsis-dap.cfg -c "bindto 0.0.0.0" -c "adapter speed 5000" -f target/rp2040.cfg -s tcl openocd -f interface/cmsis-dap.cfg -c "bindto 0.0.0.0" -c "adapter speed 100" -f target/rp2040.cfg -s tclErt645$

View File

@@ -9,27 +9,149 @@
* *
*/ */
#include "tmc2209/tmc2209.hpp"
#include "pico/stdio.h" #include "pico/stdio.h"
#include "pico/stdlib.h"
#include "pico/time.h"
#include "hardware/uart.h" #include "hardware/uart.h"
#include <stdio.h>
#include "pulser.pio.h" #include "pulser.pio.h"
#include "tmc2209/tmc2209.hpp"
#include "tmc2209/step.hpp" #include "tmc2209/step.hpp"
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
#define LED_PIN 25 #define LED_PIN 25
#define RGB1_B_PIN 21
#define RGB1_G_PIN 22
#define RGB2_R_PIN 26
#define RGB2_G_PIN 27
#define RGB2_B_PIN 28
#define BOARD_LED1_PIN 14
#define BOARD_LED2_PIN 15
#define ENABLE0_PIN 2 #define ENABLE0_PIN 2
#define ENABLE1_PIN 3 #define ENABLE1_PIN 3
#define LIMIT0_PIN 10 #define LIMIT0_PIN 10
#define LIMIT1_PIN 11 #define LIMIT1_PIN 11
#define LIMIT2_PIN 12
#define LIMIT3_PIN 13
#define STEP0_PIN 6 #define STEP0_PIN 6
#define STEP1_PIN 7 #define STEP1_PIN 7
#define DIR0_PIN 8 #define DIR0_PIN 8
#define DIR1_PIN 9 #define DIR1_PIN 9
enum SYSTEM_STATE {
STARTUP,
HOMEING_FIRST_RUN,
HOMEING_BACKOFF,
HOMEING_SECOND_RUN,
IDLE
};
SYSTEM_STATE system_state = STARTUP;
absolute_time_t debounce_cooldown_ticks= 5000;
absolute_time_t limit_debounce_tick = 0;
void isr_LimitSwitch(uint gpio, uint32_t event_mask) {
absolute_time_t current_tick = get_absolute_time();
if((current_tick - limit_debounce_tick) < debounce_cooldown_ticks) {
return;
} else {
limit_debounce_tick = current_tick;
}
switch (gpio) {
case LIMIT0_PIN:
break;
default:
break;
}
}
void homeMotors0(TMC2209_step_dual * driver) {
driver->set_conf0(10000, 1);
driver->pulse0(10000);
driver->wait0(0);
driver->set_conf0(10000, 0);
driver->pulse0(100000);
while(!gpio_get(LIMIT2_PIN)) {
sleep_ms(1);
}
driver->pulse0(0);
sleep_ms(500);
// Second Run
driver->set_conf0(5000, 1);
driver->pulse0(200);
driver->wait0(0);
driver->set_conf0(500, 0);
driver->pulse0(5000);
while(!gpio_get(LIMIT2_PIN)) {
sleep_ms(1);
}
driver->pulse0(0);
sleep_ms(1);
}
void homeMotors1(TMC2209_step_dual * driver) {
driver->set_conf1(10000, 1);
driver->pulse1(5000);
driver->wait1(0);
driver->set_conf1(10000, 0);
driver->pulse1(100000);
while(!gpio_get(LIMIT3_PIN)) {
sleep_ms(1);
}
driver->pulse1(0);
sleep_ms(500);
// Second Run
driver->set_conf1(5000, 1);
driver->pulse1(200);
driver->wait1(0);
driver->set_conf1(500, 0);
driver->pulse1(5000);
while(!gpio_get(LIMIT3_PIN)) {
sleep_ms(1);
}
driver->pulse1(0);
sleep_ms(1);
}
void task_home0(void *pvParameters) {
TMC2209_step_dual * driver = (TMC2209_step_dual *)pvParameters;
vTaskDelay(500);
homeMotors0(driver);
}
void task_home1(void *pvParameters) {
TMC2209_step_dual * driver = (TMC2209_step_dual *)pvParameters;
homeMotors1(driver);
}
int main() { int main() {
sleep_ms(100);
stdio_usb_init();
gpio_init(DIR0_PIN); gpio_init(DIR0_PIN);
gpio_set_dir(DIR0_PIN, GPIO_OUT); gpio_set_dir(DIR0_PIN, GPIO_OUT);
gpio_put(DIR0_PIN, 0); gpio_put(DIR0_PIN, 0);
@@ -61,52 +183,125 @@ int main() {
sleep_ms(5); sleep_ms(5);
//step_driver.set_conf1(10000, 0);
step_driver.set_conf1(10000, 0); //step_driver.set_conf0(10000, 0);
//step_driver.pulse1(1000);
//step_driver.pulse0(1000);
//step_driver.wait1(0);
//step_driver.wait0(0);
gpio_init(LIMIT0_PIN); gpio_init(LIMIT0_PIN);
gpio_set_dir(LIMIT0_PIN, GPIO_IN); gpio_set_dir(LIMIT0_PIN, GPIO_IN);
gpio_pull_up(LIMIT0_PIN); gpio_pull_up(LIMIT0_PIN);
gpio_set_input_hysteresis_enabled(LIMIT0_PIN, true);
gpio_init(LIMIT1_PIN); gpio_init(LIMIT1_PIN);
gpio_set_dir(LIMIT1_PIN, GPIO_IN); gpio_set_dir(LIMIT1_PIN, GPIO_IN);
gpio_pull_up(LIMIT1_PIN); gpio_pull_up(LIMIT1_PIN);
gpio_set_input_hysteresis_enabled(LIMIT1_PIN, true);
step_driver.set_conf0(10000, 1); gpio_init(LIMIT2_PIN);
step_driver.pulse0(10000); gpio_set_dir(LIMIT2_PIN, GPIO_IN);
step_driver.wait0(0); gpio_pull_up(LIMIT2_PIN);
gpio_set_input_hysteresis_enabled(LIMIT2_PIN, true);
step_driver.set_conf0(10000, 0); gpio_init(LIMIT3_PIN);
step_driver.pulse0(100000); gpio_set_dir(LIMIT3_PIN, GPIO_IN);
while(!gpio_get(LIMIT1_PIN)) { gpio_pull_up(LIMIT3_PIN);
sleep_ms(1); gpio_set_input_hysteresis_enabled(LIMIT3_PIN, true);
}
step_driver.pulse0(0);
sleep_ms(500);
step_driver.set_conf0(10000, 1); /*
step_driver.pulse0(200); gpio_set_irq_enabled_with_callback(
step_driver.wait0(0); LIMIT0_PIN,
GPIO_IRQ_EDGE_RISE,
true,
isr_LimitSwitch
);
gpio_set_irq_enabled_with_callback(
LIMIT1_PIN,
GPIO_IRQ_EDGE_RISE,
true,
isr_LimitSwitch
);
gpio_set_irq_enabled_with_callback(
LIMIT2_PIN,
GPIO_IRQ_EDGE_RISE,
true,
isr_LimitSwitch
);
gpio_set_irq_enabled_with_callback(
LIMIT3_PIN,
GPIO_IRQ_EDGE_RISE,
true,
isr_LimitSwitch
);*/
step_driver.set_conf0(500, 0); gpio_init(RGB2_B_PIN);
step_driver.pulse0(5000); gpio_init(RGB2_G_PIN);
while(!gpio_get(LIMIT1_PIN)) { gpio_init(RGB2_R_PIN);
sleep_ms(1); gpio_set_dir(RGB2_B_PIN, GPIO_OUT);
} gpio_set_dir(RGB2_G_PIN, GPIO_OUT);
step_driver.pulse0(0); gpio_set_dir(RGB2_R_PIN, GPIO_OUT);
sleep_ms(1);
gpio_init(RGB1_B_PIN);
gpio_init(RGB1_G_PIN);
gpio_set_dir(RGB1_B_PIN, GPIO_OUT);
gpio_set_dir(RGB1_G_PIN, GPIO_OUT);
gpio_put(RGB1_B_PIN, 1);
gpio_put(RGB1_G_PIN, 1);
gpio_put(RGB2_B_PIN, 1);
gpio_put(RGB2_G_PIN, 1);
gpio_put(RGB2_R_PIN, 1);
/*
gpio_init(LED_PIN); gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT); gpio_set_dir(LED_PIN, GPIO_OUT);
//step_driver.set_conf0(10000, 0);
//step_driver.pulse0(1000000);
*/
homeMotors0(&step_driver);
printf("Home0 done\n");
homeMotors1(&step_driver);
printf("Home1 done\n");
//xTaskCreate(task_home0, "Home0", 1024, &step_driver, 5, NULL);
//xTaskCreate(task_home1, "Home1", 1024, &step_driver, 5, NULL);
vTaskStartScheduler();
/*
while (true) { while (true) {
sleep_ms(50); sleep_ms(50);
gpio_put(LED_PIN, 0); gpio_put(LED_PIN, 0);
sleep_ms(50); sleep_ms(50);
gpio_put(LED_PIN, 1); gpio_put(LED_PIN, 1);
if(gpio_get(LIMIT1_PIN)) {
gpio_put(RGB1_B_PIN, 0);
} else {
gpio_put(RGB1_B_PIN, 1);
} }
if(gpio_get(LIMIT3_PIN)) {
gpio_put(RGB1_G_PIN, 0);
} else {
gpio_put(RGB1_G_PIN, 1);
}
if(gpio_get(LIMIT0_PIN)) {
gpio_put(RGB2_B_PIN, 0);
} else {
gpio_put(RGB2_B_PIN, 1);
}
if(gpio_get(LIMIT2_PIN)) {
gpio_put(RGB2_G_PIN, 0);
} else {
gpio_put(RGB2_G_PIN, 1);
}
}
*/
return 0; return 0;
} }

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521_hardware_interface

View File

@@ -0,0 +1 @@
*.kicad_sch filter=lfs diff=lfs merge=lfs -text

BIN
motor-control/motor-driver-breakout-v2/.gitignore (Stored with Git LFS) vendored Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
(fp_lib_table
(version 7)
(lib (name "MCU_RaspberryPi_and_Boards")(type "KiCad")(uri "${KIPRJMOD}/external/KiCad-RP-Pico/RP-Pico Libraries/MCU_RaspberryPi_and_Boards.pretty")(options "")(descr ""))
(lib (name "tmc2209")(type "KiCad")(uri "/home/alexander/Projects/gobot/motor-control/motor-driver-breakout/external_kicad_liberies/tmc2209")(options "")(descr ""))
)

View File

@@ -0,0 +1,23 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.200000*%
%TD*%
G04 APERTURE END LIST*
D10*
X33782000Y-25908000D02*
X94996000Y-25908000D01*
X94996000Y-102616000D01*
X33782000Y-102616000D01*
X33782000Y-25908000D01*
M02*

View File

@@ -0,0 +1,318 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10C,3.200000*%
%ADD11R,1.700000X1.700000*%
%ADD12O,1.700000X1.700000*%
%ADD13C,1.600000*%
%ADD14C,1.712000*%
%ADD15RoundRect,0.102000X-0.754000X-0.754000X0.754000X-0.754000X0.754000X0.754000X-0.754000X0.754000X0*%
%ADD16R,2.000000X1.905000*%
%ADD17O,2.000000X1.905000*%
%ADD18RoundRect,0.250000X-0.650000X0.412500X-0.650000X-0.412500X0.650000X-0.412500X0.650000X0.412500X0*%
%ADD19RoundRect,0.250000X-0.625000X0.400000X-0.625000X-0.400000X0.625000X-0.400000X0.625000X0.400000X0*%
%ADD20R,3.000000X3.000000*%
%ADD21C,3.000000*%
%ADD22O,1.800000X1.800000*%
%ADD23O,1.500000X1.500000*%
%ADD24RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*%
%ADD25RoundRect,0.250000X0.650000X-0.412500X0.650000X0.412500X-0.650000X0.412500X-0.650000X-0.412500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,H4*%
X91000000Y-98500000D03*
%TD*%
%TO.C,H3*%
X91000000Y-30000000D03*
%TD*%
%TO.C,H2*%
X38000000Y-98500000D03*
%TD*%
%TO.C,H1*%
X38000000Y-30000000D03*
%TD*%
D11*
%TO.C,J7*%
X58166000Y-94234000D03*
D12*
X58166000Y-96774000D03*
X60706000Y-94234000D03*
X60706000Y-96774000D03*
X63246000Y-94234000D03*
X63246000Y-96774000D03*
X65786000Y-94234000D03*
X65786000Y-96774000D03*
%TD*%
D13*
%TO.C,C3*%
X77248000Y-37084000D03*
X79248000Y-37084000D03*
%TD*%
D14*
%TO.C,U1*%
X47156000Y-87270272D03*
X49696000Y-87270272D03*
X39536000Y-87270272D03*
X39536000Y-84730272D03*
X39536000Y-82190272D03*
X39536000Y-79650272D03*
X39536000Y-77110272D03*
X39536000Y-74570272D03*
X39536000Y-72030272D03*
D15*
X39536000Y-69490272D03*
D14*
X52236000Y-87270272D03*
X52236000Y-84730272D03*
X52236000Y-82190272D03*
X52236000Y-79650272D03*
X52236000Y-77110272D03*
X52236000Y-74570272D03*
X52236000Y-72030272D03*
X52236000Y-69490272D03*
%TD*%
D11*
%TO.C,M1*%
X35980000Y-74824272D03*
D12*
X35980000Y-77364272D03*
X35980000Y-79904272D03*
X35980000Y-82444272D03*
%TD*%
D13*
%TO.C,C11*%
X39298000Y-91842272D03*
X41298000Y-91842272D03*
%TD*%
%TO.C,C9*%
X52578000Y-92572272D03*
X52578000Y-90572272D03*
%TD*%
D16*
%TO.C,U5*%
X86614000Y-36576000D03*
D17*
X86614000Y-39116000D03*
X86614000Y-41656000D03*
%TD*%
D12*
%TO.C,J6*%
X85598000Y-88646000D03*
X85598000Y-86106000D03*
X85598000Y-83566000D03*
X85598000Y-81026000D03*
X85598000Y-78486000D03*
X85598000Y-75946000D03*
D11*
X85598000Y-73406000D03*
%TD*%
D13*
%TO.C,C7*%
X92202000Y-90456000D03*
X92202000Y-92456000D03*
%TD*%
D14*
%TO.C,U2*%
X49994000Y-58844272D03*
X47454000Y-58844272D03*
X52534000Y-58844272D03*
X52534000Y-56304272D03*
X52534000Y-53764272D03*
X52534000Y-51224272D03*
X52534000Y-48684272D03*
X52534000Y-46144272D03*
X52534000Y-43604272D03*
X52534000Y-41064272D03*
X39834000Y-58844272D03*
X39834000Y-56304272D03*
X39834000Y-53764272D03*
X39834000Y-51224272D03*
X39834000Y-48684272D03*
X39834000Y-46144272D03*
X39834000Y-43604272D03*
D15*
X39834000Y-41064272D03*
%TD*%
D18*
%TO.C,C1*%
X89154000Y-35267500D03*
X89154000Y-38392500D03*
%TD*%
D19*
%TO.C,R6*%
X82550000Y-77190000D03*
X82550000Y-80290000D03*
%TD*%
D11*
%TO.C,JP1*%
X86614000Y-46482000D03*
D12*
X89154000Y-46482000D03*
%TD*%
D11*
%TO.C,JP2*%
X55626000Y-34793000D03*
D12*
X55626000Y-37333000D03*
%TD*%
D11*
%TO.C,M0*%
X36278000Y-46398272D03*
D12*
X36278000Y-48938272D03*
X36278000Y-51478272D03*
X36278000Y-54018272D03*
%TD*%
D13*
%TO.C,C15*%
X41596000Y-63416272D03*
X39596000Y-63416272D03*
%TD*%
%TO.C,C13*%
X53086000Y-64146272D03*
X53086000Y-62146272D03*
%TD*%
D20*
%TO.C,J4*%
X88646000Y-66548000D03*
D21*
X88646000Y-61468000D03*
X88646000Y-56388000D03*
X88646000Y-51308000D03*
%TD*%
D20*
%TO.C,J5*%
X50800000Y-35052000D03*
D21*
X45720000Y-35052000D03*
%TD*%
D13*
%TO.C,C5*%
X59722000Y-37084000D03*
X61722000Y-37084000D03*
%TD*%
D12*
%TO.C,U3*%
X72136000Y-89828000D03*
D11*
X69596000Y-89828000D03*
D12*
X67056000Y-89828000D03*
X78486000Y-41798000D03*
X78486000Y-44338000D03*
D11*
X78486000Y-46878000D03*
D12*
X78486000Y-49418000D03*
X78486000Y-51958000D03*
X78486000Y-54498000D03*
X78486000Y-57038000D03*
D11*
X78486000Y-59578000D03*
D12*
X78486000Y-62118000D03*
X78486000Y-64658000D03*
X78486000Y-67198000D03*
X78486000Y-69738000D03*
D11*
X78486000Y-72278000D03*
D12*
X78486000Y-74818000D03*
X78486000Y-77358000D03*
X78486000Y-79898000D03*
X78486000Y-82438000D03*
D11*
X78486000Y-84978000D03*
D12*
X78486000Y-87518000D03*
X78486000Y-90058000D03*
X60706000Y-90058000D03*
X60706000Y-87518000D03*
D11*
X60706000Y-84978000D03*
D12*
X60706000Y-82438000D03*
X60706000Y-79898000D03*
X60706000Y-77358000D03*
X60706000Y-74818000D03*
D11*
X60706000Y-72278000D03*
D12*
X60706000Y-69738000D03*
X60706000Y-67198000D03*
X60706000Y-64658000D03*
X60706000Y-62118000D03*
D11*
X60706000Y-59578000D03*
D12*
X60706000Y-57038000D03*
X60706000Y-54498000D03*
X60706000Y-51958000D03*
X60706000Y-49418000D03*
D11*
X60706000Y-46878000D03*
D12*
X60706000Y-44338000D03*
X60706000Y-41798000D03*
D22*
X72321000Y-41928000D03*
D23*
X72021000Y-44958000D03*
X67171000Y-44958000D03*
D22*
X66871000Y-41928000D03*
%TD*%
D19*
%TO.C,R3*%
X82550000Y-82244000D03*
X82550000Y-85344000D03*
%TD*%
D24*
%TO.C,C8*%
X84797500Y-92202000D03*
X87922500Y-92202000D03*
%TD*%
D19*
%TO.C,R4*%
X82550000Y-87350000D03*
X82550000Y-90450000D03*
%TD*%
D25*
%TO.C,C2*%
X89154000Y-43472500D03*
X89154000Y-40347500D03*
%TD*%
D19*
%TO.C,R5*%
X82550000Y-72110000D03*
X82550000Y-75210000D03*
%TD*%
M02*

View File

@@ -0,0 +1,469 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10C,3.200000*%
%ADD11R,1.700000X1.700000*%
%ADD12O,1.700000X1.700000*%
%ADD13C,1.600000*%
%ADD14C,1.712000*%
%ADD15RoundRect,0.102000X-0.754000X-0.754000X0.754000X-0.754000X0.754000X0.754000X-0.754000X0.754000X0*%
%ADD16RoundRect,0.250000X0.650000X-0.412500X0.650000X0.412500X-0.650000X0.412500X-0.650000X-0.412500X0*%
%ADD17R,2.000000X1.905000*%
%ADD18O,2.000000X1.905000*%
%ADD19RoundRect,0.250000X0.625000X-0.400000X0.625000X0.400000X-0.625000X0.400000X-0.625000X-0.400000X0*%
%ADD20RoundRect,0.250000X-0.650000X0.412500X-0.650000X-0.412500X0.650000X-0.412500X0.650000X0.412500X0*%
%ADD21RoundRect,0.250001X0.624999X-0.462499X0.624999X0.462499X-0.624999X0.462499X-0.624999X-0.462499X0*%
%ADD22RoundRect,0.250000X0.400000X0.625000X-0.400000X0.625000X-0.400000X-0.625000X0.400000X-0.625000X0*%
%ADD23R,3.000000X3.000000*%
%ADD24C,3.000000*%
%ADD25RoundRect,0.250001X0.462499X0.624999X-0.462499X0.624999X-0.462499X-0.624999X0.462499X-0.624999X0*%
%ADD26R,1.700000X3.500000*%
%ADD27R,3.500000X1.700000*%
%ADD28O,1.800000X1.800000*%
%ADD29O,1.500000X1.500000*%
G04 APERTURE END LIST*
D10*
%TO.C,H4*%
X91000000Y-98500000D03*
%TD*%
%TO.C,H3*%
X91000000Y-30000000D03*
%TD*%
%TO.C,H2*%
X38000000Y-98500000D03*
%TD*%
%TO.C,H1*%
X38000000Y-30000000D03*
%TD*%
D11*
%TO.C,J7*%
X58166000Y-94234000D03*
D12*
X58166000Y-96774000D03*
X60706000Y-94234000D03*
X60706000Y-96774000D03*
X63246000Y-94234000D03*
X63246000Y-96774000D03*
X65786000Y-94234000D03*
X65786000Y-96774000D03*
%TD*%
D13*
%TO.C,C3*%
X77248000Y-37084000D03*
X79248000Y-37084000D03*
%TD*%
D14*
%TO.C,U1*%
X47156000Y-87270272D03*
X49696000Y-87270272D03*
X39536000Y-87270272D03*
X39536000Y-84730272D03*
X39536000Y-82190272D03*
X39536000Y-79650272D03*
X39536000Y-77110272D03*
X39536000Y-74570272D03*
X39536000Y-72030272D03*
D15*
X39536000Y-69490272D03*
D14*
X52236000Y-87270272D03*
X52236000Y-84730272D03*
X52236000Y-82190272D03*
X52236000Y-79650272D03*
X52236000Y-77110272D03*
X52236000Y-74570272D03*
X52236000Y-72030272D03*
X52236000Y-69490272D03*
%TD*%
D11*
%TO.C,M1*%
X35980000Y-74824272D03*
D12*
X35980000Y-77364272D03*
X35980000Y-79904272D03*
X35980000Y-82444272D03*
%TD*%
D16*
%TO.C,C12*%
X44616000Y-92935272D03*
X44616000Y-89810272D03*
%TD*%
D13*
%TO.C,C11*%
X39298000Y-91842272D03*
X41298000Y-91842272D03*
%TD*%
D16*
%TO.C,C10*%
X48514000Y-93150772D03*
X48514000Y-90025772D03*
%TD*%
D13*
%TO.C,C9*%
X52578000Y-92572272D03*
X52578000Y-90572272D03*
%TD*%
D17*
%TO.C,U5*%
X86614000Y-36576000D03*
D18*
X86614000Y-39116000D03*
X86614000Y-41656000D03*
%TD*%
D19*
%TO.C,R7*%
X93472000Y-76226000D03*
X93472000Y-73126000D03*
%TD*%
D12*
%TO.C,J6*%
X85598000Y-88646000D03*
X85598000Y-86106000D03*
X85598000Y-83566000D03*
X85598000Y-81026000D03*
X85598000Y-78486000D03*
X85598000Y-75946000D03*
D11*
X85598000Y-73406000D03*
%TD*%
D13*
%TO.C,C7*%
X92202000Y-90456000D03*
X92202000Y-92456000D03*
%TD*%
D16*
%TO.C,C14*%
X48768000Y-65062500D03*
X48768000Y-61937500D03*
%TD*%
D14*
%TO.C,U2*%
X49994000Y-58844272D03*
X47454000Y-58844272D03*
X52534000Y-58844272D03*
X52534000Y-56304272D03*
X52534000Y-53764272D03*
X52534000Y-51224272D03*
X52534000Y-48684272D03*
X52534000Y-46144272D03*
X52534000Y-43604272D03*
X52534000Y-41064272D03*
X39834000Y-58844272D03*
X39834000Y-56304272D03*
X39834000Y-53764272D03*
X39834000Y-51224272D03*
X39834000Y-48684272D03*
X39834000Y-46144272D03*
X39834000Y-43604272D03*
D15*
X39834000Y-41064272D03*
%TD*%
D20*
%TO.C,C4*%
X74168000Y-35775500D03*
X74168000Y-38900500D03*
%TD*%
D11*
%TO.C,JP1*%
X86614000Y-46482000D03*
D12*
X89154000Y-46482000D03*
%TD*%
D11*
%TO.C,JP2*%
X55626000Y-34793000D03*
D12*
X55626000Y-37333000D03*
%TD*%
D20*
%TO.C,C6*%
X64770000Y-35775500D03*
X64770000Y-38900500D03*
%TD*%
D11*
%TO.C,M0*%
X36278000Y-46398272D03*
D12*
X36278000Y-48938272D03*
X36278000Y-51478272D03*
X36278000Y-54018272D03*
%TD*%
D13*
%TO.C,C15*%
X41596000Y-63416272D03*
X39596000Y-63416272D03*
%TD*%
D16*
%TO.C,C16*%
X44914000Y-64509272D03*
X44914000Y-61384272D03*
%TD*%
D19*
%TO.C,R1*%
X70104000Y-93954000D03*
X70104000Y-97054000D03*
%TD*%
D21*
%TO.C,D1*%
X73914000Y-94016500D03*
X73914000Y-96991500D03*
%TD*%
D22*
%TO.C,R8*%
X64034000Y-29718000D03*
X60934000Y-29718000D03*
%TD*%
D21*
%TO.C,D2*%
X77724000Y-96737500D03*
X77724000Y-93762500D03*
%TD*%
D13*
%TO.C,C13*%
X53086000Y-64146272D03*
X53086000Y-62146272D03*
%TD*%
D23*
%TO.C,J4*%
X88646000Y-66548000D03*
D24*
X88646000Y-61468000D03*
X88646000Y-56388000D03*
X88646000Y-51308000D03*
%TD*%
D25*
%TO.C,D3*%
X90460500Y-70612000D03*
X93435500Y-70612000D03*
%TD*%
D23*
%TO.C,J5*%
X50800000Y-35052000D03*
D24*
X45720000Y-35052000D03*
%TD*%
D19*
%TO.C,R2*%
X81534000Y-96800000D03*
X81534000Y-93700000D03*
%TD*%
D13*
%TO.C,C5*%
X59722000Y-37084000D03*
X61722000Y-37084000D03*
%TD*%
D26*
%TO.C,U3*%
X72136000Y-90728000D03*
D12*
X72136000Y-89828000D03*
D26*
X69596000Y-90728000D03*
D11*
X69596000Y-89828000D03*
D26*
X67056000Y-90728000D03*
D12*
X67056000Y-89828000D03*
D27*
X79386000Y-41798000D03*
D12*
X78486000Y-41798000D03*
D27*
X79386000Y-44338000D03*
D12*
X78486000Y-44338000D03*
D27*
X79386000Y-46878000D03*
D11*
X78486000Y-46878000D03*
D27*
X79386000Y-49418000D03*
D12*
X78486000Y-49418000D03*
D27*
X79386000Y-51958000D03*
D12*
X78486000Y-51958000D03*
D27*
X79386000Y-54498000D03*
D12*
X78486000Y-54498000D03*
D27*
X79386000Y-57038000D03*
D12*
X78486000Y-57038000D03*
D27*
X79386000Y-59578000D03*
D11*
X78486000Y-59578000D03*
D27*
X79386000Y-62118000D03*
D12*
X78486000Y-62118000D03*
D27*
X79386000Y-64658000D03*
D12*
X78486000Y-64658000D03*
D27*
X79386000Y-67198000D03*
D12*
X78486000Y-67198000D03*
D27*
X79386000Y-69738000D03*
D12*
X78486000Y-69738000D03*
D27*
X79386000Y-72278000D03*
D11*
X78486000Y-72278000D03*
D27*
X79386000Y-74818000D03*
D12*
X78486000Y-74818000D03*
D27*
X79386000Y-77358000D03*
D12*
X78486000Y-77358000D03*
D27*
X79386000Y-79898000D03*
D12*
X78486000Y-79898000D03*
D27*
X79386000Y-82438000D03*
D12*
X78486000Y-82438000D03*
D27*
X79386000Y-84978000D03*
D11*
X78486000Y-84978000D03*
D27*
X79386000Y-87518000D03*
D12*
X78486000Y-87518000D03*
D27*
X79386000Y-90058000D03*
D12*
X78486000Y-90058000D03*
D27*
X59806000Y-90058000D03*
D12*
X60706000Y-90058000D03*
D27*
X59806000Y-87518000D03*
D12*
X60706000Y-87518000D03*
D27*
X59806000Y-84978000D03*
D11*
X60706000Y-84978000D03*
D27*
X59806000Y-82438000D03*
D12*
X60706000Y-82438000D03*
D27*
X59806000Y-79898000D03*
D12*
X60706000Y-79898000D03*
D27*
X59806000Y-77358000D03*
D12*
X60706000Y-77358000D03*
D27*
X59806000Y-74818000D03*
D12*
X60706000Y-74818000D03*
D27*
X59806000Y-72278000D03*
D11*
X60706000Y-72278000D03*
D27*
X59806000Y-69738000D03*
D12*
X60706000Y-69738000D03*
D27*
X59806000Y-67198000D03*
D12*
X60706000Y-67198000D03*
D27*
X59806000Y-64658000D03*
D12*
X60706000Y-64658000D03*
D27*
X59806000Y-62118000D03*
D12*
X60706000Y-62118000D03*
D27*
X59806000Y-59578000D03*
D11*
X60706000Y-59578000D03*
D27*
X59806000Y-57038000D03*
D12*
X60706000Y-57038000D03*
D27*
X59806000Y-54498000D03*
D12*
X60706000Y-54498000D03*
D27*
X59806000Y-51958000D03*
D12*
X60706000Y-51958000D03*
D27*
X59806000Y-49418000D03*
D12*
X60706000Y-49418000D03*
D27*
X59806000Y-46878000D03*
D11*
X60706000Y-46878000D03*
D27*
X59806000Y-44338000D03*
D12*
X60706000Y-44338000D03*
D27*
X59806000Y-41798000D03*
D12*
X60706000Y-41798000D03*
D28*
X72321000Y-41928000D03*
D29*
X72021000Y-44958000D03*
X67171000Y-44958000D03*
D28*
X66871000Y-41928000D03*
%TD*%
D25*
%TO.C,D4*%
X58855000Y-29718000D03*
X55880000Y-29718000D03*
%TD*%
M02*

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,71 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.250000X-0.650000X0.412500X-0.650000X-0.412500X0.650000X-0.412500X0.650000X0.412500X0*%
%ADD11RoundRect,0.250000X-0.625000X0.400000X-0.625000X-0.400000X0.625000X-0.400000X0.625000X0.400000X0*%
%ADD12RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*%
%ADD13RoundRect,0.250000X0.650000X-0.412500X0.650000X0.412500X-0.650000X0.412500X-0.650000X-0.412500X0*%
G04 APERTURE END LIST*
D10*
%TO.C,C1*%
X89154000Y-35267500D03*
X89154000Y-38392500D03*
%TD*%
D11*
%TO.C,R6*%
X82550000Y-77190000D03*
X82550000Y-80290000D03*
%TD*%
%TO.C,R3*%
X82550000Y-82244000D03*
X82550000Y-85344000D03*
%TD*%
D12*
%TO.C,C8*%
X84797500Y-92202000D03*
X87922500Y-92202000D03*
%TD*%
D11*
%TO.C,R4*%
X82550000Y-87350000D03*
X82550000Y-90450000D03*
%TD*%
D13*
%TO.C,C2*%
X89154000Y-43472500D03*
X89154000Y-40347500D03*
%TD*%
D11*
%TO.C,R5*%
X82550000Y-72110000D03*
X82550000Y-75210000D03*
%TD*%
M02*

View File

@@ -0,0 +1,585 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10C,0.150000*%
%ADD11RoundRect,0.250000X0.650000X-0.412500X0.650000X0.412500X-0.650000X0.412500X-0.650000X-0.412500X0*%
%ADD12RoundRect,0.250000X0.625000X-0.400000X0.625000X0.400000X-0.625000X0.400000X-0.625000X-0.400000X0*%
%ADD13RoundRect,0.250000X-0.650000X0.412500X-0.650000X-0.412500X0.650000X-0.412500X0.650000X0.412500X0*%
%ADD14RoundRect,0.250001X0.624999X-0.462499X0.624999X0.462499X-0.624999X0.462499X-0.624999X-0.462499X0*%
%ADD15RoundRect,0.250000X0.400000X0.625000X-0.400000X0.625000X-0.400000X-0.625000X0.400000X-0.625000X0*%
%ADD16RoundRect,0.250001X0.462499X0.624999X-0.462499X0.624999X-0.462499X-0.624999X0.462499X-0.624999X0*%
G04 APERTURE END LIST*
D10*
X25736820Y-68928665D02*
X25736820Y-68261999D01*
X25736820Y-68261999D02*
X26736820Y-68690570D01*
X25736820Y-67452475D02*
X25736820Y-67642951D01*
X25736820Y-67642951D02*
X25784439Y-67738189D01*
X25784439Y-67738189D02*
X25832058Y-67785808D01*
X25832058Y-67785808D02*
X25974915Y-67881046D01*
X25974915Y-67881046D02*
X26165391Y-67928665D01*
X26165391Y-67928665D02*
X26546343Y-67928665D01*
X26546343Y-67928665D02*
X26641581Y-67881046D01*
X26641581Y-67881046D02*
X26689201Y-67833427D01*
X26689201Y-67833427D02*
X26736820Y-67738189D01*
X26736820Y-67738189D02*
X26736820Y-67547713D01*
X26736820Y-67547713D02*
X26689201Y-67452475D01*
X26689201Y-67452475D02*
X26641581Y-67404856D01*
X26641581Y-67404856D02*
X26546343Y-67357237D01*
X26546343Y-67357237D02*
X26308248Y-67357237D01*
X26308248Y-67357237D02*
X26213010Y-67404856D01*
X26213010Y-67404856D02*
X26165391Y-67452475D01*
X26165391Y-67452475D02*
X26117772Y-67547713D01*
X26117772Y-67547713D02*
X26117772Y-67738189D01*
X26117772Y-67738189D02*
X26165391Y-67833427D01*
X26165391Y-67833427D02*
X26213010Y-67881046D01*
X26213010Y-67881046D02*
X26308248Y-67928665D01*
X26641581Y-66928665D02*
X26689201Y-66881046D01*
X26689201Y-66881046D02*
X26736820Y-66928665D01*
X26736820Y-66928665D02*
X26689201Y-66976284D01*
X26689201Y-66976284D02*
X26641581Y-66928665D01*
X26641581Y-66928665D02*
X26736820Y-66928665D01*
X25736820Y-66547713D02*
X25736820Y-65881047D01*
X25736820Y-65881047D02*
X26736820Y-66309618D01*
X25736820Y-65309618D02*
X25736820Y-65214380D01*
X25736820Y-65214380D02*
X25784439Y-65119142D01*
X25784439Y-65119142D02*
X25832058Y-65071523D01*
X25832058Y-65071523D02*
X25927296Y-65023904D01*
X25927296Y-65023904D02*
X26117772Y-64976285D01*
X26117772Y-64976285D02*
X26355867Y-64976285D01*
X26355867Y-64976285D02*
X26546343Y-65023904D01*
X26546343Y-65023904D02*
X26641581Y-65071523D01*
X26641581Y-65071523D02*
X26689201Y-65119142D01*
X26689201Y-65119142D02*
X26736820Y-65214380D01*
X26736820Y-65214380D02*
X26736820Y-65309618D01*
X26736820Y-65309618D02*
X26689201Y-65404856D01*
X26689201Y-65404856D02*
X26641581Y-65452475D01*
X26641581Y-65452475D02*
X26546343Y-65500094D01*
X26546343Y-65500094D02*
X26355867Y-65547713D01*
X26355867Y-65547713D02*
X26117772Y-65547713D01*
X26117772Y-65547713D02*
X25927296Y-65500094D01*
X25927296Y-65500094D02*
X25832058Y-65452475D01*
X25832058Y-65452475D02*
X25784439Y-65404856D01*
X25784439Y-65404856D02*
X25736820Y-65309618D01*
X26165391Y-64404856D02*
X26117772Y-64500094D01*
X26117772Y-64500094D02*
X26070153Y-64547713D01*
X26070153Y-64547713D02*
X25974915Y-64595332D01*
X25974915Y-64595332D02*
X25927296Y-64595332D01*
X25927296Y-64595332D02*
X25832058Y-64547713D01*
X25832058Y-64547713D02*
X25784439Y-64500094D01*
X25784439Y-64500094D02*
X25736820Y-64404856D01*
X25736820Y-64404856D02*
X25736820Y-64214380D01*
X25736820Y-64214380D02*
X25784439Y-64119142D01*
X25784439Y-64119142D02*
X25832058Y-64071523D01*
X25832058Y-64071523D02*
X25927296Y-64023904D01*
X25927296Y-64023904D02*
X25974915Y-64023904D01*
X25974915Y-64023904D02*
X26070153Y-64071523D01*
X26070153Y-64071523D02*
X26117772Y-64119142D01*
X26117772Y-64119142D02*
X26165391Y-64214380D01*
X26165391Y-64214380D02*
X26165391Y-64404856D01*
X26165391Y-64404856D02*
X26213010Y-64500094D01*
X26213010Y-64500094D02*
X26260629Y-64547713D01*
X26260629Y-64547713D02*
X26355867Y-64595332D01*
X26355867Y-64595332D02*
X26546343Y-64595332D01*
X26546343Y-64595332D02*
X26641581Y-64547713D01*
X26641581Y-64547713D02*
X26689201Y-64500094D01*
X26689201Y-64500094D02*
X26736820Y-64404856D01*
X26736820Y-64404856D02*
X26736820Y-64214380D01*
X26736820Y-64214380D02*
X26689201Y-64119142D01*
X26689201Y-64119142D02*
X26641581Y-64071523D01*
X26641581Y-64071523D02*
X26546343Y-64023904D01*
X26546343Y-64023904D02*
X26355867Y-64023904D01*
X26355867Y-64023904D02*
X26260629Y-64071523D01*
X26260629Y-64071523D02*
X26213010Y-64119142D01*
X26213010Y-64119142D02*
X26165391Y-64214380D01*
X25736820Y-63404856D02*
X25736820Y-63309618D01*
X25736820Y-63309618D02*
X25784439Y-63214380D01*
X25784439Y-63214380D02*
X25832058Y-63166761D01*
X25832058Y-63166761D02*
X25927296Y-63119142D01*
X25927296Y-63119142D02*
X26117772Y-63071523D01*
X26117772Y-63071523D02*
X26355867Y-63071523D01*
X26355867Y-63071523D02*
X26546343Y-63119142D01*
X26546343Y-63119142D02*
X26641581Y-63166761D01*
X26641581Y-63166761D02*
X26689201Y-63214380D01*
X26689201Y-63214380D02*
X26736820Y-63309618D01*
X26736820Y-63309618D02*
X26736820Y-63404856D01*
X26736820Y-63404856D02*
X26689201Y-63500094D01*
X26689201Y-63500094D02*
X26641581Y-63547713D01*
X26641581Y-63547713D02*
X26546343Y-63595332D01*
X26546343Y-63595332D02*
X26355867Y-63642951D01*
X26355867Y-63642951D02*
X26117772Y-63642951D01*
X26117772Y-63642951D02*
X25927296Y-63595332D01*
X25927296Y-63595332D02*
X25832058Y-63547713D01*
X25832058Y-63547713D02*
X25784439Y-63500094D01*
X25784439Y-63500094D02*
X25736820Y-63404856D01*
X26736820Y-61881046D02*
X26070153Y-61881046D01*
X26165391Y-61881046D02*
X26117772Y-61833427D01*
X26117772Y-61833427D02*
X26070153Y-61738189D01*
X26070153Y-61738189D02*
X26070153Y-61595332D01*
X26070153Y-61595332D02*
X26117772Y-61500094D01*
X26117772Y-61500094D02*
X26213010Y-61452475D01*
X26213010Y-61452475D02*
X26736820Y-61452475D01*
X26213010Y-61452475D02*
X26117772Y-61404856D01*
X26117772Y-61404856D02*
X26070153Y-61309618D01*
X26070153Y-61309618D02*
X26070153Y-61166761D01*
X26070153Y-61166761D02*
X26117772Y-61071522D01*
X26117772Y-61071522D02*
X26213010Y-61023903D01*
X26213010Y-61023903D02*
X26736820Y-61023903D01*
X26736820Y-60547713D02*
X26070153Y-60547713D01*
X26165391Y-60547713D02*
X26117772Y-60500094D01*
X26117772Y-60500094D02*
X26070153Y-60404856D01*
X26070153Y-60404856D02*
X26070153Y-60261999D01*
X26070153Y-60261999D02*
X26117772Y-60166761D01*
X26117772Y-60166761D02*
X26213010Y-60119142D01*
X26213010Y-60119142D02*
X26736820Y-60119142D01*
X26213010Y-60119142D02*
X26117772Y-60071523D01*
X26117772Y-60071523D02*
X26070153Y-59976285D01*
X26070153Y-59976285D02*
X26070153Y-59833428D01*
X26070153Y-59833428D02*
X26117772Y-59738189D01*
X26117772Y-59738189D02*
X26213010Y-59690570D01*
X26213010Y-59690570D02*
X26736820Y-59690570D01*
X33282000Y-25908000D02*
X26845581Y-25908000D01*
X33282000Y-102616000D02*
X26845581Y-102616000D01*
X27432001Y-25908000D02*
X27432001Y-102616000D01*
X27432001Y-25908000D02*
X27432001Y-102616000D01*
X27432001Y-25908000D02*
X28018422Y-27034504D01*
X27432001Y-25908000D02*
X26845580Y-27034504D01*
X27432001Y-102616000D02*
X26845580Y-101489496D01*
X27432001Y-102616000D02*
X28018422Y-101489496D01*
X60246143Y-17354820D02*
X60055667Y-17354820D01*
X60055667Y-17354820D02*
X59960429Y-17402439D01*
X59960429Y-17402439D02*
X59912810Y-17450058D01*
X59912810Y-17450058D02*
X59817572Y-17592915D01*
X59817572Y-17592915D02*
X59769953Y-17783391D01*
X59769953Y-17783391D02*
X59769953Y-18164343D01*
X59769953Y-18164343D02*
X59817572Y-18259581D01*
X59817572Y-18259581D02*
X59865191Y-18307201D01*
X59865191Y-18307201D02*
X59960429Y-18354820D01*
X59960429Y-18354820D02*
X60150905Y-18354820D01*
X60150905Y-18354820D02*
X60246143Y-18307201D01*
X60246143Y-18307201D02*
X60293762Y-18259581D01*
X60293762Y-18259581D02*
X60341381Y-18164343D01*
X60341381Y-18164343D02*
X60341381Y-17926248D01*
X60341381Y-17926248D02*
X60293762Y-17831010D01*
X60293762Y-17831010D02*
X60246143Y-17783391D01*
X60246143Y-17783391D02*
X60150905Y-17735772D01*
X60150905Y-17735772D02*
X59960429Y-17735772D01*
X59960429Y-17735772D02*
X59865191Y-17783391D01*
X59865191Y-17783391D02*
X59817572Y-17831010D01*
X59817572Y-17831010D02*
X59769953Y-17926248D01*
X61293762Y-18354820D02*
X60722334Y-18354820D01*
X61008048Y-18354820D02*
X61008048Y-17354820D01*
X61008048Y-17354820D02*
X60912810Y-17497677D01*
X60912810Y-17497677D02*
X60817572Y-17592915D01*
X60817572Y-17592915D02*
X60722334Y-17640534D01*
X61722334Y-18259581D02*
X61769953Y-18307201D01*
X61769953Y-18307201D02*
X61722334Y-18354820D01*
X61722334Y-18354820D02*
X61674715Y-18307201D01*
X61674715Y-18307201D02*
X61722334Y-18259581D01*
X61722334Y-18259581D02*
X61722334Y-18354820D01*
X62150905Y-17450058D02*
X62198524Y-17402439D01*
X62198524Y-17402439D02*
X62293762Y-17354820D01*
X62293762Y-17354820D02*
X62531857Y-17354820D01*
X62531857Y-17354820D02*
X62627095Y-17402439D01*
X62627095Y-17402439D02*
X62674714Y-17450058D01*
X62674714Y-17450058D02*
X62722333Y-17545296D01*
X62722333Y-17545296D02*
X62722333Y-17640534D01*
X62722333Y-17640534D02*
X62674714Y-17783391D01*
X62674714Y-17783391D02*
X62103286Y-18354820D01*
X62103286Y-18354820D02*
X62722333Y-18354820D01*
X63674714Y-18354820D02*
X63103286Y-18354820D01*
X63389000Y-18354820D02*
X63389000Y-17354820D01*
X63389000Y-17354820D02*
X63293762Y-17497677D01*
X63293762Y-17497677D02*
X63198524Y-17592915D01*
X63198524Y-17592915D02*
X63103286Y-17640534D01*
X64531857Y-17688153D02*
X64531857Y-18354820D01*
X64293762Y-17307201D02*
X64055667Y-18021486D01*
X64055667Y-18021486D02*
X64674714Y-18021486D01*
X65246143Y-17354820D02*
X65341381Y-17354820D01*
X65341381Y-17354820D02*
X65436619Y-17402439D01*
X65436619Y-17402439D02*
X65484238Y-17450058D01*
X65484238Y-17450058D02*
X65531857Y-17545296D01*
X65531857Y-17545296D02*
X65579476Y-17735772D01*
X65579476Y-17735772D02*
X65579476Y-17973867D01*
X65579476Y-17973867D02*
X65531857Y-18164343D01*
X65531857Y-18164343D02*
X65484238Y-18259581D01*
X65484238Y-18259581D02*
X65436619Y-18307201D01*
X65436619Y-18307201D02*
X65341381Y-18354820D01*
X65341381Y-18354820D02*
X65246143Y-18354820D01*
X65246143Y-18354820D02*
X65150905Y-18307201D01*
X65150905Y-18307201D02*
X65103286Y-18259581D01*
X65103286Y-18259581D02*
X65055667Y-18164343D01*
X65055667Y-18164343D02*
X65008048Y-17973867D01*
X65008048Y-17973867D02*
X65008048Y-17735772D01*
X65008048Y-17735772D02*
X65055667Y-17545296D01*
X65055667Y-17545296D02*
X65103286Y-17450058D01*
X65103286Y-17450058D02*
X65150905Y-17402439D01*
X65150905Y-17402439D02*
X65246143Y-17354820D01*
X66769953Y-18354820D02*
X66769953Y-17688153D01*
X66769953Y-17783391D02*
X66817572Y-17735772D01*
X66817572Y-17735772D02*
X66912810Y-17688153D01*
X66912810Y-17688153D02*
X67055667Y-17688153D01*
X67055667Y-17688153D02*
X67150905Y-17735772D01*
X67150905Y-17735772D02*
X67198524Y-17831010D01*
X67198524Y-17831010D02*
X67198524Y-18354820D01*
X67198524Y-17831010D02*
X67246143Y-17735772D01*
X67246143Y-17735772D02*
X67341381Y-17688153D01*
X67341381Y-17688153D02*
X67484238Y-17688153D01*
X67484238Y-17688153D02*
X67579477Y-17735772D01*
X67579477Y-17735772D02*
X67627096Y-17831010D01*
X67627096Y-17831010D02*
X67627096Y-18354820D01*
X68103286Y-18354820D02*
X68103286Y-17688153D01*
X68103286Y-17783391D02*
X68150905Y-17735772D01*
X68150905Y-17735772D02*
X68246143Y-17688153D01*
X68246143Y-17688153D02*
X68389000Y-17688153D01*
X68389000Y-17688153D02*
X68484238Y-17735772D01*
X68484238Y-17735772D02*
X68531857Y-17831010D01*
X68531857Y-17831010D02*
X68531857Y-18354820D01*
X68531857Y-17831010D02*
X68579476Y-17735772D01*
X68579476Y-17735772D02*
X68674714Y-17688153D01*
X68674714Y-17688153D02*
X68817571Y-17688153D01*
X68817571Y-17688153D02*
X68912810Y-17735772D01*
X68912810Y-17735772D02*
X68960429Y-17831010D01*
X68960429Y-17831010D02*
X68960429Y-18354820D01*
X94996000Y-25408000D02*
X94996000Y-18463581D01*
X33782000Y-25408000D02*
X33782000Y-18463581D01*
X94996000Y-19050001D02*
X33782000Y-19050001D01*
X94996000Y-19050001D02*
X33782000Y-19050001D01*
X94996000Y-19050001D02*
X93869496Y-19636422D01*
X94996000Y-19050001D02*
X93869496Y-18463580D01*
X33782000Y-19050001D02*
X34908504Y-18463580D01*
X33782000Y-19050001D02*
X34908504Y-19636422D01*
D11*
%TO.C,C12*%
X44616000Y-92935272D03*
X44616000Y-89810272D03*
%TD*%
%TO.C,C10*%
X48514000Y-93150772D03*
X48514000Y-90025772D03*
%TD*%
D12*
%TO.C,R7*%
X93472000Y-76226000D03*
X93472000Y-73126000D03*
%TD*%
D11*
%TO.C,C14*%
X48768000Y-65062500D03*
X48768000Y-61937500D03*
%TD*%
D13*
%TO.C,C4*%
X74168000Y-35775500D03*
X74168000Y-38900500D03*
%TD*%
%TO.C,C6*%
X64770000Y-35775500D03*
X64770000Y-38900500D03*
%TD*%
D11*
%TO.C,C16*%
X44914000Y-64509272D03*
X44914000Y-61384272D03*
%TD*%
D12*
%TO.C,R1*%
X70104000Y-93954000D03*
X70104000Y-97054000D03*
%TD*%
D14*
%TO.C,D1*%
X73914000Y-94016500D03*
X73914000Y-96991500D03*
%TD*%
D15*
%TO.C,R8*%
X64034000Y-29718000D03*
X60934000Y-29718000D03*
%TD*%
D14*
%TO.C,D2*%
X77724000Y-96737500D03*
X77724000Y-93762500D03*
%TD*%
D16*
%TO.C,D3*%
X90460500Y-70612000D03*
X93435500Y-70612000D03*
%TD*%
D12*
%TO.C,R2*%
X81534000Y-96800000D03*
X81534000Y-93700000D03*
%TD*%
D16*
%TO.C,D4*%
X58855000Y-29718000D03*
X55880000Y-29718000D03*
%TD*%
M02*

View File

@@ -0,0 +1,734 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10C,0.150000*%
%ADD11C,0.120000*%
%ADD12C,3.200000*%
%ADD13R,1.700000X1.700000*%
%ADD14O,1.700000X1.700000*%
%ADD15C,1.600000*%
%ADD16C,1.712000*%
%ADD17RoundRect,0.102000X-0.754000X-0.754000X0.754000X-0.754000X0.754000X0.754000X-0.754000X0.754000X0*%
%ADD18R,2.000000X1.905000*%
%ADD19O,2.000000X1.905000*%
%ADD20RoundRect,0.250000X-0.650000X0.412500X-0.650000X-0.412500X0.650000X-0.412500X0.650000X0.412500X0*%
%ADD21RoundRect,0.250000X-0.625000X0.400000X-0.625000X-0.400000X0.625000X-0.400000X0.625000X0.400000X0*%
%ADD22R,3.000000X3.000000*%
%ADD23C,3.000000*%
%ADD24O,1.800000X1.800000*%
%ADD25O,1.500000X1.500000*%
%ADD26RoundRect,0.250000X-0.412500X-0.650000X0.412500X-0.650000X0.412500X0.650000X-0.412500X0.650000X0*%
%ADD27RoundRect,0.250000X0.650000X-0.412500X0.650000X0.412500X-0.650000X0.412500X-0.650000X-0.412500X0*%
G04 APERTURE END LIST*
D10*
X87481580Y-34377333D02*
X87529200Y-34329714D01*
X87529200Y-34329714D02*
X87576819Y-34186857D01*
X87576819Y-34186857D02*
X87576819Y-34091619D01*
X87576819Y-34091619D02*
X87529200Y-33948762D01*
X87529200Y-33948762D02*
X87433961Y-33853524D01*
X87433961Y-33853524D02*
X87338723Y-33805905D01*
X87338723Y-33805905D02*
X87148247Y-33758286D01*
X87148247Y-33758286D02*
X87005390Y-33758286D01*
X87005390Y-33758286D02*
X86814914Y-33805905D01*
X86814914Y-33805905D02*
X86719676Y-33853524D01*
X86719676Y-33853524D02*
X86624438Y-33948762D01*
X86624438Y-33948762D02*
X86576819Y-34091619D01*
X86576819Y-34091619D02*
X86576819Y-34186857D01*
X86576819Y-34186857D02*
X86624438Y-34329714D01*
X86624438Y-34329714D02*
X86672057Y-34377333D01*
X87576819Y-35329714D02*
X87576819Y-34758286D01*
X87576819Y-35044000D02*
X86576819Y-35044000D01*
X86576819Y-35044000D02*
X86719676Y-34948762D01*
X86719676Y-34948762D02*
X86814914Y-34853524D01*
X86814914Y-34853524D02*
X86862533Y-34758286D01*
X81184819Y-78573333D02*
X80708628Y-78240000D01*
X81184819Y-78001905D02*
X80184819Y-78001905D01*
X80184819Y-78001905D02*
X80184819Y-78382857D01*
X80184819Y-78382857D02*
X80232438Y-78478095D01*
X80232438Y-78478095D02*
X80280057Y-78525714D01*
X80280057Y-78525714D02*
X80375295Y-78573333D01*
X80375295Y-78573333D02*
X80518152Y-78573333D01*
X80518152Y-78573333D02*
X80613390Y-78525714D01*
X80613390Y-78525714D02*
X80661009Y-78478095D01*
X80661009Y-78478095D02*
X80708628Y-78382857D01*
X80708628Y-78382857D02*
X80708628Y-78001905D01*
X80184819Y-79430476D02*
X80184819Y-79240000D01*
X80184819Y-79240000D02*
X80232438Y-79144762D01*
X80232438Y-79144762D02*
X80280057Y-79097143D01*
X80280057Y-79097143D02*
X80422914Y-79001905D01*
X80422914Y-79001905D02*
X80613390Y-78954286D01*
X80613390Y-78954286D02*
X80994342Y-78954286D01*
X80994342Y-78954286D02*
X81089580Y-79001905D01*
X81089580Y-79001905D02*
X81137200Y-79049524D01*
X81137200Y-79049524D02*
X81184819Y-79144762D01*
X81184819Y-79144762D02*
X81184819Y-79335238D01*
X81184819Y-79335238D02*
X81137200Y-79430476D01*
X81137200Y-79430476D02*
X81089580Y-79478095D01*
X81089580Y-79478095D02*
X80994342Y-79525714D01*
X80994342Y-79525714D02*
X80756247Y-79525714D01*
X80756247Y-79525714D02*
X80661009Y-79478095D01*
X80661009Y-79478095D02*
X80613390Y-79430476D01*
X80613390Y-79430476D02*
X80565771Y-79335238D01*
X80565771Y-79335238D02*
X80565771Y-79144762D01*
X80565771Y-79144762D02*
X80613390Y-79049524D01*
X80613390Y-79049524D02*
X80661009Y-79001905D01*
X80661009Y-79001905D02*
X80756247Y-78954286D01*
X81184819Y-83627333D02*
X80708628Y-83294000D01*
X81184819Y-83055905D02*
X80184819Y-83055905D01*
X80184819Y-83055905D02*
X80184819Y-83436857D01*
X80184819Y-83436857D02*
X80232438Y-83532095D01*
X80232438Y-83532095D02*
X80280057Y-83579714D01*
X80280057Y-83579714D02*
X80375295Y-83627333D01*
X80375295Y-83627333D02*
X80518152Y-83627333D01*
X80518152Y-83627333D02*
X80613390Y-83579714D01*
X80613390Y-83579714D02*
X80661009Y-83532095D01*
X80661009Y-83532095D02*
X80708628Y-83436857D01*
X80708628Y-83436857D02*
X80708628Y-83055905D01*
X80184819Y-83960667D02*
X80184819Y-84579714D01*
X80184819Y-84579714D02*
X80565771Y-84246381D01*
X80565771Y-84246381D02*
X80565771Y-84389238D01*
X80565771Y-84389238D02*
X80613390Y-84484476D01*
X80613390Y-84484476D02*
X80661009Y-84532095D01*
X80661009Y-84532095D02*
X80756247Y-84579714D01*
X80756247Y-84579714D02*
X80994342Y-84579714D01*
X80994342Y-84579714D02*
X81089580Y-84532095D01*
X81089580Y-84532095D02*
X81137200Y-84484476D01*
X81137200Y-84484476D02*
X81184819Y-84389238D01*
X81184819Y-84389238D02*
X81184819Y-84103524D01*
X81184819Y-84103524D02*
X81137200Y-84008286D01*
X81137200Y-84008286D02*
X81089580Y-83960667D01*
X83417580Y-92797333D02*
X83465200Y-92749714D01*
X83465200Y-92749714D02*
X83512819Y-92606857D01*
X83512819Y-92606857D02*
X83512819Y-92511619D01*
X83512819Y-92511619D02*
X83465200Y-92368762D01*
X83465200Y-92368762D02*
X83369961Y-92273524D01*
X83369961Y-92273524D02*
X83274723Y-92225905D01*
X83274723Y-92225905D02*
X83084247Y-92178286D01*
X83084247Y-92178286D02*
X82941390Y-92178286D01*
X82941390Y-92178286D02*
X82750914Y-92225905D01*
X82750914Y-92225905D02*
X82655676Y-92273524D01*
X82655676Y-92273524D02*
X82560438Y-92368762D01*
X82560438Y-92368762D02*
X82512819Y-92511619D01*
X82512819Y-92511619D02*
X82512819Y-92606857D01*
X82512819Y-92606857D02*
X82560438Y-92749714D01*
X82560438Y-92749714D02*
X82608057Y-92797333D01*
X82941390Y-93368762D02*
X82893771Y-93273524D01*
X82893771Y-93273524D02*
X82846152Y-93225905D01*
X82846152Y-93225905D02*
X82750914Y-93178286D01*
X82750914Y-93178286D02*
X82703295Y-93178286D01*
X82703295Y-93178286D02*
X82608057Y-93225905D01*
X82608057Y-93225905D02*
X82560438Y-93273524D01*
X82560438Y-93273524D02*
X82512819Y-93368762D01*
X82512819Y-93368762D02*
X82512819Y-93559238D01*
X82512819Y-93559238D02*
X82560438Y-93654476D01*
X82560438Y-93654476D02*
X82608057Y-93702095D01*
X82608057Y-93702095D02*
X82703295Y-93749714D01*
X82703295Y-93749714D02*
X82750914Y-93749714D01*
X82750914Y-93749714D02*
X82846152Y-93702095D01*
X82846152Y-93702095D02*
X82893771Y-93654476D01*
X82893771Y-93654476D02*
X82941390Y-93559238D01*
X82941390Y-93559238D02*
X82941390Y-93368762D01*
X82941390Y-93368762D02*
X82989009Y-93273524D01*
X82989009Y-93273524D02*
X83036628Y-93225905D01*
X83036628Y-93225905D02*
X83131866Y-93178286D01*
X83131866Y-93178286D02*
X83322342Y-93178286D01*
X83322342Y-93178286D02*
X83417580Y-93225905D01*
X83417580Y-93225905D02*
X83465200Y-93273524D01*
X83465200Y-93273524D02*
X83512819Y-93368762D01*
X83512819Y-93368762D02*
X83512819Y-93559238D01*
X83512819Y-93559238D02*
X83465200Y-93654476D01*
X83465200Y-93654476D02*
X83417580Y-93702095D01*
X83417580Y-93702095D02*
X83322342Y-93749714D01*
X83322342Y-93749714D02*
X83131866Y-93749714D01*
X83131866Y-93749714D02*
X83036628Y-93702095D01*
X83036628Y-93702095D02*
X82989009Y-93654476D01*
X82989009Y-93654476D02*
X82941390Y-93559238D01*
X81184819Y-88733333D02*
X80708628Y-88400000D01*
X81184819Y-88161905D02*
X80184819Y-88161905D01*
X80184819Y-88161905D02*
X80184819Y-88542857D01*
X80184819Y-88542857D02*
X80232438Y-88638095D01*
X80232438Y-88638095D02*
X80280057Y-88685714D01*
X80280057Y-88685714D02*
X80375295Y-88733333D01*
X80375295Y-88733333D02*
X80518152Y-88733333D01*
X80518152Y-88733333D02*
X80613390Y-88685714D01*
X80613390Y-88685714D02*
X80661009Y-88638095D01*
X80661009Y-88638095D02*
X80708628Y-88542857D01*
X80708628Y-88542857D02*
X80708628Y-88161905D01*
X80518152Y-89590476D02*
X81184819Y-89590476D01*
X80137200Y-89352381D02*
X80851485Y-89114286D01*
X80851485Y-89114286D02*
X80851485Y-89733333D01*
X87481580Y-43521333D02*
X87529200Y-43473714D01*
X87529200Y-43473714D02*
X87576819Y-43330857D01*
X87576819Y-43330857D02*
X87576819Y-43235619D01*
X87576819Y-43235619D02*
X87529200Y-43092762D01*
X87529200Y-43092762D02*
X87433961Y-42997524D01*
X87433961Y-42997524D02*
X87338723Y-42949905D01*
X87338723Y-42949905D02*
X87148247Y-42902286D01*
X87148247Y-42902286D02*
X87005390Y-42902286D01*
X87005390Y-42902286D02*
X86814914Y-42949905D01*
X86814914Y-42949905D02*
X86719676Y-42997524D01*
X86719676Y-42997524D02*
X86624438Y-43092762D01*
X86624438Y-43092762D02*
X86576819Y-43235619D01*
X86576819Y-43235619D02*
X86576819Y-43330857D01*
X86576819Y-43330857D02*
X86624438Y-43473714D01*
X86624438Y-43473714D02*
X86672057Y-43521333D01*
X86672057Y-43902286D02*
X86624438Y-43949905D01*
X86624438Y-43949905D02*
X86576819Y-44045143D01*
X86576819Y-44045143D02*
X86576819Y-44283238D01*
X86576819Y-44283238D02*
X86624438Y-44378476D01*
X86624438Y-44378476D02*
X86672057Y-44426095D01*
X86672057Y-44426095D02*
X86767295Y-44473714D01*
X86767295Y-44473714D02*
X86862533Y-44473714D01*
X86862533Y-44473714D02*
X87005390Y-44426095D01*
X87005390Y-44426095D02*
X87576819Y-43854667D01*
X87576819Y-43854667D02*
X87576819Y-44473714D01*
X85002666Y-72336819D02*
X85335999Y-71860628D01*
X85574094Y-72336819D02*
X85574094Y-71336819D01*
X85574094Y-71336819D02*
X85193142Y-71336819D01*
X85193142Y-71336819D02*
X85097904Y-71384438D01*
X85097904Y-71384438D02*
X85050285Y-71432057D01*
X85050285Y-71432057D02*
X85002666Y-71527295D01*
X85002666Y-71527295D02*
X85002666Y-71670152D01*
X85002666Y-71670152D02*
X85050285Y-71765390D01*
X85050285Y-71765390D02*
X85097904Y-71813009D01*
X85097904Y-71813009D02*
X85193142Y-71860628D01*
X85193142Y-71860628D02*
X85574094Y-71860628D01*
X84097904Y-71336819D02*
X84574094Y-71336819D01*
X84574094Y-71336819D02*
X84621713Y-71813009D01*
X84621713Y-71813009D02*
X84574094Y-71765390D01*
X84574094Y-71765390D02*
X84478856Y-71717771D01*
X84478856Y-71717771D02*
X84240761Y-71717771D01*
X84240761Y-71717771D02*
X84145523Y-71765390D01*
X84145523Y-71765390D02*
X84097904Y-71813009D01*
X84097904Y-71813009D02*
X84050285Y-71908247D01*
X84050285Y-71908247D02*
X84050285Y-72146342D01*
X84050285Y-72146342D02*
X84097904Y-72241580D01*
X84097904Y-72241580D02*
X84145523Y-72289200D01*
X84145523Y-72289200D02*
X84240761Y-72336819D01*
X84240761Y-72336819D02*
X84478856Y-72336819D01*
X84478856Y-72336819D02*
X84574094Y-72289200D01*
X84574094Y-72289200D02*
X84621713Y-72241580D01*
D11*
%TO.C,C1*%
X88244000Y-37541252D02*
X88244000Y-36118748D01*
X90064000Y-37541252D02*
X90064000Y-36118748D01*
%TO.C,R6*%
X81640000Y-79467064D02*
X81640000Y-78012936D01*
X83460000Y-79467064D02*
X83460000Y-78012936D01*
%TO.C,R3*%
X81640000Y-84521064D02*
X81640000Y-83066936D01*
X83460000Y-84521064D02*
X83460000Y-83066936D01*
%TO.C,C8*%
X87071252Y-93112000D02*
X85648748Y-93112000D01*
X87071252Y-91292000D02*
X85648748Y-91292000D01*
%TO.C,R4*%
X81640000Y-89627064D02*
X81640000Y-88172936D01*
X83460000Y-89627064D02*
X83460000Y-88172936D01*
%TO.C,C2*%
X90064000Y-41198748D02*
X90064000Y-42621252D01*
X88244000Y-41198748D02*
X88244000Y-42621252D01*
%TO.C,R5*%
X81640000Y-74387064D02*
X81640000Y-72932936D01*
X83460000Y-74387064D02*
X83460000Y-72932936D01*
%TD*%
%LPC*%
D12*
%TO.C,H4*%
X91000000Y-98500000D03*
%TD*%
%TO.C,H3*%
X91000000Y-30000000D03*
%TD*%
%TO.C,H2*%
X38000000Y-98500000D03*
%TD*%
%TO.C,H1*%
X38000000Y-30000000D03*
%TD*%
D13*
%TO.C,J7*%
X58166000Y-94234000D03*
D14*
X58166000Y-96774000D03*
X60706000Y-94234000D03*
X60706000Y-96774000D03*
X63246000Y-94234000D03*
X63246000Y-96774000D03*
X65786000Y-94234000D03*
X65786000Y-96774000D03*
%TD*%
D15*
%TO.C,C3*%
X77248000Y-37084000D03*
X79248000Y-37084000D03*
%TD*%
D16*
%TO.C,U1*%
X47156000Y-87270272D03*
X49696000Y-87270272D03*
X39536000Y-87270272D03*
X39536000Y-84730272D03*
X39536000Y-82190272D03*
X39536000Y-79650272D03*
X39536000Y-77110272D03*
X39536000Y-74570272D03*
X39536000Y-72030272D03*
D17*
X39536000Y-69490272D03*
D16*
X52236000Y-87270272D03*
X52236000Y-84730272D03*
X52236000Y-82190272D03*
X52236000Y-79650272D03*
X52236000Y-77110272D03*
X52236000Y-74570272D03*
X52236000Y-72030272D03*
X52236000Y-69490272D03*
%TD*%
D13*
%TO.C,M1*%
X35980000Y-74824272D03*
D14*
X35980000Y-77364272D03*
X35980000Y-79904272D03*
X35980000Y-82444272D03*
%TD*%
D15*
%TO.C,C11*%
X39298000Y-91842272D03*
X41298000Y-91842272D03*
%TD*%
%TO.C,C9*%
X52578000Y-92572272D03*
X52578000Y-90572272D03*
%TD*%
D18*
%TO.C,U5*%
X86614000Y-36576000D03*
D19*
X86614000Y-39116000D03*
X86614000Y-41656000D03*
%TD*%
D14*
%TO.C,J6*%
X85598000Y-88646000D03*
X85598000Y-86106000D03*
X85598000Y-83566000D03*
X85598000Y-81026000D03*
X85598000Y-78486000D03*
X85598000Y-75946000D03*
D13*
X85598000Y-73406000D03*
%TD*%
D15*
%TO.C,C7*%
X92202000Y-90456000D03*
X92202000Y-92456000D03*
%TD*%
D16*
%TO.C,U2*%
X49994000Y-58844272D03*
X47454000Y-58844272D03*
X52534000Y-58844272D03*
X52534000Y-56304272D03*
X52534000Y-53764272D03*
X52534000Y-51224272D03*
X52534000Y-48684272D03*
X52534000Y-46144272D03*
X52534000Y-43604272D03*
X52534000Y-41064272D03*
X39834000Y-58844272D03*
X39834000Y-56304272D03*
X39834000Y-53764272D03*
X39834000Y-51224272D03*
X39834000Y-48684272D03*
X39834000Y-46144272D03*
X39834000Y-43604272D03*
D17*
X39834000Y-41064272D03*
%TD*%
D20*
%TO.C,C1*%
X89154000Y-35267500D03*
X89154000Y-38392500D03*
%TD*%
D21*
%TO.C,R6*%
X82550000Y-77190000D03*
X82550000Y-80290000D03*
%TD*%
D13*
%TO.C,JP1*%
X86614000Y-46482000D03*
D14*
X89154000Y-46482000D03*
%TD*%
D13*
%TO.C,JP2*%
X55626000Y-34793000D03*
D14*
X55626000Y-37333000D03*
%TD*%
D13*
%TO.C,M0*%
X36278000Y-46398272D03*
D14*
X36278000Y-48938272D03*
X36278000Y-51478272D03*
X36278000Y-54018272D03*
%TD*%
D15*
%TO.C,C15*%
X41596000Y-63416272D03*
X39596000Y-63416272D03*
%TD*%
%TO.C,C13*%
X53086000Y-64146272D03*
X53086000Y-62146272D03*
%TD*%
D22*
%TO.C,J4*%
X88646000Y-66548000D03*
D23*
X88646000Y-61468000D03*
X88646000Y-56388000D03*
X88646000Y-51308000D03*
%TD*%
D22*
%TO.C,J5*%
X50800000Y-35052000D03*
D23*
X45720000Y-35052000D03*
%TD*%
D15*
%TO.C,C5*%
X59722000Y-37084000D03*
X61722000Y-37084000D03*
%TD*%
D14*
%TO.C,U3*%
X72136000Y-89828000D03*
D13*
X69596000Y-89828000D03*
D14*
X67056000Y-89828000D03*
X78486000Y-41798000D03*
X78486000Y-44338000D03*
D13*
X78486000Y-46878000D03*
D14*
X78486000Y-49418000D03*
X78486000Y-51958000D03*
X78486000Y-54498000D03*
X78486000Y-57038000D03*
D13*
X78486000Y-59578000D03*
D14*
X78486000Y-62118000D03*
X78486000Y-64658000D03*
X78486000Y-67198000D03*
X78486000Y-69738000D03*
D13*
X78486000Y-72278000D03*
D14*
X78486000Y-74818000D03*
X78486000Y-77358000D03*
X78486000Y-79898000D03*
X78486000Y-82438000D03*
D13*
X78486000Y-84978000D03*
D14*
X78486000Y-87518000D03*
X78486000Y-90058000D03*
X60706000Y-90058000D03*
X60706000Y-87518000D03*
D13*
X60706000Y-84978000D03*
D14*
X60706000Y-82438000D03*
X60706000Y-79898000D03*
X60706000Y-77358000D03*
X60706000Y-74818000D03*
D13*
X60706000Y-72278000D03*
D14*
X60706000Y-69738000D03*
X60706000Y-67198000D03*
X60706000Y-64658000D03*
X60706000Y-62118000D03*
D13*
X60706000Y-59578000D03*
D14*
X60706000Y-57038000D03*
X60706000Y-54498000D03*
X60706000Y-51958000D03*
X60706000Y-49418000D03*
D13*
X60706000Y-46878000D03*
D14*
X60706000Y-44338000D03*
X60706000Y-41798000D03*
D24*
X72321000Y-41928000D03*
D25*
X72021000Y-44958000D03*
X67171000Y-44958000D03*
D24*
X66871000Y-41928000D03*
%TD*%
D21*
%TO.C,R3*%
X82550000Y-82244000D03*
X82550000Y-85344000D03*
%TD*%
D26*
%TO.C,C8*%
X84797500Y-92202000D03*
X87922500Y-92202000D03*
%TD*%
D21*
%TO.C,R4*%
X82550000Y-87350000D03*
X82550000Y-90450000D03*
%TD*%
D27*
%TO.C,C2*%
X89154000Y-43472500D03*
X89154000Y-40347500D03*
%TD*%
D21*
%TO.C,R5*%
X82550000Y-72110000D03*
X82550000Y-75210000D03*
%TD*%
%LPD*%
M02*

View File

@@ -0,0 +1,687 @@
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.5-8.0.5-0~ubuntu24.04.1*%
%TF.CreationDate,2024-10-03T18:51:15+02:00*%
%TF.ProjectId,motor-driver-breakout-v2,6d6f746f-722d-4647-9269-7665722d6272,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Other,Comment*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 8.0.5-8.0.5-0~ubuntu24.04.1) date 2024-10-03 18:51:15*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
G04 APERTURE END LIST*
D10*
X74019580Y-76992002D02*
X74067200Y-77039621D01*
X74067200Y-77039621D02*
X74114819Y-77182478D01*
X74114819Y-77182478D02*
X74114819Y-77277716D01*
X74114819Y-77277716D02*
X74067200Y-77420573D01*
X74067200Y-77420573D02*
X73971961Y-77515811D01*
X73971961Y-77515811D02*
X73876723Y-77563430D01*
X73876723Y-77563430D02*
X73686247Y-77611049D01*
X73686247Y-77611049D02*
X73543390Y-77611049D01*
X73543390Y-77611049D02*
X73352914Y-77563430D01*
X73352914Y-77563430D02*
X73257676Y-77515811D01*
X73257676Y-77515811D02*
X73162438Y-77420573D01*
X73162438Y-77420573D02*
X73114819Y-77277716D01*
X73114819Y-77277716D02*
X73114819Y-77182478D01*
X73114819Y-77182478D02*
X73162438Y-77039621D01*
X73162438Y-77039621D02*
X73210057Y-76992002D01*
X74114819Y-76420573D02*
X74067200Y-76515811D01*
X74067200Y-76515811D02*
X74019580Y-76563430D01*
X74019580Y-76563430D02*
X73924342Y-76611049D01*
X73924342Y-76611049D02*
X73638628Y-76611049D01*
X73638628Y-76611049D02*
X73543390Y-76563430D01*
X73543390Y-76563430D02*
X73495771Y-76515811D01*
X73495771Y-76515811D02*
X73448152Y-76420573D01*
X73448152Y-76420573D02*
X73448152Y-76277716D01*
X73448152Y-76277716D02*
X73495771Y-76182478D01*
X73495771Y-76182478D02*
X73543390Y-76134859D01*
X73543390Y-76134859D02*
X73638628Y-76087240D01*
X73638628Y-76087240D02*
X73924342Y-76087240D01*
X73924342Y-76087240D02*
X74019580Y-76134859D01*
X74019580Y-76134859D02*
X74067200Y-76182478D01*
X74067200Y-76182478D02*
X74114819Y-76277716D01*
X74114819Y-76277716D02*
X74114819Y-76420573D01*
X73448152Y-75658668D02*
X74448152Y-75658668D01*
X73495771Y-75658668D02*
X73448152Y-75563430D01*
X73448152Y-75563430D02*
X73448152Y-75372954D01*
X73448152Y-75372954D02*
X73495771Y-75277716D01*
X73495771Y-75277716D02*
X73543390Y-75230097D01*
X73543390Y-75230097D02*
X73638628Y-75182478D01*
X73638628Y-75182478D02*
X73924342Y-75182478D01*
X73924342Y-75182478D02*
X74019580Y-75230097D01*
X74019580Y-75230097D02*
X74067200Y-75277716D01*
X74067200Y-75277716D02*
X74114819Y-75372954D01*
X74114819Y-75372954D02*
X74114819Y-75563430D01*
X74114819Y-75563430D02*
X74067200Y-75658668D01*
X73448152Y-74753906D02*
X74448152Y-74753906D01*
X73495771Y-74753906D02*
X73448152Y-74658668D01*
X73448152Y-74658668D02*
X73448152Y-74468192D01*
X73448152Y-74468192D02*
X73495771Y-74372954D01*
X73495771Y-74372954D02*
X73543390Y-74325335D01*
X73543390Y-74325335D02*
X73638628Y-74277716D01*
X73638628Y-74277716D02*
X73924342Y-74277716D01*
X73924342Y-74277716D02*
X74019580Y-74325335D01*
X74019580Y-74325335D02*
X74067200Y-74372954D01*
X74067200Y-74372954D02*
X74114819Y-74468192D01*
X74114819Y-74468192D02*
X74114819Y-74658668D01*
X74114819Y-74658668D02*
X74067200Y-74753906D01*
X74067200Y-73468192D02*
X74114819Y-73563430D01*
X74114819Y-73563430D02*
X74114819Y-73753906D01*
X74114819Y-73753906D02*
X74067200Y-73849144D01*
X74067200Y-73849144D02*
X73971961Y-73896763D01*
X73971961Y-73896763D02*
X73591009Y-73896763D01*
X73591009Y-73896763D02*
X73495771Y-73849144D01*
X73495771Y-73849144D02*
X73448152Y-73753906D01*
X73448152Y-73753906D02*
X73448152Y-73563430D01*
X73448152Y-73563430D02*
X73495771Y-73468192D01*
X73495771Y-73468192D02*
X73591009Y-73420573D01*
X73591009Y-73420573D02*
X73686247Y-73420573D01*
X73686247Y-73420573D02*
X73781485Y-73896763D01*
X74114819Y-72992001D02*
X73448152Y-72992001D01*
X73638628Y-72992001D02*
X73543390Y-72944382D01*
X73543390Y-72944382D02*
X73495771Y-72896763D01*
X73495771Y-72896763D02*
X73448152Y-72801525D01*
X73448152Y-72801525D02*
X73448152Y-72706287D01*
X74114819Y-71611048D02*
X73114819Y-71611048D01*
X74114819Y-71039620D02*
X73543390Y-71468191D01*
X73114819Y-71039620D02*
X73686247Y-71611048D01*
X74067200Y-70230096D02*
X74114819Y-70325334D01*
X74114819Y-70325334D02*
X74114819Y-70515810D01*
X74114819Y-70515810D02*
X74067200Y-70611048D01*
X74067200Y-70611048D02*
X73971961Y-70658667D01*
X73971961Y-70658667D02*
X73591009Y-70658667D01*
X73591009Y-70658667D02*
X73495771Y-70611048D01*
X73495771Y-70611048D02*
X73448152Y-70515810D01*
X73448152Y-70515810D02*
X73448152Y-70325334D01*
X73448152Y-70325334D02*
X73495771Y-70230096D01*
X73495771Y-70230096D02*
X73591009Y-70182477D01*
X73591009Y-70182477D02*
X73686247Y-70182477D01*
X73686247Y-70182477D02*
X73781485Y-70658667D01*
X74067200Y-69372953D02*
X74114819Y-69468191D01*
X74114819Y-69468191D02*
X74114819Y-69658667D01*
X74114819Y-69658667D02*
X74067200Y-69753905D01*
X74067200Y-69753905D02*
X73971961Y-69801524D01*
X73971961Y-69801524D02*
X73591009Y-69801524D01*
X73591009Y-69801524D02*
X73495771Y-69753905D01*
X73495771Y-69753905D02*
X73448152Y-69658667D01*
X73448152Y-69658667D02*
X73448152Y-69468191D01*
X73448152Y-69468191D02*
X73495771Y-69372953D01*
X73495771Y-69372953D02*
X73591009Y-69325334D01*
X73591009Y-69325334D02*
X73686247Y-69325334D01*
X73686247Y-69325334D02*
X73781485Y-69801524D01*
X73448152Y-68896762D02*
X74448152Y-68896762D01*
X73495771Y-68896762D02*
X73448152Y-68801524D01*
X73448152Y-68801524D02*
X73448152Y-68611048D01*
X73448152Y-68611048D02*
X73495771Y-68515810D01*
X73495771Y-68515810D02*
X73543390Y-68468191D01*
X73543390Y-68468191D02*
X73638628Y-68420572D01*
X73638628Y-68420572D02*
X73924342Y-68420572D01*
X73924342Y-68420572D02*
X74019580Y-68468191D01*
X74019580Y-68468191D02*
X74067200Y-68515810D01*
X74067200Y-68515810D02*
X74114819Y-68611048D01*
X74114819Y-68611048D02*
X74114819Y-68801524D01*
X74114819Y-68801524D02*
X74067200Y-68896762D01*
X74114819Y-67849143D02*
X74067200Y-67944381D01*
X74067200Y-67944381D02*
X74019580Y-67992000D01*
X74019580Y-67992000D02*
X73924342Y-68039619D01*
X73924342Y-68039619D02*
X73638628Y-68039619D01*
X73638628Y-68039619D02*
X73543390Y-67992000D01*
X73543390Y-67992000D02*
X73495771Y-67944381D01*
X73495771Y-67944381D02*
X73448152Y-67849143D01*
X73448152Y-67849143D02*
X73448152Y-67706286D01*
X73448152Y-67706286D02*
X73495771Y-67611048D01*
X73495771Y-67611048D02*
X73543390Y-67563429D01*
X73543390Y-67563429D02*
X73638628Y-67515810D01*
X73638628Y-67515810D02*
X73924342Y-67515810D01*
X73924342Y-67515810D02*
X74019580Y-67563429D01*
X74019580Y-67563429D02*
X74067200Y-67611048D01*
X74067200Y-67611048D02*
X74114819Y-67706286D01*
X74114819Y-67706286D02*
X74114819Y-67849143D01*
X73448152Y-66658667D02*
X74114819Y-66658667D01*
X73448152Y-67087238D02*
X73971961Y-67087238D01*
X73971961Y-67087238D02*
X74067200Y-67039619D01*
X74067200Y-67039619D02*
X74114819Y-66944381D01*
X74114819Y-66944381D02*
X74114819Y-66801524D01*
X74114819Y-66801524D02*
X74067200Y-66706286D01*
X74067200Y-66706286D02*
X74019580Y-66658667D01*
X73448152Y-66325333D02*
X73448152Y-65944381D01*
X73114819Y-66182476D02*
X73971961Y-66182476D01*
X73971961Y-66182476D02*
X74067200Y-66134857D01*
X74067200Y-66134857D02*
X74114819Y-66039619D01*
X74114819Y-66039619D02*
X74114819Y-65944381D01*
X74067200Y-65658666D02*
X74114819Y-65563428D01*
X74114819Y-65563428D02*
X74114819Y-65372952D01*
X74114819Y-65372952D02*
X74067200Y-65277714D01*
X74067200Y-65277714D02*
X73971961Y-65230095D01*
X73971961Y-65230095D02*
X73924342Y-65230095D01*
X73924342Y-65230095D02*
X73829104Y-65277714D01*
X73829104Y-65277714D02*
X73781485Y-65372952D01*
X73781485Y-65372952D02*
X73781485Y-65515809D01*
X73781485Y-65515809D02*
X73733866Y-65611047D01*
X73733866Y-65611047D02*
X73638628Y-65658666D01*
X73638628Y-65658666D02*
X73591009Y-65658666D01*
X73591009Y-65658666D02*
X73495771Y-65611047D01*
X73495771Y-65611047D02*
X73448152Y-65515809D01*
X73448152Y-65515809D02*
X73448152Y-65372952D01*
X73448152Y-65372952D02*
X73495771Y-65277714D01*
X74067200Y-64087237D02*
X74114819Y-63991999D01*
X74114819Y-63991999D02*
X74114819Y-63801523D01*
X74114819Y-63801523D02*
X74067200Y-63706285D01*
X74067200Y-63706285D02*
X73971961Y-63658666D01*
X73971961Y-63658666D02*
X73924342Y-63658666D01*
X73924342Y-63658666D02*
X73829104Y-63706285D01*
X73829104Y-63706285D02*
X73781485Y-63801523D01*
X73781485Y-63801523D02*
X73781485Y-63944380D01*
X73781485Y-63944380D02*
X73733866Y-64039618D01*
X73733866Y-64039618D02*
X73638628Y-64087237D01*
X73638628Y-64087237D02*
X73591009Y-64087237D01*
X73591009Y-64087237D02*
X73495771Y-64039618D01*
X73495771Y-64039618D02*
X73448152Y-63944380D01*
X73448152Y-63944380D02*
X73448152Y-63801523D01*
X73448152Y-63801523D02*
X73495771Y-63706285D01*
X74114819Y-63230094D02*
X73114819Y-63230094D01*
X74114819Y-62801523D02*
X73591009Y-62801523D01*
X73591009Y-62801523D02*
X73495771Y-62849142D01*
X73495771Y-62849142D02*
X73448152Y-62944380D01*
X73448152Y-62944380D02*
X73448152Y-63087237D01*
X73448152Y-63087237D02*
X73495771Y-63182475D01*
X73495771Y-63182475D02*
X73543390Y-63230094D01*
X74114819Y-62182475D02*
X74067200Y-62277713D01*
X74067200Y-62277713D02*
X74019580Y-62325332D01*
X74019580Y-62325332D02*
X73924342Y-62372951D01*
X73924342Y-62372951D02*
X73638628Y-62372951D01*
X73638628Y-62372951D02*
X73543390Y-62325332D01*
X73543390Y-62325332D02*
X73495771Y-62277713D01*
X73495771Y-62277713D02*
X73448152Y-62182475D01*
X73448152Y-62182475D02*
X73448152Y-62039618D01*
X73448152Y-62039618D02*
X73495771Y-61944380D01*
X73495771Y-61944380D02*
X73543390Y-61896761D01*
X73543390Y-61896761D02*
X73638628Y-61849142D01*
X73638628Y-61849142D02*
X73924342Y-61849142D01*
X73924342Y-61849142D02*
X74019580Y-61896761D01*
X74019580Y-61896761D02*
X74067200Y-61944380D01*
X74067200Y-61944380D02*
X74114819Y-62039618D01*
X74114819Y-62039618D02*
X74114819Y-62182475D01*
X73448152Y-61515808D02*
X74114819Y-61325332D01*
X74114819Y-61325332D02*
X73638628Y-61134856D01*
X73638628Y-61134856D02*
X74114819Y-60944380D01*
X74114819Y-60944380D02*
X73448152Y-60753904D01*
X73448152Y-60372951D02*
X74114819Y-60372951D01*
X73543390Y-60372951D02*
X73495771Y-60325332D01*
X73495771Y-60325332D02*
X73448152Y-60230094D01*
X73448152Y-60230094D02*
X73448152Y-60087237D01*
X73448152Y-60087237D02*
X73495771Y-59991999D01*
X73495771Y-59991999D02*
X73591009Y-59944380D01*
X73591009Y-59944380D02*
X74114819Y-59944380D01*
X74114819Y-58563427D02*
X74067200Y-58658665D01*
X74067200Y-58658665D02*
X74019580Y-58706284D01*
X74019580Y-58706284D02*
X73924342Y-58753903D01*
X73924342Y-58753903D02*
X73638628Y-58753903D01*
X73638628Y-58753903D02*
X73543390Y-58706284D01*
X73543390Y-58706284D02*
X73495771Y-58658665D01*
X73495771Y-58658665D02*
X73448152Y-58563427D01*
X73448152Y-58563427D02*
X73448152Y-58420570D01*
X73448152Y-58420570D02*
X73495771Y-58325332D01*
X73495771Y-58325332D02*
X73543390Y-58277713D01*
X73543390Y-58277713D02*
X73638628Y-58230094D01*
X73638628Y-58230094D02*
X73924342Y-58230094D01*
X73924342Y-58230094D02*
X74019580Y-58277713D01*
X74019580Y-58277713D02*
X74067200Y-58325332D01*
X74067200Y-58325332D02*
X74114819Y-58420570D01*
X74114819Y-58420570D02*
X74114819Y-58563427D01*
X73448152Y-57801522D02*
X74114819Y-57801522D01*
X73543390Y-57801522D02*
X73495771Y-57753903D01*
X73495771Y-57753903D02*
X73448152Y-57658665D01*
X73448152Y-57658665D02*
X73448152Y-57515808D01*
X73448152Y-57515808D02*
X73495771Y-57420570D01*
X73495771Y-57420570D02*
X73591009Y-57372951D01*
X73591009Y-57372951D02*
X74114819Y-57372951D01*
X74114819Y-56134855D02*
X73114819Y-56134855D01*
X73114819Y-56134855D02*
X73114819Y-55896760D01*
X73114819Y-55896760D02*
X73162438Y-55753903D01*
X73162438Y-55753903D02*
X73257676Y-55658665D01*
X73257676Y-55658665D02*
X73352914Y-55611046D01*
X73352914Y-55611046D02*
X73543390Y-55563427D01*
X73543390Y-55563427D02*
X73686247Y-55563427D01*
X73686247Y-55563427D02*
X73876723Y-55611046D01*
X73876723Y-55611046D02*
X73971961Y-55658665D01*
X73971961Y-55658665D02*
X74067200Y-55753903D01*
X74067200Y-55753903D02*
X74114819Y-55896760D01*
X74114819Y-55896760D02*
X74114819Y-56134855D01*
X73448152Y-55230093D02*
X74114819Y-55039617D01*
X74114819Y-55039617D02*
X73638628Y-54849141D01*
X73638628Y-54849141D02*
X74114819Y-54658665D01*
X74114819Y-54658665D02*
X73448152Y-54468189D01*
X73448152Y-53658665D02*
X74257676Y-53658665D01*
X74257676Y-53658665D02*
X74352914Y-53706284D01*
X74352914Y-53706284D02*
X74400533Y-53753903D01*
X74400533Y-53753903D02*
X74448152Y-53849141D01*
X74448152Y-53849141D02*
X74448152Y-53991998D01*
X74448152Y-53991998D02*
X74400533Y-54087236D01*
X74067200Y-53658665D02*
X74114819Y-53753903D01*
X74114819Y-53753903D02*
X74114819Y-53944379D01*
X74114819Y-53944379D02*
X74067200Y-54039617D01*
X74067200Y-54039617D02*
X74019580Y-54087236D01*
X74019580Y-54087236D02*
X73924342Y-54134855D01*
X73924342Y-54134855D02*
X73638628Y-54134855D01*
X73638628Y-54134855D02*
X73543390Y-54087236D01*
X73543390Y-54087236D02*
X73495771Y-54039617D01*
X73495771Y-54039617D02*
X73448152Y-53944379D01*
X73448152Y-53944379D02*
X73448152Y-53753903D01*
X73448152Y-53753903D02*
X73495771Y-53658665D01*
X74067200Y-53230093D02*
X74114819Y-53134855D01*
X74114819Y-53134855D02*
X74114819Y-52944379D01*
X74114819Y-52944379D02*
X74067200Y-52849141D01*
X74067200Y-52849141D02*
X73971961Y-52801522D01*
X73971961Y-52801522D02*
X73924342Y-52801522D01*
X73924342Y-52801522D02*
X73829104Y-52849141D01*
X73829104Y-52849141D02*
X73781485Y-52944379D01*
X73781485Y-52944379D02*
X73781485Y-53087236D01*
X73781485Y-53087236D02*
X73733866Y-53182474D01*
X73733866Y-53182474D02*
X73638628Y-53230093D01*
X73638628Y-53230093D02*
X73591009Y-53230093D01*
X73591009Y-53230093D02*
X73495771Y-53182474D01*
X73495771Y-53182474D02*
X73448152Y-53087236D01*
X73448152Y-53087236D02*
X73448152Y-52944379D01*
X73448152Y-52944379D02*
X73495771Y-52849141D01*
X74114819Y-51468188D02*
X74067200Y-51563426D01*
X74067200Y-51563426D02*
X73971961Y-51611045D01*
X73971961Y-51611045D02*
X73114819Y-51611045D01*
X74114819Y-50658664D02*
X73591009Y-50658664D01*
X73591009Y-50658664D02*
X73495771Y-50706283D01*
X73495771Y-50706283D02*
X73448152Y-50801521D01*
X73448152Y-50801521D02*
X73448152Y-50991997D01*
X73448152Y-50991997D02*
X73495771Y-51087235D01*
X74067200Y-50658664D02*
X74114819Y-50753902D01*
X74114819Y-50753902D02*
X74114819Y-50991997D01*
X74114819Y-50991997D02*
X74067200Y-51087235D01*
X74067200Y-51087235D02*
X73971961Y-51134854D01*
X73971961Y-51134854D02*
X73876723Y-51134854D01*
X73876723Y-51134854D02*
X73781485Y-51087235D01*
X73781485Y-51087235D02*
X73733866Y-50991997D01*
X73733866Y-50991997D02*
X73733866Y-50753902D01*
X73733866Y-50753902D02*
X73686247Y-50658664D01*
X73448152Y-50277711D02*
X74114819Y-50039616D01*
X73448152Y-49801521D02*
X74114819Y-50039616D01*
X74114819Y-50039616D02*
X74352914Y-50134854D01*
X74352914Y-50134854D02*
X74400533Y-50182473D01*
X74400533Y-50182473D02*
X74448152Y-50277711D01*
X74067200Y-49039616D02*
X74114819Y-49134854D01*
X74114819Y-49134854D02*
X74114819Y-49325330D01*
X74114819Y-49325330D02*
X74067200Y-49420568D01*
X74067200Y-49420568D02*
X73971961Y-49468187D01*
X73971961Y-49468187D02*
X73591009Y-49468187D01*
X73591009Y-49468187D02*
X73495771Y-49420568D01*
X73495771Y-49420568D02*
X73448152Y-49325330D01*
X73448152Y-49325330D02*
X73448152Y-49134854D01*
X73448152Y-49134854D02*
X73495771Y-49039616D01*
X73495771Y-49039616D02*
X73591009Y-48991997D01*
X73591009Y-48991997D02*
X73686247Y-48991997D01*
X73686247Y-48991997D02*
X73781485Y-49468187D01*
X74114819Y-48563425D02*
X73448152Y-48563425D01*
X73638628Y-48563425D02*
X73543390Y-48515806D01*
X73543390Y-48515806D02*
X73495771Y-48468187D01*
X73495771Y-48468187D02*
X73448152Y-48372949D01*
X73448152Y-48372949D02*
X73448152Y-48277711D01*
%TO.C,H4*%
X94200000Y-98500000D02*
G75*
G02*
X87800000Y-98500000I-3200000J0D01*
G01*
X87800000Y-98500000D02*
G75*
G02*
X94200000Y-98500000I3200000J0D01*
G01*
%TO.C,H3*%
X94200000Y-30000000D02*
G75*
G02*
X87800000Y-30000000I-3200000J0D01*
G01*
X87800000Y-30000000D02*
G75*
G02*
X94200000Y-30000000I3200000J0D01*
G01*
%TO.C,H2*%
X41200000Y-98500000D02*
G75*
G02*
X34800000Y-98500000I-3200000J0D01*
G01*
X34800000Y-98500000D02*
G75*
G02*
X41200000Y-98500000I3200000J0D01*
G01*
%TO.C,H1*%
X41200000Y-30000000D02*
G75*
G02*
X34800000Y-30000000I-3200000J0D01*
G01*
X34800000Y-30000000D02*
G75*
G02*
X41200000Y-30000000I3200000J0D01*
G01*
%TD*%
M02*

Binary file not shown.
1 version https://git-lfs.github.com/spec/v1
2 oid sha256:bcfa35cfca639ebc7db2d056861e47c09ef33faf5080ad826b43600156def570
3 size 51

Some files were not shown because too many files have changed in this diff Show More