Compare commits

..

No commits in common. "master" and "different-filter" have entirely different histories.

63 changed files with 19423 additions and 613456 deletions

6
.gitmodules vendored
View File

@ -1,6 +0,0 @@
[submodule "fw/ch32fun"]
path = fw/ch32fun
url = https://github.com/cnlohr/ch32fun
[submodule "fw/u8g2"]
path = fw/u8g2
url = https://github.com/olikraus/u8g2

BIN
3D/3DModel.FCStd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,14 +2,4 @@
Repo for a cool usb-c soldering iron that uses C245 cartridges and power up to 130W.
Read the [project report](doc/report/README.md) (in italian).
# IDEAS
* USB-C connector on the edge of the PCB like the [alientek T90B](https://youtu.be/Xl0IKpvlF3Y?si=ecKIGLwI0vSPZbJ4&t=7) (clamping plate)
* OLED Screen on a separate PCB, same project with a V-Cut
* More compact tip recess, stabilized by a, aluminium ring, maybe bought at the hardware store
* Single screw disassembly
* 13mm grip dimensions and 18mm otherwise
* 1mm walls in PETG
* Add a ~small~ button to the bootsel line
Read the [project report](doc/report/README.md) (in italian).

12
fw/.gitignore vendored
View File

@ -1,12 +0,0 @@
.zen
.vscode
.ccls-cache
.cache
*.bin
*.lst
*.map
*.elf
*.hex
*.o
.build
compile_commands.json

Binary file not shown.

Binary file not shown.

View File

@ -1,53 +0,0 @@
all : build
TARGET := main
TARGET_MCU := CH32X035
TARGET_MCU_PACKAGE := CH32X035F8U6
BUILD_DIR := .build
DISPLAY := ssd1306_128x32
# include u8g2
U8G2_DIR:=u8g2/csrc
U8G2_SRC:=$(U8G2_DIR)/u8x8_d_$(DISPLAY).c $(filter-out $(U8G2_DIR)/u8x8_d_%.c, \
$(filter-out $(U8G2_DIR)/mui%.c, $(wildcard $(U8G2_DIR)/*.c)))
# include fr_math
FRMATH_DIR:=fr_math
FRMATH_SRC:=$(wildcard $(FRMATH_DIR)/*.c)
# include protothreads
PT_DIR:=pt
EXTRA_CFLAGS += -I$(U8G2_DIR) -I$(FRMATH_DIR) -I$(PT_DIR)
ADDITIONAL_C_FILES += lib_i2c.c display.c sc7a20.c pd.c
HEADER_FILES := $(wildcard *.h) $(wildcard $(PT_DIR)/*.h)
include ch32fun/ch32fun/ch32fun.mk
FLASH_COMMAND=$(MINICHLINK)/minichlink -C isp -w $< $(WRITE_SECTION) -b
# create build directory
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
# build u8g2
U8G2_OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(U8G2_SRC:.c=.o)))
$(BUILD_DIR)/%.o : $(U8G2_DIR)/%.c | $(BUILD_DIR)
$(PREFIX)-gcc $(CFLAGS) -c $< -o $@
# build target
TARGET_OBJS := $(addprefix $(BUILD_DIR)/, $(filter-out ch32fun.o, $(notdir $(FILES_TO_COMPILE:.c=.o))))
$(BUILD_DIR)/%.o : %.c $(HEADER_FILES) | $(BUILD_DIR)
$(PREFIX)-gcc $(CFLAGS) -c $< -o $@
# link target, the rest of the build is specified in ch32fun.mk
$(TARGET).elf : $(FILES_TO_COMPILE) $(LINKER_SCRIPT) $(EXTRA_ELF_DEPENDENCIES) $(U8G2_OBJS) $(TARGET_OBJS) ch32fun.o
$(PREFIX)-gcc -o $@ $(U8G2_OBJS) $(TARGET_OBJS) ch32fun.o $(CFLAGS) $(LDFLAGS)
flash : cv_flash
clean : cv_clean
rm -f $(BUILD_DIR)/*.o *.o || true
monitor :
picocom --imap lfcrlf /dev/ttyACM0

View File

@ -1,26 +0,0 @@
# USB-C Soldering Iron Firmware
```
SHRIM
__-------._
_` __===O~O_\.
/ \ _ __w_=
/___ /~^
| |~^
\ __\~^ \ V/
\_ _\ __ / /
`- __|_-'
```
## Special thanks to:
* cnlohr and all the contributors of [ch32fun][ch32fun]
* deftio for [FR_math][frmath] which I briefly used
* olkiarus for [u8g2][u8g2]
* The Swedish Institute of Computer Science for [protothreads][pt]
[ch32fun]: https://github.com/cnlohr/ch32fun
[frmath]: https://github.com/deftio/fr_math
[u8g2]: https://github.com/olikraus/u8g2
[pt]: https://dunkels.com/adam/pt/index.html

@ -1 +0,0 @@
Subproject commit cfffff6d6bd9bd97d7348d044a1de145f4548072

View File

@ -1,237 +0,0 @@
/*
* Copyright (c) 2026, Alessandro Mauri <alemauri001@gmail.com>.
* All rights reserved.
*
* This file is a heavily modified, single-header derivative of the
* protothreads library.
*
* =============================================================================
* Original Protothreads License:
* =============================================================================
* Copyright (c) 2004-2005, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Author: Adam Dunkels <adam@sics.se>
*/
#ifndef _COROUTINE_H
#define _COROUTINE_H
/* This is an implementation of stackless coroutines that uses the labels as
* values [1] feature of GNU C, similar to protothreads [2] with the lc-addrlabels.h
* include, the only difference being better ergonomics and minimal type checking.
*
* Since coroutines implemented this way need to return to wait for a condition
* stack-local variables are NOT preserved between wait()s, as such these functions
* have to be considered stackless. Any state that has to be preserved between
* waits have to be declared static or have to be preserved outside the routine.
*
* This library's intended use is in microcontrollers and memory-constrained
* systems where having a full rtos and/or having stackful coroutines is either
* too heavy or overkill. Stackless coroutines implemented this way are an
* alternative way of expressing state machines. Since coroutines have to be
* repeatedly called to be "scheduled", the code maintains a main loop, but state
* changes can be expressed with waits on conditions, timers, semaphores and other
* more expressive constructs.
*
* A simple example program is:
*
* #include "coroutine.h"
*
* // Updates the timer when called, returns true when it expires
* static int timer_expired(struct timer *t);
* // Sets a timer in milliseconds
* static void timer_set(struct timer *t, int interval);
*
* // First coroutine, waits for 1s and prints something
* coroutine coro_1(coro_state_t *s)
* {
* static struct timer t;
* coro_begin(s);
* for (;;) {
* timer_set(&t, 1000);
* coro_wait_until(s, timer_expired(&t));
* printf("coroutine 1\n");
* }
* coro_end();
* }
*
* // Second coroutine, waits for 500ms and prints something
* coroutine coro_2(coro_state_t *s)
* {
* static struct timer t;
* coro_begin(s);
* for (;;) {
* timer_set(&t, 500);
* coro_wait_until(s, timer_expired(&t));
* printf("coroutine 2\n");
* }
* coro_end();
* }
*
* int main(void)
* {
* coro_state_t s1, s2;
* coro_init(&s1);
* coro_init(&s2);
*
* // Main loop, calls each coroutine periodically
* for (;;) {
* coro_1(&s1);
* coro_2(&s2);
* usleep(100);
* }
* }
*
* [1]: https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Labels-as-Values.html
* [2]: https://dunkels.com/adam/pt/index.html
*/
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
// GCC: the extension is always present unless strict ANSI mode is forced.
// (Even with -pedantic it still works, just warns.)
#define HAVE_LABELS_AS_VALUES 1
#elif __has_extension(c_labels_as_values)
#define HAVE_LABELS_AS_VALUES 1
#else
#define HAVE_LABELS_AS_VALUES 0
#endif
_Static_assert(HAVE_LABELS_AS_VALUES, "This library requires the GNU C 'labels as values' extension");
// Useful macros
#define CORO_CONCAT2(s1, s2) s1##s2
#define CORO_CONCAT(s1, s2) CORO_CONCAT2(s1, s2)
#define CORO_CHECK_TYPE(var,type) { typedef void (*type_t)(type); type_t tmp = (type_t)0; if(0) tmp(var); }
// Return value of a coroutine, a coroutine should be scheduled (called) until
// it's return value becomes DONE
typedef enum {
CORO_INIT = 0,
CORO_CONT = CORO_INIT,
CORO_DONE = 1,
CORO_YIELDED = 2,
CORO_WAITING = 3,
} coroutine;
// Local continuation of the coroutine, where it left off
typedef void* coro_state_t;
/* -------------------------- COROUTINE MANAGEMENT -------------------------- */
// Initialize the coroutine state
#define coro_init(s) CORO_CHECK_TYPE(s, coro_state_t*) \
do { *s = NULL; } while (0)
// Jump to the previous state where the coroutine left off, __yield flag indicates
// wether the coroutine should yield this cycle
#define coro_begin(s) CORO_CHECK_TYPE(s, coro_state_t*) \
unsigned char __yield = 0; \
do { if(*s != NULL) goto *(*s); } while (0)
// Just to suppress the unused variable warning when no yield is used
#define coro_end() (void)__yield
// Set a jump with a gcc label as value feature, this is a GNU C extension
#define CORO_SET_JUMP(s) CORO_CHECK_TYPE(s, coro_state_t*) \
do { \
CORO_CONCAT(LC_LABEL, __LINE__): \
*s = &&CORO_CONCAT(LC_LABEL, __LINE__); \
} while (0)
// Yield from a coroutine
#define coro_yield(s) CORO_CHECK_TYPE(s, coro_state_t*) \
do { \
__yield = 1; \
CORO_SET_JUMP(s); \
if (__yield == 1) return CORO_YIELDED; \
} while (0)
// Wait until a condition is met (becomes true)
#define coro_wait_until(s, cond) CORO_CHECK_TYPE(s, coro_state_t*) \
do { \
CORO_SET_JUMP(s); \
if (!(cond)) return CORO_WAITING; \
} while (0)
// Shorthand for wait_until
#define coro_wait(s, cond) coro_wait_until(s, cond)
// Wait while a condition remains true
#define coro_wait_while(s, cond) coro_wait_until(s, !(cond))
// Exit from the coroutine, resets the state
#define coro_exit(s) CORO_CHECK_TYPE(s, coro_state_t*) \
do { \
coro_init(s); \
return CORO_DONE; \
} while (0)
// Restart a coroutine, when called it will not resume from where it left off,
// instead it will start from the beginning, the only difference with exit is
// the return value. To determine wether a coroutine has exited or restarted
// is to check it's return value
#define coro_restart(s) CORO_CHECK_TYPE(s, coro_state_t*) \
do { \
coro_init(s); \
return CORO_INIT; \
} while(0)
/* ------------------------- SEMAPHORE IMPLEMENTATION ----------------------- */
// Implements a basic semaphore type with the classic wait and signal operations
// semaphores are not bound checked
typedef int coro_semaphore_t;
// Initializes a semaphore with a starting value of "count"
#define coro_sem_init(sem, count) CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
do { \
*sem = (int)count; \
} while (0)
// Wait until a semaphore has a value other than zero
#define coro_sem_wait(state, sem) \
CORO_CHECK_TYPE(state, coro_state_t*) \
CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
do { \
coro_wait_until(state, *(sem) > 0); \
--(*sem); \
} while (0)
// Signal a semaphore
#define coro_sem_signal(state, sem) \
CORO_CHECK_TYPE(state, coro_state_t*) \
CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
++(*sem)
#endif

View File

@ -1,354 +0,0 @@
#include <u8g2.h>
#include <ch32fun.h>
#include <stdio.h>
#include "display.h"
#include "lib_i2c.h"
static u8g2_t u8g2;
static const char digits_lut[] =
"0001020304050607080910111213141516171819"
"2021222324252627282930313233343536373839"
"4041424344454647484950515253545556575859"
"6061626364656667686970717273747576777879"
"8081828384858687888990919293949596979899";
// GPIO and delay callback for u8g2/u8x8 display driver
static uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
switch(msg) {
case U8X8_MSG_GPIO_AND_DELAY_INIT:
// called once during init phase of u8g2/u8x8
// can be used to setup pins
printf("TODO: U8X8_MSG_GPIO_AND_DELAY_INIT\n");
break;
case U8X8_MSG_DELAY_NANO:
// delay arg_int * 1 nano second
// at 48MHz 1 cycle = 20ns, 1 nop = 1 cycle
// the for lopp takes about 2 cycles per iteration
for (int i = 0; i < (arg_int/(20*3)); i++) {
asm("nop");
}
break;
case U8X8_MSG_DELAY_100NANO:
// delay arg_int * 100 nano seconds
// at 48MHz 1 cycle = 20ns, 1 nop = 1 cycle
// the for lopp takes about 2 cycles per iteration
for (int i = 0; i < ((arg_int*100)/(20*3)); i++) {
asm("nop");
}
break;
case U8X8_MSG_DELAY_10MICRO:
// delay arg_int * 10 micro seconds
Delay_Us(arg_int*10);
break;
case U8X8_MSG_DELAY_MILLI:
// delay arg_int * 1 milli second
Delay_Ms(arg_int);
break;
case U8X8_MSG_DELAY_I2C:
// arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
// arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
printf("TODO: U8X8_MSG_DELAY_I2C\n");
break;
case U8X8_MSG_GPIO_D0:
// D0 or SPI clock pin: Output level in arg_int
//case U8X8_MSG_GPIO_SPI_CLOCK:
break;
case U8X8_MSG_GPIO_D1:
// D1 or SPI data pin: Output level in arg_int
//case U8X8_MSG_GPIO_SPI_DATA:
break;
case U8X8_MSG_GPIO_D2:
// D2 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_D3:
// D3 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_D4:
// D4 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_D5:
// D5 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_D6:
// D6 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_D7:
// D7 pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_E:
// E/WR pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_CS:
// CS (chip select) pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_DC:
// DC (data/cmd, A0, register select) pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_RESET:
funDigitalWrite(PIN_DISP_RST, arg_int);
// Reset pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_CS1:
// CS1 (chip select) pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_CS2:
// CS2 (chip select) pin: Output level in arg_int
break;
case U8X8_MSG_GPIO_I2C_CLOCK:
// arg_int=0: Output low at I2C clock pin
// arg_int=1: Input dir with pullup high for I2C clock pin
break;
case U8X8_MSG_GPIO_I2C_DATA:
// arg_int=0: Output low at I2C data pin
// arg_int=1: Input dir with pullup high for I2C data pin
break;
case U8X8_MSG_GPIO_MENU_SELECT:
// get menu select pin state
u8x8_SetGPIOResult(u8x8, 0);
break;
case U8X8_MSG_GPIO_MENU_NEXT:
// get menu next pin state
u8x8_SetGPIOResult(u8x8, 0);
break;
case U8X8_MSG_GPIO_MENU_PREV:
// get menu prev pin state
u8x8_SetGPIOResult(u8x8, 0);
break;
case U8X8_MSG_GPIO_MENU_HOME:
// get menu home pin state
u8x8_SetGPIOResult(u8x8, 0);
break;
default:
// default return value
u8x8_SetGPIOResult(u8x8, 1);
break;
}
return 1;
}
static uint8_t u8x8_byte_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
static uint8_t buffer[32];
static uint8_t buffer_idx;
uint8_t *data;
switch(msg) {
case U8X8_MSG_BYTE_INIT:
break;
case U8X8_MSG_BYTE_SEND:
data = (uint8_t*)arg_ptr;
while (arg_int > 0) {
buffer[buffer_idx++] = *data;
data++;
arg_int--;
}
break;
case U8X8_MSG_BYTE_START_TRANSFER:
buffer_idx = 0;
break;
case U8X8_MSG_BYTE_END_TRANSFER:
i2c_sendBytes(I2C_TARGET, u8x8_GetI2CAddress(u8x8) >> 1, buffer, buffer_idx);
break;
default:
return 0;
}
return 1;
}
u8g2_t* display_init(void)
{
#if SSD1306_128X32
u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, U8G2_R0, u8x8_byte_i2c, u8x8_gpio_and_delay);
#elif SSD1312_96X16
// NOTE: display size is wrong, hardware is 96x16, but driver is configured for 120x28
u8g2_Setup_ssd1312_i2c_128x32_f(&u8g2, U8G2_R0, u8x8_byte_i2c, u8x8_gpio_and_delay);
#else
static_assert(0, "unsupported display");
#endif
// TODO: log errors and return NULL on failure
u8g2_InitDisplay(&u8g2);
u8g2_SetPowerSave(&u8g2, 0);
u8g2_SetContrast(&u8g2, 255);
u8g2_SetBitmapMode(&u8g2, 1);
u8g2_SetFontMode(&u8g2, 1);
return &u8g2;
}
const char* u16toa(uint16_t value)
{
// Max uint16_t is 65535 (5 digits) + null terminator
static char buf[6];
char *p = &buf[5];
*p = '\0';
// Process two digits at a time using the LUT
while (value >= 100) {
const unsigned int idx = (value % 100) * 2;
value /= 100;
*--p = digits_lut[idx + 1];
*--p = digits_lut[idx];
}
// Handle the remaining value (< 100)
if (value < 10) {
*--p = (char)('0' + value);
} else {
const unsigned int idx = value * 2;
*--p = digits_lut[idx + 1];
*--p = digits_lut[idx];
}
return p;
}
const char* i16toa(int16_t value)
{
static char buf[7];
uint16_t uval;
bool negative = false;
if (value < 0) {
negative = true;
uval = (uint16_t)-value;
} else {
uval = (uint16_t)value;
}
char *p = &buf[6];
*p = '\0';
// Same LUT logic as unsigned
while (uval >= 100) {
const unsigned int idx = (uval % 100) * 2;
uval /= 100;
*--p = digits_lut[idx + 1];
*--p = digits_lut[idx];
}
if (uval < 10) {
*--p = (char)('0' + uval);
} else {
const unsigned int idx = uval * 2;
*--p = digits_lut[idx + 1];
*--p = digits_lut[idx];
}
if (negative) {
*--p = '-';
}
return p;
}
static char str_buf[32];
uint8_t str_len;
int buf_putc(char c) { str_buf[str_len++] = c; return 0; }
const char* buf_get(void) { str_buf[str_len] = '\0'; str_len = 0; return str_buf; }
// 7 segment display segments
static const uint8_t seg_left_xbm[] = {0x01,0x03,0x03,0x03,0x03,0x01};
static const uint8_t seg_right_xbm[] = {0x02,0x03,0x03,0x03,0x03,0x02};
static const uint8_t seg_top_xbm[] = {0x3f,0x1e};
static const uint8_t seg_bot_xbm[] = {0x1e,0x3f};
static const uint8_t seg_center_xbm[] = {0x1e,0x3f,0x1e};
static const uint8_t image_degc_xbm[] = {0x02,0x05,0x1a,0x24,0x04,0x04,0x24,0x18};
static const uint8_t image_degf_xbm[] = {0x02,0x05,0x3a,0x08,0x18,0x08,0x08,0x08};
static void draw_7seg(u8g2_t *u8g2, uint8_t x, uint8_t y, uint8_t n)
{
switch (n) {
case 0:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
break;
case 1:
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
break;
case 2:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 3:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 4:
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 5:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 6:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 7:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
break;
case 8:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
case 9:
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
break;
default:
break;
}
}
void draw_temp(u8g2_t *u8g2, uint8_t x, uint8_t y, int16_t temp, bool degc)
{
if (temp > 999 || temp < 0) temp = 0;
const char *s = u8x8_u16toa(temp, 3);
draw_7seg(u8g2, x+0, y+0, s[0]-'0');
draw_7seg(u8g2, x+9, y+0, s[1]-'0');
draw_7seg(u8g2, x+18, y+0, s[2]-'0');
u8g2_DrawXBM(u8g2, x+27, y+8, 6, 8, degc ? image_degc_xbm : image_degf_xbm);
}

View File

@ -1,28 +0,0 @@
#ifndef _DISPLAY_H
#define _DISPLAY_H
#include <u8g2.h>
#define SSD1306_128X32 1
// #define SSD1312_96X16 1
#define PIN_DISP_RST PA7 // display reset
#ifdef SSD1306_128X32
#define x_off 0
#define y_off 0
#endif
#ifdef SSD1312_96X16
#define x_off 0
#define y_off 8
#endif
u8g2_t* display_init(void);
const char* i16toa(int16_t value);
const char* u16toa(uint16_t value);
int buf_putc(char c);
const char* buf_get(void);
void draw_temp(u8g2_t *u8g2, uint8_t x, uint8_t y, int16_t temp, bool degc);
#endif // _DISPLAY_H

View File

@ -1,47 +0,0 @@
#ifndef _FILTER_H
#define _FILTER_H
#include <stdint.h>
#include <assert.h>
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
static_assert(-4 >> 1 == -2, ">> doesn't do sign extension");
// Fixed-Point Exponential Moving Average
// alpha = 1/2^k
// x: output value
// s: current sample
#define U16_FP_EMA_K2(x, s) (uint16_t)((((uint32_t)(x)<<2) - (x) + (s)) >> 2)
#define U16_FP_EMA_K4(x, s) (uint16_t)((((uint32_t)(x)<<4) - (x) + (s)) >> 4)
#define U16_FP_EMA_K8(x, s) (uint16_t)((((uint32_t)(x)<<8) - (x) + (s)) >> 8)
#define U16_FP_EMA_K16(x, s) (uint16_t)((((uint32_t)(x)<<16) - (x) + (s)) >> 16)
#define I16_FP_EMA_K2(x, s) (int16_t)((((int32_t)(x)<<2) - (x) + (s)) >> 2)
#define I16_FP_EMA_K4(x, s) (int16_t)((((int32_t)(x)<<4) - (x) + (s)) >> 4)
#define I16_FP_EMA_K8(x, s) (int16_t)((((int32_t)(x)<<8) - (x) + (s)) >> 8)
#define I16_FP_EMA_K16(x, s) (int16_t)((((int32_t)(x)<<16) - (x) + (s)) >> 16)
// Integer square root (binary search)
// https://en.wikipedia.org/wiki/Integer_square_root
static inline uint16_t isqrt(uint32_t x)
{
uint16_t l = 0; // lower bound of the square root
uint16_t r = x + 1; // upper bound of the square root
while (l != r - 1) {
uint32_t m = (l + r) / 2; // midpoint to test
if (m * m <= x) {
l = m;
} else {
r = m;
}
}
return l;
}
#endif // _FILTER_H

View File

@ -1,123 +0,0 @@
#ifndef _FPMATH_H
#define _FPMATH_H
#include <stdint.h>
#include <assert.h>
/*
* Minimal Fixed-Point math library implementation
*/
// This library depends on sign extension
static_assert(-4 >> 1 == -2, ">> doesn't do sign extension");
// Fixed point signed type in 16.16 format
#define FP_R 16
typedef int32_t fp16_t;
#define POW10(d) ( \
((d) == 0) ? 1L : \
((d) == 1) ? 10L : \
((d) == 2) ? 100L : \
((d) == 3) ? 1000L : \
((d) == 4) ? 10000L : \
((d) == 5) ? 100000L : \
((d) == 6) ? 1000000L : \
((d) == 7) ? 10000000L : \
((d) == 8) ? 100000000L : 1000000000L)
static inline fp16_t i2fp(int16_t i)
{
return (int32_t)i << FP_R;
}
static inline int16_t fp2i(fp16_t f)
{
return (int16_t)(f >> FP_R);
}
static inline fp16_t num2fp(int16_t i, int16_t f, uint8_t d)
{
return i2fp(i) + (i < 0 ? -(i2fp(f)/POW10(d)) : i2fp(f)/POW10(d));
}
// Saturating addition
static inline fp16_t fp_add(fp16_t a, fp16_t b)
{
fp16_t r;
if (__builtin_add_overflow(a, b, &r)) {
// Positive overflow
if (a > 0 && b > 0) {
r = INT32_MAX;
} else {
r = INT32_MIN;
}
}
return r;
}
static inline fp16_t fp_sub(fp16_t a, fp16_t b)
{
fp16_t r;
if (__builtin_sub_overflow(a, b, &r)) {
if (a >= 0 && b < 0) {
r = INT32_MAX;
} else {
r = INT32_MIN;
}
}
return r;
}
// Saturating multiplication
static inline fp16_t fp_mul(fp16_t a, fp16_t b)
{
int64_t r = ((int64_t)a * (int64_t)b + 0x8000) >> 16;
if (r > (int64_t)0x7fffffff) return INT32_MAX;
if (r < -(int64_t)0x80000000) return INT32_MIN;
return r;
}
static inline fp16_t fp_div(fp16_t a, fp16_t b)
{
if (b == 0) {
return (a >= 0) ? INT32_MAX : INT32_MIN;
}
int64_t r = ((int64_t)a << 16) / b;
// Saturate to 32-bit bounds
if (r > (int64_t)0x7fffffff) return INT32_MAX;
if (r < -(int64_t)0x80000000) return INT32_MIN;
return (fp16_t)r;
}
static inline fp16_t fp_clamp(fp16_t x, fp16_t min, fp16_t max)
{
return x < min ? min : (x > max ? max : x);
}
static inline fp16_t fp_map(fp16_t x, fp16_t src_start, fp16_t src_end, fp16_t dst_start, fp16_t dst_end)
{
fp16_t x_offset = fp_sub(x, src_start);
fp16_t dst_range = fp_sub(dst_end, dst_start);
fp16_t src_range = fp_sub(src_end, src_start);
fp16_t scaled = fp_mul(x_offset, dst_range);
fp16_t mapped_offset = fp_div(scaled, src_range);
return fp_add(mapped_offset, dst_start);
}
#endif // _FPMATH_H

View File

@ -1,43 +0,0 @@
#ifndef _FUNCONFIG_H
#define _FUNCONFIG_H
#define FUNCONF_USE_DEBUGPRINTF 0 // can only have one printf
#define FUNCONF_USE_USBPRINTF 1
#define FUNCONF_DEBUG_HARDFAULT 0
#define CH32X035 1
#define I2C_TARGET I2C1
#define FRAME_TIME_MS 20 // 50Hz
#define PWM_FREQ_HZ 100000 // TIM3 PWM frequency
// Pin definitions
#define PIN_VBUS PA0 // vbus voltage feedback
#define PIN_CURRENT PA1 // current feedback
#define PIN_NTC PA2 // ntc temperature sensor
#define PIN_TEMP PA3 // thermocouple amplifier
#define PIN_12V PA5 // 12V regulator enable
#define PIN_HEATER PA6 // power mosfet gate control
#define PIN_ENC_A PB3 // rotary encoder A
#define PIN_ENC_B PB11 // rotary encoder B
#define PIN_BTN PB1 // rotary encoder button
// Analog channel definitions
#define VBUS_ADC_CHANNEL ANALOG_0 // PA0
#define CURRENT_ADC_CHANNEL ANALOG_1 // PA1
#define NTC_ADC_CHANNEL ANALOG_2 // PA2
#define TEMP_ADC_CHANNEL ANALOG_3 // PA3
#define VREF_INT_CHANNEL 15 // Internal channel set to 1.2V reference
#define ENCODER_INV true
#define ENCODER_FAST 3
#define MAX_BOARD_TEMP 50
#define MAX_TIP_TEMP 500
#define TURN_OFF_DELAY 3
#define CYCLES_PER_MEASURE 2
#define BOARD_MAX_VOLTAGE 28000
#define MIN_TIP_SET_TEMP 100
#define MAX_TIP_SET_TEMP 420
#endif // _FUNCONFIG_H

View File

@ -1,231 +0,0 @@
// MIT License
// Copyright (c) 2025 UniTheCat
// Tested with Ch32X03x and CH32V30x
#include "lib_i2c.h"
//! ####################################
//! I2C INIT FUNCTIONS
//! ####################################
void i2c_init(I2C_TypeDef* I2Cx, u32 PCLK, u32 i2cSpeed_Hz) {
// Enable I2C clock
if (I2Cx == I2C1) {
RCC->APB1PCENR |= RCC_APB1Periph_I2C1;
}
#ifdef I2C2
else if (I2Cx == I2C2) {
RCC->APB1PCENR |= RCC_APB1Periph_I2C2;
}
#endif
// Disable I2C before configuration
I2Cx->CTLR1 &= ~I2C_CTLR1_PE;
// configure I2C clock
I2Cx->CTLR2 = (PCLK / 1000000);
I2Cx->CKCFGR = PCLK / (i2cSpeed_Hz << 1); // PeripheralClock / (100KHz * 2)
// Enable I2C
I2Cx->CTLR1 |= I2C_CTLR1_PE;
// Enable ACK
I2Cx->CTLR1 |= I2C_CTLR1_ACK;
}
u8 i2c_start(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 isRead) {
//# Wait while BUSY, when BUSY is set to 0 then continue
u32 timeout = I2C_DEFAULT_TIMEOUT;
while((I2Cx->STAR2 & I2C_STAR2_BUSY) && --timeout);
// if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x11; }
//# Generate START condition
I2Cx->CTLR1 |= I2C_CTLR1_START;
//# Wait while SB is 0, when SB is set to 1 then continue
timeout = I2C_DEFAULT_TIMEOUT;
while(!(I2Cx->STAR1 & I2C_STAR1_SB) && --timeout);
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x12; }
// printf("timeoutB: %d\n", I2C_DEFAULT_TIMEOUT - timeout);
//# Send address + read/write. Write = 0, Read = 1
I2Cx->DATAR = (i2cAddress << 1) | isRead;
//# Wait while ADDR is 0, if ADDR is set to 1 then continue
timeout = I2C_DEFAULT_TIMEOUT;
while(!(I2Cx->STAR1 & I2C_STAR1_ADDR) && --timeout);
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x13; }
// printf("timeoutC: %d\n", I2C_DEFAULT_TIMEOUT - timeout);
//! REQUIRED. Clear ADDR by reading STAR1 then STAR2
(void)I2Cx->STAR1;
(void)I2Cx->STAR2;
return 0;
}
void i2c_stop(I2C_TypeDef* I2Cx)
{
//# Generate STOP condition
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
}
void i2c_scan(I2C_TypeDef* I2Cx, void (*onPingFound)(u8 address)) {
// mininum 0x08 to 0x77 (0b1110111)
for (int i = 0x08; i < 0x77; i++) {
u8 ping = i2c_start(I2Cx, i, 1);
//# Generate STOP condition
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
if (ping == 0) onPingFound(i);
}
}
//! ####################################
//! I2C SEND FUNCTION
//! ####################################
u8 i2c_sendBytes_noStop(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len) {
u8 err = i2c_start(I2Cx, i2cAddress, 0); // Write mode
if (err) return err;
u32 timeout;
for(u8 i = 0; i < len; i++) {
//# Wait for register empty
timeout = I2C_DEFAULT_TIMEOUT;
while(!(I2Cx->STAR1 & I2C_STAR1_TXE) && --timeout);
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x21; }
I2Cx->DATAR = buffer[i]; // Send data
}
//# Wait for transmission complete. Wait while BTF is 0, when set to 1 continue
timeout = I2C_DEFAULT_TIMEOUT;
while(!(I2Cx->STAR1 & I2C_STAR1_BTF) && --timeout);
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x22; }
return 0;
}
u8 i2c_sendBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len) {
u8 err = i2c_sendBytes_noStop(I2Cx, i2cAddress, buffer, len);
//# Generate STOP condition
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
return err;
}
u8 i2c_sendByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 data) {
return i2c_sendBytes(I2Cx, i2cAddress, &data, 1);
}
//! ####################################
//! I2C RECEIVE FUNCTIONS
//! ####################################
u8 i2c_readBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, u8* buffer, u8 len) {
u8 err = i2c_start(I2Cx, i2cAddress, 1); // Read mode
if (err) return err;
//# Enable ACK at the beginning
I2Cx->CTLR1 |= I2C_CTLR1_ACK;
for(u8 i = 0; i < len; i++) {
//# Before reading the last bytes, disable ACK to signal the slave to stop sending
if(i == len-1) I2Cx->CTLR1 &= ~I2C_CTLR1_ACK;
//# Wait for data. Wait while RxNE is 0, when set to 1 continue
u32 timeout = I2C_DEFAULT_TIMEOUT;
while(!(I2Cx->STAR1 & I2C_STAR1_RXNE) && --timeout);
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x31; }
//# Read data
buffer[i] = I2Cx->DATAR;
}
//# Generate STOP condition
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
return 0;
}
// Write to register and then do read data, no stop inbetween
u8 i2c_readRegTx_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress,
u8 *tx_buf, u8 tx_len, u8 *rx_buf, u8 rx_len
) {
u8 err = i2c_sendBytes_noStop(I2Cx, i2cAddress, tx_buf, tx_len); // Send register address
if (err) return err;
err = i2c_readBytes(I2Cx, i2cAddress, rx_buf, rx_len); // Read data
return err;
}
//! ####################################
//! I2C SLAVE FUNCTIONS
//! ####################################
void i2c_slave_init(I2C_TypeDef* I2Cx, u16 self_addr, u32 PCLK, u32 i2cSpeed_Hz) {
i2c_init(I2Cx, PCLK, i2cSpeed_Hz);
// Configure the CH32 I2C slave address to make it an I2C slave
I2Cx->OADDR1 = (self_addr << 1);
I2Cx->OADDR2 = 0;
I2Cx->CTLR2 |= I2C_CTLR2_ITEVTEN | I2C_CTLR2_ITERREN | I2C_CTLR2_ITBUFEN;
// Enable Event and Error Interrupts
if (I2Cx == I2C1) {
NVIC_EnableIRQ(I2C1_EV_IRQn); // I2C Event interrupt
NVIC_EnableIRQ(I2C1_ER_IRQn); // I2C Error interrupt
}
#ifdef I2C2
else if (I2Cx == I2C2) {
NVIC_EnableIRQ(I2C2_EV_IRQn); // I2C Event interrupt
NVIC_EnableIRQ(I2C2_ER_IRQn); // I2C Error interrupt
}
#endif
}
void I2C1_ER_IRQHandler(void) __attribute__((interrupt));
void I2C1_ER_IRQHandler(void) {
// get I2C status
uint16_t STAR1 = I2C1->STAR1;
// Obtain and clear Bus error
if (STAR1 & I2C_STAR1_BERR) {
I2C1->STAR1 &= ~(I2C_STAR1_BERR);
}
// Obtain and clear Arbitration lost error
if (STAR1 & I2C_STAR1_ARLO) {
I2C1->STAR1 &= ~(I2C_STAR1_ARLO);
}
// Obtain and clear Acknowledge failure error
if (STAR1 & I2C_STAR1_AF) {
I2C1->STAR1 &= ~(I2C_STAR1_AF);
}
}
#ifdef I2C2
void I2C2_ER_IRQHandler(void) __attribute__((interrupt));
void I2C2_ER_IRQHandler(void) {
// get I2C status
uint16_t STAR1 = I2C2->STAR1;
// Obtain and clear Bus error
if (STAR1 & I2C_STAR1_BERR) {
I2C2->STAR1 &= ~(I2C_STAR1_BERR);
}
// Obtain and clear Arbitration lost error
if (STAR1 & I2C_STAR1_ARLO) {
I2C2->STAR1 &= ~(I2C_STAR1_ARLO);
}
// Obtain and clear Acknowledge failure error
if (STAR1 & I2C_STAR1_AF) {
I2C2->STAR1 &= ~(I2C_STAR1_AF);
}
}
#endif

View File

@ -1,61 +0,0 @@
// MIT License
// Copyright (c) 2025 UniTheCat
// Tested with Ch32X03x and CH32V30x
#ifndef _LIB_I2C_H
#define _LIB_I2C_H
#include <ch32fun.h>
#define I2C_DEFAULT_TIMEOUT 50000
#if defined(FUNCONF_USE_DEBUGPRINTF) || defined(FUNCONF_USE_USBPRINTF) || defined(FUNCONF_USE_UARTPRINTF)
#include <stdio.h>
static inline void print_i2c_device(uint8_t addr)
{
printf("Device found at 0x%02X\n", addr);
}
#endif
//! ####################################
//! I2C INIT FUNCTIONS
//! ####################################
void i2c_init(I2C_TypeDef* I2Cx, u32 PCLK, u32 i2cSpeed_Hz);
u8 i2c_start(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 isRead);
void i2c_stop(I2C_TypeDef* I2Cx);
void i2c_scan(I2C_TypeDef* I2Cx, void (*onPingFound)(u8 address));
//! ####################################
//! I2C SEND FUNCTION
//! ####################################
u8 i2c_sendBytes_noStop(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len);
u8 i2c_sendBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len);
u8 i2c_sendByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 data);
//! ####################################
//! I2C RECEIVE FUNCTIONS
//! ####################################
u8 i2c_readBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, u8* buffer, u8 len);
u8 i2c_readByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 reg, u8* buffer);
// Write to register and then do read data, no stop inbetween
u8 i2c_readRegTx_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 *tx_buf, u8 tx_len, u8 *rx_buf, u8 rx_len);
inline u8 i2c_readReg_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 reg, u8 *rx_buf, u8 rx_len)
{
return i2c_readRegTx_buffer(I2Cx, i2cAddress, &reg, 1, rx_buf, rx_len);
}
//! ####################################
//! I2C SLAVE FUNCTIONS
//! ####################################
void i2c_slave_init(I2C_TypeDef* I2Cx, u16 self_addr, u32 PCLK, u32 i2cSpeed_Hz);
#endif // _LIB_I2C_H

694
fw/main.c
View File

@ -1,694 +0,0 @@
#include <ch32fun.h>
#include <stdint.h>
#include <stdio.h>
#include <fsusb.h>
#include "funconfig.h"
#include "lib_i2c.h"
#include "display.h"
#include "filter.h"
#include "sc7a20.h"
#include "pd.h"
#include "ntc.h"
#include "fpmath.h"
#include "coroutine.h"
// Task timers
struct timer {
uint32_t start, set;
};
// Set a timer, call timer_expired repeatedly to update it
static inline void timer_set(struct timer *t, uint32_t ms)
{
t->start = funSysTick32();
t->set = Ticks_from_Ms(ms);
}
// Check if enough time has passed from timer_set call
static inline bool timer_expired(struct timer *t)
{
return funSysTick32() > (t->start + t->set);
}
// Button
struct button {
bool now, prev;
};
static inline void button_init(struct button *btn, bool pullup)
{
btn->now = btn->prev = pullup;
}
static inline void button_update(struct button *btn, bool state)
{
btn->prev = btn->now;
btn->now = state;
}
#define button_rising(btn) ((btn).now == true && (btn).prev == false)
#define button_falling(btn) ((btn).now == false && (btn).prev == true)
/* ------------------------------ Global State ------------------------------ */
u8g2_t *u8g2; // Display state
int16_t encoder; // Rotary encoder counter
struct pd_profile_t pd_profile; // USB Power Delivery profile
uint16_t vcc_mv = 3300; // Logic (and analog) voltage
uint16_t tip_mv; // Tip amplifier reading in mV
uint16_t tip_temp_c; // Converted tip temperature in degrees C
int16_t temp_c; // Board temperature in degrees C
uint16_t vbus_mv; // USB bus voltage in mV
uint16_t current_ma; // USB bus current to the heater in mA
uint16_t power; // Current power provided to the heater
uint16_t duty; // Current mosfet driver duty cycle (0-100%)
bool enabled = false; // Power electronics enabled
// convert the raw TPA191 adc reading to a current in milliamps
static inline int16_t get_current_ma(uint16_t adc_reading)
{
// Rshunt = 4 milliOhm
// Gain = 100
u32 mv = ((u32)adc_reading * vcc_mv) / 4096;
return (mv * 10) / 4;
}
// this callback is mandatory when FUNCONF_USE_USBPRINTF is defined,
// can be empty though
void handle_usbfs_input(int numbytes, uint8_t *data)
{
(void)numbytes;
(void)data;
}
/*
* __ ____ ____
* A: |____| |____| |____
* ____ ____ __
* B: ____| |____| |____|
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
* f r r f f r r f f r
* |<---->| single detent
*/
void update_encoder(void)
{
// 0 = 00, 1 = 01, 2 = 10, 3 = 11
static uint8_t last_state = 0;
static int8_t count;
// Lookup table: state_table[last_state][current_state]
// 0 = invalid move or bounce (ignore)
// 1 = valid forward step
// -1 = valid backward step
static const int8_t state_table[4][4] = {
{ 0, 1, -1, 0}, // from 00
{-1, 0, 0, 1}, // from 01
{ 1, 0, 0, -1}, // from 10
{ 0, -1, 1, 0} // from 11
};
// FIXME: even with interrupts disabled and debounce, a single detent triggers
// multiple interrupts, leading to multiple encoder updates in a short time.
if (funDigitalRead(PIN_BTN) == 0) return;
bool a = funDigitalRead(PIN_ENC_A);
bool b = funDigitalRead(PIN_ENC_B);
Delay_Us(100);
if (a != funDigitalRead(PIN_ENC_A) || b != funDigitalRead(PIN_ENC_B))
return; // debounce
uint8_t current_state = (a << 1) | b;
// Find the movement direction based on transition
count += state_table[last_state][current_state];
#if ENCODER_INV
if (count == 4) encoder--, count = 0;
if (count == -4) encoder++, count = 0;
#else
if (count == 4) encoder++, count = 0;
if (count == -4) encoder--, count = 0;
#endif
// Save current state for the next interrupt
last_state = current_state;
}
// Attached to PIN_ENC_A rising and falling edges
void EXTI7_0_IRQHandler(void) __attribute__((interrupt));
void EXTI7_0_IRQHandler(void)
{
__disable_irq();
update_encoder();
EXTI->INTFR = EXTI_Line3;
__enable_irq();
}
// Attached to PIN_ENC_B rising and falling edges
void EXTI15_8_IRQHandler(void) __attribute__((interrupt));
void EXTI15_8_IRQHandler(void)
{
__disable_irq();
update_encoder();
EXTI->INTFR = EXTI_Line11;
__enable_irq();
}
// Procedure to get hardware I2C working on the CH32X035F8U6
static inline void setup_i2c(void)
{
// Order here matters, first initialize the AFIO and I2C subsystems then
// change register values, do that the other way around and the configuration
// wont take effect
// Enable AFIO (Alternate Function IO)
RCC->APB2PCENR |= RCC_AFIOEN;
// Init I2C
i2c_init(I2C_TARGET, FUNCONF_SYSTEM_CORE_CLOCK, 400000);
// To utilize the I2C bus we need to disable SWD first, since the pins overlap
AFIO->PCFR1 &= ~(0b0111 << 24);
AFIO->PCFR1 |= 0b0100 << 24;
// Map SCL to PC18 and SDA to PC19
AFIO->PCFR1 |= 0b0101 << 2;
// Manually set the I2C pins to Alternate Function IO, CNF=10b, MODE=10b
GPIOC->CFGXR &= ~((0xF << 8) | (0xF << 12)); // first clear the bits
// then set them
GPIOC->CFGXR |= 0b1010 << 8; // PC18
GPIOC->CFGXR |= 0b1010 << 12; // PC19
}
volatile uint16_t adc_buffer[16];
// Set-up the adc to perform continous conversion of enabled channels, enable
// channel injection and setup DMA to automatically transfer conversion results
// to a buffer
static inline void setup_adc_and_dma(uint8_t *channels, uint8_t ch_size, uint8_t *injected, uint8_t in_size)
{
if (channels == NULL || ch_size == 0) return;
// FIXME: for now only support a single configuration register, so at max 6 channels
// I don't want to implement logic to switch registers right now
// TODO: report an error
if (ch_size > 6) return;
// General ADC initialization, I use this only for enabling clocks and such
funAnalogInit(); // general initialization
// Set the SCAN and CONT bits to enter continous conversion mode
// Do not set the IAUTO bit to ensure injected channels are converted only
// when specified by software
// Set the regular channel trigger mode to software (EXTSEL = 0b111) to ensure
// conversion starts in sync with DMA (this should already be done by funAnalogInit())
ADC1->CTLR1 |= ADC_SCAN;
ADC1->CTLR2 |= ADC_CONT | ADC_EXTSEL;
// Setup regular channels (scanned continously)
// TODO: setup sampling time
for (uint8_t i = 0; i < ch_size; i++) {
// Increase sampling time to have less cross talk between channels
// 0b111 means 11 ADC clock cycles (max)
if (channels[i] < 10) {
ADC1->SAMPTR2 |= 0b111 << (channels[i]*3);
} else {
ADC1->SAMPTR1 |= 0b111 << ((channels[i]-10)*3);
}
ADC1->RSQR3 |= channels[i] << (i*5);
}
// Set the number of normal conversion channels
ADC1->RSQR1 |= (ch_size-1) << 20;
// Set-up injection channels
// The injection channel register allows for up to 4 channels, if the buffer is larger
// skip this step
// TODO: report an error
if (injected != NULL && in_size != 0 && in_size <= 4) {
// enable injection group
// JEXTSEL = 0b111 (software trigger)
ADC1->CTLR2 |= ADC_JEXTSEL;
for (uint8_t i = 0; i < in_size; i++) {
ADC1->ISQR |= injected[i] << ((4-in_size+i)*5);
}
// Set the number of injection channels
ADC1->ISQR |= (in_size-1) << 20;
}
// Set-up DMA, ADC is connected only to channel 1
// Turn on DMA
RCC->AHBPCENR |= RCC_AHBPeriph_DMA1;
// 1. Set the address of the source peripheral, in this case the output
// register of the ADC
DMA1_Channel1->PADDR = (uint32_t)&(ADC1->RDATAR);
// 2. Set the destination (base) address of the data
DMA1_Channel1->MADDR = (uint32_t)adc_buffer;
// 3. Set the number of transfers to be done each cycle, in this case it's
// the same as the number of regular conversion cycles
DMA1_Channel1->CNTR = ch_size;
// 4. Set mode: Peripheral to Memory, MEM2MEM=0 DIR=0
// Circular mode CIRC=1, restart after CNTR transfers
// Max priority to not lose conversions and offset values in the buffer
DMA1_Channel1->CFGR =
DMA_M2M_Disable |
DMA_Priority_VeryHigh |
DMA_MemoryDataSize_HalfWord |
DMA_PeripheralDataSize_HalfWord |
DMA_MemoryInc_Enable |
DMA_Mode_Circular |
DMA_DIR_PeripheralSRC;
// Turn on DMA channel 1
DMA1_Channel1->CFGR |= DMA_CFGR1_EN;
// Enable DMA requests from the ADC
ADC1->CTLR2 |= ADC_DMA;
// Power up ADC again
ADC1->CTLR2 |= ADC_ADON;
// start conversion
ADC1->CTLR2 |= ADC_SWSTART;
}
// Perform a conversion on the injected ADC channels, this is synchronous and
// halts conversion on the normal channels until it completes
volatile uint16_t injection_results[4];
static inline bool adc_injection_conversion() {
// Clear any pending flags
ADC1->STATR &= ~(ADC_JEOC);
// Start injection conversion using external trigger method
ADC1->CTLR2 |= ADC_JSWSTART;
// Wait for all conversions to complete
s32 timeout = 1000000;
while(!(ADC1->STATR & ADC_JEOC) && timeout--) {}
if (timeout <= 0) return false;
// Read all results
injection_results[0] = ADC1->IDATAR1 & 0x0FFF;
injection_results[1] = ADC1->IDATAR2 & 0x0FFF;
injection_results[2] = ADC1->IDATAR3 & 0x0FFF;
injection_results[3] = ADC1->IDATAR4 & 0x0FFF;
// Clear JEOC flag
ADC1->STATR &= ~ADC_JEOC;
return true;
}
// mask for the CCxP bits
// when set PWM outputs are held HIGH by default and pulled LOW
// when zero PWM outputs are held LOW by default and pulled HIGH
// #define TIM3_DEFAULT 0xff
#define TIM3_DEFAULT 0x00
static inline void setup_pwm(void)
{
// Enable TIM3 clock
RCC->APB1PCENR |= RCC_APB1Periph_TIM3;
// Since TIM3 is enabled with TIM3->SMCFGR.SMS = 0b000 (default value) the
// clock source is the internal clock
// The internal clock goes through the HBB prescaler RCC->CFGR0.HPRE which
// by default is disabled
// Reset TIM3 to init all regs
RCC->APB1PRSTR |= RCC_APB1Periph_TIM3;
RCC->APB1PRSTR &= ~RCC_APB1Periph_TIM3;
// set TIM3 clock prescaler divider
TIM3->PSC = 0x0000; // no prescaler
// set PWM total cycle width
static_assert((FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1) < 0xffff, "PWM_FREQ_HZ too low for TIM3");
TIM3->ATRLR = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
// for channel 1 let CCxS stay 00 (output), set OC1M to 110 (PWM 1)
// enabling preload (OC1PE) causes the new pulse width in compare capture
// register only to come into effect when UG bit in SWEVGR is set
// (= initiate update) (auto-clears)
TIM3->CHCTLR1 |= TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE;
// Enable channel 1 output (PA6)
TIM3->CCER |= TIM_CC1E | ( TIM_CC1P & TIM3_DEFAULT );
// CTLR1: default is up, events generated, edge align
// enable auto-reload of preload
TIM3->CTLR1 |= TIM_ARPE;
}
static inline void pwm_on(void)
{
// initialize counter
TIM3->SWEVGR |= TIM_UG;
// Enable TIM3
TIM3->CTLR1 |= TIM_CEN;
}
static inline void pwm_off(void)
{
// Disable TIM3
TIM3->CTLR1 &= ~TIM_CEN;
TIM3->CH1CVR = 0;
}
static inline void pwm_set(uint16_t pulse_width)
{
TIM3->CH1CVR = pulse_width;
}
// Input: temperature difference
// Output: duty-cycle 0-max_duty
uint16_t pid(int16_t delta, int16_t max_duty)
{
// PID coefficients
const fp16_t Kp = num2fp( 1, 1700, 4);
const fp16_t Ti = num2fp(10, 0000, 4);
const fp16_t Td = num2fp( 0, 1500, 4);
static fp16_t err_p, err_i, intgrt, err_d, dt, prev_err;
static u32 t, prev_t;
t = funSysTick32();
dt = fp_div(i2fp((t-prev_t)/DELAY_MS_TIME), i2fp(1000));
// if pid was paused, reset the integrator
if (dt > num2fp(0, 2, 1)) intgrt = 0;
fp16_t err = i2fp(delta); // temperature delta as fixed point number
err_p = err;
err_i = fp_mul(fp_div(err, Ti), dt);
err_d = fp_mul(fp_div(fp_sub(err, prev_err), dt), Td);
prev_err = err;
prev_t = t;
fp16_t e = 0;
e = fp_add(e, err_p);
e = fp_add(fp_add(e, err_i), intgrt);
e = fp_add(e, err_d);
e = fp_mul(e, Kp);
// TODO: use a back calculation anti windup strategy
// only integrate if the output is less then max
if (e < i2fp(100) && e > 0) {
intgrt = fp_add(intgrt, err_i);
}
e = fp_clamp(e, i2fp(0), i2fp(100));
// TODO: implement minimum duty cycle
return fp2i(fp_map(e, 0, i2fp(100), 0, i2fp(max_duty)));
}
/* ------------------------------ Board Setup ------------------------------- */
static inline void setup(void)
{
// Generic system setup
SystemInit();
funGpioInitAll();
USBFSSetup();
// ====================== Analog pin configuration ====================== //
funPinMode(PIN_VBUS, GPIO_CFGLR_IN_ANALOG);
funPinMode(PIN_CURRENT, GPIO_CFGLR_IN_ANALOG);
funPinMode(PIN_NTC, GPIO_CFGLR_IN_ANALOG);
funPinMode(PIN_TEMP, GPIO_CFGLR_IN_ANALOG);
// Analog inputs setup (dma and injection conversion)
uint8_t adc_channels[] = {
VBUS_ADC_CHANNEL,
CURRENT_ADC_CHANNEL,
NTC_ADC_CHANNEL
};
uint8_t adc_injected[] = {
TEMP_ADC_CHANNEL,
VREF_INT_CHANNEL
};
setup_adc_and_dma(adc_channels, sizeof(adc_channels), adc_injected, sizeof(adc_injected));
// ====================== Digital pin configuration ===================== //
funPinMode(PIN_12V, GPIO_CFGLR_OUT_10Mhz_PP);
funDigitalWrite(PIN_12V, 0);
funPinMode(PIN_HEATER, GPIO_CFGLR_OUT_10Mhz_AF_PP);
funDigitalWrite(PIN_HEATER, 0);
funPinMode(PIN_DISP_RST, GPIO_CFGLR_OUT_10Mhz_PP);
funDigitalWrite(PIN_DISP_RST, 1);
funPinMode(PIN_ENC_A, GPIO_CFGLR_IN_PUPD); // enable pull-up/down
funDigitalWrite(PIN_ENC_A, 1); // specify pull-up
funPinMode(PIN_ENC_B, GPIO_CFGLR_IN_PUPD); // enable pull-up/down
funDigitalWrite(PIN_ENC_B, 1); // specify pull-up
funPinMode(PIN_BTN, GPIO_CFGLR_IN_FLOAT);
// Setup PWM timer, includes pin setup
setup_pwm();
pwm_off();
// =========================== Encoder Setup ============================ //
// Configure the IO as an interrupt.
// PIN_ENC_B is on port B, channel 11
AFIO->EXTICR1 |= AFIO_EXTICR1_EXTI11_PB; // Port B channel (pin) 11
EXTI->INTENR |= EXTI_INTENR_MR11; // Enable EXT11
EXTI->FTENR |= EXTI_FTENR_TR11; // Falling edge trigger
EXTI->RTENR |= EXTI_RTENR_TR11; // Rising edge trigger
// enable interrupt
NVIC_EnableIRQ(EXTI15_8_IRQn);
// PIN_ENC_A is on port B, channel 3
AFIO->EXTICR1 |= AFIO_EXTICR1_EXTI3_PB; // Port B channel (pin) 3
EXTI->INTENR |= EXTI_INTENR_MR3; // Enable EXT3
EXTI->FTENR |= EXTI_FTENR_TR3; // Falling edge trigger
EXTI->RTENR |= EXTI_RTENR_TR3; // Rising edge trigger
// enable interrupt
NVIC_EnableIRQ(EXTI7_0_IRQn);
// ============================= I2C Setup ============================== //
// Setup i2c line, includes setting the pin alternate mode
setup_i2c();
// Start i2c peripherals
u8g2 = display_init();
sc7a20_init();
}
// Update the global istantaneous voltage, current, power and board temperature
// this requires the automatic conversion (ADC+DMA) to be running
static inline void update_power_and_temperature(void)
{
// Voltage current and power
vbus_mv = U16_FP_EMA_K4(vbus_mv, ((u32)adc_buffer[0]*vcc_mv*11)/4096);
current_ma = U16_FP_EMA_K4(current_ma, get_current_ma(adc_buffer[1]));
power = ((u32)vbus_mv*current_ma)/1000000;
// Board temperature
temp_c = I16_FP_EMA_K4(temp_c, get_temp_c(adc_buffer[2]));
}
// Update VCC and the tip temperature, both are sampled with injection conversion
// so it is triggered in this function
static inline void update_tip_and_vcc(void)
{
// Tip calibration factors
const fp16_t tip_k = num2fp(0, 14473, 5);
const fp16_t tip_off = num2fp(0, 0, 0);
adc_injection_conversion();
// Calibrate VCC with the internal reference value
vcc_mv = I16_FP_EMA_K4(vcc_mv, ((uint32_t)1200 * 4096)/injection_results[1]);
uint16_t tip_mv = ((u32)injection_results[0]*vcc_mv)/4096;
int16_t tt_now = fp2i(fp_add(fp_mul(i2fp(tip_mv), tip_k), tip_off));
// Tip temp with cold-junction compensation, assume the board temperature is
// the same as the cold junction, on an external handle this is not always true
tip_temp_c = I16_FP_EMA_K4(tip_temp_c, tt_now + temp_c);
}
// coroutine to draw the "main" ui which draws the current tip temperature, power
// pwm state, etc.
coro_state_t cs_ui;
coroutine c_draw_main_ui(coro_state_t *state)
{
static struct timer t;
coro_begin(state);
for(;;) {
// Wait for the next frame, roughly 30 fps
timer_set(&t, 33);
coro_wait_until(state, timer_expired(&t));
// Draw UI
u8g2_ClearBuffer(u8g2);
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
draw_temp(u8g2, x_off+0, y_off+0, tip_temp_c, true);
u8g2_DrawStr(u8g2, x_off+32, y_off+6, "A:");
u8g2_DrawStr(u8g2, x_off+42, y_off+6, u16toa((current_ma+500)/1000));
u8g2_DrawStr(u8g2, x_off+60, y_off+6, "V:");
u8g2_DrawStr(u8g2, x_off+70, y_off+6, u16toa((vbus_mv+500)/1000));
uint8_t p = (power*100)/pd_profile.set_power;
uint8_t w = (uint16_t)(p*54)/100;
u8g2_DrawBox(u8g2, x_off+42, y_off+14, w, 5);
}
coro_end();
}
// coroutine to update the tip temperature, vcc and compute the new pid value
// this has to be called periodically but only with pwm disabled
coro_state_t cs_duty;
coroutine c_update_duty(coro_state_t *state)
{
static struct timer t;
coro_begin(state);
for(;;) {
timer_set(&t, 50);
coro_wait_until(state, timer_expired(&t));
pwm_set(0);
Delay_Ms(TURN_OFF_DELAY);
update_tip_and_vcc();
if (enabled) {
duty = pid((int16_t)pd_profile.set_temp - tip_temp_c, pd_profile.max_duty);
} else {
duty = 0;
}
}
coro_end();
}
__attribute__((noreturn)) int main(void)
{
setup();
coro_init(&cs_ui);
coro_init(&cs_duty);
u8g2_ClearBuffer(u8g2);
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "Negotiating...");
u8g2_SendBuffer(u8g2);
// Init USBPD
bool has_pd = pd_negotiate(eUSBPD_VCC_3V3);
if (has_pd == false) {
while (true) {
// No Power Delivery, maybe we are attached to a computer, so poll the input
poll_input();
update_power_and_temperature();
update_tip_and_vcc();
u8g2_ClearBuffer(u8g2);
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "Negotiation FAILED");
u8g2_DrawStr(u8g2, x_off+0, y_off+14, USBPD_ResultToStr(pd_get_result()));
u8g2_DrawStr(u8g2, x_off+0, y_off+21, u16toa(vcc_mv));
u8g2_DrawStr(u8g2, x_off+0, y_off+28, u16toa(temp_c));
u8g2_DrawStr(u8g2, x_off+30, y_off+28, u16toa(tip_temp_c));
u8g2_SendBuffer(u8g2);
}
} else {
pd_get_profile(&pd_profile, 100);
// TODO: let the user decide the power profile
pd_profile.set_temp = 320;
pd_profile.set_power = 95; // Slightly below max power to avoid overloading
pd_profile.tip_r = 2500; // TODO: tip check and resistance calculator
pd_profile.max_duty = MIN(
(100*(u32)isqrt((
MIN(pd_profile.set_power, pd_profile.power_avail)*pd_profile.tip_r)/1000) * 1000) / pd_profile.voltage
, 100);
}
enum {
STATE_MENU,
STATE_HEATING,
} state = STATE_MENU;
/* ============================== Main Loop =============================== */
struct button btn;
button_init(&btn, true);
for (;;) {
button_update(&btn, funDigitalRead(PIN_BTN));
update_power_and_temperature();
c_update_duty(&cs_duty);
switch (state) {
case STATE_MENU:
u8g2_ClearBuffer(u8g2);
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "TEMP:");
u8g2_DrawStr(u8g2, x_off+25, y_off+7, u8g2_u16toa(pd_profile.set_temp, 4));
if (encoder != 0) {
pd_profile.set_temp += encoder >= ENCODER_FAST ? 20 : encoder;
encoder = 0;
if (pd_profile.set_temp < MIN_TIP_SET_TEMP) pd_profile.set_temp = MIN_TIP_SET_TEMP;
if (pd_profile.set_temp > MAX_TIP_SET_TEMP) pd_profile.set_temp = MAX_TIP_SET_TEMP;
}
if (button_falling(btn)) {
state = STATE_HEATING;
enabled = false;
}
break;
case STATE_HEATING:
c_draw_main_ui(&cs_ui);
if (enabled) {
funDigitalWrite(PIN_12V, 1);
// Safety logic
if (current_ma > pd_profile.max_current + pd_profile.max_current/10) {
enabled = false;
}
if (temp_c > MAX_BOARD_TEMP) {
enabled = false;
}
if (tip_temp_c > MAX_TIP_TEMP) {
enabled = false;
}
const uint16_t tim_max = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
pwm_set(((u32)duty*tim_max)/100);
u8g2_DrawBox(u8g2, x_off+92, y_off+0, 4, 4);
} else {
funDigitalWrite(PIN_12V, 0);
}
// move to menu mode when encoder is turned
if (encoder != 0) {
state = STATE_MENU;
funDigitalWrite(PIN_12V, 0);
pwm_set(0);
}
// Check button to toggle enable
if (button_falling(btn)) {
enabled = !enabled;
if (enabled) {
pwm_on();
} else {
pwm_off();
}
}
break;
}
u8g2_SendBuffer(u8g2);
}
}

View File

@ -1,31 +0,0 @@
#ifndef _NTC_H
#define _NTC_H
#include <stdint.h>
// LUT for converting NTC readings to degrees celsius
// Nominal: 10kOhm, Beta: 3380, Step: 64
// TODO: Add a fixed offset to account for toollerances
const uint8_t ntc_step_size = 64;
const int16_t ntc_lut[] = {
1316, 197, 155, 133, 119, 108, 100, 93, 87, 82, 77, 73, 69, 66, 63, 60,
57, 54, 52, 50, 47, 45, 43, 41, 39, 37, 35, 34, 32, 30, 28, 27,
25, 23, 22, 20, 19, 17, 15, 14, 12, 11, 9, 7, 6, 4, 2, 0,
-1, -3, -5, -7, -9, -11, -14, -16, -19, -22, -25, -28, -32, -38, -44, -55,
-55 // extra value to not have an extra if statement
};
// Convert the raw adc reading to a temperature in celsius with the ntc lut,
// linearly interpolating between positions
static inline int16_t get_temp_c(uint16_t adc_reading)
{
if (adc_reading > 4095) return 0;
uint8_t index = adc_reading / ntc_step_size;
uint8_t remainder = adc_reading % ntc_step_size;
int16_t temp_base = index < ntc_step_size ? ntc_lut[index] : 0;
int16_t temp_next = ntc_lut[index + 1];
return temp_base + ((temp_next - temp_base) * remainder)/ntc_step_size;
}
#endif

127
fw/pd.c
View File

@ -1,127 +0,0 @@
#include <ch32fun.h>
#define USBPD_IMPLEMENTATION
#include "usbpd.h"
#include "funconfig.h"
#include "display.h"
#include "pd.h"
extern u8g2_t *u8g2;
static size_t cap_count = 0;
static USBPD_SPR_CapabilitiesMessage_t *capabilities = NULL;
static USBPD_Result_e result;
USBPD_Result_e pd_get_result()
{
return result;
}
// Initializes the Power Delivery peripheral and starts the Power Delivery
// negotiation, returns true if successful, indicating the board is connected to
// a Power Delivery source.
// As a side effect, fills the capabilities buffer with the source's capabilities.
bool pd_negotiate(USBPD_VCC_e vcc)
{
result = USBPD_Init(vcc);
if (result != eUSBPD_OK) {
return false;
}
Delay_Ms(100);
u32 start = funSysTick32();
while (eUSBPD_BUSY == (result = USBPD_SinkNegotiate())) {
u32 now = funSysTick32();
if (now - start > Ticks_from_Ms(5000)) {
break;
}
u8g2_ClearBuffer(u8g2);
u8g2_SetBitmapMode(u8g2, 1);
u8g2_SetFontMode(u8g2, 1);
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
u8g2_DrawStr(u8g2, 0, 8+7, USBPD_StateToStr(USBPD_GetState()));
u8g2_SendBuffer(u8g2);
Delay_Ms(1);
}
if (result != eUSBPD_OK) {
return false;
}
cap_count = USBPD_GetCapabilities(&capabilities);
if (capabilities == NULL || cap_count == 0) {
return false;
}
return true;
}
bool pd_get_profile(struct pd_profile_t *profile, uint16_t min_power)
{
if (profile == NULL || min_power == 0 || min_power > 140) {
return false;
}
if (capabilities == NULL || cap_count == 0) {
return false;
}
u16 voltage = 0, current = 0, power = 0;
for (u32 i = 0; i < cap_count; i++) {
USBPD_SinkPDO_t *pdo = &capabilities->Sink[i];
switch (pdo->Header.PDOType) {
case eUSBPD_PDO_FIXED:
voltage = pdo->FixedSupply.VoltageIn50mV * 50;
current = pdo->FixedSupply.CurrentIn10mA * 10;
power = ((u32)voltage * current) / (u32)1000000;
break;
case eUSBPD_PDO_BATTERY:
voltage = pdo->BatterySupply.MaxVoltageIn50mV * 50;
power = pdo->BatterySupply.MaxPowerIn250mW / 4;
current = ((u32)power * 1000) / voltage;
break;
case eUSBPD_PDO_VARIABLE:
// TODO: PPS
// if (pdo->VariableSupply.MaxVoltageIn50mV/20 > max_v) {
// max_v = pdo->VariableSupply.MaxVoltageIn50mV/20;
// }
break;
case eUSBPD_PDO_AUGMENTED:
switch (pdo->Header.AugmentedType) {
case eUSBPD_APDO_SPR_PPS:
// TODO: SPR_PPS
break;
case eUSBPD_APDO_SPR_AVS:
// TODO: SPR AVS
break;
case eUSBPD_APDO_EPR_AVS:
/* TODO: EPR AVS
voltage = pdo->EPR_AVS.MaxVoltageIn100mV * 100;
current = pdo->EPR_AVS.PeakCurrent * 1000;
power = pdo->EPR_AVS.PDPIn1W;
*/
break;
default:
break;
}
break;
}
// Selects the first PDO that meets the minimum power requirement
if (power >= min_power && voltage <= BOARD_MAX_VOLTAGE) {
if (USBPD_SelectPDO(i, 0) != eUSBPD_OK) {
return false;
}
profile->voltage = voltage;
profile->max_current = current;
profile->power_avail = power;
return true;
}
}
return false;
}

25
fw/pd.h
View File

@ -1,25 +0,0 @@
#ifndef _PD_H
#define _PD_H
#include <stdint.h>
#include "usbpd.h"
struct pd_profile_t {
uint16_t voltage; // Vbus Voltage in millivolts
uint16_t max_current; // Maximum current in milliamps
uint16_t power_avail; // Available power (from supply) in watts
uint16_t set_power; // Maximum power in watts, set by the user
uint16_t set_temp; // Set temperature in celsius, set by the user
uint16_t tip_r; // Tip resistance in milliOhms
uint8_t max_duty; // Maximum duty cycle (0-100) to stay within the power limit
};
USBPD_Result_e pd_get_result();
bool pd_negotiate(USBPD_VCC_e vcc);
bool pd_get_profile(struct pd_profile_t *profile, uint16_t min_power);
#endif // _PD_H

View File

@ -1,62 +0,0 @@
/*
* Register functions for the SC7A20 accellerometer
* Original Author:
* Ralim
* Created on: 18 Sep. 2020
* https://github.com/Ralim/IronOS.git
*/
#include <ch32fun.h>
#include "lib_i2c.h"
#include "sc7a20.h"
// Initialization values for control registers, in reg-value pairs
// Basically setup the unit to run, and enable 4D orientation detection
// TODO: Make better comments and define values
static const uint8_t i2c_registers[][2] = {
{ SC7A20_CTRL_REG1, 0b01100111}, // 200Hz, XYZ enabled
{ SC7A20_CTRL_REG2, 0b00000000}, // Setup filter to 0x00 ??
{ SC7A20_CTRL_REG3, 0b00000000}, // INT1 off
{ SC7A20_CTRL_REG4, 0b00001000}, // Block mode off,little-endian,2G,High-pres,self test off
{ SC7A20_CTRL_REG5, 0b00000100}, // fifo off, D4D on INT1
{ SC7A20_CTRL_REG6, 0x00}, // INT2 off
{ SC7A20_INT2_CFG, 0b01111110}, // setup for movement detection
{ SC7A20_INT2_THS, 0x28}, //
{SC7A20_INT2_DURATION, 64}, //
{ SC7A20_INT1_CFG, 0b01111110}, //
{ SC7A20_INT1_THS, 0x28}, //
{SC7A20_INT1_DURATION, 64}
};
void sc7a20_init()
{
// Setup acceleration readings
// 2G range
// bandwidth = 250Hz
// High pass filter on (Slow compensation)
// Turn off IRQ output pins
// Orientation recognition in symmetrical mode
// Hysteresis is set to ~ 16 counts
// Theta blocking is set to 0b10
for (uint8_t i = 0; i < sizeof(i2c_registers) / sizeof(i2c_registers[0]); i++) {
uint8_t bytes[2] = {i2c_registers[i][0], i2c_registers[i][1]};
i2c_sendBytes(I2C_TARGET, SC7A20_ADDRESS, bytes, 2);
}
}
void sc7a20_get_readings(int16_t *x, int16_t *y, int16_t *z)
{
// We can tell the accelerometer to output in LE mode which makes this simple
int16_t sensorData[3] = {0};
i2c_sendByte(I2C_TARGET, SC7A20_ADDRESS, SC7A20_OUT_X_L | 0x80);
i2c_readBytes(I2C_TARGET, SC7A20_ADDRESS, (u8*)sensorData, 6);
// Lower byte is sent first
*x = (int16_t)sensorData[0];
*y = (int16_t)sensorData[1];
*z = (int16_t)sensorData[2];
}

View File

@ -1,57 +0,0 @@
/*
* Defines for the SC7A20 accellerometer
* Original Author:
* Ralim
* Created on: 18 Sep. 2020
* https://github.com/Ralim/IronOS.git
*/
#ifndef _SC7A20_H_
#define _SC7A20_H_
#include <ch32fun.h>
#define SC7A20_ADDRESS 0x18
#define SC7A20_WHO_AM_I_VALUE (0b00010001)
#define SC7A20_WHO_AMI_I 0x0F
#define SC7A20_CTRL_REG1 0x20
#define SC7A20_CTRL_REG2 0x21
#define SC7A20_CTRL_REG3 0x22
#define SC7A20_CTRL_REG4 0x23
#define SC7A20_CTRL_REG5 0x24
#define SC7A20_CTRL_REG6 0x25
#define SC7A20_REFERENCE 0x26
#define SC7A20_STATUS_REG 0x27
#define SC7A20_OUT_X_L 0x28
#define SC7A20_OUT_X_L_ALT 0xA8
#define SC7A20_OUT_X_H 0x29
#define SC7A20_OUT_Y_L 0x2A
#define SC7A20_OUT_Y_H 0x2B
#define SC7A20_OUT_Z_L 0x2C
#define SC7A20_OUT_Z_H 0x2D
#define SC7A20_FIFO_CTRL 0x2E
#define SC7A20_FIFO_SRC 0x2F
#define SC7A20_INT1_CFG 0x30
#define SC7A20_INT1_SOURCE 0x31
#define SC7A20_INT1_THS 0x32
#define SC7A20_INT1_DURATION 0x33
#define SC7A20_INT2_CFG 0x34
#define SC7A20_INT2_SOURCE 0x35
#define SC7A20_INT2_THS 0x36
#define SC7A20_INT2_DURATION 0x37
#define SC7A20_CLICK_CFG 0x38
#define SC7A20_CLICK_SRC 0x39
#define SC7A20_CLICK_THS 0x3A
#define SC7A20_TIME_LIMIT 0x3B
#define SC7A20_TIME_LATENCY 0x3C
#define SC7A20_TIME_WINDOW 0x3D
#define SC7A20_ACT_THS 0x3E
#define SC7A20_ACT_DURATION 0x3F
void sc7a20_init(void);
void sc7a20_get_readings(int16_t *x, int16_t *y, int16_t *z);
#endif /* CORE_DRIVERS_BMA223_DEFINES_H_ */

View File

@ -1,59 +0,0 @@
#!/usr/bin/env python3
import math
# Script to generate NTC lookup table
# ^ Vcc
# |
# [RES]
# |
# +-- Vadc
# |
# [NTC]
# |
# _|_ GND
# ///
adc_res = 12
ntc_value = 10_000 # at 25°C
resistor_value = 10_000
ntc_beta = 3380 # at 25°C
steps = 64
# NTC resistance to temperature (°C) conversion
def resistance_to_t(ntc_r):
# Standard B-parameter equation
# T = 1 / (1/T0 + 1/B * ln(R/R0))
inv_t = 1/(25 + 273.15) + math.log(ntc_r/ntc_value)/ntc_beta
return 1/inv_t - 273.15
# Resistor divider percentage to NTC resistance conversion
# x = NTC / (NTC + RES) => NTC = RES * x / (1 - x)
def x_to_r(x):
x = max(0.0001, min(0.9999, x))
return resistor_value * x / (1 - x)
# Use 4096 for cleaner divisions
adc_max = 2**adc_res
step_size = adc_max // steps
values = []
for i in range(steps):
adc_val = i * step_size
x = adc_val / adc_max
r = x_to_r(adc_val / adc_max)
t = resistance_to_t(r)
values.append(int(round(t)))
def to_c_array(values, ctype="float", name="table", formatter=str, colcount=8):
# apply formatting to each element
values = [formatter(v) for v in values]
# split into rows with up to `colcount` elements per row
rows = [values[i:i+colcount] for i in range(0, len(values), colcount)]
# separate elements with commas, separate rows with newlines
body = ',\n '.join([', '.join(r) for r in rows])
# assemble components into the complete string
return '{} {}[] = {{\n {}}};'.format(ctype, name, body)
print("uint8_t ntc_step_size = {};".format(int(step_size)))
print(to_c_array(values, ctype="int16_t", name="ntc_lut", formatter=str, colcount=16))

@ -1 +0,0 @@
Subproject commit 3b8939cd015d6aca6a19f761df84859916f1f7d9

View File

@ -1,182 +0,0 @@
#ifndef _USB_CONFIG_H
#define _USB_CONFIG_H
#include "funconfig.h"
#include "ch32fun.h"
// Endpoint numbers, at least one (EP0)
#define FUSB_CONFIG_EPS 4
// Endpoint configuration for CDC TTY
#define FUSB_EP1_MODE 1 // TX (IN), CDC Interrupt Endpoint
#define FUSB_EP2_MODE -1 // RX (OUT), CDC Data OUT
#define FUSB_EP3_MODE 1 // TX (IN), CDC Data IN
// Other hardware configuration
#define FUSB_SUPPORTS_SLEEP 0
#define FUSB_HID_INTERFACES 0
#define FUSB_CURSED_TURBO_DMA 0 // Hacky, but seems fine, shaves 2.5us off filling 64-byte buffers.
#define FUSB_HID_USER_REPORTS 0
#define FUSB_IO_PROFILE 0
#define FUSB_USE_HPE FUNCONF_ENABLE_HPE
#define FUSB_USER_HANDLERS 1
#define FUSB_USE_DMA7_COPY 0
#define FUSB_VDD_5V 0 // 3.3V
#include "usb_defines.h"
#define FUSB_USB_VID 0x1209
#define FUSB_USB_PID 0xd035
#define FUSB_USB_REV 0x0007
#define FUSB_STR_MANUFACTURER u"ch32fun"
#define FUSB_STR_PRODUCT u"USB TTY"
#define FUSB_STR_SERIAL u"007"
//Taken from http://www.usbmadesimple.co.uk/ums_ms_desc_dev.htm
static const uint8_t device_descriptor[] = {
18, //bLength - Length of this descriptor
1, //bDescriptorType - Type (Device)
0x10, 0x01, //bcdUSB - The highest USB spec version this device supports (USB1.1)
0x02, //bDeviceClass - Device Class
0x0, //bDeviceSubClass - Device Subclass
0x0, //bDeviceProtocol - Device Protocol (000 = use config descriptor)
64, //bMaxPacketSize - Max packet size for EP0
(uint8_t)(FUSB_USB_VID), (uint8_t)(FUSB_USB_VID >> 8), //idVendor - ID Vendor
(uint8_t)(FUSB_USB_PID), (uint8_t)(FUSB_USB_PID >> 8), //idProduct - ID Product
(uint8_t)(FUSB_USB_REV), (uint8_t)(FUSB_USB_REV >> 8), //bcdDevice - Device Release Number
1, //iManufacturer - Index of Manufacturer string
2, //iProduct - Index of Product string
3, //iSerialNumber - Index of Serial string
1, //bNumConfigurations - Max number of configurations (if more then 1, you can switch between them)
};
/* Configuration Descriptor Set */
static const uint8_t config_descriptor[ ] =
{
0x09, // bLength
0x02, // bDescriptorType (Configuration)
0x43, 0x00, // wTotalLength 67
0x02, // bNumInterfaces 2
0x01, // bConfigurationValue
0x00, // iConfiguration (String Index)
0x80, // bmAttributes
0x32, // bMaxPower 100mA
0x09, // bLength
0x04, // bDescriptorType - Interface
0x00, // bInterfaceNumber - 0
0x00, // bAlternateSetting
0x01, // bNumEndpoints - 1
0x02, // bInterfaceClass - CDC
0x02, // bInterfaceSubClass - Abstract Control Model (Table 4 in CDC120.pdf)
0x01, // bInterfaceProtocol - AT Commands: V.250 etc (Table 5)
0x00, // iInterface (String Index)
// Setting up CDC interface (Table 18)
0x05, // bLength
0x24, // bDescriptorType - CS_INTERFACE (Table 12)
0x00, // bDescriptorSubType - Header Functional Descriptor (Table 13)
0x10, 0x01, // bcdCDC - USB version - USB1.1
// Call Management Functional Descriptor
0x05, // bLength
0x24, // bDescriptorType - CS_INTERFACE
0x01, // bDescriptorSubType - Call Management Functional Descriptor (Table 13)
0x00, // bmCapabilities: (Table 3 in PSTN120.pdf)
// Bit 0 — Device handles call management itself:
// 1 = device handles call management (e.g. call setup, termination, etc.)
// 0 = host handles it
// Bit 1 — Device can send/receive call management information over a Data Class interface:
// 1 = can use the Data Class interface for call management
// 0 = must use the Communication Class interface
0x01, // bDataInterface - Indicates that multiplexed commands are handled via data interface 01h (same value as used in the UNION Functional Descriptor)
// Abstract Control Management Functional Descriptor
0x04, // bLength
0x24, // bDescriptorType - CS_INTERFACE
0x02, // bDescriptorSubType - Abstract Control Management Functional Descriptor (Table 13)
0x02, // bmCapabilities - Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State (Table 4 in PSTN120.pdf)
// Union Descriptor Functional Descriptor
0x05, // bLength
0x24, // bDescriptorType - CS_INTERFACE
0x06, // bDescriptorSubType - Union Descriptor Functional Descriptor (Table 13)
0x00, // bControlInterface (Interface number of the control (Communications Class) interface)
0x01, // bSubordinateInterface0 (Interface number of the subordinate (Data Class) interface)
// Setting up EP1 for CDC config interface
0x07, // bLength
0x05, // bDescriptorType (Endpoint)
0x81, // bEndpointAddress (IN/D2H)
0x03, // bmAttributes (Interrupt)
0x40, 0x00, // wMaxPacketSize 64
0x01, // bInterval 1 (unit depends on device speed)
// Transmission interface with two bulk endpoints
0x09, // bLength
0x04, // bDescriptorType (Interface)
0x01, // bInterfaceNumber 1
0x00, // bAlternateSetting
0x02, // bNumEndpoints 2
0x0A, // bInterfaceClass
0x00, // bInterfaceSubClass
0x00, // bInterfaceProtocol - Transparent
0x00, // iInterface (String Index)
// EP2 - device to host
0x07, // bLength
0x05, // bDescriptorType (Endpoint)
0x02, // bEndpointAddress (OUT/H2D)
0x02, // bmAttributes (Bulk)
0x40, 0x00, // wMaxPacketSize 64
0x00, // bInterval 0 (unit depends on device speed)
// EP3 - host to device
0x07, // bLength
0x05, // bDescriptorType (Endpoint)
0x83, // bEndpointAddress (IN/D2H)
0x02, // bmAttributes (Bulk)
0x40, 0x00, // wMaxPacketSize 64
0x00, // bInterval 0 (unit depends on device speed)
// 67 bytes
};
struct usb_string_descriptor_struct {
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t wString[];
};
const static struct usb_string_descriptor_struct language __attribute__((section(".rodata"))) = {
4,
3,
{0x0409} // Language ID - English US (look in USB_LANGIDs)
};
const static struct usb_string_descriptor_struct string1 __attribute__((section(".rodata"))) = {
sizeof(FUSB_STR_MANUFACTURER),
3, // bDescriptorType - String Descriptor (0x03)
FUSB_STR_MANUFACTURER
};
const static struct usb_string_descriptor_struct string2 __attribute__((section(".rodata"))) = {
sizeof(FUSB_STR_PRODUCT),
3,
FUSB_STR_PRODUCT
};
const static struct usb_string_descriptor_struct string3 __attribute__((section(".rodata"))) = {
sizeof(FUSB_STR_SERIAL),
3,
FUSB_STR_SERIAL
};
// This table defines which descriptor data is sent for each specific
// request from the host (in wValue and wIndex).
const static struct descriptor_list_struct {
uint32_t lIndexValue; // (uint16_t)Index of a descriptor in config or Language ID for string descriptors | (uint8_t)Descriptor type | (uint8_t)Type of string descriptor
const uint8_t *addr;
uint8_t length;
} descriptor_list[] = {
{0x00000100, device_descriptor, sizeof(device_descriptor)},
{0x00000200, config_descriptor, sizeof(config_descriptor)},
// {0x00002100, config_descriptor + 18, 9 }, // Not sure why, this seems to be useful for Windows + Android.
{0x00000300, (const uint8_t *)&language, 4},
{0x04090301, (const uint8_t *)&string1, string1.bLength},
{0x04090302, (const uint8_t *)&string2, string2.bLength},
{0x04090303, (const uint8_t *)&string3, string3.bLength}
};
#define DESCRIPTOR_LIST_ENTRIES ((sizeof(descriptor_list))/(sizeof(struct descriptor_list_struct)) )
#endif

View File

@ -1,979 +0,0 @@
/* USB PD Library
* 2025-06-21 Bogdan Ionescu
* Configuration:
* - USBPD_IMPLEMENTATION: Enable USB PD implementation
* - FUNCONF_USBPD_NO_STR: Disable string conversion functions
* Notes:
* - This library is based on the USB Power Delivery Specification.
* https://www.usb.org/document-library/usb-power-delivery
* - Packed bitfield structs are used for de/serialization of USB PD messages and
* are taken directly from the spec above.
* - Not all messages are implemented.
* - Formatting macros are provided next to the struct deffinitions.
* Basic usage:
* USBPD_VCC_e vcc = eUSBPD_VCC_5V0; // set the VCC voltage
* USBPD_Result_e result = USBPD_Init( vcc ); // initialize the peripheral
*
* // wait for negotiation to complete.
* while ( eUSBPD_BUSY == ( result = USBPD_SinkNegotiate() ) );
*
* USBPD_SPR_CapabilitiesMessage_t *capabilities;
* const size_t count = USBPD_GetCapabilities( &capabilities );
* USBPD_SelectPDO( count - 1, voltage ); // select the last supply (voltage is only used for PPS)
*
* The above is not a complete example, check the funtion declarations below for more details.
*/
#pragma once
#include "ch32fun.h"
#include "funconfig.h"
#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifndef PACKED
#define PACKED __attribute__( ( packed ) )
#endif
// USB PD spec type definitions
typedef enum PACKED
{
eUSBPD_PORTDATAROLE_DFP = 0, // Downstream Facing Port
eUSBPD_PORTDATAROLE_UFP = 1, // Upstream Facing Port
} USBPD_PortDataRole_e;
typedef enum PACKED
{
eUSBPD_PORTPOWEROLE_SINK = 0, // Sink Power Role
eUSBPD_PORTPOWEROLE_SOURCE = 1, // Source Power Role
} USBPD_PortPowerRole_e;
typedef enum PACKED
{
eUSBPD_REV_10 = 0x00u, // Revision 1.0
eUSBPD_REV_20 = 0x01u, // Revision 2.0
eUSBPD_REV_30 = 0x02u, // Revision 3.0
} USBPD_SpecificationRevision_e;
typedef enum PACKED
{
eUSBPD_CTRL_MSG_GOODCRC = 0x01u,
eUSBPD_CTRL_MSG_GOTOMIN = 0x02u, // Depracated
eUSBPD_CTRL_MSG_ACCEPT = 0x03u,
eUSBPD_CTRL_MSG_REJECT = 0x04u,
eUSBPD_CTRL_MSG_PING = 0x05u, // Deprecated
eUSBPD_CTRL_MSG_PS_RDY = 0x06u,
eUSBPD_CTRL_MSG_GET_SOURCE_CAP = 0x07u,
eUSBPD_CTRL_MSG_GET_SINK_CAP = 0x08u,
eUSBPD_CTRL_MSG_DR_SWAP = 0x09u,
eUSBPD_CTRL_MSG_PR_SWAP = 0x0Au,
eUSBPD_CTRL_MSG_VCONN_SWAP = 0x0Bu,
eUSBPD_CTRL_MSG_WAIT = 0x0Cu,
eUSBPD_CTRL_MSG_SOFT_RESET = 0x0Du,
eUSBPD_CTRL_MSG_DATA_RESET = 0x0Eu,
eUSBPD_CTRL_MSG_DATA_RESET_COMPLETE = 0x0Fu,
eUSBPD_CTRL_MSG_NOT_SUPPORTED = 0x10u,
eUSBPD_CTRL_MSG_GET_SOURCE_CAPEXT = 0x11u,
eUSBPD_CTRL_MSG_GET_STATUS = 0x12u,
eUSBPD_CTRL_MSG_FR_SWAP = 0x13u,
eUSBPD_CTRL_MSG_GET_PPS_STATUS = 0x14u,
eUSBPD_CTRL_MSG_GET_COUNTRY_CODES = 0x15u,
eUSBPD_CTRL_MSG_GET_SINK_CAPEXT = 0x16u,
eUSBPD_CTRL_MSG_GET_SOURCE_INFO = 0x17u,
eUSBPD_CTRL_MSG_GET_REVISION = 0x18u,
} USBPD_ControlMessage_e;
typedef enum PACKED
{
eUSBPD_DATA_MSG_SOURCE_CAP = 0x01u,
eUSBPD_DATA_MSG_REQUEST = 0x02u,
eUSBPD_DATA_MSG_BIST = 0x03u,
eUSBPD_DATA_MSG_SINK_CAP = 0x04u,
eUSBPD_DATA_MSG_BATTERY_STATUS = 0x05u,
eUSBPD_DATA_MSG_ALERT = 0x06u,
eUSBPD_DATA_MSG_GET_COUNTRY_INFO = 0x07u,
eUSBPD_DATA_MSG_ENTER_USB = 0x08u,
eUSBPD_DATA_MSG_EPR_REUEST = 0x09u,
eUSBPD_DATA_MSG_EPR_MODE = 0x0Au,
eUSBPD_DATA_MSG_SOURCE_INFO = 0x0Bu,
eUSBPD_DATA_MSG_REVISION = 0x0Cu,
eUSBPD_DATA_MSG_VENDOR_DEFINED = 0x0Fu
} USBPD_DataMessage_e;
typedef enum PACKED
{
eUSBPD_EXTENDED_MSG_SOURCE_CAP_EXT = 0b00001,
eUSBPD_EXTENDED_MSG_STATUS = 0b00010,
eUSBPD_EXTENDED_MSG_GET_BATTERY_CAP = 0b00011,
eUSBPD_EXTENDED_MSG_GET_BATTERY_STATUS = 0b00100,
eUSBPD_EXTENDED_MSG_BATTERY_CAP = 0b00101,
eUSBPD_EXTENDED_MSG_GET_MANUFACTURER_INFO = 0b00110,
eUSBPD_EXTENDED_MSG_MANUFACTURER_INFO = 0b00111,
eUSBPD_EXTENDED_MSG_SECURITY_REQUEST = 0b01000,
eUSBPD_EXTENDED_MSG_SECURITY_RESPONSE = 0b01001,
eUSBPD_EXTENDED_MSG_FIRMWARE_UPDATE_REQUEST = 0b01010,
eUSBPD_EXTENDED_MSG_FIRMWARE_UPDATE_RESPONSE = 0b01011,
eUSBPD_EXTENDED_MSG_PPS_STATUS = 0b01100,
eUSBPD_EXTENDED_MSG_COUNTRY_INFO = 0b01101,
eUSBPD_EXTENDED_MSG_COUNTRY_CODES = 0b01110,
eUSBPD_EXTENDED_MSG_SINK_CAP_EXTENDED = 0b01111,
eUSBPD_EXTENDED_MSG_EXTENDED_CONTROL = 0b10000,
eUSBPD_EXTENDED_MSG_EPR_SOURCE_CAP = 0b10001,
eUSBPD_EXTENDED_MSG_EPR_SINK_CAP = 0b10010,
eUSBPD_EXTENDED_MSG_VENDOR_DEFINED_EXTENDED = 0b11110
} USBPD_ExtendedMessage_e;
typedef union
{
uint16_t data;
struct
{
uint16_t MessageType : 5u; // USBPD_ControlMessage_t | USBPD_DataMessage_t
USBPD_PortDataRole_e PortDataRole : 1u;
USBPD_SpecificationRevision_e SpecificationRevision : 2u;
USBPD_PortPowerRole_e PortPowerRole : 1u;
uint16_t MessageID : 3u;
uint16_t NumberOfDataObjects : 3u; // 0: Control Message, >0: Data Message
uint16_t Extended : 1u;
};
} USBPD_MessageHeader_t;
typedef USBPD_MessageHeader_t USBPD_ControlMessage_t;
static_assert( sizeof( USBPD_MessageHeader_t ) == sizeof( uint16_t ), "USBPD_MessageHeader_t size mismatch" );
typedef union
{
uint16_t data;
struct
{
uint16_t DataSize : 9u;
uint16_t Reserved : 1u;
uint16_t RequestChunk : 1u;
uint16_t ChunkNumber : 4u;
uint16_t Chunked : 1u;
};
} USBPD_ExtendedHeader_t;
static_assert( sizeof( USBPD_ExtendedHeader_t ) == sizeof( uint16_t ), "USBPD_ExtendedHeader_t size mismatch" );
typedef enum PACKED
{
eUSBPD_PDO_FIXED = 0,
eUSBPD_PDO_BATTERY = 1,
eUSBPD_PDO_VARIABLE = 2,
eUSBPD_PDO_AUGMENTED = 3,
} USBPD_PowerDataObject_e;
typedef enum PACKED
{
eUSBPD_APDO_SPR_PPS = 0, // Standard Power Range Programmable Power Supply
eUSBPD_APDO_EPR_AVS = 1, // Extended Power Range Adjustable Voltage Supply
eUSBPD_APDO_SPR_AVS = 2, // Standard Power Range Adjustable Voltage Supply
eUSBPD_APDO_RESERVED = 3,
} USBPD_AugmentedPDO_e;
typedef enum PACKED
{
eUSBPD_PEAK_CURRENT_0 = 0, /* Peak Current equals IoC */
eUSBPD_PEAK_CURRENT_1 = 1, /* 150% IoC for 1ms @ 5% duty cycle
125% IoC for 2ms @ 10% duty cycle
110% IoC for 10ms @ 50% duty cycle */
eUSBPD_PEAK_CURRENT_2 = 2, /* 200% IoC for 1ms @ 5% duty cycle
150% IoC for 2ms @ 10% duty cycle
125% IoC for 10ms @ 50% duty cycle */
eUSBPD_PEAK_CURRENT_3 = 3, /* 200% IoC for 1ms @ 5% duty cycle
175% IoC for 2ms @ 10% duty cycle
150% IoC for 10ms @ 50% duty cycle */
} USBPD_PeakCurrent_e;
typedef struct
{
uint32_t data : 28u; // PDO specific data based on PDO type
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_PPS
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
} USBPD_PDOHeader_t;
typedef struct
{
uint32_t MaxCurrentIn10mA : 10u;
uint32_t VoltageIn50mV : 10u;
USBPD_PeakCurrent_e PeakCurrent : 2u;
uint32_t Reserved_22bit : 1u;
uint32_t EPRModeCapable : 1u;
uint32_t UnchunkedExtendedMessage : 1u;
uint32_t DualRoleData : 1u;
uint32_t USBCommunicationsCapable : 1u;
uint32_t UnconstrainedPower : 1u;
uint32_t USBSuspendSupported : 1u;
uint32_t DualRolePower : 1u;
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_FIXED
} USBPD_SourceFixedSupplyPDO_t;
#define FIXED_SUPPLY_FMT \
"\nFixed Supply:\n" \
"\tMax Current: %d mA\n" \
"\tVoltage: %d mV\n" \
"\tPeak Current: %d\n" \
"\tEPR Mode Capable: %s\n" \
"\tUnchunked Extended Message: %s\n" \
"\tDual Role Data: %s\n" \
"\tUSB Communications Capable: %s\n" \
"\tUnconstrained Power: %s\n" \
"\tUSB Suspend Supported: %s\n" \
"\tDual Role Power: %s\n"
#define FIXED_SUPPLY_FMT_ARGS( pdo ) \
( ( pdo )->FixedSupply.MaxCurrentIn10mA * 10 ), ( ( pdo )->FixedSupply.VoltageIn50mV * 50 ), \
( ( pdo )->FixedSupply.PeakCurrent ), ( ( pdo )->FixedSupply.EPRModeCapable ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.UnchunkedExtendedMessage ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.DualRoleData ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.USBCommunicationsCapable ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.UnconstrainedPower ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.USBSuspendSupported ? "Yes" : "No" ), \
( ( pdo )->FixedSupply.DualRolePower ? "Yes" : "No" )
typedef struct
{
uint32_t MaxCurrentIn10mA : 10u;
uint32_t MinVoltageIn50mV : 10u;
uint32_t MaxVoltageIn50mV : 10u;
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_VARIABLE
} USBPD_VariablePDO_t;
#define VARIABLE_SUPPLY_FMT \
"\nVariable Supply:\n" \
"\tMax Current: %d mA\n" \
"\tMin Voltage: %d mV\n" \
"\tMax Voltage: %d mV\n"
#define VARIABLE_SUPPLY_FMT_ARGS( pdo ) \
( ( pdo )->VariableSupply.MaxCurrentIn10mA * 10 ), ( ( pdo )->VariableSupply.MinVoltageIn50mV * 50 ), \
( ( pdo )->VariableSupply.MaxVoltageIn50mV * 50 )
typedef struct
{
uint32_t MaxPowerIn250mW : 10u;
uint32_t MinVoltageIn50mV : 10u;
uint32_t MaxVoltageIn50mV : 10u;
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_BATTERY
} USBPD_BatteryPDO_t;
#define BATTERY_SUPPLY_FMT \
"\nBattery Supply:\n" \
"\tMax Power: %d mW\n" \
"\tMin Voltage: %d mV\n" \
"\tMax Voltage: %d mV\n"
#define BATTERY_SUPPLY_FMT_ARGS( pdo ) \
( ( pdo )->BatterySupply.MaxPowerIn250mW * 250 ), ( ( pdo )->BatterySupply.MinVoltageIn50mV * 50 ), \
( ( pdo )->BatterySupply.MaxVoltageIn50mV * 50 )
typedef struct
{
uint32_t MaxCurrentIn50mA : 7u;
uint32_t Reserved_7bit : 1u; // shall be set to zero
uint32_t MinVoltageIn100mV : 8u;
uint32_t Reserved_16bit : 1u; // shall be set to zero
uint32_t MaxVoltageIn100mV : 8u;
uint32_t Reserved_25_26bit : 2u; // shall be set to zero
uint32_t PPSpowerLimited : 1u;
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_PPS
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
} USBPD_SPR_PPS_APDO_t;
#define SPR_PPS_FMT \
"\nPPS Supply:\n" \
"\tMax Current: %d mA\n" \
"\tMin Voltage: %d mV\n" \
"\tMax Voltage: %d mV\n" \
"\tPPS Power Limited: %s\n"
#define SPR_PPS_FMT_ARGS( pdo ) \
( ( pdo )->SPR_PPS.MaxCurrentIn50mA * 50 ), ( ( pdo )->SPR_PPS.MinVoltageIn100mV * 100 ), \
( ( pdo )->SPR_PPS.MaxVoltageIn100mV * 100 ), ( ( pdo )->SPR_PPS.PPSpowerLimited ? "Yes" : "No" )
typedef struct
{
uint32_t PDPIn1W : 8u;
uint32_t MinVoltageIn100mV : 8u;
uint32_t Reserved_16bit : 1u; // shall be set to zero
uint32_t MaxVoltageIn100mV : 9u;
USBPD_PeakCurrent_e PeakCurrent : 2u;
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_EPR_AVS
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
} USBPD_EPR_AVS_APDO_t;
#define EPR_AVS_FMT \
"\nEPR AVS Supply:\n" \
"\tPDP: %d W\n" \
"\tMin Voltage: %d mV\n" \
"\tMax Voltage: %d mV\n" \
"\tPeak Current: %d\n"
#define EPR_AVS_FMT_ARGS( pdo ) \
( ( pdo )->EPR_AVS.PDPIn1W ), ( ( pdo )->EPR_AVS.MinVoltageIn100mV * 100 ), \
( ( pdo )->EPR_AVS.MaxVoltageIn100mV * 100 ), ( ( pdo )->EPR_AVS.PeakCurrent )
typedef struct
{
uint32_t MaxCurrent15To20VIn10mA : 10u;
uint32_t MaxCurrent9to15VIn10mA : 10u;
uint32_t Reserved_20_25bit : 6u; // shall be set to zero
USBPD_PeakCurrent_e PeakCurrent : 2u;
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_AVS
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
} USBPD_SPR_AVS_APDO_t;
#define SPR_AVS_FMT \
"\nSPR AVS Supply:\n" \
"\tMax Current 15-20V: %d mA\n" \
"\tMax Current 9-15V: %d mA\n" \
"\tPeak Current: %d\n"
#define SPR_AVS_FMT_ARGS( pdo ) \
( ( pdo )->SPR_AVS.MaxCurrent15To20VIn10mA * 10 ), ( ( pdo )->SPR_AVS.MaxCurrent9to15VIn10mA * 10 ), \
( ( pdo )->SPR_AVS.PeakCurrent )
typedef union
{
USBPD_PDOHeader_t Header;
USBPD_SourceFixedSupplyPDO_t FixedSupply;
USBPD_VariablePDO_t VariableSupply;
USBPD_BatteryPDO_t BatterySupply;
USBPD_SPR_PPS_APDO_t SPR_PPS;
USBPD_EPR_AVS_APDO_t EPR_AVS;
USBPD_SPR_AVS_APDO_t SPR_AVS;
} USBPD_SourcePDO_t;
static_assert( sizeof( USBPD_SourcePDO_t ) == sizeof( uint32_t ), "USBPD_SourcePDO_t size mismatch" );
typedef enum // Do not PACK, messes up alignment
{
eUSBPD_FAST_ROLE_SWAP_NOT_SUPPORTED = 0,
eUSBPD_FAST_ROLE_SWAP_DEFAULT = 1,
eUSBPD_FAST_ROLE_SWAP_1A5 = 2, // 1.5A @ 5V
eUSBPD_FAST_ROLE_SWAP_3A = 3, // 3A @ 5V
} USBPD_FastRoleSwapRequiredCurrent_e;
typedef struct
{
uint32_t CurrentIn10mA : 10u;
uint32_t VoltageIn50mV : 10u;
uint32_t Reserved_20_22bit : 3u; // shall be set to zero
USBPD_FastRoleSwapRequiredCurrent_e FastRoleSwap : 2u;
uint32_t DualRoleData : 1u;
uint32_t USBComsCapable : 1u;
uint32_t UnconstrainedPower : 1u;
uint32_t HigherCapability : 1u;
uint32_t DualRolePower : 1u;
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_FIXED
} USBPD_SinkFixedSupplyPDO_t;
typedef union
{
USBPD_PDOHeader_t Header;
USBPD_SinkFixedSupplyPDO_t FixedSupply;
USBPD_VariablePDO_t VariableSupply;
USBPD_BatteryPDO_t BatterySupply;
USBPD_SPR_PPS_APDO_t SPR_PPS;
USBPD_EPR_AVS_APDO_t EPR_AVS;
USBPD_SPR_AVS_APDO_t SPR_AVS;
} USBPD_SinkPDO_t;
static_assert( sizeof( USBPD_SourcePDO_t ) == sizeof( uint32_t ), "USBPD_SourcePDO_t size mismatch" );
static_assert( sizeof( USBPD_SinkPDO_t ) == sizeof( uint32_t ), "USBPD_SinkPDO_t size mismatch" );
// TODO: as per 6.15.8 EPR Source Capabilities Message, when the extended bit is
// set a extended header is present and the capabilities become from 7 to 11 PDOs
typedef union
{
USBPD_SourcePDO_t Source[7];
USBPD_SinkPDO_t Sink[7];
} USBPD_SPR_CapabilitiesMessage_t;
static_assert( sizeof( USBPD_SPR_CapabilitiesMessage_t ) == ( 7 * sizeof( uint32_t ) ),
"USBPD_SPR_CapabilitiesMessage_t size mismatch" );
typedef struct
{
uint32_t MaxCurrentIn10mA : 10u;
uint32_t OperatingCurrentIn10mA : 10u;
uint32_t Reserved_20_21bit : 2u; // shall be set to zero
uint32_t ERPCapable : 1u;
uint32_t UnchunkedExtendedMessage : 1u;
uint32_t NoUSBSuspended : 1u;
uint32_t USBComsCapable : 1u;
uint32_t CapabilityMissmatch : 1u;
uint32_t Giveback : 1u; // Deprecated, shall be set to zero
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
} USBPD_FixedAndVariableRDO_t;
typedef struct
{
uint32_t MaxPowerIn250mW : 10u;
uint32_t OperatingPowerIn250mW : 10u;
uint32_t Reserved_20_21bit : 2u; // shall be set to zero
uint32_t ERPCapable : 1u;
uint32_t UnchunkedExtendedMessage : 1u;
uint32_t NoUSBSuspended : 1u;
uint32_t USBComsCapable : 1u;
uint32_t CapabilityMissmatch : 1u;
uint32_t Giveback : 1u; // Deprecated, shall be set to zero
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
} USBPD_BatteryRDO_t;
typedef struct
{
uint32_t OperatingCurrentIn50mA : 7u;
uint32_t Reserved_7_8bit : 2u; // shall be set to zero
uint32_t OutputVoltageIn20mV : 12u;
uint32_t Reserved_21bit : 1u; // shall be set to zero
uint32_t ERPCapable : 1u;
uint32_t UnchunkedExtendedMessage : 1u;
uint32_t NoUSBSuspended : 1u;
uint32_t USBComsCapable : 1u;
uint32_t CapabilityMissmatch : 1u;
uint32_t Reserved_27bit : 1u; // Deprecated, shall be set to zero
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
} USBPD_PPS_RDO_t;
typedef struct
{
uint32_t OperatingCurrentIn50mA : 7u;
uint32_t Reserved_7_8bit : 2u; // shall be set to zero
uint32_t OutputVoltageIn100mV : 12u; // NOTE: Output voltage in 25mV units, the least two significant bits Shall
// be set to zero making the effective voltage step size 100mV.
uint32_t Reserved_21bit : 1u; // shall be set to zero
uint32_t ERPCapable : 1u;
uint32_t UnchunkedExtendedMessage : 1u;
uint32_t NoUSBSuspended : 1u;
uint32_t USBComsCapable : 1u;
uint32_t CapabilityMissmatch : 1u;
uint32_t Reserved_27bit : 1u; // Deprecated, shall be set to zero
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
} USBPD_AVS_RDO_t;
typedef union
{
USBPD_FixedAndVariableRDO_t FixedAndVariable;
USBPD_BatteryRDO_t Battery;
USBPD_PPS_RDO_t PPS;
} USBPD_RequestDataObject_t;
static_assert( sizeof( USBPD_RequestDataObject_t ) == sizeof( uint32_t ), "USBPD_RequestDataObject_t size mismatch" );
// TODO: Define the rest of the message types sections 6.4.3 -> 6.5.16
typedef enum
{
eUSBPD_MAX_EXTENDED_MSG_LEN = 260,
eUSBPD_MAX_EXTENDED_MSG_CHUNK_LEN = 26,
eUSBPD_MAX_EXTENDED_MSG_LEGACY_LEN = 26,
} USBPD_ValueParameters_t;
typedef enum
{
eUSBPD_OK = 0,
eUSBPD_BUSY,
eUSBPD_ERROR,
eUSBPD_ERROR_ARGS,
eUSBPD_ERROR_NOT_SUPPORTED,
eUSBPD_ERROR_TIMEOUT,
} USBPD_Result_e;
typedef enum
{
eUSBPD_VCC_3V3 = 0,
eUSBPD_VCC_5V0 = 1,
} USBPD_VCC_e;
typedef enum
{
eUSBPD_CCNONE = 0,
eUSBPD_CC1 = 1,
eUSBPD_CC2 = 2,
} USBPD_CC_e;
typedef enum
{
eSTATE_IDLE,
eSTATE_CABLE_DETECT,
eSTATE_SOURCE_CAP,
eSTATE_WAIT_ACCEPT,
eSTATE_WAIT_PS_RDY,
eSTATE_PS_RDY,
eSTATE_MAX,
} USBPD_State_e;
/**
* @brief Initialize the USB PD module
* @param vcc: VCC voltage level (3.3V or 5V)
* @return USBPD_Result_e
*/
USBPD_Result_e USBPD_Init( USBPD_VCC_e vcc );
/**
* @brief Negotiate with the USB PD Source, must be called periodically
* @param None
* @return USBPD_BUSY if negotiation is in progress, eUSBPD_OK if successful, or an error code
*/
USBPD_Result_e USBPD_SinkNegotiate( void );
/**
* @brief Reset the USB PD module
* @param None
* @return None
*/
void USBPD_Reset( void );
/**
* @brief Get the current state of the USB PD module
* @param None
* @return USBPD_State_e representing the current state of the module
*/
USBPD_State_e USBPD_GetState( void );
/**
* @brief Convert USB PD state to string
* @param state: USBPD_State_e to convert
* @return Pointer to a string representing the state
*/
const char *USBPD_StateToStr( USBPD_State_e state );
/**
* @brief Convert USB PD result to string
* @param result: USBPD_Result_e to convert
* @return Pointer to a string representing the result
*/
const char *USBPD_ResultToStr( USBPD_Result_e result );
/**
* @brief Select a new Power Data Object (PDO) to be used. No re-negotiation is needed.
* @param index: Index of the PDO to select (0-based)
* @param voltageIn100mV: Desired output voltage in 100mV units (e.g., 500 for 5V) (only applicable for PPS)
* @return USBPD_Result_e
*/
USBPD_Result_e USBPD_SelectPDO( uint8_t index, uint32_t voltageIn100mV );
/**
* @brief Get the capabilities of the USB PD Source
* @param[out] capabilities: Pointer to a pointer where the capabilities message structure is stored
* @return Number of Power Data Objects (PDOs) in the capabilities message
*/
size_t USBPD_GetCapabilities( USBPD_SPR_CapabilitiesMessage_t **capabilities );
/**
* @brief Check if the Power Data Object is a Programmable Power Supply (PPS)
* @param[in] pdo: Pointer to the Power Data Object to check
* @return true if the PDO is a PPS, false otherwise
*/
bool USBPD_IsPPS( const USBPD_SourcePDO_t *pdo );
/**
* @brief Get the USB PD Specification Revision
* @param None
* @return USBPD_SpecificationRevision_e representing the USB PD specification revision
*/
USBPD_SpecificationRevision_e USBPD_GetVersion( void );
#if defined( USBPD_IMPLEMENTATION )
#include <string.h>
typedef struct
{
uint32_t ccCount;
volatile USBPD_State_e state;
USBPD_SpecificationRevision_e pdVersion;
USBPD_CC_e lastCCLine;
USBPD_SPR_CapabilitiesMessage_t caps;
uint8_t messageID;
uint8_t pdoCount;
bool gotSourceGoodCRC;
} USBPD_Instance_t;
static __attribute__( ( aligned( 4 ) ) ) uint8_t s_buffer[34];
static USBPD_Instance_t s_instance = {
.pdVersion = eUSBPD_REV_30,
};
static USBPD_CC_e GetActiveCCLine( void );
static void SwitchRXMode( void );
static void SendMessage( uint8_t size );
static void ParsePacket( void );
USBPD_Result_e USBPD_Init( USBPD_VCC_e vcc )
{
RCC->APB2PCENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO;
RCC->AHBPCENR |= RCC_USBPD;
GPIOC->CFGHR &= ~( 0xf << ( ( 14 & 7 ) << 2 ) );
GPIOC->CFGHR |= ( GPIO_Speed_10MHz | GPIO_CNF_OUT_OD ) << ( ( 14 & 7 ) << 2 );
GPIOC->CFGHR &= ~( 0xf << ( ( 15 & 7 ) << 2 ) );
GPIOC->CFGHR |= ( GPIO_Speed_10MHz | GPIO_CNF_OUT_OD ) << ( ( 15 & 7 ) << 2 );
AFIO->CTLR |= USBPD_IN_HVT;
if ( vcc == eUSBPD_VCC_3V3 )
{
AFIO->CTLR |= USBPD_PHY_V33;
}
USBPD->DMA = (uint32_t)s_buffer;
USBPD->CONFIG = IE_RX_ACT | IE_RX_RESET | IE_TX_END | PD_DMA_EN | PD_FILT_EN;
USBPD->STATUS = BUF_ERR | IF_RX_BIT | IF_RX_BYTE | IF_RX_ACT | IF_RX_RESET | IF_TX_END;
// disable CC comparators
USBPD->PORT_CC1 &= ~( CC_CMP_MASK | PA_CC_AI );
USBPD->PORT_CC2 &= ~( CC_CMP_MASK | PA_CC_AI );
// set CC comparator voltage
USBPD->PORT_CC1 |= CC_CMP_66;
USBPD->PORT_CC2 |= CC_CMP_66;
return eUSBPD_OK;
}
USBPD_Result_e USBPD_SinkNegotiate( void )
{
switch ( s_instance.state )
{
case eSTATE_IDLE:;
const uint8_t ccLine = GetActiveCCLine();
if ( ccLine == eUSBPD_CCNONE )
{
s_instance.ccCount = 0;
s_instance.lastCCLine = eUSBPD_CCNONE;
break;
}
if ( s_instance.lastCCLine != ccLine )
{
s_instance.lastCCLine = ccLine;
s_instance.ccCount = 0;
}
else
{
s_instance.ccCount++;
}
if ( s_instance.ccCount > 10 )
{
if ( ccLine == eUSBPD_CC2 )
{
USBPD->CONFIG |= CC_SEL;
}
else
{
USBPD->CONFIG &= ~CC_SEL;
}
s_instance.ccCount = 0;
s_instance.state = eSTATE_CABLE_DETECT;
SwitchRXMode();
// NVIC_SetPriority(USBPD_IRQn, 0x00); // TODO: Is this needed?
NVIC_EnableIRQ( USBPD_IRQn );
}
break;
case eSTATE_SOURCE_CAP:
USBPD_SelectPDO( 0, 0 ); // Select the first PDO by default
s_instance.state = eSTATE_WAIT_ACCEPT;
break;
case eSTATE_PS_RDY: return eUSBPD_OK;
default: break;
}
return eUSBPD_BUSY;
}
void USBPD_Reset( void )
{
NVIC_DisableIRQ( USBPD_IRQn );
s_instance = ( USBPD_Instance_t ){
.pdVersion = eUSBPD_REV_30,
};
}
USBPD_State_e USBPD_GetState( void )
{
return s_instance.state;
}
#if FUNCONF_USBPD_NO_STR
const char *USBPD_StateToStr( USBPD_State_e state )
{
(void)state;
return "";
}
const char *USBPD_ResultToStr( USBPD_Result_e result )
{
(void)result;
return "";
}
#else
const char *USBPD_StateToStr( USBPD_State_e state )
{
switch ( state )
{
case eSTATE_IDLE: return "Idle";
case eSTATE_CABLE_DETECT: return "Cable Detected";
case eSTATE_SOURCE_CAP: return "Got Source Capabilities";
case eSTATE_WAIT_ACCEPT: return "Waiting for Accept";
case eSTATE_WAIT_PS_RDY: return "Waiting for PS_Ready";
case eSTATE_PS_RDY: return "Power Supply Ready";
default: return "Unknown State";
}
};
const char *USBPD_ResultToStr( USBPD_Result_e result )
{
switch ( result )
{
case eUSBPD_OK: return "OK";
case eUSBPD_BUSY: return "Busy";
case eUSBPD_ERROR: return "Error";
case eUSBPD_ERROR_ARGS: return "Error Args";
case eUSBPD_ERROR_NOT_SUPPORTED: return "Error Not Supported";
case eUSBPD_ERROR_TIMEOUT: return "Error Timeout";
default: return "Unknown Result";
}
}
#endif // FUNCONF_USBPD_NO_STR
USBPD_Result_e USBPD_SelectPDO( uint8_t index, uint32_t voltageIn100mV )
{
if ( index >= s_instance.pdoCount )
{
return eUSBPD_ERROR_ARGS;
}
const USBPD_SourcePDO_t *const pdo = &s_instance.caps.Source[index];
*(USBPD_MessageHeader_t *)&s_buffer[0] = ( USBPD_MessageHeader_t ){
.MessageID = s_instance.messageID,
.MessageType = eUSBPD_DATA_MSG_REQUEST,
.NumberOfDataObjects = 1u,
.SpecificationRevision = s_instance.pdVersion,
};
USBPD_RequestDataObject_t *const rdo = (USBPD_RequestDataObject_t *)&s_buffer[sizeof( USBPD_MessageHeader_t )];
if ( USBPD_IsPPS( pdo ) )
{
// Clamp voltage to min/max NOTE: Maybe we should return an error if the voltage is out of range?
const uint32_t minVoltage = pdo->SPR_PPS.MinVoltageIn100mV;
const uint32_t maxVoltage = pdo->SPR_PPS.MaxVoltageIn100mV;
voltageIn100mV = voltageIn100mV > maxVoltage ? maxVoltage : voltageIn100mV;
voltageIn100mV = voltageIn100mV < minVoltage ? minVoltage : voltageIn100mV;
*rdo = ( USBPD_RequestDataObject_t ){
.PPS =
{
.ObjectPosition = index + 1,
.OutputVoltageIn20mV = voltageIn100mV * 5,
.OperatingCurrentIn50mA = pdo->SPR_PPS.MaxCurrentIn50mA,
.NoUSBSuspended = 1u,
.USBComsCapable = 1u, // TODO: Should have these are arguments or define
},
};
}
else
{
*rdo = ( USBPD_RequestDataObject_t ){
.FixedAndVariable =
{
.ObjectPosition = index + 1,
.MaxCurrentIn10mA = pdo->FixedSupply.MaxCurrentIn10mA,
.OperatingCurrentIn10mA = pdo->FixedSupply.MaxCurrentIn10mA,
.USBComsCapable = 1u,
.NoUSBSuspended = 1u,
},
};
}
SendMessage( 6 );
return eUSBPD_OK;
}
/**
* @brief Get the capabilities of the USB PD Source
* @param[out] capabilities: pointer to the capabilities message structure
* @return Number of Power Data Objects (PDOs) in the capabilities message
*/
size_t USBPD_GetCapabilities( USBPD_SPR_CapabilitiesMessage_t **capabilities )
{
if ( s_instance.pdoCount == 0 )
{
return 0;
}
if ( capabilities )
{
*capabilities = &s_instance.caps;
}
return s_instance.pdoCount;
}
bool USBPD_IsPPS( const USBPD_SourcePDO_t *pdo )
{
return ( pdo->Header.PDOType == eUSBPD_PDO_AUGMENTED ) && ( pdo->Header.AugmentedType == eUSBPD_APDO_SPR_PPS );
}
USBPD_SpecificationRevision_e USBPD_GetVersion( void )
{
return s_instance.pdVersion;
}
/**
* @brief Check CC line status
* @param None
* @return USBPD_CC_t
*/
static USBPD_CC_e GetActiveCCLine( void )
{
// Switch to CC1
USBPD->CONFIG &= ~CC_SEL;
Delay_Us( 1 );
// check if CC1 is connected
if ( USBPD->PORT_CC1 & PA_CC_AI )
{
return eUSBPD_CC1;
}
// Switch to CC2
USBPD->CONFIG |= CC_SEL;
Delay_Us( 1 );
if ( USBPD->PORT_CC2 & PA_CC_AI )
{
return eUSBPD_CC2;
}
return eUSBPD_CCNONE;
}
/**
* @brief Switch to RX mode
* @param None
* @return None
*/
static void SwitchRXMode( void )
{
USBPD->BMC_CLK_CNT = UPD_TMR_RX;
USBPD->CONTROL = ( USBPD->CONTROL & ~PD_TX_EN ) | BMC_START;
}
/**
* @brief Begin transmission of PD message
* @param size: size of the message in bytes
* @return None
*/
static void SendMessage( uint8_t size )
{
USBPD->BMC_CLK_CNT = UPD_TMR_TX;
USBPD->TX_SEL = UPD_SOP0;
USBPD->BMC_TX_SZ = size;
USBPD->STATUS = 0;
USBPD->CONTROL |= BMC_START | PD_TX_EN;
}
/**
* @brief Parse the received packet
* @param None
* @return None
*/
static void ParsePacket( void )
{
bool sendGoodCRC = true;
USBPD_MessageHeader_t message = *(USBPD_MessageHeader_t *)s_buffer;
USBPD_State_e nextState = s_instance.state;
if ( message.NumberOfDataObjects == 0u )
{
switch ( (USBPD_ControlMessage_e)message.MessageType )
{
case eUSBPD_CTRL_MSG_GOODCRC:
sendGoodCRC = false;
s_instance.messageID++;
break;
case eUSBPD_CTRL_MSG_ACCEPT: nextState = eSTATE_WAIT_PS_RDY; break;
case eUSBPD_CTRL_MSG_REJECT: nextState = eSTATE_SOURCE_CAP; break;
case eUSBPD_CTRL_MSG_PS_RDY: nextState = eSTATE_PS_RDY; break;
default: break;
}
}
else
{
switch ( (USBPD_DataMessage_e)message.MessageType )
{
case eUSBPD_DATA_MSG_SOURCE_CAP:
nextState = eSTATE_SOURCE_CAP;
s_instance.pdoCount = message.NumberOfDataObjects;
s_instance.pdVersion = message.SpecificationRevision;
memcpy( &s_instance.caps, &s_buffer[2], sizeof( USBPD_SPR_CapabilitiesMessage_t ) );
break;
default: break;
}
}
// TODO: this ignores the extended part of the protocol, so we never parse
// the extended capabilities region
if ( message.Extended || sendGoodCRC )
{
Delay_Us( 30 );
USBPD_ControlMessage_t reply = ( USBPD_ControlMessage_t ){
.MessageID = message.MessageID,
.MessageType = eUSBPD_CTRL_MSG_GOODCRC,
.SpecificationRevision = s_instance.pdVersion,
};
*(uint16_t *)&s_buffer[0] = reply.data;
SendMessage( sizeof( reply ) );
}
s_instance.state = nextState;
}
void USBPD_IRQHandler( void ) __attribute__( ( interrupt ) );
void USBPD_IRQHandler( void )
{
// Receive complete interrupt
if ( USBPD->STATUS & IF_RX_ACT )
{
// Check if we received a SOP0 packet
if ( ( ( USBPD->STATUS & BMC_AUX_MASK ) == BMC_AUX_SOP0 ) && ( USBPD->BMC_BYTE_CNT >= 6 ) )
{
ParsePacket();
}
USBPD->STATUS |= IF_RX_ACT;
}
// Transmit complete interrupt (GoodCRC only)
if ( USBPD->STATUS & IF_TX_END )
{
SwitchRXMode();
USBPD->STATUS |= IF_TX_END;
}
// Reset interrupt
if ( USBPD->STATUS & IF_RX_RESET )
{
USBPD->STATUS |= IF_RX_RESET;
}
}
#endif

4
hw/.gitignore vendored
View File

@ -39,7 +39,3 @@ fp-info-cache
# Local project settings
*.kicad_prl
.history
# fabrication toolkit output
production

View File

@ -1,28 +1,25 @@
Index,LCSC#,MPN,Manufacturer,Package,Customer #,Description,RoHS,Quantity,MOQ,Multiple,Unit Price(€),Extended Price(€),Product Link
1,C473369,TLV333IDBVR,TI,SOT-23-5,,"2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS",yes,5,5,5,0.2121,1.06,https://www.lcsc.com/product-detail/C473369.html
1,C473369,TLV333IDBVR,TI,SOT-23-5,,"2uV 70pA 0.16V/us 102dB 17uA 350kHz 1 Rail-to-Rail Input, Rail-to-Rail Output SOT-23-5 Amplifiers RoHS",yes,5,5,5,0.2053,1.03,https://www.lcsc.com/product-detail/C473369.html
2,C2827931,SS24L,Guangdong Hottech,SOD-123FL,,Diode Independent 40V 2A Surface Mount SOD-123FL,yes,20,20,20,0.0204,0.41,https://www.lcsc.com/product-detail/C2827931.html
3,C2931472,U263-163N-4OS1735,XKB Connection,SMD,,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,yes,5,5,5,0.2518,1.26,https://www.lcsc.com/product-detail/C2931472.html
4,C2999960,MM5Z3V3,Slkor,SOD-523,,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,yes,20,20,20,0.0180,0.36,https://www.lcsc.com/product-detail/C2999960.html
3,C2931472,U263-163N-4OS1735,XKB Connection,SMD,,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,yes,5,5,5,0.2495,1.25,https://www.lcsc.com/product-detail/C2931472.html
4,C2999960,MM5Z3V3,Slkor,SOD-523,,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,yes,20,20,20,0.0179,0.36,https://www.lcsc.com/product-detail/C2999960.html
5,C52754543,RB521S30T1G-HXY,HXY MOSFET,SOD-523,,1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS,yes,20,20,20,0.0202,0.40,https://www.lcsc.com/product-detail/C52754543.html
6,C42442062,CH32X035F8U6,WCH,QFN-20-EP(3x3),,QFN-20-EP(3x3) Microcontrollers RoHS,yes,5,1,1,0.4460,2.23,https://www.lcsc.com/product-detail/C42442062.html
7,C780769,AP63203WU-7,DIODES,TSOT-23-6,,1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,5,1,1,0.3766,1.88,https://www.lcsc.com/product-detail/C780769.html
8,C7466527,AGM403AP,AGMSEMI,PDFN3.3x3.3-8,,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,yes,5,5,5,0.2447,1.22,https://www.lcsc.com/product-detail/C7466527.html
9,C2906999,FRC0603F1803TS,FOJAN,0603,,180kΩ ±1% 100mW 0603 Thick Film Resistor,yes,100,100,100,0.0010,0.10,https://www.lcsc.com/product-detail/C2906999.html
10,C4169844,RS73F1JTTD2703B,KOA,0603,,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,5,5,5,0.0638,0.32,https://www.lcsc.com/product-detail/C4169844.html
11,C2932326,MT3608L,XI'AN Aerosemi Tech,SOT-23-6,,1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,10,10,10,0.0373,0.37,https://www.lcsc.com/product-detail/C2932326.html
12,C138714,TPD4E05U06DQAR,TI,USON-10(1x2.5),,14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),yes,5,5,5,0.0679,0.34,https://www.lcsc.com/product-detail/C138714.html
13,C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,LGA-12(2x2),,LGA-12(2x2) Accelerometers RoHS,yes,5,1,1,0.2417,1.21,https://www.lcsc.com/product-detail/C19274408.html
14,C52741377,CPN201610H6R8MT,Magnetsyc,0806,,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,yes,20,20,20,0.0277,0.55,https://www.lcsc.com/product-detail/C52741377.html
15,C110776,RT0603BRD071KL,YAGEO,0603,,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,20,20,20,0.0187,0.37,https://www.lcsc.com/product-detail/C110776.html
6,C51933397,TPA191A1Q-SC6R-S,3PEAK,SOT-363,,SOT-363 Amplifiers RoHS,yes,5,1,1,0.3810,1.91,https://www.lcsc.com/product-detail/C51933397.html
7,C42442062,CH32X035F8U6,WCH,QFN-20-EP(3x3),,QFN-20-EP(3x3) Microcontrollers RoHS,yes,5,1,1,0.4460,2.23,https://www.lcsc.com/product-detail/C42442062.html
8,C780769,AP63203WU-7,DIODES,TSOT-23-6,,1.1MHz Buck Fixed 2A 3.3V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,5,1,1,0.4123,2.06,https://www.lcsc.com/product-detail/C780769.html
9,C7466527,AGM403AP,AGMSEMI,PDFN3.3x3.3-8,,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,yes,5,5,5,0.2447,1.22,https://www.lcsc.com/product-detail/C7466527.html
10,C2906999,FRC0603F1803TS,FOJAN,0603,,180kΩ ±1% 100mW 0603 Thick Film Resistor,yes,100,100,100,0.0011,0.11,https://www.lcsc.com/product-detail/C2906999.html
11,C4169844,RS73F1JTTD2703B,KOA,0603,,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,5,5,5,0.0891,0.45,https://www.lcsc.com/product-detail/C4169844.html
12,C76799,MLZ1608M4R7WT000,TDK,0603,,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,yes,10,10,10,0.0346,0.35,https://www.lcsc.com/product-detail/C76799.html
13,C2932326,MT3608L,XI'AN Aerosemi Tech,SOT-23-6,,1.2MHz Boost Adjustable 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,10,10,10,0.0373,0.37,https://www.lcsc.com/product-detail/C2932326.html
14,C41414522,NSG10752,WXNSIC,SOT-23-6,,High Side Gate Driver IC MOSFET IGBT SOT-23-6,yes,5,1,1,0.4600,2.30,https://www.lcsc.com/product-detail/C41414522.html
15,C46818248,SIQ-02FVS3,LZG,-,,Encoders - Industrial RoHS,yes,5,1,1,0.9816,4.91,https://www.lcsc.com/product-detail/C46818248.html
16,C162670,NCU18XH103F6SRB,muRata,0603,,NTC Thermistor 10kΩ Surface Mount 0603,yes,10,10,10,0.0533,0.53,https://www.lcsc.com/product-detail/C162670.html
17,C46818248,SIQ-02FVS3,LZG,-,,Encoders - Industrial RoHS,yes,5,1,1,0.9816,4.91,https://www.lcsc.com/product-detail/C46818248.html
18,C41414522,NSG10752,WXNSIC,SOT-23-6,,High Side Gate Driver IC MOSFET IGBT SOT-23-6,yes,5,1,1,0.4600,2.30,https://www.lcsc.com/product-detail/C41414522.html
19,C76799,MLZ1608M4R7WT000,TDK,0603,,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,yes,10,10,10,0.0341,0.34,https://www.lcsc.com/product-detail/C76799.html
20,C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,0805,,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,yes,10,10,10,0.0179,0.18,https://www.lcsc.com/product-detail/C98192.html
21,C29936,CL10B105KA8NNNC,Samsung Electro-Mechanics,0603,,1uF ±10% 25V Ceramic Capacitor X7R 0603,yes,50,50,50,0.0056,0.28,https://www.lcsc.com/product-detail/C29936.html
22,C2997487,MPD220M1VD19040R,Ymin,"SMD,7.3x4.3mm",,"35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS",yes,5,1,1,0.7063,3.53,https://www.lcsc.com/product-detail/C2997487.html
23,C5370906,FC-ALX 4030D-2R2MT,FANGCHENG,"SMD,4.2x4.2mm",,"8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS",yes,5,1,1,0.4781,2.39,https://www.lcsc.com/product-detail/C5370906.html
24,C18723014,X069-9616TSWIG02-H14,Wisevision,-,,"0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS",yes,2,1,1,1.3337,2.67,https://www.lcsc.com/product-detail/C18723014.html
25,C386166,UMK325AB7106KMHP,Taiyo Yuden,1210,,10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200,yes,25,5,5,0.0854,2.14,https://www.lcsc.com/product-detail/C386166.html
26,C38582720,TPA191A4-SC6R,3PEAK,SOT-363,,50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS,yes,5,5,5,0.5300,2.65,https://www.lcsc.com/product-detail/C38582720.html
27,C5185587,CUM1206-15FR004,FORT,1206,,1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,yes,5,1,1,0.0157,0.08,https://www.lcsc.com/product-detail/C5185587.html
17,C49164935,JER1206F1R006,JIERR,1206,,1W 6mΩ ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,yes,10,10,10,0.0371,0.37,https://www.lcsc.com/product-detail/C49164935.html
18,C110776,RT0603BRD071KL,YAGEO,0603,,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,20,20,20,0.0187,0.37,https://www.lcsc.com/product-detail/C110776.html
19,C18723015,X087-2832TSWIG02-H14,Wisevision,-,,"0.87 128x32 SSD1312 chip I2C LCD, OLED, Graphic RoHS",yes,5,1,1,1.5826,7.91,https://www.lcsc.com/product-detail/C18723015.html
20,C52741377,CPN201610H6R8MT,Magnetsyc,0806,,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,yes,20,20,20,0.0277,0.55,https://www.lcsc.com/product-detail/C52741377.html
21,C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,LGA-12(2x2),,LGA-12(2x2) Accelerometers RoHS,yes,5,1,1,0.2417,1.21,https://www.lcsc.com/product-detail/C19274408.html
22,C138714,TPD4E05U06DQAR,TI,USON-10(1x2.5),,14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),yes,5,5,5,0.0629,0.31,https://www.lcsc.com/product-detail/C138714.html
23,C36914039,1010350411R00,NJCON,"Through Hole,D4xL11mm",,"35V 100uF 75mΩ@100kHz 2.1A@100kHz ±20% Through Hole,D4xL11mm Aluminum - Polymer Capacitors RoHS",yes,10,5,5,0.0989,0.99,https://www.lcsc.com/product-detail/C36914039.html
24,C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,0805,,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,yes,10,10,10,0.0179,0.18,https://www.lcsc.com/product-detail/C98192.html

1 Index LCSC# MPN Manufacturer Package Customer # Description RoHS Quantity MOQ Multiple Unit Price(€) Extended Price(€) Product Link
2 1 C473369 TLV333IDBVR TI SOT-23-5 2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS 2uV 70pA 0.16V/us 102dB 17uA 350kHz 1 Rail-to-Rail Input, Rail-to-Rail Output SOT-23-5 Amplifiers RoHS yes 5 5 5 0.2121 0.2053 1.06 1.03 https://www.lcsc.com/product-detail/C473369.html
3 2 C2827931 SS24L Guangdong Hottech SOD-123FL Diode Independent 40V 2A Surface Mount SOD-123FL yes 20 20 20 0.0204 0.41 https://www.lcsc.com/product-detail/C2827931.html
4 3 C2931472 U263-163N-4OS1735 XKB Connection SMD USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount yes 5 5 5 0.2518 0.2495 1.26 1.25 https://www.lcsc.com/product-detail/C2931472.html
5 4 C2999960 MM5Z3V3 Slkor SOD-523 Zener Diode Independent 3.3V 200mW Surface Mount SOD-523 yes 20 20 20 0.0180 0.0179 0.36 https://www.lcsc.com/product-detail/C2999960.html
6 5 C52754543 RB521S30T1G-HXY HXY MOSFET SOD-523 1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS yes 20 20 20 0.0202 0.40 https://www.lcsc.com/product-detail/C52754543.html
7 6 C42442062 C51933397 CH32X035F8U6 TPA191A1Q-SC6R-S WCH 3PEAK QFN-20-EP(3x3) SOT-363 QFN-20-EP(3x3) Microcontrollers RoHS SOT-363 Amplifiers RoHS yes 5 1 1 0.4460 0.3810 2.23 1.91 https://www.lcsc.com/product-detail/C42442062.html https://www.lcsc.com/product-detail/C51933397.html
8 7 C780769 C42442062 AP63203WU-7 CH32X035F8U6 DIODES WCH TSOT-23-6 QFN-20-EP(3x3) 1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS QFN-20-EP(3x3) Microcontrollers RoHS yes 5 1 1 0.3766 0.4460 1.88 2.23 https://www.lcsc.com/product-detail/C780769.html https://www.lcsc.com/product-detail/C42442062.html
9 8 C7466527 C780769 AGM403AP AP63203WU-7 AGMSEMI DIODES PDFN3.3x3.3-8 TSOT-23-6 N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3 1.1MHz Buck Fixed 2A 3.3V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS yes 5 5 1 5 1 0.2447 0.4123 1.22 2.06 https://www.lcsc.com/product-detail/C7466527.html https://www.lcsc.com/product-detail/C780769.html
10 9 C2906999 C7466527 FRC0603F1803TS AGM403AP FOJAN AGMSEMI 0603 PDFN3.3x3.3-8 180kΩ ±1% 100mW 0603 Thick Film Resistor N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3 yes 100 5 100 5 100 5 0.0010 0.2447 0.10 1.22 https://www.lcsc.com/product-detail/C2906999.html https://www.lcsc.com/product-detail/C7466527.html
11 10 C4169844 C2906999 RS73F1JTTD2703B FRC0603F1803TS KOA FOJAN 0603 200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS 180kΩ ±1% 100mW 0603 Thick Film Resistor yes 5 100 5 100 5 100 0.0638 0.0011 0.32 0.11 https://www.lcsc.com/product-detail/C4169844.html https://www.lcsc.com/product-detail/C2906999.html
12 11 C2932326 C4169844 MT3608L RS73F1JTTD2703B XI'AN Aerosemi Tech KOA SOT-23-6 0603 1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS 200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS yes 10 5 10 5 10 5 0.0373 0.0891 0.37 0.45 https://www.lcsc.com/product-detail/C2932326.html https://www.lcsc.com/product-detail/C4169844.html
13 12 C138714 C76799 TPD4E05U06DQAR MLZ1608M4R7WT000 TI TDK USON-10(1x2.5) 0603 14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5) 350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS yes 5 10 5 10 5 10 0.0679 0.0346 0.34 0.35 https://www.lcsc.com/product-detail/C138714.html https://www.lcsc.com/product-detail/C76799.html
14 13 C19274408 C2932326 SC7A20HTR MT3608L Hangzhou Silan Microelectronics XI'AN Aerosemi Tech LGA-12(2x2) SOT-23-6 LGA-12(2x2) Accelerometers RoHS 1.2MHz Boost Adjustable 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS yes 5 10 1 10 1 10 0.2417 0.0373 1.21 0.37 https://www.lcsc.com/product-detail/C19274408.html https://www.lcsc.com/product-detail/C2932326.html
15 14 C52741377 C41414522 CPN201610H6R8MT NSG10752 Magnetsyc WXNSIC 0806 SOT-23-6 820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS High Side Gate Driver IC MOSFET IGBT SOT-23-6 yes 20 5 20 1 20 1 0.0277 0.4600 0.55 2.30 https://www.lcsc.com/product-detail/C52741377.html https://www.lcsc.com/product-detail/C41414522.html
16 15 C110776 C46818248 RT0603BRD071KL SIQ-02FVS3 YAGEO LZG 0603 - 100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS Encoders - Industrial RoHS yes 20 5 20 1 20 1 0.0187 0.9816 0.37 4.91 https://www.lcsc.com/product-detail/C110776.html https://www.lcsc.com/product-detail/C46818248.html
17 16 C162670 NCU18XH103F6SRB muRata 0603 NTC Thermistor 10kΩ Surface Mount 0603 yes 10 10 10 0.0533 0.53 https://www.lcsc.com/product-detail/C162670.html
18 17 C46818248 C49164935 SIQ-02FVS3 JER1206F1R006 LZG JIERR - 1206 Encoders - Industrial RoHS 1W 6mΩ ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS yes 5 10 1 10 1 10 0.9816 0.0371 4.91 0.37 https://www.lcsc.com/product-detail/C46818248.html https://www.lcsc.com/product-detail/C49164935.html
19 18 C41414522 C110776 NSG10752 RT0603BRD071KL WXNSIC YAGEO SOT-23-6 0603 High Side Gate Driver IC MOSFET IGBT SOT-23-6 100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS yes 5 20 1 20 1 20 0.4600 0.0187 2.30 0.37 https://www.lcsc.com/product-detail/C41414522.html https://www.lcsc.com/product-detail/C110776.html
20 19 C76799 C18723015 MLZ1608M4R7WT000 X087-2832TSWIG02-H14 TDK Wisevision 0603 - 350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS 0.87 128x32 SSD1312 chip I2C LCD, OLED, Graphic RoHS yes 10 5 10 1 10 1 0.0341 1.5826 0.34 7.91 https://www.lcsc.com/product-detail/C76799.html https://www.lcsc.com/product-detail/C18723015.html
21 20 C98192 C52741377 CL21A475KBQNNNE CPN201610H6R8MT Samsung Electro-Mechanics Magnetsyc 0805 0806 4.7uF ±10% 50V Ceramic Capacitor X5R 0805 820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS yes 10 20 10 20 10 20 0.0179 0.0277 0.18 0.55 https://www.lcsc.com/product-detail/C98192.html https://www.lcsc.com/product-detail/C52741377.html
22 21 C29936 C19274408 CL10B105KA8NNNC SC7A20HTR Samsung Electro-Mechanics Hangzhou Silan Microelectronics 0603 LGA-12(2x2) 1uF ±10% 25V Ceramic Capacitor X7R 0603 LGA-12(2x2) Accelerometers RoHS yes 50 5 50 1 50 1 0.0056 0.2417 0.28 1.21 https://www.lcsc.com/product-detail/C29936.html https://www.lcsc.com/product-detail/C19274408.html
23 22 C2997487 C138714 MPD220M1VD19040R TPD4E05U06DQAR Ymin TI SMD,7.3x4.3mm USON-10(1x2.5) 35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS 14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5) yes 5 1 5 1 5 0.7063 0.0629 3.53 0.31 https://www.lcsc.com/product-detail/C2997487.html https://www.lcsc.com/product-detail/C138714.html
24 23 C5370906 C36914039 FC-ALX 4030D-2R2MT 1010350411R00 FANGCHENG NJCON SMD,4.2x4.2mm Through Hole,D4xL11mm 8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS 35V 100uF 75mΩ@100kHz 2.1A@100kHz ±20% Through Hole,D4xL11mm Aluminum - Polymer Capacitors RoHS yes 5 10 1 5 1 5 0.4781 0.0989 2.39 0.99 https://www.lcsc.com/product-detail/C5370906.html https://www.lcsc.com/product-detail/C36914039.html
25 24 C18723014 C98192 X069-9616TSWIG02-H14 CL21A475KBQNNNE Wisevision Samsung Electro-Mechanics - 0805 0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS 4.7uF ±10% 50V Ceramic Capacitor X5R 0805 yes 2 10 1 10 1 10 1.3337 0.0179 2.67 0.18 https://www.lcsc.com/product-detail/C18723014.html https://www.lcsc.com/product-detail/C98192.html
25 C386166 UMK325AB7106KMHP Taiyo Yuden 1210 10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200 yes 25 5 5 0.0854 2.14 https://www.lcsc.com/product-detail/C386166.html
26 C38582720 TPA191A4-SC6R 3PEAK SOT-363 50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS yes 5 5 5 0.5300 2.65 https://www.lcsc.com/product-detail/C38582720.html
27 C5185587 CUM1206-15FR004 FORT 1206 1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS yes 5 1 1 0.0157 0.08 https://www.lcsc.com/product-detail/C5185587.html

View File

@ -1,28 +0,0 @@
LCSC Part Number,Manufacture Part Number,Manufacturer,Customer NO.,Package,Description,RoHS,Quantity,Unit Price(€),Ext.Price(€),Estimated lead time (business days),Date Code / Lot No.
C473369,TLV333IDBVR,TI,,SOT-23-5,"2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS",YES,5,0.2121,1.06,,
C2827931,SS24L,Guangdong Hottech,,SOD-123FL,Diode Independent 40V 2A Surface Mount SOD-123FL,YES,20,0.0214,0.43,,
C2931472,U263-163N-4OS1735,XKB Connection,,SMD,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,YES,5,0.2518,1.26,,
C2999960,MM5Z3V3,Slkor,,SOD-523,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,YES,20,0.0181,0.36,,
C52754543,RB521S30T1G-HXY,HXY MOSFET,,SOD-523,1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS,YES,20,0.0212,0.42,,
C42442062,CH32X035F8U6,WCH,,QFN-20-EP(3x3),QFN-20-EP(3x3) Microcontrollers RoHS,YES,5,0.446,2.23,,
C780769,AP63203WU-7,DIODES,,TSOT-23-6,1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,YES,5,0.3766,1.88,,
C7466527,AGM403AP,AGMSEMI,,PDFN3.3x3.3-8,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,YES,5,0.2575,1.29,,
C2906999,FRC0603F1803TS,FOJAN,,0603,180kΩ ±1% 100mW 0603 Thick Film Resistor,YES,100,0.001,0.10,,
C4169844,RS73F1JTTD2703B,KOA,,0603,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,YES,5,0.0638,0.32,,
C2932326,MT3608L,XI'AN Aerosemi Tech,,SOT-23-6,1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,YES,10,0.0373,0.37,,
C138714,TPD4E05U06DQAR,TI,,USON-10(1x2.5),14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),YES,5,0.0682,0.34,,
C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,,LGA-12(2x2),LGA-12(2x2) Accelerometers RoHS,YES,5,0.2417,1.21,,
C52741377,CPN201610H6R8MT,Magnetsyc,,0806,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,YES,20,0.0277,0.55,,
C110776,RT0603BRD071KL,YAGEO,,0603,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,YES,20,0.0187,0.37,,
C162670,NCU18XH103F6SRB,muRata,,0603,NTC Thermistor 10kΩ Surface Mount 0603,YES,10,0.0533,0.53,,
C46818248,SIQ-02FVS3,LZG,,-,Encoders - Industrial RoHS,YES,5,0.9816,4.91,,
C41414522,NSG10752,WXNSIC,,SOT-23-6,High Side Gate Driver IC MOSFET IGBT SOT-23-6,YES,5,0.4842,2.42,,
C76799,MLZ1608M4R7WT000,TDK,,0603,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,YES,10,0.0351,0.35,,
C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,,0805,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,YES,10,0.0179,0.18,,
C29936,CL10B105KA8NNNC,Samsung Electro-Mechanics,,0603,1uF ±10% 25V Ceramic Capacitor X7R 0603,YES,50,0.0056,0.28,,
C2997487,MPD220M1VD19040R,Ymin,,"SMD,7.3x4.3mm","35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS",YES,5,0.7063,3.53,,
C5370906,FC-ALX 4030D-2R2MT,FANGCHENG,,"SMD,4.2x4.2mm","8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS",YES,5,0.4781,2.39,,
C18723014,X069-9616TSWIG02-H14,Wisevision,,-,"0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS",YES,2,1.3337,2.67,,
C386166,UMK325AB7106KMHP,Taiyo Yuden,,1210,10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200,YES,25,0.0854,2.14,,
C38582720,TPA191A4-SC6R,3PEAK,,SOT-363,50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS,YES,5,0.53,2.65,,
C5185587,CUM1206-15FR004,FORT,,1206,1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,YES,5,0.0522,0.26,,
1 LCSC Part Number Manufacture Part Number Manufacturer Customer NO. Package Description RoHS Quantity Unit Price(€) Ext.Price(€) Estimated lead time (business days) Date Code / Lot No.
2 C473369 TLV333IDBVR TI SOT-23-5 2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS YES 5 0.2121 1.06
3 C2827931 SS24L Guangdong Hottech SOD-123FL Diode Independent 40V 2A Surface Mount SOD-123FL YES 20 0.0214 0.43
4 C2931472 U263-163N-4OS1735 XKB Connection SMD USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount YES 5 0.2518 1.26
5 C2999960 MM5Z3V3 Slkor SOD-523 Zener Diode Independent 3.3V 200mW Surface Mount SOD-523 YES 20 0.0181 0.36
6 C52754543 RB521S30T1G-HXY HXY MOSFET SOD-523 1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS YES 20 0.0212 0.42
7 C42442062 CH32X035F8U6 WCH QFN-20-EP(3x3) QFN-20-EP(3x3) Microcontrollers RoHS YES 5 0.446 2.23
8 C780769 AP63203WU-7 DIODES TSOT-23-6 1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS YES 5 0.3766 1.88
9 C7466527 AGM403AP AGMSEMI PDFN3.3x3.3-8 N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3 YES 5 0.2575 1.29
10 C2906999 FRC0603F1803TS FOJAN 0603 180kΩ ±1% 100mW 0603 Thick Film Resistor YES 100 0.001 0.10
11 C4169844 RS73F1JTTD2703B KOA 0603 200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS YES 5 0.0638 0.32
12 C2932326 MT3608L XI'AN Aerosemi Tech SOT-23-6 1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS YES 10 0.0373 0.37
13 C138714 TPD4E05U06DQAR TI USON-10(1x2.5) 14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5) YES 5 0.0682 0.34
14 C19274408 SC7A20HTR Hangzhou Silan Microelectronics LGA-12(2x2) LGA-12(2x2) Accelerometers RoHS YES 5 0.2417 1.21
15 C52741377 CPN201610H6R8MT Magnetsyc 0806 820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS YES 20 0.0277 0.55
16 C110776 RT0603BRD071KL YAGEO 0603 100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS YES 20 0.0187 0.37
17 C162670 NCU18XH103F6SRB muRata 0603 NTC Thermistor 10kΩ Surface Mount 0603 YES 10 0.0533 0.53
18 C46818248 SIQ-02FVS3 LZG - Encoders - Industrial RoHS YES 5 0.9816 4.91
19 C41414522 NSG10752 WXNSIC SOT-23-6 High Side Gate Driver IC MOSFET IGBT SOT-23-6 YES 5 0.4842 2.42
20 C76799 MLZ1608M4R7WT000 TDK 0603 350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS YES 10 0.0351 0.35
21 C98192 CL21A475KBQNNNE Samsung Electro-Mechanics 0805 4.7uF ±10% 50V Ceramic Capacitor X5R 0805 YES 10 0.0179 0.18
22 C29936 CL10B105KA8NNNC Samsung Electro-Mechanics 0603 1uF ±10% 25V Ceramic Capacitor X7R 0603 YES 50 0.0056 0.28
23 C2997487 MPD220M1VD19040R Ymin SMD,7.3x4.3mm 35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS YES 5 0.7063 3.53
24 C5370906 FC-ALX 4030D-2R2MT FANGCHENG SMD,4.2x4.2mm 8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS YES 5 0.4781 2.39
25 C18723014 X069-9616TSWIG02-H14 Wisevision - 0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS YES 2 1.3337 2.67
26 C386166 UMK325AB7106KMHP Taiyo Yuden 1210 10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200 YES 25 0.0854 2.14
27 C38582720 TPA191A4-SC6R 3PEAK SOT-363 50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS YES 5 0.53 2.65
28 C5185587 CUM1206-15FR004 FORT 1206 1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS YES 5 0.0522 0.26

View File

@ -1 +0,0 @@
{"ARCHIVE_NAME": "", "EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false, "OPEN BROWSER": true, "NO_BACKUP_OPT": false}

View File

@ -1,214 +0,0 @@
(footprint "CP-SMD_L7.3-W4.3-FD"
(version 20241229)
(generator "pcbnew")
(generator_version "9.0")
(layer "F.Cu")
(property "Reference" "U?"
(at 0 -3.1505 0)
(layer "F.SilkS")
(uuid "b0420e10-f9de-44c2-b3bc-1c63b7732991")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "CP-SMD_L7.3-W4.3-FD"
(at 0 3.180433 0)
(layer "F.Fab")
(uuid "3764bd39-7877-40b8-b19a-9f54076b2216")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "6fe3217a-c574-4696-9148-9ef68c89ae30")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "7d363a82-42d9-447f-9f24-a22f71c9c74c")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(fp_line
(start -3.729 -2.226)
(end 3.7235 -2.226)
(stroke
(width 0.1525)
(type default)
)
(layer "F.SilkS")
(uuid "1d62bf89-eb8a-4e67-ac48-0acebc5568fa")
)
(fp_line
(start -3.729 2.226)
(end 3.7235 2.226)
(stroke
(width 0.1525)
(type default)
)
(layer "F.SilkS")
(uuid "4a64e2b3-928d-4b41-a3e6-167ff4c61b8b")
)
(fp_line
(start -2.1995 -2.226)
(end -2.1995 2.226)
(stroke
(width 0.1525)
(type default)
)
(layer "F.SilkS")
(uuid "2c29e4a6-ec51-4063-afb9-f032a5181c45")
)
(fp_line
(start 3.7235 -2.226)
(end 3.7235 -1.499)
(stroke
(width 0.1525)
(type default)
)
(layer "F.SilkS")
(uuid "fd0829d4-9dd0-4f25-937d-7d882bf2e204")
)
(fp_line
(start 3.7235 2.226)
(end 3.7235 1.499)
(stroke
(width 0.1525)
(type default)
)
(layer "F.SilkS")
(uuid "5a74592d-8d3b-43b4-b462-1e84904fe40c")
)
(fp_poly
(pts
(xy -3.6525 -2.3025) (xy -3.6525 -1.4485) (xy -4.1095 -1.4485) (xy -4.1095 -2.3025)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "F.SilkS")
(uuid "f647d094-8db7-4259-a567-f7bae2d2d2a6")
)
(fp_poly
(pts
(xy -3.6525 2.3025) (xy -3.6525 1.4485) (xy -4.1095 1.4485) (xy -4.1095 2.3025)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "F.SilkS")
(uuid "af2ca681-83ef-4789-9ac9-eb1eee4ceed2")
)
(fp_rect
(start -4.779 -2.4255)
(end 4.779 2.455433)
(stroke
(width 0.05)
(type default)
)
(fill no)
(layer "F.CrtYd")
(uuid "9a739e32-4328-4456-b22c-ca0679c69e76")
)
(fp_line
(start -3.6525 -2.15)
(end 3.6475 -2.15)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "9fc06c76-9227-4434-aa26-f1f07167dc16")
)
(fp_line
(start -3.6525 2.15)
(end -3.6525 -2.15)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "d137b34c-958c-4e5c-9e15-e6d58994fc30")
)
(fp_line
(start 3.6475 -2.15)
(end 3.6475 2.15)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "328e8c4c-485b-4183-89ef-4c4d23b89dd9")
)
(fp_line
(start 3.6475 2.15)
(end -3.6525 2.15)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "d729c60b-46ed-41a3-9e26-10de4be0b13d")
)
(fp_poly
(pts
(xy -3.597067 2.127039) (xy -3.629539 2.094567) (xy -3.675461 2.094567) (xy -3.707933 2.127039) (xy -3.707933 2.172961)
(xy -3.675461 2.205433) (xy -3.629539 2.205433) (xy -3.597067 2.172961)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "F.Fab")
(uuid "54e7e42a-2223-458c-b87b-57682cd44a31")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "da04da3f-1fba-4420-ad19-c0aabe763e19")
(effects
(font
(size 0.5 0.5)
(thickness 0.1)
)
)
)
(pad "1" smd rect
(at -3.4365 0 180)
(size 2.185 2.592)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "7ce0cbeb-9212-4d55-a89a-c54d82414dee")
)
(pad "2" smd rect
(at 3.4365 0 180)
(size 2.185 2.592)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "f85898eb-74d6-41c0-bb2b-ff0e22f513e1")
)
(embedded_fonts no)
)

View File

@ -1,492 +0,0 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-02-28T19:53:20',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('Body','Body','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#454);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#50,#76,#102,#122,#153,#178,#203,#228,#248,
#274,#300,#326,#351,#376,#401,#410,#419,#445));
#17 = ADVANCED_FACE('',(#18),#45,.T.);
#18 = FACE_BOUND('',#19,.F.);
#19 = EDGE_LOOP('',(#20,#30,#37,#38));
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(2.5,0.,0.5));
#24 = VERTEX_POINT('',#25);
#25 = CARTESIAN_POINT('',(2.5,-6.123233995737E-16,0.9));
#26 = LINE('',#27,#28);
#27 = CARTESIAN_POINT('',(2.5,0.,0.));
#28 = VECTOR('',#29,1.);
#29 = DIRECTION('',(0.,0.,1.));
#30 = ORIENTED_EDGE('',*,*,#31,.F.);
#31 = EDGE_CURVE('',#22,#22,#32,.T.);
#32 = CIRCLE('',#33,2.5);
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
#34 = CARTESIAN_POINT('',(0.,0.,0.5));
#35 = DIRECTION('',(0.,0.,1.));
#36 = DIRECTION('',(1.,0.,0.));
#37 = ORIENTED_EDGE('',*,*,#21,.T.);
#38 = ORIENTED_EDGE('',*,*,#39,.F.);
#39 = EDGE_CURVE('',#24,#24,#40,.T.);
#40 = CIRCLE('',#41,2.5);
#41 = AXIS2_PLACEMENT_3D('',#42,#43,#44);
#42 = CARTESIAN_POINT('',(0.,0.,0.9));
#43 = DIRECTION('',(0.,-0.,-1.));
#44 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#45 = CYLINDRICAL_SURFACE('',#46,2.5);
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
#47 = CARTESIAN_POINT('',(0.,0.,0.));
#48 = DIRECTION('',(-0.,-0.,-1.));
#49 = DIRECTION('',(1.,0.,0.));
#50 = ADVANCED_FACE('',(#51),#71,.T.);
#51 = FACE_BOUND('',#52,.F.);
#52 = EDGE_LOOP('',(#53,#62,#63,#64));
#53 = ORIENTED_EDGE('',*,*,#54,.F.);
#54 = EDGE_CURVE('',#24,#55,#57,.T.);
#55 = VERTEX_POINT('',#56);
#56 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.));
#57 = CIRCLE('',#58,0.1);
#58 = AXIS2_PLACEMENT_3D('',#59,#60,#61);
#59 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,0.9));
#60 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
#61 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#62 = ORIENTED_EDGE('',*,*,#39,.F.);
#63 = ORIENTED_EDGE('',*,*,#54,.T.);
#64 = ORIENTED_EDGE('',*,*,#65,.T.);
#65 = EDGE_CURVE('',#55,#55,#66,.T.);
#66 = CIRCLE('',#67,2.4);
#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70);
#68 = CARTESIAN_POINT('',(0.,0.,1.));
#69 = DIRECTION('',(0.,-0.,-1.));
#70 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#71 = TOROIDAL_SURFACE('',#72,2.4,0.1);
#72 = AXIS2_PLACEMENT_3D('',#73,#74,#75);
#73 = CARTESIAN_POINT('',(0.,0.,0.9));
#74 = DIRECTION('',(0.,0.,1.));
#75 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#76 = ADVANCED_FACE('',(#77),#97,.T.);
#77 = FACE_BOUND('',#78,.F.);
#78 = EDGE_LOOP('',(#79,#88,#89,#90));
#79 = ORIENTED_EDGE('',*,*,#80,.F.);
#80 = EDGE_CURVE('',#22,#81,#83,.T.);
#81 = VERTEX_POINT('',#82);
#82 = CARTESIAN_POINT('',(2.,0.,0.));
#83 = CIRCLE('',#84,0.5);
#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87);
#85 = CARTESIAN_POINT('',(2.,0.,0.5));
#86 = DIRECTION('',(-0.,1.,0.));
#87 = DIRECTION('',(1.,0.,0.));
#88 = ORIENTED_EDGE('',*,*,#31,.F.);
#89 = ORIENTED_EDGE('',*,*,#80,.T.);
#90 = ORIENTED_EDGE('',*,*,#91,.T.);
#91 = EDGE_CURVE('',#81,#81,#92,.T.);
#92 = CIRCLE('',#93,2.);
#93 = AXIS2_PLACEMENT_3D('',#94,#95,#96);
#94 = CARTESIAN_POINT('',(0.,0.,0.));
#95 = DIRECTION('',(0.,0.,1.));
#96 = DIRECTION('',(1.,0.,0.));
#97 = TOROIDAL_SURFACE('',#98,2.,0.5);
#98 = AXIS2_PLACEMENT_3D('',#99,#100,#101);
#99 = CARTESIAN_POINT('',(0.,0.,0.5));
#100 = DIRECTION('',(-0.,-0.,-1.));
#101 = DIRECTION('',(1.,0.,0.));
#102 = ADVANCED_FACE('',(#103,#106),#117,.T.);
#103 = FACE_BOUND('',#104,.T.);
#104 = EDGE_LOOP('',(#105));
#105 = ORIENTED_EDGE('',*,*,#65,.F.);
#106 = FACE_BOUND('',#107,.T.);
#107 = EDGE_LOOP('',(#108));
#108 = ORIENTED_EDGE('',*,*,#109,.T.);
#109 = EDGE_CURVE('',#110,#110,#112,.T.);
#110 = VERTEX_POINT('',#111);
#111 = CARTESIAN_POINT('',(2.3,0.,1.));
#112 = CIRCLE('',#113,2.3);
#113 = AXIS2_PLACEMENT_3D('',#114,#115,#116);
#114 = CARTESIAN_POINT('',(0.,0.,1.));
#115 = DIRECTION('',(0.,0.,-1.));
#116 = DIRECTION('',(1.,0.,0.));
#117 = PLANE('',#118);
#118 = AXIS2_PLACEMENT_3D('',#119,#120,#121);
#119 = CARTESIAN_POINT('',(-1.780521005911E-16,-1.605094478296E-16,1.));
#120 = DIRECTION('',(0.,0.,1.));
#121 = DIRECTION('',(1.,0.,0.));
#122 = ADVANCED_FACE('',(#123,#126,#137),#148,.F.);
#123 = FACE_BOUND('',#124,.F.);
#124 = EDGE_LOOP('',(#125));
#125 = ORIENTED_EDGE('',*,*,#91,.T.);
#126 = FACE_BOUND('',#127,.F.);
#127 = EDGE_LOOP('',(#128));
#128 = ORIENTED_EDGE('',*,*,#129,.T.);
#129 = EDGE_CURVE('',#130,#130,#132,.T.);
#130 = VERTEX_POINT('',#131);
#131 = CARTESIAN_POINT('',(-0.75,6.123233995737E-17,-2.196404034271E-30)
);
#132 = CIRCLE('',#133,0.25);
#133 = AXIS2_PLACEMENT_3D('',#134,#135,#136);
#134 = CARTESIAN_POINT('',(-1.,0.,0.));
#135 = DIRECTION('',(0.,0.,-1.));
#136 = DIRECTION('',(1.,0.,0.));
#137 = FACE_BOUND('',#138,.F.);
#138 = EDGE_LOOP('',(#139));
#139 = ORIENTED_EDGE('',*,*,#140,.T.);
#140 = EDGE_CURVE('',#141,#141,#143,.T.);
#141 = VERTEX_POINT('',#142);
#142 = CARTESIAN_POINT('',(1.25,6.123233995737E-17,-2.196404034271E-30)
);
#143 = CIRCLE('',#144,0.25);
#144 = AXIS2_PLACEMENT_3D('',#145,#146,#147);
#145 = CARTESIAN_POINT('',(1.,0.,0.));
#146 = DIRECTION('',(0.,0.,-1.));
#147 = DIRECTION('',(1.,0.,0.));
#148 = PLANE('',#149);
#149 = AXIS2_PLACEMENT_3D('',#150,#151,#152);
#150 = CARTESIAN_POINT('',(-1.367440132539E-16,1.714341265789E-16,0.));
#151 = DIRECTION('',(0.,0.,1.));
#152 = DIRECTION('',(1.,0.,0.));
#153 = ADVANCED_FACE('',(#154),#173,.T.);
#154 = FACE_BOUND('',#155,.T.);
#155 = EDGE_LOOP('',(#156,#164,#171,#172));
#156 = ORIENTED_EDGE('',*,*,#157,.T.);
#157 = EDGE_CURVE('',#110,#158,#160,.T.);
#158 = VERTEX_POINT('',#159);
#159 = CARTESIAN_POINT('',(2.3,0.,1.5));
#160 = LINE('',#161,#162);
#161 = CARTESIAN_POINT('',(2.3,0.,1.));
#162 = VECTOR('',#163,1.);
#163 = DIRECTION('',(0.,0.,1.));
#164 = ORIENTED_EDGE('',*,*,#165,.T.);
#165 = EDGE_CURVE('',#158,#158,#166,.T.);
#166 = CIRCLE('',#167,2.3);
#167 = AXIS2_PLACEMENT_3D('',#168,#169,#170);
#168 = CARTESIAN_POINT('',(0.,0.,1.5));
#169 = DIRECTION('',(0.,0.,-1.));
#170 = DIRECTION('',(1.,0.,0.));
#171 = ORIENTED_EDGE('',*,*,#157,.F.);
#172 = ORIENTED_EDGE('',*,*,#109,.F.);
#173 = CYLINDRICAL_SURFACE('',#174,2.3);
#174 = AXIS2_PLACEMENT_3D('',#175,#176,#177);
#175 = CARTESIAN_POINT('',(0.,0.,1.));
#176 = DIRECTION('',(0.,0.,-1.));
#177 = DIRECTION('',(1.,0.,0.));
#178 = ADVANCED_FACE('',(#179),#198,.T.);
#179 = FACE_BOUND('',#180,.T.);
#180 = EDGE_LOOP('',(#181,#189,#196,#197));
#181 = ORIENTED_EDGE('',*,*,#182,.T.);
#182 = EDGE_CURVE('',#130,#183,#185,.T.);
#183 = VERTEX_POINT('',#184);
#184 = CARTESIAN_POINT('',(-0.75,-4.535750870824E-14,-0.999999999999));
#185 = LINE('',#186,#187);
#186 = CARTESIAN_POINT('',(-0.75,0.,0.));
#187 = VECTOR('',#188,1.);
#188 = DIRECTION('',(0.,-3.587E-14,-1.));
#189 = ORIENTED_EDGE('',*,*,#190,.F.);
#190 = EDGE_CURVE('',#183,#183,#191,.T.);
#191 = CIRCLE('',#192,0.25);
#192 = AXIS2_PLACEMENT_3D('',#193,#194,#195);
#193 = CARTESIAN_POINT('',(-1.,-3.587E-14,-1.));
#194 = DIRECTION('',(0.,-3.587E-14,-1.));
#195 = DIRECTION('',(1.,0.,0.));
#196 = ORIENTED_EDGE('',*,*,#182,.F.);
#197 = ORIENTED_EDGE('',*,*,#129,.T.);
#198 = CYLINDRICAL_SURFACE('',#199,0.25);
#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202);
#200 = CARTESIAN_POINT('',(-1.,0.,0.));
#201 = DIRECTION('',(0.,-3.587E-14,-1.));
#202 = DIRECTION('',(1.,0.,0.));
#203 = ADVANCED_FACE('',(#204),#223,.T.);
#204 = FACE_BOUND('',#205,.T.);
#205 = EDGE_LOOP('',(#206,#214,#221,#222));
#206 = ORIENTED_EDGE('',*,*,#207,.T.);
#207 = EDGE_CURVE('',#141,#208,#210,.T.);
#208 = VERTEX_POINT('',#209);
#209 = CARTESIAN_POINT('',(1.25,-4.535750870824E-14,-0.999999999999));
#210 = LINE('',#211,#212);
#211 = CARTESIAN_POINT('',(1.25,0.,0.));
#212 = VECTOR('',#213,1.);
#213 = DIRECTION('',(0.,-3.587E-14,-1.));
#214 = ORIENTED_EDGE('',*,*,#215,.F.);
#215 = EDGE_CURVE('',#208,#208,#216,.T.);
#216 = CIRCLE('',#217,0.25);
#217 = AXIS2_PLACEMENT_3D('',#218,#219,#220);
#218 = CARTESIAN_POINT('',(1.,-3.587E-14,-1.));
#219 = DIRECTION('',(0.,-3.587E-14,-1.));
#220 = DIRECTION('',(1.,0.,0.));
#221 = ORIENTED_EDGE('',*,*,#207,.F.);
#222 = ORIENTED_EDGE('',*,*,#140,.T.);
#223 = CYLINDRICAL_SURFACE('',#224,0.25);
#224 = AXIS2_PLACEMENT_3D('',#225,#226,#227);
#225 = CARTESIAN_POINT('',(1.,0.,0.));
#226 = DIRECTION('',(0.,-3.587E-14,-1.));
#227 = DIRECTION('',(1.,0.,0.));
#228 = ADVANCED_FACE('',(#229,#240),#243,.F.);
#229 = FACE_BOUND('',#230,.F.);
#230 = EDGE_LOOP('',(#231));
#231 = ORIENTED_EDGE('',*,*,#232,.F.);
#232 = EDGE_CURVE('',#233,#233,#235,.T.);
#233 = VERTEX_POINT('',#234);
#234 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.5));
#235 = CIRCLE('',#236,2.4);
#236 = AXIS2_PLACEMENT_3D('',#237,#238,#239);
#237 = CARTESIAN_POINT('',(0.,0.,1.5));
#238 = DIRECTION('',(0.,-0.,-1.));
#239 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#240 = FACE_BOUND('',#241,.F.);
#241 = EDGE_LOOP('',(#242));
#242 = ORIENTED_EDGE('',*,*,#165,.T.);
#243 = PLANE('',#244);
#244 = AXIS2_PLACEMENT_3D('',#245,#246,#247);
#245 = CARTESIAN_POINT('',(-1.780521005911E-16,-1.605094478296E-16,1.5)
);
#246 = DIRECTION('',(0.,0.,1.));
#247 = DIRECTION('',(1.,0.,0.));
#248 = ADVANCED_FACE('',(#249),#269,.T.);
#249 = FACE_BOUND('',#250,.T.);
#250 = EDGE_LOOP('',(#251,#260,#267,#268));
#251 = ORIENTED_EDGE('',*,*,#252,.T.);
#252 = EDGE_CURVE('',#183,#253,#255,.T.);
#253 = VERTEX_POINT('',#254);
#254 = CARTESIAN_POINT('',(-0.75,-1.,-2.));
#255 = CIRCLE('',#256,1.);
#256 = AXIS2_PLACEMENT_3D('',#257,#258,#259);
#257 = CARTESIAN_POINT('',(-0.75,-1.,-1.));
#258 = DIRECTION('',(-1.,0.,0.));
#259 = DIRECTION('',(0.,1.,1.110223024625E-16));
#260 = ORIENTED_EDGE('',*,*,#261,.T.);
#261 = EDGE_CURVE('',#253,#253,#262,.T.);
#262 = CIRCLE('',#263,0.25);
#263 = AXIS2_PLACEMENT_3D('',#264,#265,#266);
#264 = CARTESIAN_POINT('',(-1.,-1.,-2.));
#265 = DIRECTION('',(0.,1.,3.037032091222E-14));
#266 = DIRECTION('',(0.,3.037032091222E-14,-1.));
#267 = ORIENTED_EDGE('',*,*,#252,.F.);
#268 = ORIENTED_EDGE('',*,*,#190,.T.);
#269 = TOROIDAL_SURFACE('',#270,1.,0.25);
#270 = AXIS2_PLACEMENT_3D('',#271,#272,#273);
#271 = CARTESIAN_POINT('',(-1.,-1.,-1.));
#272 = DIRECTION('',(-1.,0.,0.));
#273 = DIRECTION('',(0.,1.,1.110223024625E-16));
#274 = ADVANCED_FACE('',(#275),#295,.T.);
#275 = FACE_BOUND('',#276,.T.);
#276 = EDGE_LOOP('',(#277,#286,#293,#294));
#277 = ORIENTED_EDGE('',*,*,#278,.T.);
#278 = EDGE_CURVE('',#208,#279,#281,.T.);
#279 = VERTEX_POINT('',#280);
#280 = CARTESIAN_POINT('',(1.25,-1.,-2.));
#281 = CIRCLE('',#282,1.);
#282 = AXIS2_PLACEMENT_3D('',#283,#284,#285);
#283 = CARTESIAN_POINT('',(1.25,-1.,-1.));
#284 = DIRECTION('',(-1.,0.,0.));
#285 = DIRECTION('',(0.,1.,1.110223024625E-16));
#286 = ORIENTED_EDGE('',*,*,#287,.T.);
#287 = EDGE_CURVE('',#279,#279,#288,.T.);
#288 = CIRCLE('',#289,0.25);
#289 = AXIS2_PLACEMENT_3D('',#290,#291,#292);
#290 = CARTESIAN_POINT('',(1.,-1.,-2.));
#291 = DIRECTION('',(0.,1.,3.037032091222E-14));
#292 = DIRECTION('',(0.,3.037032091222E-14,-1.));
#293 = ORIENTED_EDGE('',*,*,#278,.F.);
#294 = ORIENTED_EDGE('',*,*,#215,.T.);
#295 = TOROIDAL_SURFACE('',#296,1.,0.25);
#296 = AXIS2_PLACEMENT_3D('',#297,#298,#299);
#297 = CARTESIAN_POINT('',(1.,-1.,-1.));
#298 = DIRECTION('',(-1.,0.,0.));
#299 = DIRECTION('',(0.,1.,1.110223024625E-16));
#300 = ADVANCED_FACE('',(#301),#321,.T.);
#301 = FACE_BOUND('',#302,.F.);
#302 = EDGE_LOOP('',(#303,#312,#313,#314));
#303 = ORIENTED_EDGE('',*,*,#304,.F.);
#304 = EDGE_CURVE('',#233,#305,#307,.T.);
#305 = VERTEX_POINT('',#306);
#306 = CARTESIAN_POINT('',(2.5,-6.123233995737E-16,1.6));
#307 = CIRCLE('',#308,0.1);
#308 = AXIS2_PLACEMENT_3D('',#309,#310,#311);
#309 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.6));
#310 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
#311 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#312 = ORIENTED_EDGE('',*,*,#232,.F.);
#313 = ORIENTED_EDGE('',*,*,#304,.T.);
#314 = ORIENTED_EDGE('',*,*,#315,.T.);
#315 = EDGE_CURVE('',#305,#305,#316,.T.);
#316 = CIRCLE('',#317,2.5);
#317 = AXIS2_PLACEMENT_3D('',#318,#319,#320);
#318 = CARTESIAN_POINT('',(0.,0.,1.6));
#319 = DIRECTION('',(0.,-0.,-1.));
#320 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#321 = TOROIDAL_SURFACE('',#322,2.4,0.1);
#322 = AXIS2_PLACEMENT_3D('',#323,#324,#325);
#323 = CARTESIAN_POINT('',(0.,0.,1.6));
#324 = DIRECTION('',(0.,0.,1.));
#325 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#326 = ADVANCED_FACE('',(#327),#346,.T.);
#327 = FACE_BOUND('',#328,.T.);
#328 = EDGE_LOOP('',(#329,#337,#344,#345));
#329 = ORIENTED_EDGE('',*,*,#330,.T.);
#330 = EDGE_CURVE('',#253,#331,#333,.T.);
#331 = VERTEX_POINT('',#332);
#332 = CARTESIAN_POINT('',(-0.75,-4.,-2.));
#333 = LINE('',#334,#335);
#334 = CARTESIAN_POINT('',(-0.75,-1.,-2.));
#335 = VECTOR('',#336,1.);
#336 = DIRECTION('',(0.,-1.,0.));
#337 = ORIENTED_EDGE('',*,*,#338,.F.);
#338 = EDGE_CURVE('',#331,#331,#339,.T.);
#339 = CIRCLE('',#340,0.25);
#340 = AXIS2_PLACEMENT_3D('',#341,#342,#343);
#341 = CARTESIAN_POINT('',(-1.,-4.,-2.));
#342 = DIRECTION('',(0.,-1.,2.270122808414E-12));
#343 = DIRECTION('',(1.,0.,0.));
#344 = ORIENTED_EDGE('',*,*,#330,.F.);
#345 = ORIENTED_EDGE('',*,*,#261,.F.);
#346 = CYLINDRICAL_SURFACE('',#347,0.25);
#347 = AXIS2_PLACEMENT_3D('',#348,#349,#350);
#348 = CARTESIAN_POINT('',(-1.,-1.,-2.));
#349 = DIRECTION('',(0.,-1.,0.));
#350 = DIRECTION('',(1.,0.,0.));
#351 = ADVANCED_FACE('',(#352),#371,.T.);
#352 = FACE_BOUND('',#353,.T.);
#353 = EDGE_LOOP('',(#354,#362,#369,#370));
#354 = ORIENTED_EDGE('',*,*,#355,.T.);
#355 = EDGE_CURVE('',#279,#356,#358,.T.);
#356 = VERTEX_POINT('',#357);
#357 = CARTESIAN_POINT('',(1.25,-4.,-2.));
#358 = LINE('',#359,#360);
#359 = CARTESIAN_POINT('',(1.25,-1.,-2.));
#360 = VECTOR('',#361,1.);
#361 = DIRECTION('',(0.,-1.,0.));
#362 = ORIENTED_EDGE('',*,*,#363,.F.);
#363 = EDGE_CURVE('',#356,#356,#364,.T.);
#364 = CIRCLE('',#365,0.25);
#365 = AXIS2_PLACEMENT_3D('',#366,#367,#368);
#366 = CARTESIAN_POINT('',(1.,-4.,-2.));
#367 = DIRECTION('',(0.,-1.,2.270122808414E-12));
#368 = DIRECTION('',(1.,0.,0.));
#369 = ORIENTED_EDGE('',*,*,#355,.F.);
#370 = ORIENTED_EDGE('',*,*,#287,.F.);
#371 = CYLINDRICAL_SURFACE('',#372,0.25);
#372 = AXIS2_PLACEMENT_3D('',#373,#374,#375);
#373 = CARTESIAN_POINT('',(1.,-1.,-2.));
#374 = DIRECTION('',(0.,-1.,0.));
#375 = DIRECTION('',(1.,0.,0.));
#376 = ADVANCED_FACE('',(#377),#396,.T.);
#377 = FACE_BOUND('',#378,.F.);
#378 = EDGE_LOOP('',(#379,#387,#388,#389));
#379 = ORIENTED_EDGE('',*,*,#380,.F.);
#380 = EDGE_CURVE('',#305,#381,#383,.T.);
#381 = VERTEX_POINT('',#382);
#382 = CARTESIAN_POINT('',(2.5,0.,5.5));
#383 = LINE('',#384,#385);
#384 = CARTESIAN_POINT('',(2.5,0.,0.));
#385 = VECTOR('',#386,1.);
#386 = DIRECTION('',(0.,0.,1.));
#387 = ORIENTED_EDGE('',*,*,#315,.T.);
#388 = ORIENTED_EDGE('',*,*,#380,.T.);
#389 = ORIENTED_EDGE('',*,*,#390,.T.);
#390 = EDGE_CURVE('',#381,#381,#391,.T.);
#391 = CIRCLE('',#392,2.5);
#392 = AXIS2_PLACEMENT_3D('',#393,#394,#395);
#393 = CARTESIAN_POINT('',(0.,0.,5.5));
#394 = DIRECTION('',(0.,0.,1.));
#395 = DIRECTION('',(1.,0.,0.));
#396 = CYLINDRICAL_SURFACE('',#397,2.5);
#397 = AXIS2_PLACEMENT_3D('',#398,#399,#400);
#398 = CARTESIAN_POINT('',(0.,0.,0.));
#399 = DIRECTION('',(-0.,-0.,-1.));
#400 = DIRECTION('',(1.,0.,0.));
#401 = ADVANCED_FACE('',(#402),#405,.T.);
#402 = FACE_BOUND('',#403,.T.);
#403 = EDGE_LOOP('',(#404));
#404 = ORIENTED_EDGE('',*,*,#338,.T.);
#405 = PLANE('',#406);
#406 = AXIS2_PLACEMENT_3D('',#407,#408,#409);
#407 = CARTESIAN_POINT('',(-1.,-4.,-2.));
#408 = DIRECTION('',(-5.921189464668E-16,-1.,2.269608759982E-12));
#409 = DIRECTION('',(0.,-2.269608759982E-12,-1.));
#410 = ADVANCED_FACE('',(#411),#414,.T.);
#411 = FACE_BOUND('',#412,.T.);
#412 = EDGE_LOOP('',(#413));
#413 = ORIENTED_EDGE('',*,*,#363,.T.);
#414 = PLANE('',#415);
#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);
#416 = CARTESIAN_POINT('',(1.,-4.,-2.));
#417 = DIRECTION('',(-5.921189464667E-16,-1.,2.269608759982E-12));
#418 = DIRECTION('',(0.,-2.269608759982E-12,-1.));
#419 = ADVANCED_FACE('',(#420),#440,.T.);
#420 = FACE_BOUND('',#421,.T.);
#421 = EDGE_LOOP('',(#422,#431,#432,#433));
#422 = ORIENTED_EDGE('',*,*,#423,.F.);
#423 = EDGE_CURVE('',#381,#424,#426,.T.);
#424 = VERTEX_POINT('',#425);
#425 = CARTESIAN_POINT('',(2.,0.,6.));
#426 = CIRCLE('',#427,0.5);
#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430);
#428 = CARTESIAN_POINT('',(2.,0.,5.5));
#429 = DIRECTION('',(0.,-1.,0.));
#430 = DIRECTION('',(1.,0.,0.));
#431 = ORIENTED_EDGE('',*,*,#390,.T.);
#432 = ORIENTED_EDGE('',*,*,#423,.T.);
#433 = ORIENTED_EDGE('',*,*,#434,.F.);
#434 = EDGE_CURVE('',#424,#424,#435,.T.);
#435 = CIRCLE('',#436,2.);
#436 = AXIS2_PLACEMENT_3D('',#437,#438,#439);
#437 = CARTESIAN_POINT('',(0.,0.,6.));
#438 = DIRECTION('',(0.,0.,1.));
#439 = DIRECTION('',(1.,0.,0.));
#440 = TOROIDAL_SURFACE('',#441,2.,0.5);
#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444);
#442 = CARTESIAN_POINT('',(0.,0.,5.5));
#443 = DIRECTION('',(0.,0.,1.));
#444 = DIRECTION('',(1.,0.,0.));
#445 = ADVANCED_FACE('',(#446),#449,.T.);
#446 = FACE_BOUND('',#447,.T.);
#447 = EDGE_LOOP('',(#448));
#448 = ORIENTED_EDGE('',*,*,#434,.T.);
#449 = PLANE('',#450);
#450 = AXIS2_PLACEMENT_3D('',#451,#452,#453);
#451 = CARTESIAN_POINT('',(-1.367440132539E-16,1.714341265789E-16,6.));
#452 = DIRECTION('',(0.,0.,1.));
#453 = DIRECTION('',(1.,0.,0.));
#454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#458)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#455,#456,#457)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#455 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#456 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#457 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#458 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#455,
'distance_accuracy_value','confusion accuracy');
#459 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
#460 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#461)
,#454);
#461 = STYLED_ITEM('color',(#462),#15);
#462 = PRESENTATION_STYLE_ASSIGNMENT((#463,#469));
#463 = SURFACE_STYLE_USAGE(.BOTH.,#464);
#464 = SURFACE_SIDE_STYLE('',(#465));
#465 = SURFACE_STYLE_FILL_AREA(#466);
#466 = FILL_AREA_STYLE('',(#467));
#467 = FILL_AREA_STYLE_COLOUR('',#468);
#468 = COLOUR_RGB('',0.447058818107,0.474509808674,0.501960817233);
#469 = CURVE_STYLE('',#470,POSITIVE_LENGTH_MEASURE(0.1),#471);
#470 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
#471 = COLOUR_RGB('',0.678431390124,0.709803936702,0.741176476869);
ENDSEC;
END-ISO-10303-21;

View File

@ -1,489 +0,0 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2026-02-28T22:11:38',(''),(''),
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('Body','Body','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#454);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#50,#76,#102,#122,#153,#178,#203,#228,#248,
#274,#300,#326,#351,#376,#401,#410,#419,#445));
#17 = ADVANCED_FACE('',(#18),#45,.T.);
#18 = FACE_BOUND('',#19,.F.);
#19 = EDGE_LOOP('',(#20,#30,#37,#38));
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(3.15,0.,0.5));
#24 = VERTEX_POINT('',#25);
#25 = CARTESIAN_POINT('',(3.15,-7.715274834628E-16,0.8));
#26 = LINE('',#27,#28);
#27 = CARTESIAN_POINT('',(3.15,0.,0.));
#28 = VECTOR('',#29,1.);
#29 = DIRECTION('',(0.,0.,1.));
#30 = ORIENTED_EDGE('',*,*,#31,.F.);
#31 = EDGE_CURVE('',#22,#22,#32,.T.);
#32 = CIRCLE('',#33,3.15);
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
#34 = CARTESIAN_POINT('',(0.,0.,0.5));
#35 = DIRECTION('',(0.,0.,1.));
#36 = DIRECTION('',(1.,0.,0.));
#37 = ORIENTED_EDGE('',*,*,#21,.T.);
#38 = ORIENTED_EDGE('',*,*,#39,.F.);
#39 = EDGE_CURVE('',#24,#24,#40,.T.);
#40 = CIRCLE('',#41,3.15);
#41 = AXIS2_PLACEMENT_3D('',#42,#43,#44);
#42 = CARTESIAN_POINT('',(0.,0.,0.8));
#43 = DIRECTION('',(0.,-0.,-1.));
#44 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#45 = CYLINDRICAL_SURFACE('',#46,3.15);
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
#47 = CARTESIAN_POINT('',(0.,0.,0.));
#48 = DIRECTION('',(-0.,-0.,-1.));
#49 = DIRECTION('',(1.,0.,0.));
#50 = ADVANCED_FACE('',(#51),#71,.T.);
#51 = FACE_BOUND('',#52,.F.);
#52 = EDGE_LOOP('',(#53,#62,#63,#64));
#53 = ORIENTED_EDGE('',*,*,#54,.F.);
#54 = EDGE_CURVE('',#24,#55,#57,.T.);
#55 = VERTEX_POINT('',#56);
#56 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.));
#57 = CIRCLE('',#58,0.2);
#58 = AXIS2_PLACEMENT_3D('',#59,#60,#61);
#59 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,0.8));
#60 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
#61 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#62 = ORIENTED_EDGE('',*,*,#39,.F.);
#63 = ORIENTED_EDGE('',*,*,#54,.T.);
#64 = ORIENTED_EDGE('',*,*,#65,.T.);
#65 = EDGE_CURVE('',#55,#55,#66,.T.);
#66 = CIRCLE('',#67,2.95);
#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70);
#68 = CARTESIAN_POINT('',(0.,0.,1.));
#69 = DIRECTION('',(0.,-0.,-1.));
#70 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#71 = TOROIDAL_SURFACE('',#72,2.95,0.2);
#72 = AXIS2_PLACEMENT_3D('',#73,#74,#75);
#73 = CARTESIAN_POINT('',(0.,0.,0.8));
#74 = DIRECTION('',(0.,0.,1.));
#75 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#76 = ADVANCED_FACE('',(#77),#97,.T.);
#77 = FACE_BOUND('',#78,.F.);
#78 = EDGE_LOOP('',(#79,#88,#89,#90));
#79 = ORIENTED_EDGE('',*,*,#80,.F.);
#80 = EDGE_CURVE('',#22,#81,#83,.T.);
#81 = VERTEX_POINT('',#82);
#82 = CARTESIAN_POINT('',(2.65,0.,0.));
#83 = CIRCLE('',#84,0.5);
#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87);
#85 = CARTESIAN_POINT('',(2.65,0.,0.5));
#86 = DIRECTION('',(-0.,1.,0.));
#87 = DIRECTION('',(1.,0.,0.));
#88 = ORIENTED_EDGE('',*,*,#31,.F.);
#89 = ORIENTED_EDGE('',*,*,#80,.T.);
#90 = ORIENTED_EDGE('',*,*,#91,.T.);
#91 = EDGE_CURVE('',#81,#81,#92,.T.);
#92 = CIRCLE('',#93,2.65);
#93 = AXIS2_PLACEMENT_3D('',#94,#95,#96);
#94 = CARTESIAN_POINT('',(0.,0.,0.));
#95 = DIRECTION('',(0.,0.,1.));
#96 = DIRECTION('',(1.,0.,0.));
#97 = TOROIDAL_SURFACE('',#98,2.65,0.5);
#98 = AXIS2_PLACEMENT_3D('',#99,#100,#101);
#99 = CARTESIAN_POINT('',(0.,0.,0.5));
#100 = DIRECTION('',(-0.,-0.,-1.));
#101 = DIRECTION('',(1.,0.,0.));
#102 = ADVANCED_FACE('',(#103,#106),#117,.T.);
#103 = FACE_BOUND('',#104,.T.);
#104 = EDGE_LOOP('',(#105));
#105 = ORIENTED_EDGE('',*,*,#65,.F.);
#106 = FACE_BOUND('',#107,.T.);
#107 = EDGE_LOOP('',(#108));
#108 = ORIENTED_EDGE('',*,*,#109,.T.);
#109 = EDGE_CURVE('',#110,#110,#112,.T.);
#110 = VERTEX_POINT('',#111);
#111 = CARTESIAN_POINT('',(2.75,0.,1.));
#112 = CIRCLE('',#113,2.75);
#113 = AXIS2_PLACEMENT_3D('',#114,#115,#116);
#114 = CARTESIAN_POINT('',(0.,0.,1.));
#115 = DIRECTION('',(0.,0.,-1.));
#116 = DIRECTION('',(1.,0.,0.));
#117 = PLANE('',#118);
#118 = AXIS2_PLACEMENT_3D('',#119,#120,#121);
#119 = CARTESIAN_POINT('',(-1.738271354923E-16,1.071049079375E-17,1.));
#120 = DIRECTION('',(0.,0.,1.));
#121 = DIRECTION('',(1.,0.,0.));
#122 = ADVANCED_FACE('',(#123,#126,#137),#148,.F.);
#123 = FACE_BOUND('',#124,.F.);
#124 = EDGE_LOOP('',(#125));
#125 = ORIENTED_EDGE('',*,*,#91,.T.);
#126 = FACE_BOUND('',#127,.F.);
#127 = EDGE_LOOP('',(#128));
#128 = ORIENTED_EDGE('',*,*,#129,.T.);
#129 = EDGE_CURVE('',#130,#130,#132,.T.);
#130 = VERTEX_POINT('',#131);
#131 = CARTESIAN_POINT('',(-1.,0.,0.));
#132 = CIRCLE('',#133,0.25);
#133 = AXIS2_PLACEMENT_3D('',#134,#135,#136);
#134 = CARTESIAN_POINT('',(-1.25,0.,0.));
#135 = DIRECTION('',(0.,0.,-1.));
#136 = DIRECTION('',(1.,0.,0.));
#137 = FACE_BOUND('',#138,.F.);
#138 = EDGE_LOOP('',(#139));
#139 = ORIENTED_EDGE('',*,*,#140,.T.);
#140 = EDGE_CURVE('',#141,#141,#143,.T.);
#141 = VERTEX_POINT('',#142);
#142 = CARTESIAN_POINT('',(1.5,0.,0.));
#143 = CIRCLE('',#144,0.25);
#144 = AXIS2_PLACEMENT_3D('',#145,#146,#147);
#145 = CARTESIAN_POINT('',(1.25,0.,0.));
#146 = DIRECTION('',(0.,0.,-1.));
#147 = DIRECTION('',(1.,0.,0.));
#148 = PLANE('',#149);
#149 = AXIS2_PLACEMENT_3D('',#150,#151,#152);
#150 = CARTESIAN_POINT('',(-1.08526994646E-16,8.84660753815E-17,0.));
#151 = DIRECTION('',(0.,0.,1.));
#152 = DIRECTION('',(1.,0.,0.));
#153 = ADVANCED_FACE('',(#154),#173,.T.);
#154 = FACE_BOUND('',#155,.T.);
#155 = EDGE_LOOP('',(#156,#164,#171,#172));
#156 = ORIENTED_EDGE('',*,*,#157,.T.);
#157 = EDGE_CURVE('',#110,#158,#160,.T.);
#158 = VERTEX_POINT('',#159);
#159 = CARTESIAN_POINT('',(2.75,0.,1.5));
#160 = LINE('',#161,#162);
#161 = CARTESIAN_POINT('',(2.75,0.,1.));
#162 = VECTOR('',#163,1.);
#163 = DIRECTION('',(0.,0.,1.));
#164 = ORIENTED_EDGE('',*,*,#165,.T.);
#165 = EDGE_CURVE('',#158,#158,#166,.T.);
#166 = CIRCLE('',#167,2.75);
#167 = AXIS2_PLACEMENT_3D('',#168,#169,#170);
#168 = CARTESIAN_POINT('',(0.,0.,1.5));
#169 = DIRECTION('',(0.,0.,-1.));
#170 = DIRECTION('',(1.,0.,0.));
#171 = ORIENTED_EDGE('',*,*,#157,.F.);
#172 = ORIENTED_EDGE('',*,*,#109,.F.);
#173 = CYLINDRICAL_SURFACE('',#174,2.75);
#174 = AXIS2_PLACEMENT_3D('',#175,#176,#177);
#175 = CARTESIAN_POINT('',(0.,0.,1.));
#176 = DIRECTION('',(0.,0.,-1.));
#177 = DIRECTION('',(1.,0.,0.));
#178 = ADVANCED_FACE('',(#179),#198,.T.);
#179 = FACE_BOUND('',#180,.T.);
#180 = EDGE_LOOP('',(#181,#189,#196,#197));
#181 = ORIENTED_EDGE('',*,*,#182,.T.);
#182 = EDGE_CURVE('',#130,#183,#185,.T.);
#183 = VERTEX_POINT('',#184);
#184 = CARTESIAN_POINT('',(-1.,0.,-1.));
#185 = LINE('',#186,#187);
#186 = CARTESIAN_POINT('',(-1.,0.,0.));
#187 = VECTOR('',#188,1.);
#188 = DIRECTION('',(0.,0.,-1.));
#189 = ORIENTED_EDGE('',*,*,#190,.F.);
#190 = EDGE_CURVE('',#183,#183,#191,.T.);
#191 = CIRCLE('',#192,0.25);
#192 = AXIS2_PLACEMENT_3D('',#193,#194,#195);
#193 = CARTESIAN_POINT('',(-1.25,0.,-1.));
#194 = DIRECTION('',(0.,0.,-1.));
#195 = DIRECTION('',(1.,0.,0.));
#196 = ORIENTED_EDGE('',*,*,#182,.F.);
#197 = ORIENTED_EDGE('',*,*,#129,.T.);
#198 = CYLINDRICAL_SURFACE('',#199,0.25);
#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202);
#200 = CARTESIAN_POINT('',(-1.25,0.,0.));
#201 = DIRECTION('',(0.,0.,-1.));
#202 = DIRECTION('',(1.,0.,0.));
#203 = ADVANCED_FACE('',(#204),#223,.T.);
#204 = FACE_BOUND('',#205,.T.);
#205 = EDGE_LOOP('',(#206,#214,#221,#222));
#206 = ORIENTED_EDGE('',*,*,#207,.T.);
#207 = EDGE_CURVE('',#141,#208,#210,.T.);
#208 = VERTEX_POINT('',#209);
#209 = CARTESIAN_POINT('',(1.5,0.,-1.));
#210 = LINE('',#211,#212);
#211 = CARTESIAN_POINT('',(1.5,0.,0.));
#212 = VECTOR('',#213,1.);
#213 = DIRECTION('',(0.,0.,-1.));
#214 = ORIENTED_EDGE('',*,*,#215,.F.);
#215 = EDGE_CURVE('',#208,#208,#216,.T.);
#216 = CIRCLE('',#217,0.25);
#217 = AXIS2_PLACEMENT_3D('',#218,#219,#220);
#218 = CARTESIAN_POINT('',(1.25,0.,-1.));
#219 = DIRECTION('',(0.,0.,-1.));
#220 = DIRECTION('',(1.,0.,0.));
#221 = ORIENTED_EDGE('',*,*,#207,.F.);
#222 = ORIENTED_EDGE('',*,*,#140,.T.);
#223 = CYLINDRICAL_SURFACE('',#224,0.25);
#224 = AXIS2_PLACEMENT_3D('',#225,#226,#227);
#225 = CARTESIAN_POINT('',(1.25,0.,0.));
#226 = DIRECTION('',(0.,0.,-1.));
#227 = DIRECTION('',(1.,0.,0.));
#228 = ADVANCED_FACE('',(#229,#240),#243,.F.);
#229 = FACE_BOUND('',#230,.F.);
#230 = EDGE_LOOP('',(#231));
#231 = ORIENTED_EDGE('',*,*,#232,.F.);
#232 = EDGE_CURVE('',#233,#233,#235,.T.);
#233 = VERTEX_POINT('',#234);
#234 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.5));
#235 = CIRCLE('',#236,2.95);
#236 = AXIS2_PLACEMENT_3D('',#237,#238,#239);
#237 = CARTESIAN_POINT('',(0.,0.,1.5));
#238 = DIRECTION('',(0.,-0.,-1.));
#239 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#240 = FACE_BOUND('',#241,.F.);
#241 = EDGE_LOOP('',(#242));
#242 = ORIENTED_EDGE('',*,*,#165,.T.);
#243 = PLANE('',#244);
#244 = AXIS2_PLACEMENT_3D('',#245,#246,#247);
#245 = CARTESIAN_POINT('',(-1.738271354923E-16,1.071049079375E-17,1.5));
#246 = DIRECTION('',(0.,0.,1.));
#247 = DIRECTION('',(1.,0.,0.));
#248 = ADVANCED_FACE('',(#249),#269,.T.);
#249 = FACE_BOUND('',#250,.T.);
#250 = EDGE_LOOP('',(#251,#260,#267,#268));
#251 = ORIENTED_EDGE('',*,*,#252,.T.);
#252 = EDGE_CURVE('',#183,#253,#255,.T.);
#253 = VERTEX_POINT('',#254);
#254 = CARTESIAN_POINT('',(-1.,-1.,-2.));
#255 = CIRCLE('',#256,1.);
#256 = AXIS2_PLACEMENT_3D('',#257,#258,#259);
#257 = CARTESIAN_POINT('',(-1.,-1.,-1.));
#258 = DIRECTION('',(-1.,0.,0.));
#259 = DIRECTION('',(0.,1.,0.));
#260 = ORIENTED_EDGE('',*,*,#261,.T.);
#261 = EDGE_CURVE('',#253,#253,#262,.T.);
#262 = CIRCLE('',#263,0.25);
#263 = AXIS2_PLACEMENT_3D('',#264,#265,#266);
#264 = CARTESIAN_POINT('',(-1.25,-1.,-2.));
#265 = DIRECTION('',(0.,1.,6.123233995737E-17));
#266 = DIRECTION('',(0.,6.123233995737E-17,-1.));
#267 = ORIENTED_EDGE('',*,*,#252,.F.);
#268 = ORIENTED_EDGE('',*,*,#190,.T.);
#269 = TOROIDAL_SURFACE('',#270,1.,0.25);
#270 = AXIS2_PLACEMENT_3D('',#271,#272,#273);
#271 = CARTESIAN_POINT('',(-1.25,-1.,-1.));
#272 = DIRECTION('',(-1.,0.,0.));
#273 = DIRECTION('',(0.,1.,0.));
#274 = ADVANCED_FACE('',(#275),#295,.T.);
#275 = FACE_BOUND('',#276,.T.);
#276 = EDGE_LOOP('',(#277,#286,#293,#294));
#277 = ORIENTED_EDGE('',*,*,#278,.T.);
#278 = EDGE_CURVE('',#208,#279,#281,.T.);
#279 = VERTEX_POINT('',#280);
#280 = CARTESIAN_POINT('',(1.5,-1.,-2.));
#281 = CIRCLE('',#282,1.);
#282 = AXIS2_PLACEMENT_3D('',#283,#284,#285);
#283 = CARTESIAN_POINT('',(1.5,-1.,-1.));
#284 = DIRECTION('',(-1.,0.,0.));
#285 = DIRECTION('',(0.,1.,0.));
#286 = ORIENTED_EDGE('',*,*,#287,.T.);
#287 = EDGE_CURVE('',#279,#279,#288,.T.);
#288 = CIRCLE('',#289,0.25);
#289 = AXIS2_PLACEMENT_3D('',#290,#291,#292);
#290 = CARTESIAN_POINT('',(1.25,-1.,-2.));
#291 = DIRECTION('',(0.,1.,6.123233995737E-17));
#292 = DIRECTION('',(0.,6.123233995737E-17,-1.));
#293 = ORIENTED_EDGE('',*,*,#278,.F.);
#294 = ORIENTED_EDGE('',*,*,#215,.T.);
#295 = TOROIDAL_SURFACE('',#296,1.,0.25);
#296 = AXIS2_PLACEMENT_3D('',#297,#298,#299);
#297 = CARTESIAN_POINT('',(1.25,-1.,-1.));
#298 = DIRECTION('',(-1.,0.,0.));
#299 = DIRECTION('',(0.,1.,0.));
#300 = ADVANCED_FACE('',(#301),#321,.T.);
#301 = FACE_BOUND('',#302,.F.);
#302 = EDGE_LOOP('',(#303,#312,#313,#314));
#303 = ORIENTED_EDGE('',*,*,#304,.F.);
#304 = EDGE_CURVE('',#233,#305,#307,.T.);
#305 = VERTEX_POINT('',#306);
#306 = CARTESIAN_POINT('',(3.15,-7.715274834628E-16,1.7));
#307 = CIRCLE('',#308,0.2);
#308 = AXIS2_PLACEMENT_3D('',#309,#310,#311);
#309 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.7));
#310 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
#311 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#312 = ORIENTED_EDGE('',*,*,#232,.F.);
#313 = ORIENTED_EDGE('',*,*,#304,.T.);
#314 = ORIENTED_EDGE('',*,*,#315,.T.);
#315 = EDGE_CURVE('',#305,#305,#316,.T.);
#316 = CIRCLE('',#317,3.15);
#317 = AXIS2_PLACEMENT_3D('',#318,#319,#320);
#318 = CARTESIAN_POINT('',(0.,0.,1.7));
#319 = DIRECTION('',(0.,-0.,-1.));
#320 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#321 = TOROIDAL_SURFACE('',#322,2.95,0.2);
#322 = AXIS2_PLACEMENT_3D('',#323,#324,#325);
#323 = CARTESIAN_POINT('',(0.,0.,1.7));
#324 = DIRECTION('',(0.,0.,1.));
#325 = DIRECTION('',(1.,-2.449293598295E-16,0.));
#326 = ADVANCED_FACE('',(#327),#346,.T.);
#327 = FACE_BOUND('',#328,.T.);
#328 = EDGE_LOOP('',(#329,#337,#344,#345));
#329 = ORIENTED_EDGE('',*,*,#330,.T.);
#330 = EDGE_CURVE('',#253,#331,#333,.T.);
#331 = VERTEX_POINT('',#332);
#332 = CARTESIAN_POINT('',(-1.,-4.95,-2.));
#333 = LINE('',#334,#335);
#334 = CARTESIAN_POINT('',(-1.,-1.,-2.));
#335 = VECTOR('',#336,1.);
#336 = DIRECTION('',(0.,-1.,0.));
#337 = ORIENTED_EDGE('',*,*,#338,.F.);
#338 = EDGE_CURVE('',#331,#331,#339,.T.);
#339 = CIRCLE('',#340,0.25);
#340 = AXIS2_PLACEMENT_3D('',#341,#342,#343);
#341 = CARTESIAN_POINT('',(-1.25,-4.95,-2.));
#342 = DIRECTION('',(0.,-1.,-6.123233995737E-17));
#343 = DIRECTION('',(1.,0.,0.));
#344 = ORIENTED_EDGE('',*,*,#330,.F.);
#345 = ORIENTED_EDGE('',*,*,#261,.F.);
#346 = CYLINDRICAL_SURFACE('',#347,0.25);
#347 = AXIS2_PLACEMENT_3D('',#348,#349,#350);
#348 = CARTESIAN_POINT('',(-1.25,-1.,-2.));
#349 = DIRECTION('',(0.,-1.,0.));
#350 = DIRECTION('',(1.,0.,0.));
#351 = ADVANCED_FACE('',(#352),#371,.T.);
#352 = FACE_BOUND('',#353,.T.);
#353 = EDGE_LOOP('',(#354,#362,#369,#370));
#354 = ORIENTED_EDGE('',*,*,#355,.T.);
#355 = EDGE_CURVE('',#279,#356,#358,.T.);
#356 = VERTEX_POINT('',#357);
#357 = CARTESIAN_POINT('',(1.5,-4.95,-2.));
#358 = LINE('',#359,#360);
#359 = CARTESIAN_POINT('',(1.5,-1.,-2.));
#360 = VECTOR('',#361,1.);
#361 = DIRECTION('',(0.,-1.,0.));
#362 = ORIENTED_EDGE('',*,*,#363,.F.);
#363 = EDGE_CURVE('',#356,#356,#364,.T.);
#364 = CIRCLE('',#365,0.25);
#365 = AXIS2_PLACEMENT_3D('',#366,#367,#368);
#366 = CARTESIAN_POINT('',(1.25,-4.95,-2.));
#367 = DIRECTION('',(0.,-1.,-6.123233995737E-17));
#368 = DIRECTION('',(1.,0.,0.));
#369 = ORIENTED_EDGE('',*,*,#355,.F.);
#370 = ORIENTED_EDGE('',*,*,#287,.F.);
#371 = CYLINDRICAL_SURFACE('',#372,0.25);
#372 = AXIS2_PLACEMENT_3D('',#373,#374,#375);
#373 = CARTESIAN_POINT('',(1.25,-1.,-2.));
#374 = DIRECTION('',(0.,-1.,0.));
#375 = DIRECTION('',(1.,0.,0.));
#376 = ADVANCED_FACE('',(#377),#396,.T.);
#377 = FACE_BOUND('',#378,.F.);
#378 = EDGE_LOOP('',(#379,#387,#388,#389));
#379 = ORIENTED_EDGE('',*,*,#380,.F.);
#380 = EDGE_CURVE('',#305,#381,#383,.T.);
#381 = VERTEX_POINT('',#382);
#382 = CARTESIAN_POINT('',(3.15,0.,7.5));
#383 = LINE('',#384,#385);
#384 = CARTESIAN_POINT('',(3.15,0.,0.));
#385 = VECTOR('',#386,1.);
#386 = DIRECTION('',(0.,0.,1.));
#387 = ORIENTED_EDGE('',*,*,#315,.T.);
#388 = ORIENTED_EDGE('',*,*,#380,.T.);
#389 = ORIENTED_EDGE('',*,*,#390,.T.);
#390 = EDGE_CURVE('',#381,#381,#391,.T.);
#391 = CIRCLE('',#392,3.15);
#392 = AXIS2_PLACEMENT_3D('',#393,#394,#395);
#393 = CARTESIAN_POINT('',(0.,0.,7.5));
#394 = DIRECTION('',(0.,0.,1.));
#395 = DIRECTION('',(1.,0.,0.));
#396 = CYLINDRICAL_SURFACE('',#397,3.15);
#397 = AXIS2_PLACEMENT_3D('',#398,#399,#400);
#398 = CARTESIAN_POINT('',(0.,0.,0.));
#399 = DIRECTION('',(-0.,-0.,-1.));
#400 = DIRECTION('',(1.,0.,0.));
#401 = ADVANCED_FACE('',(#402),#405,.T.);
#402 = FACE_BOUND('',#403,.T.);
#403 = EDGE_LOOP('',(#404));
#404 = ORIENTED_EDGE('',*,*,#338,.T.);
#405 = PLANE('',#406);
#406 = AXIS2_PLACEMENT_3D('',#407,#408,#409);
#407 = CARTESIAN_POINT('',(-1.25,-4.95,-2.));
#408 = DIRECTION('',(-0.,-1.,-0.));
#409 = DIRECTION('',(0.,0.,-1.));
#410 = ADVANCED_FACE('',(#411),#414,.T.);
#411 = FACE_BOUND('',#412,.T.);
#412 = EDGE_LOOP('',(#413));
#413 = ORIENTED_EDGE('',*,*,#363,.T.);
#414 = PLANE('',#415);
#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);
#416 = CARTESIAN_POINT('',(1.25,-4.95,-2.));
#417 = DIRECTION('',(-0.,-1.,-0.));
#418 = DIRECTION('',(0.,0.,-1.));
#419 = ADVANCED_FACE('',(#420),#440,.T.);
#420 = FACE_BOUND('',#421,.T.);
#421 = EDGE_LOOP('',(#422,#431,#432,#433));
#422 = ORIENTED_EDGE('',*,*,#423,.F.);
#423 = EDGE_CURVE('',#381,#424,#426,.T.);
#424 = VERTEX_POINT('',#425);
#425 = CARTESIAN_POINT('',(2.65,0.,8.));
#426 = CIRCLE('',#427,0.5);
#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430);
#428 = CARTESIAN_POINT('',(2.65,0.,7.5));
#429 = DIRECTION('',(0.,-1.,0.));
#430 = DIRECTION('',(1.,0.,0.));
#431 = ORIENTED_EDGE('',*,*,#390,.T.);
#432 = ORIENTED_EDGE('',*,*,#423,.T.);
#433 = ORIENTED_EDGE('',*,*,#434,.F.);
#434 = EDGE_CURVE('',#424,#424,#435,.T.);
#435 = CIRCLE('',#436,2.65);
#436 = AXIS2_PLACEMENT_3D('',#437,#438,#439);
#437 = CARTESIAN_POINT('',(0.,0.,8.));
#438 = DIRECTION('',(0.,0.,1.));
#439 = DIRECTION('',(1.,0.,0.));
#440 = TOROIDAL_SURFACE('',#441,2.65,0.5);
#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444);
#442 = CARTESIAN_POINT('',(0.,0.,7.5));
#443 = DIRECTION('',(0.,0.,1.));
#444 = DIRECTION('',(1.,0.,0.));
#445 = ADVANCED_FACE('',(#446),#449,.T.);
#446 = FACE_BOUND('',#447,.T.);
#447 = EDGE_LOOP('',(#448));
#448 = ORIENTED_EDGE('',*,*,#434,.T.);
#449 = PLANE('',#450);
#450 = AXIS2_PLACEMENT_3D('',#451,#452,#453);
#451 = CARTESIAN_POINT('',(-1.08526994646E-16,8.84660753815E-17,8.));
#452 = DIRECTION('',(0.,0.,1.));
#453 = DIRECTION('',(1.,0.,0.));
#454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#458)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#455,#456,#457)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#455 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#456 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#457 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#458 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#455,
'distance_accuracy_value','confusion accuracy');
#459 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
#460 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#461)
,#454);
#461 = STYLED_ITEM('color',(#462),#15);
#462 = PRESENTATION_STYLE_ASSIGNMENT((#463,#469));
#463 = SURFACE_STYLE_USAGE(.BOTH.,#464);
#464 = SURFACE_SIDE_STYLE('',(#465));
#465 = SURFACE_STYLE_FILL_AREA(#466);
#466 = FILL_AREA_STYLE('',(#467));
#467 = FILL_AREA_STYLE_COLOUR('',#468);
#468 = COLOUR_RGB('',0.447058818107,0.474509808674,0.501960817233);
#469 = CURVE_STYLE('',#470,POSITIVE_LENGTH_MEASURE(0.1),#471);
#470 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
#471 = COLOUR_RGB('',0.678431390124,0.709803936702,0.741176476869);
ENDSEC;
END-ISO-10303-21;

View File

@ -1,209 +0,0 @@
(footprint "CPol_Circular_Bent_D5mm_L6mm"
(version 20241229)
(generator "pcbnew")
(generator_version "9.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0.3 -13.7 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "CPol_Circular_Bent_D5mm_L6mm"
(at 0 1.6 0)
(unlocked yes)
(layer "F.Fab")
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(fp_line
(start -2.1 -1.3)
(end -1.5 -1.3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
)
(fp_line
(start -1.8 -1.6)
(end -1.8 -1)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
)
(fp_line
(start -1.2 -2)
(end -1.2 -0.7)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
)
(fp_line
(start -1.2 -0.7)
(end -0.9 -0.7)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
)
(fp_line
(start -0.9 -0.7)
(end -0.9 -2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
)
(fp_line
(start 0.85 -2)
(end 0.85 -0.7)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
)
(fp_line
(start 0.85 -0.7)
(end 1.15 -0.7)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
)
(fp_line
(start 1.15 -0.7)
(end 1.15 -2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
)
(fp_rect
(start -2.5 -8)
(end 2.5 -2)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.SilkS")
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
)
(fp_rect
(start 0 -8)
(end 2.5 -2)
(stroke
(width 0.1)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
)
(fp_rect
(start -2.6 -8)
(end 2.6 0.7)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
)
(fp_text user "${REFERENCE}"
(at 0 3.1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" thru_hole circle
(at -1 0)
(size 1.2 1.2)
(drill 0.6)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "429c3e5b-4965-4523-82ec-16fb27137d99")
)
(pad "2" thru_hole circle
(at 1 0)
(size 1.2 1.2)
(drill 0.6)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "2bd18f0c-9a8b-4002-8f11-ed340f6243ea")
)
(embedded_fonts no)
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_5x6mm-Body.step"
(offset
(xyz 0 2 2.5)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -90 -0 -180)
)
)
)

View File

@ -1,210 +0,0 @@
(footprint "CPol_Circular_Bent_D6.3mm_L8mm_L"
(version 20241229)
(generator "pcbnew")
(generator_version "9.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0.1 -10.8 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "CPol_Circular_Bent_D6.3mm_L8mm_L"
(at 0 1.6 0)
(unlocked yes)
(layer "F.Fab")
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(fp_line
(start -2.3 -1.3)
(end -1.7 -1.3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
)
(fp_line
(start -2 -1.6)
(end -2 -1)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
)
(fp_line
(start -1.4 -2)
(end -1.4 -0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
)
(fp_line
(start -1.4 -0.95)
(end -1.1 -0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
)
(fp_line
(start -1.1 -0.95)
(end -1.1 -2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
)
(fp_line
(start 1.1 -2)
(end 1.1 -0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
)
(fp_line
(start 1.1 -0.95)
(end 1.4 -0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
)
(fp_line
(start 1.4 -0.95)
(end 1.4 -2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
)
(fp_rect
(start -3.15 -10)
(end 3.15 -2)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.SilkS")
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
)
(fp_rect
(start 0 -10)
(end 3.15 -2)
(stroke
(width 0.1)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
)
(fp_rect
(start -3.2 -10.1)
(end 3.2 0.9)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
)
(fp_text user "${REFERENCE}"
(at 0 3.1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" thru_hole roundrect
(at -1.25 0)
(size 1.6 1.6)
(drill 0.8)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(roundrect_rratio 0.15625)
(uuid "b22a7a09-d9d5-4c86-a9b7-580c98817065")
)
(pad "2" thru_hole circle
(at 1.25 0)
(size 1.6 1.6)
(drill 0.8)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "2e3d7766-62e7-47b5-929a-b198f36ccea7")
)
(embedded_fonts no)
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_6.3x8mm.step"
(offset
(xyz 0 2 3.2)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -90 -0 -180)
)
)
)

View File

@ -1,210 +0,0 @@
(footprint "CPol_Circular_Bent_D6.3mm_L8mm_R"
(version 20241229)
(generator "pcbnew")
(generator_version "9.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0.3 11.1 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "CPol_Circular_Bent_D6.3mm_L8mm_R"
(at 0 1.6 0)
(unlocked yes)
(layer "F.Fab")
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(fp_line
(start -2.1 1.7)
(end -2.1 1.1)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
)
(fp_line
(start -1.8 1.4)
(end -2.4 1.4)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
)
(fp_line
(start -1.4 0.95)
(end -1.4 2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
)
(fp_line
(start -1.1 0.95)
(end -1.4 0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
)
(fp_line
(start -1.1 2)
(end -1.1 0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
)
(fp_line
(start 1.1 0.95)
(end 1.1 2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
)
(fp_line
(start 1.4 0.95)
(end 1.1 0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
)
(fp_line
(start 1.4 2)
(end 1.4 0.95)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
)
(fp_rect
(start -3.15 2)
(end 3.15 10)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.SilkS")
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
)
(fp_rect
(start 0.025 2)
(end 3.175 10)
(stroke
(width 0.1)
(type solid)
)
(fill yes)
(layer "F.SilkS")
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
)
(fp_rect
(start -3.2 -0.9)
(end 3.2 10.1)
(stroke
(width 0.05)
(type solid)
)
(fill no)
(layer "F.CrtYd")
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
)
(fp_text user "${REFERENCE}"
(at 0 3.1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" thru_hole roundrect
(at -1.25 0)
(size 1.6 1.6)
(drill 0.8)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(roundrect_rratio 0.15625)
(uuid "b22a7a09-d9d5-4c86-a9b7-580c98817065")
)
(pad "2" thru_hole circle
(at 1.25 0)
(size 1.6 1.6)
(drill 0.8)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(uuid "2e3d7766-62e7-47b5-929a-b198f36ccea7")
)
(embedded_fonts no)
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_6.3x8mm.step"
(offset
(xyz 0 -2 3.2)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -90 -0 -0)
)
)
)

View File

@ -1,254 +0,0 @@
(footprint "L_Changjiang_FNR4030S_Handsolder"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(descr "Inductor, Changjiang, FNR4030S, 4.0x4.0x3.0mm, (https://datasheet.lcsc.com/lcsc/1806131217_cjiang-Changjiang-Microelectronics-Tech-FNR5040S3R3NT_C167960.pdf)")
(tags "wirewound power shielded")
(property "Reference" "REF**"
(at 0 -2.95 0)
(layer "F.SilkS")
(uuid "86478e3e-c195-4c30-97dc-32e9ea499ba3")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "L_Changjiang_FNR4030S_Handsolder"
(at 0 2.95 0)
(layer "F.Fab")
(uuid "739a9154-d64f-4370-ae80-df162404456d")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "89d087f6-877a-4f0b-8a64-75cfd32efa21")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "78b2ee5e-69a3-4227-9040-aed489784c62")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "KiLib_Generator" "inductor/SMD"
(at 0 0 0)
(layer "F.SilkS")
(hide yes)
(uuid "8d1b65ed-ccaa-43f2-961c-09db0e730338")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd)
(duplicate_pad_numbers_are_jumpers no)
(fp_line
(start -2.11 -2.11)
(end 2.11 -2.11)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "c113f39b-2faf-43a6-ab00-6d873c7e0915")
)
(fp_line
(start 2.11 2.11)
(end -2.11 2.11)
(stroke
(width 0.12)
(type solid)
)
(layer "F.SilkS")
(uuid "a2dbc9a6-49eb-42d2-b2aa-6e4920f32f43")
)
(fp_line
(start -2.7 -2.1)
(end -2.25 -2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "52cfea3b-b428-4474-a082-e073ee86cc57")
)
(fp_line
(start -2.7 2.1)
(end -2.7 -2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "482f5640-299b-4ad6-9452-862d11987e7f")
)
(fp_line
(start -2.25 -2.25)
(end 2.25 -2.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "8a08b1b8-6145-4ba7-980f-ccce5b1cb077")
)
(fp_line
(start -2.25 -2.1)
(end -2.25 -2.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "2ee9150c-7983-4bfd-b57c-681d856392ae")
)
(fp_line
(start -2.25 2.1)
(end -2.7 2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "4f8c9b7b-bb1f-4231-802c-be6f383708f9")
)
(fp_line
(start -2.25 2.25)
(end -2.25 2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "7e03ed2c-8aa6-4b98-8250-132916bddc79")
)
(fp_line
(start 2.25 -2.25)
(end 2.25 -2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "192b14c7-18ce-4cfb-b11a-6519c415b2b1")
)
(fp_line
(start 2.25 -2.1)
(end 2.7 -2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "4d111342-26ea-401e-86a8-5d52a2ba6fa0")
)
(fp_line
(start 2.25 2.1)
(end 2.25 2.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "b6b3f260-7619-49ac-accd-1feae9b7570e")
)
(fp_line
(start 2.25 2.25)
(end -2.25 2.25)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "d9f3ef03-9abd-470f-8a95-67be9799e2e5")
)
(fp_line
(start 2.7 -2.1)
(end 2.7 2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "f22b67f4-def0-40a1-90d7-d24428c52071")
)
(fp_line
(start 2.7 2.1)
(end 2.25 2.1)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "d930db6d-d017-4c18-af74-81710daa211d")
)
(fp_rect
(start -2 -2)
(end 2 2)
(stroke
(width 0.1)
(type solid)
)
(fill no)
(layer "F.Fab")
(uuid "9f0bdb19-1e04-4bde-a22b-5d31b1a96141")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "df5884d5-cd0e-4a74-b716-b58b38c956d3")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" smd roundrect
(at -1.775 0)
(size 1.65 3.699999)
(layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.227273)
(uuid "89b840a4-1454-4286-88fe-8a340710ec0b")
)
(pad "2" smd roundrect
(at 1.775 -0.000001)
(size 1.65 3.699998)
(layers "F.Cu" "F.Mask" "F.Paste")
(roundrect_rratio 0.227273)
(uuid "84c0f6d1-720a-4662-afa7-afa310a1fe71")
)
(embedded_fonts no)
(model "${KICAD10_3DMODEL_DIR}/Inductor_SMD.3dshapes/L_Changjiang_FNR4030S.step"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View File

@ -434,12 +434,6 @@
)
)
)
(pad "A1" smd rect
(at -3.2 -2.4775)
(size 0.5 1.15)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ea8dadf2-8afa-4fe2-9e30-22206c244069")
)
(pad "A4" smd rect
(at -2.4 -2.4775)
(size 0.5 1.15)
@ -470,12 +464,6 @@
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "a621d7b8-8475-4012-bb80-22970594526c")
)
(pad "B1" smd rect
(at 3.2185 -2.4775)
(size 0.5 1.15)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b6f3c56c-8cda-4c18-83e9-de8afa037a13")
)
(pad "B4" smd rect
(at 2.4 -2.4775)
(size 0.5 1.15)
@ -506,6 +494,18 @@
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b669d7b8-13ce-4926-b0fa-a776cf6d1e07")
)
(pad "GND" smd rect
(at -3.2 -2.4775)
(size 0.5 1.15)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ea8dadf2-8afa-4fe2-9e30-22206c244069")
)
(pad "GND" smd rect
(at 3.2185 -2.4775)
(size 0.5 1.15)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "b6f3c56c-8cda-4c18-83e9-de8afa037a13")
)
(pad "S1" thru_hole oval
(at -4.32 -1.8025)
(size 1.2 2.2)

View File

@ -1,726 +0,0 @@
(footprint "USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01"
(version 20260206)
(generator "pcbnew")
(generator_version "10.0")
(layer "F.Cu")
(property "Reference" "U?"
(at 0 -1.975 0)
(layer "F.SilkS")
(uuid "d46389c4-19b0-4144-8a01-98d427f77194")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01"
(at 0 12.35 0)
(layer "F.Fab")
(uuid "5ef7914a-a59f-4b19-91f4-b1e5c88e8b83")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "6c333caa-e693-49d3-a43d-2bf2461e1666")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(layer "F.Fab")
(hide yes)
(uuid "89a656a4-4ac6-4288-93fc-60e581dfaba3")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(duplicate_pad_numbers_are_jumpers no)
(fp_line
(start -3.3 0.85)
(end -4.47 0.85)
(stroke
(width 0.15)
(type default)
)
(layer "Dwgs.User")
(uuid "b78c1eb0-5a2b-44cc-a911-9a4b478ee854")
)
(fp_line
(start -3.3 1.3)
(end -3.3 0.85)
(stroke
(width 0.15)
(type default)
)
(layer "Dwgs.User")
(uuid "71a64aa6-7379-4797-989b-973ff90292f3")
)
(fp_line
(start 3.3 0.85)
(end 3.3 1.3)
(stroke
(width 0.15)
(type default)
)
(layer "Dwgs.User")
(uuid "2311affe-23c6-4792-8dff-f6b0d806a464")
)
(fp_line
(start 3.3 1.3)
(end -3.3 1.3)
(stroke
(width 0.15)
(type default)
)
(layer "Dwgs.User")
(uuid "42e8ad6d-9c4b-4538-b70a-88320ce059a7")
)
(fp_line
(start 4.47 0.85)
(end 3.3 0.85)
(stroke
(width 0.15)
(type default)
)
(layer "Dwgs.User")
(uuid "c501c163-c86e-423f-af51-31effeef93b6")
)
(fp_poly
(pts
(arc
(start 4.545 0.879)
(mid 4.47 0.804993)
(end 4.395 0.879)
)
(xy 4.395 11.225) (xy -4.395 11.225)
(arc
(start -4.395 0.879)
(mid -4.47 0.804993)
(end -4.545 0.879)
)
(arc
(start -4.545 11.3)
(mid -4.523033 11.353033)
(end -4.47 11.375)
)
(arc
(start 4.47 11.375)
(mid 4.523033 11.353033)
(end 4.545 11.3)
)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "Dwgs.User")
(uuid "f7ec02d0-0c5a-44ea-b835-bc2f8cd016b5")
)
(fp_rect
(start -4.92 -1.25)
(end 4.92 11.625)
(stroke
(width 0.05)
(type default)
)
(fill no)
(layer "F.CrtYd")
(uuid "902a44ac-eb84-4490-9ed1-4b3059ef2a8f")
)
(fp_line
(start -4.47 0.85)
(end -4.47 1.5)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "520d848c-010f-4089-b328-089fab11a62e")
)
(fp_line
(start -4.47 1.5)
(end 4.47 1.5)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "ff5cb7d4-c806-4c1f-833c-a70e71308f6f")
)
(fp_line
(start 4.47 0.85)
(end -4.47 0.85)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "012a1b2e-380c-4399-91b1-8373ac5605c3")
)
(fp_line
(start 4.47 1.5)
(end 4.47 0.85)
(stroke
(width 0.051)
(type default)
)
(layer "F.Fab")
(uuid "d7a99edd-0b0c-49c9-a2e0-f1109d56d85b")
)
(fp_poly
(pts
(xy -4.414567 1.477039) (xy -4.447039 1.444567) (xy -4.492961 1.444567) (xy -4.525433 1.477039) (xy -4.525433 1.522961)
(xy -4.492961 1.555433) (xy -4.447039 1.555433) (xy -4.414567 1.522961)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "F.Fab")
(uuid "eefc9d6f-b5c6-437d-b583-6becb1f90425")
)
(fp_poly
(pts
(xy -4.42 0.95) (xy -4.22 0.95) (xy -4.22 -0.85) (xy -4.42 -0.85)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "87404bd5-9f57-438d-b15a-14d27bcddb65")
)
(fp_poly
(pts
(xy -4.42 0.95) (xy -4.22 0.95) (xy -4.22 -0.85) (xy -4.42 -0.85)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "bf3067cb-7f09-486b-af4b-8df0a4f3a3b6")
)
(fp_poly
(pts
(xy -2.85 1.1) (xy -2.65 1.1) (xy -2.65 -0.4) (xy -2.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "231c3c40-2194-4475-b8b0-54f94a752a1a")
)
(fp_poly
(pts
(xy -2.85 1.1) (xy -2.65 1.1) (xy -2.65 -0.4) (xy -2.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "522ef806-706c-43e1-b450-2b49025c589b")
)
(fp_poly
(pts
(xy -2.35 1.1) (xy -2.15 1.1) (xy -2.15 -0.4) (xy -2.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "19714b67-c42a-494f-9f8d-2a79c20cd1b2")
)
(fp_poly
(pts
(xy -2.35 1.1) (xy -2.15 1.1) (xy -2.15 -0.4) (xy -2.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "297d6c0f-56a0-4935-96f9-dae81e364ba6")
)
(fp_poly
(pts
(xy -1.85 1.1) (xy -1.65 1.1) (xy -1.65 -0.4) (xy -1.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "61b4904a-7d84-453f-989f-84da204c76db")
)
(fp_poly
(pts
(xy -1.85 1.1) (xy -1.65 1.1) (xy -1.65 -0.4) (xy -1.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "fad24114-6033-4c16-8936-5a42abb73e5f")
)
(fp_poly
(pts
(xy -1.35 1.1) (xy -1.15 1.1) (xy -1.15 -0.4) (xy -1.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "2f93059b-2f69-472e-9c82-9b438bcefcf8")
)
(fp_poly
(pts
(xy -1.35 1.1) (xy -1.15 1.1) (xy -1.15 -0.4) (xy -1.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "e5e6c05f-77e6-4b15-ad9f-c0b9f9ad02e3")
)
(fp_poly
(pts
(xy -0.85 1.1) (xy -0.65 1.1) (xy -0.65 -0.4) (xy -0.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "c8307f05-9e84-40d4-b5ec-2c214734593e")
)
(fp_poly
(pts
(xy -0.85 1.1) (xy -0.65 1.1) (xy -0.65 -0.4) (xy -0.85 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "e4e2810d-7cbb-45c3-a615-00b20b97f329")
)
(fp_poly
(pts
(xy -0.35 1.1) (xy -0.15 1.1) (xy -0.15 -0.4) (xy -0.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "22725a1b-c223-4394-9c90-3e2d34d7b0f3")
)
(fp_poly
(pts
(xy -0.35 1.1) (xy -0.15 1.1) (xy -0.15 -0.4) (xy -0.35 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "f7a968ab-90f3-4b5f-8a7c-2ef16c4eda1e")
)
(fp_poly
(pts
(xy 0.15 1.1) (xy 0.35 1.1) (xy 0.35 -0.4) (xy 0.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "1a2ba018-600e-45b8-9725-8b8760438c47")
)
(fp_poly
(pts
(xy 0.15 1.1) (xy 0.35 1.1) (xy 0.35 -0.4) (xy 0.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "e4522d21-a658-4452-8c41-cca69f02b1a3")
)
(fp_poly
(pts
(xy 0.65 1.1) (xy 0.85 1.1) (xy 0.85 -0.4) (xy 0.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "3afdf0a2-7a67-413a-abcb-ef4413670a35")
)
(fp_poly
(pts
(xy 0.65 1.1) (xy 0.85 1.1) (xy 0.85 -0.4) (xy 0.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "64c36dfd-90f3-4577-98cf-9b0f969327db")
)
(fp_poly
(pts
(xy 1.15 1.1) (xy 1.35 1.1) (xy 1.35 -0.4) (xy 1.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "3c94b625-b5b6-45c9-9e9d-c2428e45bddb")
)
(fp_poly
(pts
(xy 1.15 1.1) (xy 1.35 1.1) (xy 1.35 -0.4) (xy 1.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "63cb1c80-926f-4533-8f1d-ebd1d0cc90f4")
)
(fp_poly
(pts
(xy 1.65 1.1) (xy 1.85 1.1) (xy 1.85 -0.4) (xy 1.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "4b8dc80e-17d3-40b0-ba94-ee3f6e1f3a45")
)
(fp_poly
(pts
(xy 1.65 1.1) (xy 1.85 1.1) (xy 1.85 -0.4) (xy 1.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "9d48f22f-73aa-48f0-95fb-ac52bd466f63")
)
(fp_poly
(pts
(xy 2.15 1.1) (xy 2.35 1.1) (xy 2.35 -0.4) (xy 2.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "5d19b394-8287-4d7a-ae8f-4d9d2c6c739d")
)
(fp_poly
(pts
(xy 2.15 1.1) (xy 2.35 1.1) (xy 2.35 -0.4) (xy 2.15 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "9e8dcdcf-b3c2-4f6b-b89b-47c8390ffab5")
)
(fp_poly
(pts
(xy 2.65 1.1) (xy 2.85 1.1) (xy 2.85 -0.4) (xy 2.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "2a7d5cf2-3815-4247-b476-ec05f7ceb480")
)
(fp_poly
(pts
(xy 2.65 1.1) (xy 2.85 1.1) (xy 2.85 -0.4) (xy 2.65 -0.4)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "40606058-f410-4c81-abf0-b33d714b78ae")
)
(fp_poly
(pts
(xy 4.22 0.95) (xy 4.42 0.95) (xy 4.42 -0.85) (xy 4.22 -0.85)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "460d4c09-171c-4110-9c6e-5698566f1e01")
)
(fp_poly
(pts
(xy 4.22 0.95) (xy 4.42 0.95) (xy 4.42 -0.85) (xy 4.22 -0.85)
)
(stroke
(width 0)
(type default)
)
(fill yes)
(layer "User.1")
(uuid "55ee73b0-6a83-4391-99cb-c9f9a24d1d59")
)
(fp_text user "${REFERENCE}"
(at 0 0 0)
(layer "F.Fab")
(uuid "87b70653-6761-436e-bffd-56b6cef66a0a")
(effects
(font
(size 0.5 0.5)
(thickness 0.1)
)
)
)
(pad "13" smd rect
(at -4.32 -0.15)
(size 0.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "0d3b07ae-c890-4bc1-9d15-f1fc8d8fbf45")
)
(pad "13" smd rect
(at -4.32 -0.15)
(size 0.7 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "74603852-5fc2-427c-93ad-937a7a83f4df")
)
(pad "14" smd rect
(at 4.32 -0.15)
(size 0.7 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "043c4322-29ee-4384-a773-bf21defcc577")
)
(pad "14" smd rect
(at 4.32 -0.15)
(size 0.7 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "e9de0b93-e9e6-45de-bc6d-807470578d3a")
)
(pad "A1" smd rect
(at -2.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "44af04e8-adb4-4550-ab06-e97dd8adbefb")
)
(pad "A2" smd rect
(at -2.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "e14ac156-95dd-4865-b937-d7b6148fb42a")
)
(pad "A3" smd rect
(at -1.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "329e2764-bb9e-44e1-8d32-9cc1238b8c0d")
)
(pad "A4" smd rect
(at -1.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "205751e5-7713-4d09-9acb-267fbb2742ac")
)
(pad "A5" smd rect
(at -0.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "683a9ba2-a0c0-4318-8f52-330a28600d7b")
)
(pad "A6" smd rect
(at -0.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "1b9df19e-44f6-4d03-903a-d63828c4c06b")
)
(pad "A7" smd rect
(at 0.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "ceaf2e68-0033-40b8-8780-78121d1bfdf7")
)
(pad "A8" smd rect
(at 0.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "410d6ec7-87de-4bf7-b00b-ce114f4709b8")
)
(pad "A9" smd rect
(at 1.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "af42c210-b152-4f11-a798-593526a294ad")
)
(pad "A10" smd rect
(at 1.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "a2e14bb2-cdc8-4679-b2ef-5de94bd5c8fd")
)
(pad "A11" smd rect
(at 2.25 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "f9b61ba3-ec3a-4ab9-9996-c3dceab3aaab")
)
(pad "A12" smd rect
(at 2.75 0.15)
(size 0.3 1.7)
(layers "F.Cu" "F.Mask" "F.Paste")
(uuid "72997436-0af1-4068-9461-b18c1c713d7d")
)
(pad "B1" smd rect
(at 2.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "8d244a4c-ae6a-4285-b08b-587d464299a3")
)
(pad "B2" smd rect
(at 2.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "72a7f583-8819-499c-bdae-4edb994c68c1")
)
(pad "B3" smd rect
(at 1.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "67a3511e-c071-4ee6-870e-3c5e262587cc")
)
(pad "B4" smd rect
(at 1.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "a34143e1-5b9b-45b7-ad6f-5db4ce1e7b74")
)
(pad "B5" smd rect
(at 0.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "f5f31443-3501-4213-a352-9ba48b743176")
)
(pad "B6" smd rect
(at 0.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "37799c6e-92da-4261-98e1-a0fbc864f4e8")
)
(pad "B7" smd rect
(at -0.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "688fe2b2-d774-41f7-8923-8ae2efc08e12")
)
(pad "B8" smd rect
(at -0.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "0cc618f8-8098-4108-9b82-26d6d4a266d4")
)
(pad "B9" smd rect
(at -1.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "eff836eb-359b-4b36-946f-f303294af344")
)
(pad "B10" smd rect
(at -1.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "de2b15ea-3fc9-47ac-a2bb-f5afb3e11ca2")
)
(pad "B11" smd rect
(at -2.25 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "31f73382-0a3f-46e3-887b-76ff6b1d00e1")
)
(pad "B12" smd rect
(at -2.75 0.15)
(size 0.3 1.7)
(layers "B.Cu" "B.Mask" "B.Paste")
(uuid "8c1dcfd1-c0f9-4d5a-b743-433a2e8b0a65")
)
(embedded_fonts no)
(model "${KIPRJMOD}/footprints/Custom.pretty/USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01.step"
(offset
(xyz 0 -11.5 -0.55)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz -0 -0 -0)
)
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,6 @@
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_barcodes": false,
"apply_defaults_to_fp_dimensions": false,
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
@ -50,23 +48,7 @@
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"border_display_style": 2,
"border_hatch_pitch": 0.5,
"corner_radius": 0.0,
"corner_smoothing": 0,
"fill_mode": 0,
"hatch_gap": 1.5,
"hatch_orientation": 0.0,
"hatch_smoothing_level": 0,
"hatch_smoothing_value": 0.1,
"hatch_thickness": 1.0,
"min_clearance": 0.2,
"min_island_area": 10.0,
"min_thickness": 0.25,
"pad_connection": 1,
"remove_islands": 0,
"thermal_relief_gap": 0.5,
"thermal_relief_spoke_width": 0.5
"min_clearance": 0.25
}
},
"diff_pair_dimensions": [
@ -95,7 +77,6 @@
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_field_mismatch": "warning",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
@ -113,7 +94,6 @@
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"missing_tuning_profile": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
@ -133,12 +113,9 @@
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_not_centered_on_via": "ignore",
"track_on_post_machined_layer": "error",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"tuning_profile_track_geometries": "ignore",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
@ -146,7 +123,7 @@
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.15,
"min_clearance": 0.16,
"min_connection": 0.16,
"min_copper_edge_clearance": 0.2,
"min_groove_width": 0.0,
@ -154,15 +131,15 @@
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.2,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.16,
"min_via_annular_width": 0.15,
"min_via_diameter": 0.25,
"solder_mask_to_copper_clearance": 0.005,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
@ -252,28 +229,17 @@
"zones_allow_external_fillets": false
},
"ipc2581": {
"bom_rev": "",
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": "",
"sch_revision": ""
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"component_class_settings": {
"assignments": [],
"meta": {
"version": 0
},
"sheet_component_classes": {
"enabled": false
}
},
"cvpcb": {
"equivalence_files": []
},
@ -463,14 +429,11 @@
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"field_name_whitespace": "warning",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"ground_pin_not_ground": "warning",
"hier_label_mismatch": "error",
"isolated_pin_label": "warning",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
@ -493,7 +456,6 @@
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"stacked_pin_name": "warning",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"undefined_netclass": "error",
@ -514,7 +476,7 @@
"classes": [
{
"bus_width": 12,
"clearance": 0.15,
"clearance": 0.16,
"diff_pair_gap": 0.16,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
@ -526,14 +488,13 @@
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"tuning_profile": "",
"via_diameter": 0.5,
"via_drill": 0.2,
"wire_width": 6
}
],
"meta": {
"version": 5
"version": 4
},
"net_colors": null,
"netclass_assignments": null,
@ -555,10 +516,6 @@
},
"schematic": {
"annotate_start_num": 0,
"annotation": {
"method": 0,
"sort_order": 0
},
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
@ -630,7 +587,6 @@
"sort_asc": true,
"sort_field": "Reference"
},
"bus_aliases": {},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
@ -638,7 +594,6 @@
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"hop_over_size_choice": 0,
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
@ -662,7 +617,6 @@
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"reuse_designators": true,
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
@ -671,33 +625,13 @@
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0,
"top_level_sheets": [
{
"filename": "usbc_soldering_iron.kicad_sch",
"name": "usbc_soldering_iron",
"uuid": "7095b018-eac3-4b01-b374-28e3216c4fd8"
}
],
"used_designators": "J2,J6-17",
"variants": [
{
"description": "Pen-style design",
"name": "Pen"
}
]
"subpart_id_separator": 0
},
"sheets": [
[
"7095b018-eac3-4b01-b374-28e3216c4fd8",
"usbc_soldering_iron"
"Root"
]
],
"text_variables": {},
"tuning_profiles": {
"meta": {
"version": 0
},
"tuning_profiles_impedance_geometric": []
}
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
Version 4
SymbolType BLOCK
LINE Normal 0 -4 0 -32
LINE Normal 16 -4 0 -4
LINE Normal -16 -4 0 -4
LINE Normal 16 4 -16 4
LINE Normal 0 32 0 4
WINDOW 0 80 -16 Bottom 2
WINDOW 3 80 16 Top 2
SYMATTR Prefix X
SYMATTR Value CGA5L1X7R1H106K160AC_p
SYMATTR ModelFile CGA5L1X7R1H106K160AC_p.mod
PIN 0 -32 LEFT 8
PINATTR SpiceOrder 1
PIN 0 32 RIGHT 8
PINATTR SpiceOrder 2

View File

@ -0,0 +1,62 @@
*----------------------------------------------------------------------
* SPICE Netlist Generated by TDK Corporation
* Copyright(C) 2022 TDK Corporation.
* All Rights Reserved.
*----------------------------------------------------------------------
* TDK P/N: CGA5L1X7R1H106K160AC (Multilayer Ceramic Chip Capacitor)
* Property: C=10uF
* Size(LxWxT): 3.2x1.6x1.6mm
* Model Type: Precise Model
* Model Generated on June 16, 2022
*----------------------------------------------------------------------
* Terms and conditions regarding TDK Simulation Models:
* 1)This simulation model is being provided solely for informational
* purposes. Please refer to the specifications of the products in
* terms of detailed characteristics of such products.
* 2)In no event shall TDK Corporation of any of its subsidiaries be
* liable for any loss or damage arising, directly or indirectly,
* from any information contained in this simulation model, including,
* but not limited to loss or damages arising from any inaccuracies,
* omissions or errors in connection with such information.
* 3)Any and all copyrights on this simulation model are owned by
* TDK Corporation. Duplication or redistribution of this simulation
* model without prior written permission from TDK Corporation
* is prohibited.
* 4)This simulation model is subject to any modification or change
* without any prior notice.
* 5)Neither TDK Corporation nor any of its subsidiaries shall make any
* warranty, express or implied, including but not limited to the
* correctness, implied warranties of merchantability and fitness for
* a particular purpose with respect to this simulation models.
* 6)The use of this simulation model shall be deemed to have consented
* to the terms and conditions hereof.
*----------------------------------------------------------------------
* External Node Assignments:
*
* n1 ---| |--- n2
*
*----------------------------------------------------------------------
* Applicable Conditions:
* Temperature = 25 degC
* DC Bias Voltage = 0 V
* Small Signal Operation
*----------------------------------------------------------------------
.SUBCKT CGA5L1X7R1H106K160AC_p n1 n2
C1 n1 11 9.52429487E-06
C2 n1 12 1.15159657E-07
C3 n1 13 1.15159657E-07
C4 n1 14 1.15159657E-07
C5 n1 15 1.15159657E-07
C6 n1 16 1.15159657E-07
C7 n1 17 1.15159657E-07
L1 n2 21 7.50000000E-10
R1 11 21 2.20400000E-03
R2 11 12 1.30531029E+01
R3 11 13 8.43347070E+01
R4 11 14 5.44726342E+02
R5 11 15 3.51748832E+03
R6 11 16 2.27076345E+04
R7 11 17 1.46554336E+05
R8 n1 11 5.00000000E+07
.ENDS CGA5L1X7R1H106K160AC_p
*----------------------------------------------------------------------

View File

@ -0,0 +1,20 @@
Version 4
SymbolType BLOCK
LINE Normal -5 0 -48 0
LINE Normal 5 0 48 0
LINE Normal 17 -13 -18 13
LINE Normal 13 -12 17 -13
LINE Normal 15 -10 17 -13
RECTANGLE Normal 20 16 -21 -16
RECTANGLE Normal 3 13 5 -13
RECTANGLE Normal -5 13 -3 -13
WINDOW 38 0 28 Center 2
SYMATTR SpiceModel CL31B106KBHNNN_Precise_Interactive
SYMATTR Prefix X
SYMATTR ModelFile CL31B106KBHNNN_Precise_Interactive_LT.mod
PIN 48 0 NONE 0
PINATTR PinName A
PINATTR SpiceOrder 1
PIN -48 0 NONE 0
PINATTR PinName B
PINATTR SpiceOrder 2

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
Version 4
SymbolType BLOCK
LINE Normal 64 0 8 0
LINE Normal -8 16 -8 -16
LINE Normal 8 16 8 -16
LINE Normal -8 0 -64 0
WINDOW 3 0 33 Center 2
WINDOW 38 0 -33 Center 2
SYMATTR Value Temperature=25
SYMATTR SpiceModel MCASU32MAB7106_PNA01
SYMATTR Prefix X
SYMATTR ModelFile MCASU32MAB7106_PNA01_LT.cir
PIN -64 0 NONE 8
PINATTR PinName Port1
PINATTR SpiceOrder 1
PIN 64 0 NONE 8
PINATTR PinName Port2
PINATTR SpiceOrder 2

View File

@ -1,701 +0,0 @@
* LTspice Encrypted File
*
* This encrypted file has been supplied by a 3rd
* party vendor that does not wish to publicize
* the technology used to implement this library.
*
* Permission is granted to use this file for
* simulations but not to reverse engineer its
* contents.
*
* MCASU32MAB7106_PNA01 LTspice Model ( Temperature / DC Bias Model )
*--------------------------------------------------------------------------------------------------------
* Model Generated by TAIYO YUDEN Corporation (https://www.yuden.co.jp/en/)
* Version 3.0
* TAIYO YUDEN Control No. 250905
* Copyright(c) 2021 TAIYO YUDEN CO.,LTD. All Rights Reserved.
*--------------------------------------------------------------------------------------------------------
* Product Description (link to TY-COMPAS)
* https://ds.yuden.co.jp/TYCOMPAS/or/detail?pn=MCASU32MAB7106KPNA01&u=M
*--------------------------------------------------------------------------------------------------------
*
* Begin:
A2 FC 2B C7 10 2D 69 7F 68 E6 80 19 46 5C D9 F6
0D 45 BF C5 A0 5A 3A F2 D9 51 EC C3 35 EC 0C 64
48 C1 75 AA F6 EB 1A AD 2E A1 36 AD 64 24 A4 F9
C0 0A 91 66 85 E4 BE 43 A0 25 9C 72 63 EB C1 31
8F B8 57 D8 9C 6E 97 3B C8 51 26 0B 14 2E BE 49
10 A6 BA 70 C3 36 1D A9 F3 D5 4B C0 DB 9A 03 E0
D8 57 75 0B 1C E1 29 1B 3C E7 11 C8 AC C1 A6 CA
45 0D D4 96 8C 69 27 CC 58 34 E7 DD CA 0F 04 0C
66 85 29 9B D5 23 A6 8A 0E CE 7B C9 74 8D 2B EC
C7 12 9A CE 9E E3 34 03 11 34 3B 75 D6 37 5C 9F
49 42 F4 2C 06 D1 41 DC 2A 67 06 CC D0 17 8A 38
B9 6F FC 08 1C 98 D1 91 E5 E9 34 DE 25 6D C4 3E
B2 79 39 72 B8 5F F4 DF F3 D4 AB 9B 34 48 3F 19
19 8E 94 22 54 5C 78 40 3D F5 F8 11 16 14 22 D6
4C 2B 24 CB FB 90 7A 3E DE DB 6C BC 45 20 E8 3C
E7 2B C3 CC F6 B8 39 08 40 8A 23 BA 0C 43 E9 0D
97 BF 3D D6 EF 8E E7 B3 01 51 0B 47 D7 32 53 CC
44 28 FD EB 95 3E 5C 2B C2 CD 40 55 F0 40 46 2D
5F A6 34 F8 9F F8 8F 56 C8 68 E5 74 CC A9 B5 C4
E8 08 C7 6A 04 D7 FC FC 13 D8 60 4A 3C A7 43 BB
49 AA 79 4B 87 4C 56 4F 57 96 3A 63 E2 71 2B 54
AC A8 95 C8 99 C5 49 53 14 01 71 92 9D 18 E9 D8
E1 DB 27 39 C0 C8 FB FC BC 41 36 5F C5 58 48 05
61 2B 8A 16 7A 18 0B 84 2B 8C 82 E9 F7 31 14 B5
80 8F 44 F0 B3 8D 48 97 06 3D 43 7F 42 69 25 30
99 9D 86 90 C4 D8 1E 47 BE 47 63 08 9E 9E 23 00
6A 03 14 DE 75 86 98 4F C2 07 10 F3 F1 0C 72 CA
80 3D 78 E6 56 3F 92 08 38 27 19 89 D5 36 80 F1
ED 52 58 4C 71 18 C3 C7 22 57 C5 7E 52 1B 23 0E
27 87 72 E0 F9 94 DC 83 2B 36 82 56 1C 4B 24 96
BF 15 29 FB C6 FC D1 D7 E3 22 6C E0 EE D6 24 BF
FD D1 A7 4B E5 5B A2 59 7C 34 6E BB 86 DC 5B E9
E3 1E 6B DE CA 85 77 F5 97 52 88 CC 17 D0 85 E0
E4 22 FE 40 10 86 8E 66 92 31 A0 DA 0C 51 0B E7
B3 82 76 B4 3E 29 2C EF 97 2B E1 B0 D6 DB 20 DD
EA C3 EE DA 62 19 55 CD 68 C4 5E 81 5A 8C 44 4A
1E 3F 9E 57 F3 BF 34 ED C7 91 A0 F2 47 2C 68 15
E8 19 96 EC 52 8A F5 58 24 86 D2 91 E5 BB 0F 37
A0 F5 6F FA 0F 23 11 BF 7A E7 F4 72 80 4A 71 D3
DA 7A 05 90 28 0E 72 DA C7 37 26 72 4C 98 35 C4
33 16 CF BB 24 4D E6 DB 64 08 5E C5 5B 66 3D 83
4A 07 9A 9E C3 1D 6A 29 B9 52 8B 84 87 A3 0B F5
BC B0 B3 C0 48 13 DF 16 5A 23 D8 2D 99 8C 88 80
D7 31 A8 B2 48 4A 36 4B AA E7 03 0E 9D 48 7B D0
1A 90 BB 0F 65 56 EE CA 46 35 51 F8 71 46 98 0B
82 8B 07 EB 54 A0 2F 99 1F 2D 38 1E B5 87 1A AE
52 47 8B 20 83 8F BD 37 5E 43 BE 64 D6 9B 87 06
4A 50 A9 0C 38 F6 FF E3 3F 5D FD 38 02 4C 24 5A
B9 5D 4A CE 0F FF 47 2A 52 4E 44 C6 21 63 3A DF
83 BF 46 E9 63 E6 70 35 35 DD EE C7 D3 0B DF DA
28 02 39 84 22 3E A6 EF 22 05 C7 B7 9C AF 01 9F
2C 0E BC 3B 1B 91 17 46 D4 45 9F 58 AF 35 7D 3D
67 F9 58 81 F4 4E 9C 7F 75 F8 67 BC 42 BA 3E F2
D2 38 C0 1C FE 19 F0 80 EF C6 CD 5B 93 04 1D 5B
4D 8D E1 17 29 9E B2 50 3C 89 E9 E2 2E 47 79 E3
17 1F 45 00 D4 FA 0C 21 8E 70 36 95 CE E1 AF 91
BB 06 AF 87 59 9A 93 1D C0 19 31 98 2B 5F 5C 67
B8 5A 71 60 12 3B 5D 50 73 CD 10 A8 4E F6 3E 18
2D C8 E1 C5 00 3E E5 D5 D3 05 DD AC B0 F4 BC 1E
A7 26 FE 16 AE 98 58 AF 12 5B 3E 16 A5 35 6E 9A
7E 43 3B 8B C7 A5 6D 4A 37 3F D7 55 1D 30 47 A4
D5 2F 47 90 5D 36 0E 79 AC DA 50 D4 84 82 4C 98
FF 88 1A 56 13 28 F5 65 E1 17 11 56 62 FB 71 79
7F 6C 42 F7 F9 18 2F D1 A7 BB 82 10 37 89 F7 E2
2B 84 37 F4 8B 98 B6 4A 58 F8 EF 54 55 94 05 B2
B8 0A 54 DD D5 11 1C 69 1A AC AE 12 60 92 A3 C3
F8 F8 4D 0F 1E EF 52 07 86 90 63 5C D9 CE 78 06
11 0A B1 21 E4 9D 8F 71 FA A7 2D 71 98 C5 32 D3
7D 32 87 9C 66 09 B8 99 D3 65 91 4F BB 5D F2 45
96 BC BC 0D 7E 70 9A 09 DA 9C 0E A8 0E 62 47 19
52 E1 80 69 70 DF B8 2A E2 4A 38 8D D8 CC 27 A2
36 19 AC E4 38 88 23 A5 E1 C3 79 78 0F F2 B2 B3
9D D1 C1 28 DB A8 08 B3 A7 0C 13 03 D1 AC 48 9A
FD 21 A0 4D EF E0 A3 BA 9D 9A E4 AF C4 01 4B 71
2B C7 96 3F B4 A0 A1 9A 81 CC 61 C0 BA E3 14 94
AA 2B B4 6F F1 AC E4 58 CF 78 BA 3C F0 C2 7D FB
30 BD 39 54 08 95 B4 3E 80 DD 3F D8 8D 98 C6 C4
39 A6 B1 87 26 AB D6 37 4F A9 26 DC 65 4C 6A 1D
1C C2 C8 3E 52 50 ED 20 8D 52 9D 91 ED 11 53 B4
A3 34 87 82 12 F9 AC 94 B9 1A D0 DF 94 4B 6F F5
20 63 89 0C F4 2B 45 06 2D 6F A5 D7 C4 44 5B 79
9B 5B 4B 1C 0F A5 0E 15 B1 52 66 C0 24 A7 69 C3
7E 67 70 B7 D9 D6 DD DA 1B 68 36 70 41 20 59 D2
F3 C5 67 7C 4D 62 85 E8 7F FE 17 B4 64 3F 5B 12
7E B7 03 34 40 7B 41 6F 23 63 E3 D1 F5 48 85 EA
CB BA 5C 5A F2 F1 76 69 0A DA 79 B4 0F 04 DD 0D
35 84 80 A9 F6 D7 4A 3D 14 57 26 97 97 FA 81 BF
06 3E 3E 0F EA E2 A7 D0 6B 41 10 98 20 9E 65 65
00 EB 1E AC AB D8 63 D6 52 D8 AA 49 B0 64 38 E7
78 EF 47 FE B8 4B 3E 88 A6 59 46 42 6F B9 29 5F
C4 53 32 13 BC C7 06 60 96 47 A8 6D 32 D3 9C 9B
79 A6 5C 8E 49 5B E4 14 B8 F3 9A FD 92 E5 15 3C
30 ED 9B 96 57 EC C2 F0 3B 43 4A 5D 26 67 5D 06
04 3E 31 A0 CD 99 CB AF 10 D4 12 4E 4B 13 A1 1C
2A 6E 4D 86 DD AF E9 A6 97 BF 80 CD E5 50 B4 A5
91 29 89 BC E3 A6 3E D7 D4 F3 0E E3 23 C7 7A D6
7A F1 07 F7 CC 47 09 0A 0E B8 4A 0A 5B 8D 8A FA
AF F8 AA 04 09 3D D7 5C B7 80 7F 95 37 4B E4 83
0E 41 FD 97 E4 00 89 60 23 08 24 A4 B1 69 B4 7D
6A B5 11 47 19 96 8B E3 50 02 A9 8C F1 F4 4D 9E
DD 6F 2A 69 33 E0 5C 4E 98 42 6F D3 14 B6 E4 6C
52 B2 07 AE D1 00 3A DF 2B 08 73 42 84 33 8A E9
A8 A7 CC D3 95 4C E0 11 88 71 93 69 9D 0A 1A CC
46 8E 95 09 A3 D2 EE BA 22 98 13 81 37 B0 A3 B7
88 A8 2E C7 4E E2 B1 CC AF 43 CF 4E 9E 21 53 F9
13 A4 9C FA A0 F0 BF DB 79 26 B8 68 55 C8 34 13
43 0A 45 94 7F 1A EF 01 C5 A8 6E 04 5D 29 2C DE
07 21 9E 4B 60 CB 9F 85 32 60 90 41 D7 62 FE 54
CA A7 1C AD 37 2D 64 83 1D E9 ED 94 D4 4A 30 5D
58 67 C5 DB 94 A7 3E 2E DE B7 9C F2 FC 7F D6 22
CF 13 4B 7E 1C A2 DB D9 FE 04 55 8A 73 2A E2 6A
D7 54 72 23 D9 A1 50 C5 00 67 71 E2 E9 16 B0 AF
FC 85 BB 1C 79 23 F8 79 0F D3 FF 55 B8 C3 FC C3
D6 72 72 AD C8 EB 15 72 9B 00 6F 15 5B 14 47 05
52 FD E1 3A 95 BC D4 5C 8D 23 36 82 85 A4 9A 32
6D 96 6A 32 35 EA CC E0 EA E6 00 7F 09 7C 52 27
31 B8 2B 1C 3F 2E 6B E3 37 CC 08 2E D1 F9 3C 6D
0E 7E C0 10 9E 12 DE 22 CD F0 33 D3 B6 5A 4A B1
02 51 C3 E9 D7 53 3C 5F 16 C4 B5 FC 4F F9 30 C1
DC 21 80 40 9D AF 54 3C C9 51 73 47 E3 1C DC 34
5C E8 4C E4 04 20 20 42 3E 96 DD 15 F4 23 6A 3A
89 67 6B 05 C4 B2 6B 0D 48 30 1F 6B 6F 89 1C EF
26 D2 E0 10 58 17 41 8D A7 FB 70 19 27 F6 F7 AA
E3 9A 24 73 A4 2D 85 E4 7D A2 49 23 57 73 A0 4F
BF DE 9A E7 36 0D 50 D3 E4 CA 06 78 A2 30 34 4C
99 B6 98 24 11 87 F9 49 CC 80 06 8E E9 7C 6A 3D
43 2F 92 FF 94 37 95 3C 40 18 09 3F D9 10 01 D9
A4 74 AB 85 2E F1 CA 63 96 8D 42 B5 3A 99 4B 38
FA 12 0A CA E1 D6 CE 1C 6F C5 11 E4 D4 AC F2 B0
F9 61 66 50 79 E9 17 F6 CB 4E 9E 28 61 26 22 5F
13 C4 76 DA 35 2B F2 EE A0 1B 10 C5 AC E0 6D 00
67 29 D4 49 D2 64 23 45 3E 31 77 AC 68 C0 4B E4
12 FC 26 40 6C BD A3 99 9F 6F 3F 80 FB 94 2D 7A
95 C4 A6 61 32 6C D9 4A 45 45 70 E4 5F E4 93 65
BA FB BD FD 53 2B 10 5B 80 C6 43 CF 30 58 40 5D
6A CE 2B 5E B2 22 2E 18 EA 85 FA 9D 41 44 53 B3
6C 3F 5C F2 50 AF AB C3 9D 74 52 F3 A7 35 A0 FE
BA FE 26 67 65 F9 23 2B CA 00 F1 9F 6E 11 4E DB
28 64 DB 13 54 6E 84 2D 62 3A 0F 70 9D BE 9B 08
50 D5 7B D2 FE FA E2 D7 65 74 60 91 E7 DF 10 0C
C2 A1 62 D3 E3 5C 52 65 A3 BE 8D CE 1E 04 2D 3E
5D CC 08 FA D8 AA 68 56 34 E1 92 4D 0D 4B C7 FB
5B 51 FC A7 86 4F F3 B6 EF 62 5F 77 7B C5 21 00
5C AA 10 25 D0 29 50 2F A6 43 F5 F1 F6 6A 99 F8
63 4D BA AC B9 68 78 29 3A B9 48 12 2F 63 41 C8
D4 E8 44 0D DB 70 9E 58 B9 B0 C1 14 77 EB 97 A9
BB 31 42 39 7D 97 EE 51 FB 6F 59 71 D9 3A 9E A8
1C 9A 6D 46 DC 65 62 96 C9 0C 7D C1 75 57 B5 9D
08 71 04 0F 60 DE 3C 21 53 E4 33 44 8B 44 1A 91
F9 AD A6 BC 7C 5A 76 34 E0 7D 22 CB 1A 4A CD 1C
9C E1 9C C7 82 C0 DE 88 05 46 9B 71 7F 1D 2D D3
27 FE 56 73 0F 8D 2E 18 C9 1D AB F7 EB 85 D9 16
C6 09 F1 39 73 70 1D EF 73 78 1D CC 9C 70 5C 4F
9C 8C A2 82 E5 32 33 D6 BE 48 46 18 E3 F1 81 E8
83 2C 83 09 55 CE 46 ED 5E A2 AA 4A 80 6D 92 31
19 FC C0 2A 8B FA 0F 06 56 DC FD 70 30 AE DB 11
41 90 2B B1 5E BB 01 A9 EB 39 0F F6 83 BD C0 95
D3 39 10 DC 95 FC 43 75 FD 30 32 A3 9B 49 26 D8
CD 6F C3 90 91 CC A7 7E 88 B0 5A 35 54 29 C1 62
5A 1F 93 8B 60 F7 3D 47 E3 09 88 2D FC 19 95 47
6C B9 30 B9 95 64 53 6E 0F 50 20 3F 3C 76 E9 BF
37 F6 A3 C8 21 2B 8C 35 88 41 4D 3F 47 7E A1 A4
62 15 D6 3D 47 79 FA D8 84 97 DB 4B 7E 0F 03 5F
7E B5 61 8B AB 0F 26 0E CB 6E ED 0C 9C 93 A6 AC
F9 09 1D D4 A1 57 60 7E 98 A5 AF EA 21 0F EE 5B
06 FB FA CE D4 37 E8 A3 22 88 5A D5 34 8A 3F D8
C6 D1 EE 36 5C AF BC AE 9E E2 27 F1 AE 98 2E 1B
D3 F5 95 6D C7 8A 2D B2 55 70 C8 CC F3 2A AD 01
8A EC 13 D1 F7 62 53 C1 67 08 EF D4 4D 59 95 FD
4E BA 6A A2 47 31 1B 3C FE 7F 0B E4 60 DF 77 D8
74 C2 0F 98 D0 57 95 04 89 06 7E 33 39 B4 0F 2B
48 40 0C 97 8A E3 1B DE 3F E8 4F D2 90 48 92 77
FA 29 8B 30 4B C7 8E E6 6F 7C 3B 33 9E A7 93 28
38 64 DE 03 D6 4F 50 23 DD C2 93 4F 3D 56 D3 0F
EE 65 8C 23 C9 E9 13 1A 91 20 3F 94 BF 71 88 C4
0C 20 48 B1 0D 68 B7 CF A1 1A 4C EC 6F 72 C8 D3
9D 7D C8 27 23 7D 34 7A 53 72 D4 0C BC F9 DE D4
16 9F 2A D0 AB 52 5B C7 80 15 66 4B EA DF 46 84
6A 35 56 53 7B 13 12 1C 65 65 39 15 DE B9 ED BE
9A 4A 53 EC F6 B3 33 F6 97 D5 57 59 E0 C0 47 AE
33 C0 48 29 29 9A 76 C4 37 34 AF 84 BD 63 EE A0
07 28 47 5B 3B 18 E9 DF A6 00 0B B2 59 57 53 BE
91 59 66 A1 BF FC BA 98 D8 CD A8 8A AC 28 DF 4E
76 61 40 15 EB 65 2D 87 E5 36 C2 A3 98 DA 19 46
07 0C 4D 89 CB 5E 44 11 1D DA EE FF DF 8C DA FE
B2 DB 99 04 E7 63 BA 95 FB 9A F5 14 83 14 BC 86
3F A5 0C AF DE E9 86 22 8B 9B 9A 64 2A 9D EA 05
7C A1 A6 7C E9 6A EC 23 7F 35 0B 25 80 23 30 54
0D 5D 7B 40 D8 F7 34 79 43 67 E2 12 53 85 E7 CF
BD EC 47 B3 E9 26 B6 05 19 BA 92 84 8B 14 B0 93
81 FE B1 D0 EC 72 D0 B8 57 F0 DD BA E5 70 C0 2A
0E 84 B3 76 0C 36 CC 7A 4A 01 6F 1E A2 94 5B C7
EF 18 C7 49 C4 E8 38 FD 2C 21 3A 67 B6 C9 99 72
90 91 02 AD 6F B9 ED 6B 8F 30 12 60 E5 47 21 41
89 2F 47 39 74 06 FA 51 02 B4 26 62 C2 83 06 FE
53 F3 98 D2 CE 0A DA 87 5D 9F FF 55 50 F6 E1 FA
20 95 17 CA 82 59 A3 04 16 78 5D 47 9E 6E 46 43
52 AB 41 0A 74 C5 E9 02 48 46 CF BD E8 51 7E D3
11 6F 4A 05 4C 50 24 78 FF D7 CA 4A 43 65 CD 6B
57 AC 16 6D 92 4E 19 67 D2 0F 4A 94 6C 22 60 D8
03 9F 96 80 47 27 1E D1 BD 18 E9 07 88 E3 C6 EC
FA D3 0B 82 C8 C6 96 51 B0 A3 CD D8 3C AD 71 5C
A8 00 C3 34 CC 3D C1 B9 9E AA BD 71 FF 9A 07 FC
EF D4 66 C5 65 C2 6B 05 1C BC 96 86 B7 27 94 1F
10 35 6C 95 16 C3 42 FD BD 06 9B F3 29 71 4D DF
78 F3 49 0E A0 BF 3C 4A 6E DC D1 E6 D6 BB FA 28
C1 57 1E BB C7 51 CB 0C BB 11 DD 3E B2 5B 25 24
E4 64 85 B0 99 26 99 C9 CB 4B 69 4C 8A E2 20 92
0E 87 C9 B5 52 BC FB DD 2B D6 1A C7 C1 87 A0 C3
BC 3F 3C FA B1 25 54 D3 A5 83 63 07 7F F9 EE 30
EE F1 07 EF 23 73 02 86 E4 B7 41 4A 8C 24 55 68
C8 8C FF F2 BD 36 57 5F AC 84 41 A7 10 20 BC 54
B8 0B 8F AA 68 41 17 39 72 B7 60 1D 86 68 6D 36
6B 29 12 AE D7 C1 E2 C8 71 0C E6 93 E4 9D 95 C9
AA B5 29 29 46 90 7C D3 BB C1 D9 95 BC 16 B6 9E
A1 7A 67 41 9C 8A CC 91 8B 56 45 4F 01 8C 88 39
38 7A 1B 81 7B F2 B4 29 A2 AB 44 C7 F1 D5 BF 62
2D A6 6C 9C C6 B3 61 FA 8A 6F D2 78 C7 20 3F FF
42 7A 7F D6 74 38 51 99 00 CB 2E 24 54 5C 07 6A
FC 6A A7 5C DC D0 D8 95 EE B3 D2 2C 25 DA 94 FB
23 0C 1A 0C F6 97 B5 19 82 FA C2 37 FD 64 13 C3
F4 6F BF D3 0F 01 CA 6A 06 FC CE FC 74 C5 CE E6
F1 96 8A 08 99 CE C7 8F 00 38 C3 6C B6 9C B3 E6
9D 55 CC BD AE 3C 75 34 EF 92 E4 58 28 08 31 22
7F 29 4C 1B C4 5B F0 37 6F 78 0C CD DB CB AD B9
CA FB A0 9F 3A FD 8D 33 0A 2B 71 02 E7 EF 70 3B
03 7A 64 36 1C BF 62 E0 F0 79 B5 C1 81 3A 6A 9E
6A 2F 08 23 B6 D9 57 77 8F 73 8B 8A 51 20 49 B8
6A B5 AF 6F 1B 11 FA E4 29 0B 7E 95 BF AD 03 BC
16 15 90 EB 13 93 A6 4D C3 FC 12 73 50 89 30 0D
D6 5D 11 8C AB 7C 5F 9A 85 7D C5 20 C5 61 02 12
F2 23 AB EE 47 55 DE 6F AA D7 83 28 D5 A8 32 00
1A 66 94 92 7B 26 C8 41 A1 94 9C A4 D2 06 60 6E
54 09 2A D7 C6 8C 34 4F FC 49 73 49 14 FE 66 0D
86 DB C7 F9 3C B2 F6 67 72 7C 15 67 3C 16 6C C3
8B 83 F6 3E 33 06 80 18 77 EB 1D 79 B6 33 71 EE
BE 9C 9D 1E 8F AB 97 EE 4A 25 45 65 56 9F 35 4D
FB 31 5E 70 20 4F 13 73 16 58 EA A9 B0 8E 14 31
76 B2 6E 35 69 81 77 1A C7 A8 F6 6B 0D 2B 4E E6
24 E6 8A 63 72 0F 3A 7C A0 A3 C2 96 54 54 2D 71
74 15 FB 7B 6F 81 FE 2A 62 8F AD 0B A6 52 C8 EE
C1 BB 16 BB 63 BB DE 4A F4 A9 63 B6 ED 08 3B FE
98 37 AE B4 C2 44 CC FD A6 8E 3E 6F 02 03 A8 0F
30 7C 36 CB D9 71 D5 F9 ED 8D 03 C9 6D B2 C1 DA
31 A8 63 D0 58 FA 96 97 32 3B 8E 47 E6 DC 47 D6
D8 50 20 F5 DA A2 78 69 59 4A 60 39 39 CB A9 7E
ED D1 8E 1B 43 05 4A C9 DB B4 01 40 60 57 C8 7B
38 98 06 7D 1B 3E 7E 60 0F 9C 98 8D DE 5E FF 12
8D AF EE 09 78 34 FD 4A 63 D2 C3 F6 AE 23 95 E8
04 8B F9 FB C6 DA F1 BF E9 9D 4D 99 05 93 55 00
83 D1 70 78 B6 4F 11 1F F0 A0 BD B2 00 14 E0 52
47 22 2D A7 3F 37 FA EB A4 81 59 9F E1 22 08 AA
CC A8 CF D6 0B 6A 5D 62 EE 8F B1 34 1E 3B CD 1D
E0 BE B7 E6 15 59 62 CE E0 45 03 3D 36 4A 0C 50
2F D1 16 CD BA ED B9 38 FE C3 1C 4D F3 7C 89 49
DF 64 45 02 28 72 96 84 AE 29 ED 24 AF 31 71 A1
C8 25 20 C9 A6 C6 E8 7B F5 A3 B6 C2 76 FF 42 38
F5 14 4B F4 0D 1C A3 08 AA 4C 9E 4B 4B 29 9B 91
DA 22 27 B7 8B 84 29 47 41 5F 77 7A C3 E6 32 30
B5 9F 0F 6F A0 CA 97 B4 23 EE 9C 6A ED 0F B7 C7
C4 7F 70 8B 0D 63 50 FC 18 1B 79 73 C6 95 77 54
7C CE D8 91 AB E3 4D 82 51 46 9E 85 83 28 7B 9E
BD 49 25 CF 48 6E 72 F0 A2 C0 B0 65 2F ED 9E 54
FD 41 EA 8B BC 80 8B 0A 0A A4 51 CF 06 40 4B 60
C8 FB 0B B6 BA 7A 83 88 C5 FC ED 4A DE 77 A2 CB
57 3D 4D 48 43 D1 E3 DF 66 27 94 A7 77 3E D1 9E
DC F0 D5 0F 68 16 3D 89 FF A9 D7 C1 7E 3F EC C0
99 EA 58 D9 D4 A1 76 81 65 DF 66 82 C5 42 85 5A
A7 D4 F7 F5 00 9A 2B 01 A8 61 08 D8 28 FF 97 C4
8F E8 48 04 E2 16 86 0B 02 53 8F 37 1B B8 AC 34
E2 C9 6A BA 0A D5 C8 0A D3 35 22 CD 6E FC D1 AF
AF 6B C7 5A 75 45 EF 1A EA 77 C0 A2 8B D0 D2 A5
B0 E4 62 C1 42 E7 93 7B 9F 8E A8 3F D4 DA 1D 67
17 F7 98 CC ED 65 C9 FF E9 01 11 B1 E3 EC 7C 6A
CB 43 14 CC 89 5E 68 3C 73 ED BA A1 80 2C 8C BE
4B 16 CA 8C 00 9D A0 C7 93 32 B3 40 67 EB DA 28
33 30 CF 39 BE BD DB 2C D4 4B EB BC AA DD 2B D8
26 51 FE 6C 41 60 C9 4A A0 C2 F8 A0 56 8B 6F 7F
A8 2A 31 81 74 18 02 56 C0 6F B0 6E 60 14 79 49
84 F4 91 50 A2 2F FB E9 A9 F6 79 0A DC 43 1A 6F
9F F8 CB 62 4C 31 F8 D6 4D 59 ED 28 F8 1C BE 43
3C 8E 7F E4 2F 10 8E 17 B6 82 1B 4F 90 F5 7F 50
F4 5A 93 B2 8E D0 15 71 43 91 27 A9 57 A1 1B 5C
A2 32 DD E5 2F 33 6D CD AD AF DD D3 D9 91 F1 CD
70 1D 8D D0 0F 73 85 48 41 54 5A 5F 93 8C 41 C3
86 55 CE 0B EB DB 59 1F 06 E6 D7 4B 7C E5 A3 53
CF DD 6D AC 1E 34 58 7F 35 FF 51 B0 DB 21 57 12
7E AE 16 49 8E 7E B0 2E DF 33 4B 49 CC 44 47 3F
2A F8 77 28 85 07 8A 98 6B 43 22 4E 8A 1C B7 94
4A F9 0D BE 71 61 DD BC 93 C9 1D 0A 01 E0 13 84
C5 CF 15 91 B2 CB 3D 24 29 22 29 12 49 D3 17 2A
33 28 CA 94 90 49 EC BF 4C E4 77 AB 93 13 7F 7E
73 93 DC 23 66 47 36 1C B3 C9 FD BC E3 1E 7C 29
04 4D 58 F0 27 D6 27 49 A7 5D 39 E4 F5 B3 FA 91
7F 35 60 13 72 C2 9A 73 5A AB 7C 73 B0 97 FC 16
70 AD 8D 21 0E CA 83 71 32 11 3A C8 D9 78 55 2C
A9 EE EA 13 BE 6C B3 AF C0 51 D5 73 F5 4F 3B 2B
94 6C 3D 22 E9 E1 09 94 1A E5 A7 03 89 E8 8A EF
EC 73 76 2E 16 30 96 E4 B1 9E 0F FC A2 26 B8 51
34 9A 90 2E 17 B4 2D 0E CC C7 B3 A2 CA 1E B2 9A
23 6F 8F 7E A4 B4 87 A7 59 99 1A 2E 2F F9 1A FB
5A 44 88 24 2D 74 24 4D FA 83 86 E3 9D F3 B4 62
4E 5C 20 DA D6 C6 46 3A B8 C4 45 6E 18 72 65 4E
FE 61 43 2A A2 9E E4 B6 47 F1 64 A1 C4 79 AC CD
EC 5F 44 B8 35 B3 8D 7C 88 6F C4 A2 BB B9 B9 A5
30 81 CB 51 2C F3 FC 0C 5F 1C 0C 0A 73 3A 17 24
03 F5 FC CB 15 0B 7B 92 E3 DF 07 C5 C9 73 5D E2
D8 88 51 DB 41 83 84 77 CA 37 B3 13 FB E4 C5 48
F0 87 C8 85 62 AD 21 DB BE 3D 8A 47 87 08 77 43
29 E5 23 5C 1E 66 21 A0 BC E5 C1 1E 4C F2 3B EA
9B 35 3B F9 69 00 66 C1 1A 2A EE C8 62 83 40 80
04 69 02 5D 5C 44 4A CC 84 C0 A6 B2 B8 93 22 F9
E4 1A BF 0A 9A 3A 39 E1 5F B1 AB 74 D6 D6 19 42
A7 D3 E1 D5 99 7F 8B D8 F7 89 45 16 61 BC 17 C0
93 2E 82 AC F4 F8 CD F1 9A EA 33 2D D1 5F 44 6C
8F 3C E3 64 0C 89 5F 19 09 51 EF 9A CF 10 13 42
24 AA AE B0 34 A5 E5 D5 C2 8F 7B 92 7C DF 05 4B
9A B6 1B 5A 6A E3 97 D5 D3 27 87 6F 5B 58 6F 57
CC 82 17 F2 FC 2F AE 85 AA 9B D6 D8 39 56 DF 61
5D 56 07 E9 FE 76 CF A7 6B 02 54 E1 B5 87 A4 C7
AF 5C 5A 9D 64 5F 57 16 7C 6A 34 E3 94 1A D1 77
D7 1C 80 14 FB D4 2D 8B 13 D7 A3 FF D1 C5 6A 3F
2B CF 3D 88 EB 23 36 A5 DE C4 78 36 05 A3 58 7C
79 75 9A 38 E9 97 74 E0 5C 92 47 F9 F9 51 30 29
2F 85 D9 7F 95 4C FE 33 F1 34 32 44 38 77 C2 77
82 44 E8 70 81 9B 86 E9 43 00 D7 B5 77 07 7B 1D
C6 29 F6 93 BD 40 27 65 35 7D 6D 65 B6 D3 E7 22
D2 21 4A CD EB 9C 10 BE E0 A0 02 10 A0 4E 19 33
1B 47 E5 46 69 F4 9A F5 8C C7 8D 60 02 54 73 8A
49 6B FB 75 D8 13 AD AE 66 85 DA 40 7A B9 47 7D
64 28 42 1F 52 FD 16 30 44 CA 9F 55 16 DF 8B 4E
DC 93 94 61 E3 4D 23 B4 60 29 B3 AA AB E6 EF 69
C5 97 B1 EB D5 B0 91 67 73 12 3F 9D DC 2D 2A FB
47 20 C7 BE BE 3A 46 2D 21 5F 53 D8 3E CB E8 81
F5 96 28 2C 5D E7 FF BE D6 31 D1 A6 98 3C 06 45
9D 64 EF 34 D9 F3 D9 D6 87 CC EB F0 A9 D1 B5 50
D5 5E 92 06 6C 5E 68 98 6B 88 82 6E EF C7 05 BD
98 16 EB 43 D4 6F 1A 45 81 7C 03 08 51 CD 12 24
9E 0E 98 99 F8 75 51 C7 EB 5A 28 6A B0 63 1F EA
D7 EF DC 56 B8 C9 DE CA F1 59 B0 27 EE CD F0 84
4A D0 0B C5 0C B2 CC 72 3D 73 6A AF EC 6E E1 C8
B9 FB A2 09 18 ED 54 0C BD 77 86 78 E2 56 9F 22
9F EF F1 77 0C 6D 4A 7E 3E 6F E2 A2 16 C5 7E 3D
69 2D D2 8E EB 37 A0 86 47 EC 98 E8 A5 BD F5 D5
02 51 BE 84 5C 55 67 41 81 32 91 EE B8 D4 FC AE
47 A8 7D 34 4B 22 F1 00 C6 BE 0D 55 0D 43 17 5A
53 48 F1 41 68 63 FB AD 97 25 F6 22 2F CB 43 39
1E E7 1E F1 DA 29 13 A3 6A C1 AA F9 0D FB 7B E0
05 8D 86 A5 4F 57 63 18 6C 9B AA 9A 9A AD 61 77
5D 63 DA 45 04 1B 22 C0 8F 7B A5 6A 2A 67 64 4E
FB 12 3C 9E 21 2E 6B D4 0A D9 C7 11 47 DA 1F 7A
2B 9D 4A AE 54 48 41 44 43 C8 BD C1 21 E0 27 FF
50 6E D1 6D 11 00 52 7F 5C 03 3F FF C2 27 4C 4F
56 7F 84 E3 42 40 48 71 F9 9E B6 DE DE DC E7 A9
74 F8 50 46 F4 8B 07 10 B6 25 D9 F9 BB 8A 1F 13
4D F6 1A 70 48 82 69 63 C6 E9 C4 61 1B 6A 26 D4
38 9E 8E 78 81 69 C2 5D B5 1E 24 6A 83 88 D0 4B
6C 87 7C 43 48 7F 5C DF 71 1E F8 61 AE 66 78 A1
74 FF 2E B3 1E 84 C5 43 59 C0 D2 66 A3 C7 AB 0C
2E FB 81 CE 44 80 A3 C7 2C AD 14 FE 1D 08 7D A1
E8 60 96 08 95 E8 7B 17 46 21 49 15 F4 6F 86 B0
80 4E C6 D5 F1 2D 63 05 1D 0F E3 FF 31 F6 BE 4D
CF CD 17 71 57 EB C5 6A 33 0B 11 B2 E1 BB AE 7A
C2 C6 7A 0E 07 E7 FD 9D FC 7E 7D E1 2C D7 50 19
14 32 DF 12 CF 26 60 E9 A1 8B B8 02 91 FB C1 FE
11 18 FA 09 A8 5A 75 AA E4 BF AB 91 50 5D CB 51
08 7C EA D6 53 39 F1 BD 55 52 71 6F 6D 64 79 F9
14 B2 85 36 01 21 E2 7E 15 E5 17 B8 E6 EA F8 37
82 E0 A5 50 5B 84 48 E8 E2 35 A6 19 1C 88 9A 65
23 1A 49 D2 1C C7 08 53 09 4E AA 01 93 6F 4F 0E
C0 2A 3A 09 8E 97 C6 DC 3B F4 CF 57 30 48 79 1E
CC 6E 82 7F C9 7D 9E 3A 1C E4 8A CD 71 0B A0 7B
C7 B4 F0 EB 08 10 6C 21 9C 93 64 7D 19 F8 C9 17
71 8E E5 2C 1B 9A E1 A7 E3 D1 5B 86 52 F6 FD 3B
96 1E 52 34 93 2B AB A5 6D DC 89 78 BE 49 08 8C
20 29 28 FA 23 31 EB 95 01 B6 A7 F4 3D 05 BE 5B
CC 45 9D 14 71 6F D4 50 37 3C 98 E7 14 AE 2B 1E
D7 A0 F6 6A F1 B6 C1 0F D1 BD 53 DA 57 EE 89 81
4F AF CB 9D 1D CE 2C 28 CA E6 CB F5 59 4C 2D CB
87 CA FA 35 E8 84 09 18 35 79 B1 CF BE A7 ED 5F
36 0F 31 1F 60 6A 7A F3 A9 05 98 AB 26 E4 A2 1C
93 44 69 4A F9 F5 88 C9 5A 18 AE EB 17 F8 F6 21
27 43 B5 C1 F5 0C 04 6E 34 5C AC A6 54 12 DA 33
DB 85 1B 7E 22 32 EE 91 95 3F C3 B4 0A 16 16 63
78 17 78 BC B9 B6 5D F4 03 69 4B E3 40 6A 0E EC
B5 2B 2D AE 16 EB FC 94 DE 0E B2 22 B2 BA 60 14
A1 97 00 9D CF 9A 2F 83 41 8D 43 30 9B BF 8A 1C
D2 27 D3 9E 9F 91 DE 7D DB 1E D7 B9 A2 B1 3D 05
FF 74 5A 6E 03 BF 86 19 89 D6 D3 80 DD B3 9C 25
CC 63 D3 C4 1B 46 0B 77 09 52 E4 0A C0 DC FF AC
FF 7F 5F B4 E1 6C AA A5 81 B8 C6 EF 3F 20 8C 14
6D AC AA C8 E0 93 88 F0 85 46 76 88 4E D1 17 99
50 1B 8E 46 8B E7 73 5D 6E 96 F5 43 FC E9 37 30
AF 30 53 79 6C ED 85 F0 DA D8 33 D7 D1 7F 0A 30
AB 0B 91 3F 06 A4 BF 57 48 57 07 A2 52 5E 70 22
F8 14 67 99 6F D0 9C D4 4B BA 82 4A 77 B5 D2 2E
65 72 8A 56 32 1D 7A 17 D1 07 42 B5 1B 3E 82 42
8F 92 EA 74 80 E8 AF DD D4 D9 9A 8F 10 31 FF 6D
B0 45 F0 C5 37 08 67 05 84 F0 49 03 13 76 DC C5
4F EE D1 69 49 6F E7 F7 0A 29 92 E8 99 19 33 8E
18 9D 1D 0A 91 1A 43 22 A2 82 1F E5 D4 CA 11 AB
63 10 27 3C 68 07 AF 0F 26 C2 5A AB DA AE 1C 9A
74 92 FA CC B8 2C 46 E6 13 FB 2B B7 C6 3C F0 3F
85 4F 51 78 03 CB A4 1D D1 A8 39 9A 09 33 83 5C
04 70 17 39 C5 C4 DA 04 03 2C 5E 0B 50 39 D7 6D
16 3B 4F 96 30 99 BC DD 03 4C D3 AE 09 57 3D 5B
01 88 3D 3C 52 26 9C 20 CA A8 8F 03 02 60 4A 50
25 33 B1 0E 8C F2 50 1E 12 AD 14 5D 7D CB 9C 81
3B 9A C4 CD B5 E7 15 CB DB 51 AA 39 9B FA 25 7B
B2 36 13 2F 27 15 8A 43 2D 64 18 C4 08 C8 D2 64
0D 40 92 31 82 05 47 EE A3 24 9E 5E B0 14 CA 31
49 3A EA 8C D6 77 D7 25 47 50 DB 8B F8 F4 50 73
BB 4B CB 67 05 F3 94 60 C4 6E 90 8E EE F6 C1 EC
9F 1D 1A EE EB 7B EB 1E 52 9E F0 DE 3F 8B 00 D2
CB 85 36 68 23 29 29 51 00 EF 82 F8 20 BA 82 C2
E6 B0 07 08 5F 73 0C 63 98 82 92 95 85 5B 47 0D
0E 20 59 38 23 24 CB 24 59 DE 53 1A D5 D5 E1 66
AB EF ED 70 E5 03 A3 B9 12 5C D8 83 87 F0 6F 7F
81 81 C8 47 EE 08 40 29 ED D4 96 A6 67 5C 8A DF
6C F5 20 95 F6 37 E6 D5 44 9A 01 73 D5 10 16 7A
9F B4 F7 25 80 6F B9 E4 7A CF DF 1C CD 53 E8 8D
08 46 63 32 CB 8D 93 2C 0F BC 34 A4 35 AE 07 C9
58 B0 60 22 93 F7 2C 86 77 64 58 4E F0 1C AE 94
2A B4 54 84 BB D6 F3 10 A5 27 1E B7 13 DC C3 D7
D1 61 BC 32 54 FA 01 73 C1 1B EA 55 70 DF 50 9F
02 0F EA 22 C1 16 E2 E1 D1 8C B6 91 71 B9 18 80
4E C8 B3 82 9C A0 B4 58 1A 80 6F A8 A7 8D 98 95
27 F0 7E D8 2F 3C 33 84 43 BD 50 16 49 B8 A9 36
89 C6 1F ED 90 A7 4C 65 43 C4 A8 6F 83 95 CE 5D
CF 9C B2 4B BB 76 D4 B0 C1 08 E4 B2 5B E8 F8 B6
6F 47 48 1B 10 3A 35 FA 3F 7B D3 27 F8 B4 AA C0
C5 B3 5F D5 C6 63 16 FF DC B3 79 A7 FE D4 21 11
1A 70 E6 0B C3 4C 9D 58 A5 07 79 00 C2 36 C9 79
A8 FD DD BC 80 4B 63 03 2D AE 43 9F 97 65 11 04
40 CC D1 88 5C 0E C0 1A BE 83 57 99 12 62 79 E9
B9 3C 8E DC B2 4B F2 BB 1E 46 FD D1 C2 E8 33 2A
6E 5B F8 3A 44 B7 E8 10 D5 C7 BB DC C1 5B 3D A7
54 A9 54 EC 68 90 B1 96 AA 03 FD E3 99 C9 8E 63
61 CA 8A 27 A3 8A 86 A8 05 C4 7D E2 BA D3 95 80
82 CD E0 69 D3 74 FE 4E E9 D0 FB 9F 8F 80 AB 7A
8F 58 B9 0F E6 F5 3A 69 77 42 A8 2B F1 F3 16 5C
10 C9 49 CB CD 64 A3 91 EB CA 47 8D 32 ED C9 EE
99 AB 68 47 2F 8B A0 27 8E A1 88 54 2C 6F FA CE
10 41 02 81 4D EF C2 05 72 6E 61 C9 CB DD 77 2F
7A F0 2B 00 95 CA 55 4B 2E 25 39 0C 4F 6A 5B DF
A0 5F EE 3E 97 67 FF 8A 3A 31 6F 6B 54 8B 71 8A
16 42 9E 67 20 AA 04 7A 24 08 0C 97 B0 F3 B6 54
1D 21 65 83 44 E1 FD FC 1D 44 2D F3 03 F4 9B 0D
31 9B C2 0E 9D 77 15 88 D6 40 82 95 5B 05 36 55
3B ED D0 77 B3 0B 25 70 74 28 11 76 91 0C 74 BA
80 CF 1C F1 81 E6 E3 9D 45 68 2B D2 15 37 66 E6
2F 4C 53 F1 36 AB 19 63 76 3C 42 E1 D9 49 FB A8
01 22 EF 4D 24 12 42 5F 7C A1 87 20 8C A6 AD 2D
31 F7 0F 3C 8B 27 62 0D 6D 6A 12 34 9E 60 BE 7D
1E 7A 82 C3 FC D0 D7 76 DA D2 9C 30 47 3D 52 75
9F ED A8 06 2C B5 51 7C FD 64 16 B4 66 21 DA 3F
05 D7 DA 1E 03 19 49 9B 18 49 DE A1 72 F5 F1 00
80 20 F8 7F AB 7D 98 6A 9F C2 01 90 83 61 F6 FA
D1 4B B6 F4 E2 B7 77 D1 DB 22 CD B1 D1 1A 92 9F
D7 21 12 A1 E0 F5 F6 6F E9 69 4E D7 85 A8 BE 94
AD 0C 26 9A AC E2 A2 82 52 7C BB AC B0 FD D4 B9
DF C8 43 F0 7E C8 3D B9 86 56 7C 78 9B 60 78 BF
5B 02 D3 B2 8C 41 2F 56 D0 8E C0 AD A7 9A 72 38
19 2F B8 15 22 4C B0 6D C5 CD F9 7C ED 8C 5C B5
4E 5C 70 A1 0A C4 00 68 3D A7 B6 DA 2B 40 46 A4
AF 2E E1 0F 19 8B 3D 7A CF 09 CC 05 EF 3D DE 36
BA E3 97 08 9A 5B 41 F6 C6 41 CA 80 A7 17 7D C4
66 FA FF 9C CB 1A AE DD 0E AE C3 43 FF 59 E5 B2
85 5F B3 76 C4 A6 0B 28 27 97 C8 1C C0 E6 22 E0
1C CC 6C E5 66 0F 04 E9 F9 F9 5B 33 4A 8A DD D8
4A C3 8B 74 37 3E 5A 70 C9 00 4B 1D 6B F0 DA A2
F2 3C 18 B8 96 75 F0 7D DF 7D 4A D7 AD 87 A0 2D
ED 7A 75 71 73 32 D3 E3 2E 17 9D 7E 67 70 B3 1D
77 A3 FD 1A 57 A0 F8 A6 B9 01 55 98 B4 14 BF 73
0B 74 4B F0 C9 59 2A 1F 22 BE 85 E3 7C AE 71 46
20 8E 6C 2D 05 D1 3B 2E 51 A9 1D 72 F9 70 A7 99
7F AB F3 01 1A 7D 58 D8 6D 54 F9 1F 3C 5C 2B 8C
61 84 A9 5D 6C 6C A9 C8 99 09 4E 3F 16 AB 11 E8
E6 ED 16 9C 99 1A DC 45 3E 4E A2 AD C1 C7 DC 7D
CE 1C 6B 26 4F 34 5E 39 63 F7 B0 0D D2 E2 E1 27
67 4A 12 BF D4 27 7C 5B BC 4C CA 15 C0 39 8A 74
4F D9 28 92 9B 67 35 0F 00 61 2D B1 5B 5E 23 02
99 9D DA 4E 39 4E F3 87 06 78 B2 06 A4 53 6B 64
B2 9C 3A 8D 2A 75 B1 F1 4D 8B F5 3A FD F9 89 EF
85 DD 11 32 30 E3 21 8A 46 00 60 54 8E CA B2 E1
5C 5C 71 3E A0 2E 18 F5 7E 02 D5 AE 05 F0 31 25
C1 8E F9 9D 05 81 B5 C8 37 00 27 82 3D 35 60 95
D4 15 BE 9A 2A C5 D4 B5 EA 29 4C C9 B1 39 D7 F0
35 A8 35 37 5B B7 9B 0C 4E 1C 4E F9 E7 18 02 D0
07 3B 51 66 35 9C 5A A8 49 1C B7 1F 8E 0D 06 8A
50 95 25 2F 14 39 84 E8 11 58 F8 12 B2 CF 5C DC
29 D8 52 A0 9D 3E 41 1A E9 18 81 7E B5 F1 E3 0F
7E 15 D4 45 7B E8 F9 08 24 8E 99 66 D1 63 5A DE
2B 5E 7E 0E 70 B8 8C AE 43 65 BF 9C 45 4C 65 0C
E0 B5 DF 00 0E 24 F2 57 9B 07 C2 EB 11 52 15 BE
21 5F 31 2E 12 0E 1D BA 7F 4A 13 0C B8 DB D7 B1
3A A9 02 42 99 23 67 6E 1E F7 15 53 33 3D 2D 1B
3E CB 46 9D 35 2B DE 6D BF 27 55 8A 01 D4 2B 45
10 02 EA 13 07 5B AC 9B AB 31 63 9C 8B B1 BE 78
86 D1 D0 84 E5 B2 84 A5 45 EE 6E D6 41 D0 93 8B
98 93 10 D4 10 8B 31 B5 24 E5 E4 DB DF BC 33 B2
76 B9 56 FA 5D 45 04 5C 47 08 C0 19 86 11 88 5F
D5 A4 54 F2 6F D0 89 62 D8 57 5C 33 5E 62 97 B6
9D CF 96 3B 8B 85 CD 63 C2 53 9A CC E1 F9 89 85
11 DA F3 F6 C2 3D 2E 52 E3 F8 9D 33 A5 93 62 31
98 92 B7 95 70 82 A9 93 65 21 5B 8B 52 99 93 1D
2E A1 AB 19 EA 08 C8 A2 BE A3 78 95 4A 20 7A 00
D8 DF B6 CD 20 75 3E 8F 58 CA E4 0C B9 85 53 51
67 2F 55 F8 C7 5F 58 C1 FB B7 9C 11 7E 66 2E 50
1D 8A D0 84 0A 2F CD E6 11 61 99 ED BD 67 53 B3
A3 33 3C 34 2E 57 E1 AE 24 F6 8F 70 48 69 2B 15
30 DB EA E8 E5 B6 BD 6C E5 C0 C8 13 9E 66 D0 87
11 7D A7 88 E4 29 09 2F 98 A5 4A FD 37 54 C4 1C
37 1D B5 5B B7 F1 61 62 4C E3 51 12 D4 87 F5 9A
9C 08 07 95 01 42 76 C1 96 67 99 DC 04 DA 80 0C
F3 1C C0 7E 49 09 E6 BA 85 AF BA D9 88 D6 10 31
C9 3D 6C EB 39 C3 56 78 AE 9F 1A 08 B9 4E AD 36
93 31 F0 5D 3E 38 1D EF 79 FC 59 15 6B 11 DE 32
19 59 18 65 14 63 94 D6 6D DA A0 C7 DF 07 47 FB
F8 9D 15 A0 EE 17 EB 47 FC F5 F1 F7 39 F9 92 2A
B1 8E A7 04 1A B8 02 43 1F 0D 52 AB A9 EE 1C F7
08 A5 33 49 10 99 60 A6 70 B3 D1 16 02 25 21 36
D7 FC 94 69 DA F1 C8 28 14 2F C0 EE E2 3B 16 54
7D 81 8A 5B 5B 82 43 65 63 9A 9A 22 2F C1 23 59
E7 AD B1 89 F4 F0 A2 8C 7A 8A C9 94 53 34 C9 16
41 98 9E 17 8F 60 FC 37 71 DC 8A C0 2C 59 56 84
94 47 D1 9F D9 37 18 55 FB 8B E2 C3 EC 05 44 D0
CB 51 A8 B9 E2 3C 25 92 57 4E 04 7C 8E D0 8E 23
F9 24 9E EE C0 97 2B 33 32 18 F8 AA D3 82 1F A2
D8 71 8B DB B0 A2 42 0F 0B 50 B4 F8 0B CE 9E EF
70 7D 55 94 97 86 AF C4 47 18 3C 8C 0F F3 33 D0
D6 52 F0 0B F8 F2 7D 67 C5 20 9C 06 68 45 8D E0
50 C9 EA 68 FA 0F 81 80 ED 57 95 B2 A2 C4 B6 15
72 6D 2D 19 35 66 14 DE 42 25 71 64 2A F1 B0 EE
CE 0E 05 E7 B1 BF 8A 09 A3 B8 C8 85 35 62 2F E9
91 A7 44 F0 5C D0 A3 77 45 8A D0 CE 83 CF 7C E4
98 25 56 F1 F0 6C AD 70 25 0F C5 E2 6B F2 84 16
D1 66 2C 80 4B A5 1D 3E 5D 37 5A AA B1 6A 31 3B
A8 C2 8E 51 66 BB 47 52 A1 B9 C3 5F AD E9 DC F0
EA ED 96 69 5D 9D 8B C3 8A 2D 78 BE 3C C1 68 D4
07 71 49 5D C9 EE 1B 7E BB 06 FD E2 7C 7D 06 97
8F 24 4E E6 61 A8 84 73 A2 A3 3D 05 DA 8B 2D FE
B5 AC DB B7 1C 76 2A 77 10 20 28 D0 DC 87 EB 11
0B 9A C3 E8 32 B8 4E 96 0E 2C 3A F3 07 6E C5 36
C4 E9 81 94 EC B7 80 28 5E 7C 7B 4D AD C4 36 F3
08 40 A2 F0 C9 E4 B2 87 0A CE FE 15 8C D1 61 A2
A0 4C 97 10 0C 45 94 2A D4 32 66 62 A2 75 F4 09
FB 69 97 50 CC B0 2B 0E 70 2F BE F8 0D 18 C2 53
39 81 1D AF A4 15 24 06 93 20 2A 8F 6C 65 D7 44
E9 8A 96 EE 6A E3 38 2D AF DC BA D5 DF 89 0D 8C
CE 10 3D 95 A5 CB 5D A8 BA F6 91 90 4F 5F C7 DB
8B 73 7C 2D D8 17 3D 33 87 1C FF BB 7E C2 E6 AD
BB 1A 88 92 DC A8 54 B2 B0 DE F7 A5 06 6F 66 39
50 44 3E D6 63 92 B3 4F BD D5 3E 7E 7E 1B 2A 26
F4 99 85 AD CA 82 B3 58 F2 63 45 1D EA 65 9C 04
8D BD 89 42 D9 F9 FD 01 D2 7E D2 83 F3 0A B2 AD
91 14 A6 70 92 E2 94 BC EB 3B 64 04 74 0B F6 F1
AD 9E 93 29 98 B7 F6 46 49 26 FB 09 5A CB 7A B8
E7 64 56 99 20 D3 86 74 4B C7 03 9C 01 D9 68 AF
1C 9B C3 77 6C 3E 17 08 3B 70 1E 36 D8 A2 32 0F
78 C5 28 6E D5 7A 43 F9 8F 6D 17 1B 8A D9 49 A1
23 0E 44 CC CE F8 01 46 5E 3A C3 B0 EA 78 FD 02
D3 9D AB E4 42 1C 3C 27 18 64 89 02 65 9C B8 42
87 58 E2 08 34 AD 2D 23 30 E4 AB 18 0D 07 FF 88
D5 BC 86 DE C0 B6 5C 31 0D 96 8D 71 C0 7F 8E 53
94 26 5A 83 6C 66 84 2F 89 43 F2 E1 B0 1A 61 A6
76 AD 20 0A 34 2C B8 A8 F8 7D 84 BB DB 4E 2D 18
F4 54 09 F3 04 2D 66 6E BB B5 4C D8 11 7B 2B 05
CD 58 1F 10 51 E1 21 A3 30 2F 0B E8 BF 89 66 F3
42 D1 1C 9D 99 20 40 B0 1D 62 DB C9 F4 61 D5 FA
C7 D6 F0 8B 78 8E DE 10 8D 37 C5 4A A7 2F A7 30
32 86 C6 82 9D 2C DA 56 C3 CC 6E 79 6A B9 F1 C9
53 38 2F CE 4C 6C EA 08 D5 11 2D 7E 99 B8 A9 F0
60 0C 17 C1 64 EE A7 EE 17 B5 44 77 0E 76 80 80
E5 1D FA F7 ED 84 DE 54 2C 2F BE 76 95 53 B9 2B
6A 6E 94 02 2D 05 58 50 A6 64 C5 E5 E4 6D 19 A7
37 65 72 E4 45 CD 33 5D ED 0F 7B F6 1B 86 67 48
AE 08 F5 39 90 44 2E 8A 6C 4E 60 9B 2B 23 25 89
D8 E3 A1 B1 DA 56 FB 8A 9A AB 83 9B 00 F2 49 0E
90 5B 5B F7 44 7D FF 05 27 55 EA AB 0B E9 E2 F8
47 5B B5 B7 18 37 7A A0 4F 37 BB 2D 8A 0D FD 2E
E6 88 27 13 31 4D 8E 83 03 22 50 1E 6D 06 12 AE
65 01 55 87 16 F0 AA 0C D0 FC A9 F3 BD 56 10 E2
76 E8 B3 5D AA C5 05 AC 4B 01 72 D8 4F 00 4F 41
5C 62 DF 05 BD 2C 29 49 7E 1C 95 9B 64 14 97 43
0F 4B 62 72 49 9C 90 58 41 B8 C2 10 7A 7F BF BA
FF 88 F9 52 87 5E 3C 37 8F D1 61 EA E0 B9 7F 9C
D5 83 60 7D BE 2B CE 1D D0 2C 10 6B 92 DD E1 98
6A 1A B3 F9 0E C1 5F E1 3B F3 20 D3 8C 9D EB 00
55 2B 53 DB C2 4D 59 41 F8 38 8F 75 6D 02 05 14
70 E5 77 90 A7 5B 1B D1 30 E7 50 BF 57 82 3E 12
40 38 9F 6C 93 03 1A 4D 7F 97 58 44 C1 83 EF B7
8F 34 BD 60 E8 E4 3C 5D 52 D3 3D 36 7F A1 89 F7
9A 1E 6C 2A DD 3A 6F EB 74 76 E1 3E 57 5D A2 5D
05 41 3F 90 4C 30 5C A1 6A 7A 76 01 98 65 2E B6
78 BD F0 21 63 CF 3B 98 64 8F 5A 55 12 77 6E 13
71 50 7C 28 D2 B6 00 90 90 8A DA F4 58 19 D3 7F
95 45 37 DC 7B 8A 87 C6 6F 7E DB 2B 12 BD 3F 75
E4 43 DD FB 30 9D 9D 70 62 6C 39 EE 04 56 D0 46
89 39 BA 70 46 B2 5C 0C 44 43 A7 D0 6C 09 3B 22
5B 4E CB E4 C7 50 1D 7E 91 AE 6F 2A 67 7A A0 A5
99 25 58 08 EF 60 D7 6F AD 0B 4F E6 71 12 5D 23
41 40 EC DF C3 BA 50 C8 E3 B1 80 E3 16 A0 41 5C
87 8E 1E 20 1C 86 49 07 D7 C2 61 40 F3 9E 09 FF
CE 13 A2 3A F2 21 0D 64 AE 36 BA D1 4F 8E 6C EE
22 37 AF CE 4C 94 4C 97 69 33 B9 19 FB 20 AB DF
84 E7 A7 1B 95 56 DE 6E 97 A3 17 FE E5 05 12 ED
38 A9 D8 FC 5F 97 5C E6 4E 9C B1 B6 5D 6B E7 07
1B 88 F7 81 F6 87 23 98 A7 62 9B AF 75 E9 93 3D
37 94 11 A9 4F 72 4D 5A 81 C7 05 A9 FD FC DF 5A
CD C6 CF A3 9F BE 78 81 C1 F3 BC F5 98 5A EB FD
54 68 89 8E 50 6B C9 4D 70 FE 38 4F AB A6 43 15
21 E6 F5 3D 8F FD 3B 02 61 73 4B 63 DE F9 D6 E8
18 17 E8 E6 85 13 75 B8 BE 97 D2 AA 09 B4 49 7D
BD 94 B4 E4 6D 76 3C 94 98 B0 D3 29 24 DF 11 70
43 C7 17 DB F7 B7 BA CE 01 59 8B 32 FB C9 E8 34
8B D6 9A 7D 64 E1 B6 C8 47 51 BB 32 51 9D 22 E5
98 11 6A B3 DA 9C CC A8 E8 D3 82 53 4C BF 06 5A
DD 51 C1 88 96 1A E0 AF 3B FB 2F 05 52 6F 74 1D
EF 04 FB C5 53 1C 36 80 80 60 7E 43 77 42 EF EB
4A 58 20 A0 D6 E9 8A 5E B4 B0 35 31 3F 17 18 E8
87 F0 7D 9D 84 9B D7 97 73 23 4C 27 3A 47 9C 92
CB 9F D6 28 B5 8A 5E 5A 3C F1 67 64 23 C9 3F A5
3E 1B 6A 08 23 13 61 52 83 E6 1E 2C B3 99 D0 EE
6D 06 37 2D 3D 71 BE 09 E1 74 97 68 3D D5 F0 C7
BB 90 04 05 5F 0D A2 2B D3 0A 0E 0B 75 AC A9 75
87 B1 74 D9 7E 3F 4B F8 38 30 95 EC 12 5D DC ED
A9 DC 23 B4 04 52 54 D6 93 44 86 56 E0 3A 13 63
E5 3A E8 B7 DA 3F 4D 2E 75 9A 71 F2 34 FC 69 02
4E 57 59 9B BE 35 EF BA AC AB 0A 6B 89 C1 64 8A
D4 21 38 D9 16 8B E1 C5 8D 27 84 D9 E7 06 CE CA
04 38 88 7B 57 10 A8 90 26 39 B0 62 5C 46 0F 2C
7F 57 05 F8 B2 D5 90 88 F9 62 25 06 7F D5 1C FE
3A C1 11 65 8D C3 D6 46 4C 73 47 87 55 BD 3F 67
72 E6 0C F1 0E FC FF 8C 20 CC 8F 66 62 1C E0 C5
41 71 91 75 B0 D6 DC BA C6 0E 88 D7 17 B3 B1 C5
B0 13 CB F8 EE AB 46 39 4E 17 0B EE 9E 9C D7 A1
F4 26 3B 86 BF 3B 57 CE F7 D7 2D DE 18 F3 0C 2E
69 44 A5 EA F6 53 50 87 FA 56 DF AA 64 0B B0 8B
42 E9 5B D0 60 7C 75 B9 44 C1 A2 AA 94 89 80 3A
76 80 51 21 FB E7 2B 4D A2 98 5B D2 A2 DD 83 6B
40 DD A4 D9 FB 8E FF C7 C9 C3 3C 42 69 BD 60 18
1F 13 61 D5 21 F1 0A 73 5A 74 DB 8B 38 92 DD 1F
4F 45 1E A8 71 34 3D 4F 44 F9 B3 40 16 C0 B7 9F
B7 9B CA D2 6C E6 51 3A 61 57 AA 88 04 08 CA 38
F1 33 5A 21 57 EF 63 50 D3 E6 12 6C F3 DF AC 5A
3F F4 71 83 D8 F7 1C 4A 4A 24 5A 7D F7 54 35 53
5C 77 7D C0 72 6E 3A 49 22 B7 F5 08 0E 53 8C 76
0E E2 7A 49 D9 97 5F 4F 66 B2 B9 0E 93 9D 44 92
38 01 D8 F5 15 AA E8 55 18 26 38 6D B4 DF 11 90
72 FB D3 98 48 5A 25 EC 74 46 11 14 73 52 95 51
41 46 72 A7 24 7D 4B 5B CA 5F 48 D8 79 42 9C 94
B8 30 3F 35 B2 A5 6E C0 96 04 71 86 4C 36 05 F8
EF EF 3B 8C A4 8D 7B 85 FE 09 5F 47 0E 11 4B 12
DC A4 46 2D C3 AE 1C 93 E1 38 52 BC 9E C2 17 9E
B0 B6 71 ED 6F ED BD D3 0B 49 7D 41 20 C1 67 3A
53 45 62 14 C6 DE DD F4 D6 32 D5 8E 9A B2 27 21
38 73 58 A8 4B 1C C0 D7 F9 32 EC 7F 5C B3 C9 61
CC 1B 05 F3 33 E2 EB CE 9E 37 33 7D 11 B5 4C B4
AC 51 32 A1 52 88 CE 90 BA 50 CF 33 88 99 F5 B5
66 B1 EB 60 37 AE AB A0 08 98 41 AB 5F 26 82 06
09 3E 70 8F 99 FF ED F2 8C D0 42 C1 30 B0 92 B1
55 63 26 44 7D 84 3A 23 78 A6 DD 22 5E 8E 38 5C
DA AE 81 D0 CD AB D4 BD 0B 50 AC 0F AE 10 BD 49
9E 7C 1F FE 25 D6 00 77 51 2F 44 61 59 AE C8 08
A8 3B B4 D3 C8 20 A1 88 2F C5 46 24 C7 A4 35 FF
BF 64 27 1E 2A 85 16 7A A8 E5 1F 51 69 E4 AA 58
A1 7D 03 F4 EA 99 1D 2A EC 22 7D B6 F5 38 46 6B
E7 95 40 3A 62 04 47 BE EE 0D BB F8 14 7E 86 3E
CB 30 9A 08 93 48 C1 E0 83 A6 54 9A BB 42 BC 29
7F 13 2E 06 5E CC 59 37 02 CC 19 8E 40 2A E5 5A
A6 64 78 C4 AB 6F CF E3 6D 0D F7 FB E8 56 9D B5
7E C3 AF EA 2D F1 D9 93 50 DB 0D 86 06 90 3F 73
C7 30 B8 28 25 B0 F3 F6 6E D8 61 4E 22 60 2C 12
E9 19 6D 1A 66 9A AB 2D E9 24 92 7F 75 E4 8F EC
80 9A F5 E6 2C F9 CB DE 92 80 4D 65 B2 AF 4D 72
CA B6 FD 07 6C B4 54 06 A4 EF 8F CC BA 8F 25 81
3A 82 4B 26 A4 87 70 18 74 E4 81 79 A7 7C 67 40
* End 3510841990 1114471188

View File

@ -1,18 +0,0 @@
Version 4
SymbolType BLOCK
LINE Normal 64 0 8 0
LINE Normal -8 16 -8 -16
LINE Normal 8 16 8 -16
LINE Normal -8 0 -64 0
WINDOW 3 0 33 Center 2
WINDOW 38 0 -33 Center 2
SYMATTR Value Temperature=25
SYMATTR SpiceModel MMASU32MAB7106_PNA01
SYMATTR Prefix X
SYMATTR ModelFile MMASU32MAB7106_PNA01_LT.cir
PIN -64 0 NONE 8
PINATTR PinName Port1
PINATTR SpiceOrder 1
PIN 64 0 NONE 8
PINATTR PinName Port2
PINATTR SpiceOrder 2

View File

@ -1,701 +0,0 @@
* LTspice Encrypted File
*
* This encrypted file has been supplied by a 3rd
* party vendor that does not wish to publicize
* the technology used to implement this library.
*
* Permission is granted to use this file for
* simulations but not to reverse engineer its
* contents.
*
* MMASU32MAB7106_PNA01 LTspice Model ( Temperature / DC Bias Model )
*--------------------------------------------------------------------------------------------------------
* Model Generated by TAIYO YUDEN Corporation (https://www.yuden.co.jp/en/)
* Version 3.0
* TAIYO YUDEN Control No. 250905
* Copyright(c) 2021 TAIYO YUDEN CO.,LTD. All Rights Reserved.
*--------------------------------------------------------------------------------------------------------
* Product Description (link to TY-COMPAS)
* https://ds.yuden.co.jp/TYCOMPAS/or/detail?pn=MMASU32MAB7106KPNA01&u=M
*--------------------------------------------------------------------------------------------------------
*
* Begin:
1E FD 14 DB 52 AE 58 6A 2E 81 BB EB 90 C3 0B 2A
41 F4 3F AB F8 54 DD 0D 1E 08 9B 9B 3B 9B 47 A7
EC B5 42 B7 92 B1 22 50 FC 89 DD 35 F1 E7 B8 26
F0 C3 6C 8D A8 FB AC FD EA B2 BF 0A 8E 42 06 33
EE F3 B3 AE 40 5F 78 0B 48 12 2D 03 C2 66 80 EE
D0 C4 83 02 D6 2D C0 CD 42 D7 66 53 C4 6B 17 0E
30 FF 6B 2E 99 B6 D5 BF 3E F8 CD 11 4C 08 95 08
75 00 04 36 B3 0D E7 0D D2 01 DA E3 F9 C5 AE A6
35 9E 29 2A AA C6 D2 7B 1D E5 F1 28 60 3B 6F 46
40 EF 64 B4 BF 18 72 32 E2 01 BF F0 7A C5 9C 57
2C A9 FD 41 74 D0 6F FF 04 51 05 E2 8D 82 6C 33
78 00 EB AD BF 95 8E FB 21 36 58 B9 35 3B 96 BF
ED 02 28 86 6A 48 BF FE AD 7B 35 A1 70 06 C5 3F
A7 0A 91 D2 9F 0F 30 D3 37 30 95 7A C9 9F 3A 7F
28 DA 99 AB 2C 9F B9 FA C7 93 DB 2B C4 DB 4A 68
CC 1E 36 94 4E 85 03 8A 48 F9 EB C1 CC 7D CF B9
76 73 49 23 2B EE E8 A1 92 DD 09 03 7C 02 45 4C
FF F9 7C 8E 51 9A 06 FC BF 2F A3 9C 84 25 09 D4
0A 0D 6F B6 82 05 2B 3E 6E 22 30 92 BC 83 2A 69
13 6B 78 1F 44 13 C0 F4 5B 45 87 B6 92 FC 0C E2
7B 0D 4B 2D E5 B0 57 CF 65 A5 78 92 52 3B 80 D3
FD A3 F8 87 53 7A 7C 39 54 C4 EA 63 B1 8C 00 6C
5B 17 87 98 56 93 18 62 86 1A 18 98 9F 28 B8 9D
CB 9E B7 1E 81 74 D4 21 62 18 7F EF C5 3D 4F AB
95 D5 91 E7 34 9A 17 11 B6 FD A2 D8 4A 9C 8B 2D
3C 50 23 4C 2B 55 2D 7F 1C D9 99 F6 B0 13 80 A5
81 F0 D7 45 0F 42 0B AA EB 31 97 22 8B 3A B0 E2
E9 35 6A 14 02 CE FB EF 41 EF 30 A1 5F 7B E9 27
B0 4C FE 8F D5 56 CE 66 51 0F A8 8A 4C 60 99 EB
94 F8 B1 A1 66 4C DC 52 E2 72 F5 05 14 68 51 74
EF 33 5A C1 0B E5 5A 7E 0F 33 00 E8 C2 69 3C CA
FE 4F C2 27 15 15 81 9D 5E 2B 51 04 E7 7E 8B 55
F5 DB 50 52 AC 74 DD 28 DB B4 33 EB 09 E4 35 C1
76 84 36 84 A5 1B E2 B2 CB 64 16 6F E8 45 42 7C
47 FA 21 7E EE 71 C1 68 58 BF 39 D4 8E F7 14 F3
43 E4 34 86 E3 CB 7D 61 9D AD 08 26 2C DF 28 AE
9D 49 32 33 13 03 00 AE C7 40 94 84 9F 70 15 4B
31 14 29 ED BB E9 AF 95 45 0E EF 4F 3F 42 2A A4
E0 43 AA 70 B8 40 90 3B F7 44 52 EF B6 DF C4 1E
8A 4B F9 72 04 13 06 81 6D 04 FD BB EB FE 60 37
A9 03 6D 93 36 9A 71 C4 B7 9F 43 59 EF DF 21 D2
82 49 4E FC 72 79 27 36 EA 27 0F F1 9C 2A 7A 97
D1 C5 B1 D4 AB DD 81 8B CE 1C E4 E1 54 AF 7E 9C
BE 14 0C B0 79 48 AA 83 C6 54 D8 22 B0 A1 9C B7
E8 31 16 80 C8 1C F0 B2 73 14 EE 36 6E 6F F3 46
4C 2C 0D AB B7 7F 5C 70 6B D1 B9 0C E3 83 9D B0
9E 79 D1 7A D2 39 B5 A1 60 48 0E EE F9 1E 4E EE
88 55 53 F9 CE BF 60 60 CA 02 E6 6E 8A CF 73 30
5F 1E 69 1F 3E 67 7C 18 5D 5F 38 C2 63 CB 98 3D
AC 08 BE 7D B8 3B B4 6C 9B B6 DD DF 40 52 E4 A8
0A 68 8A E0 09 E7 EF 81 05 52 05 DF 8C 0C 17 8B
B0 A2 AD 59 42 6A 0F 72 27 CB 14 DA AD EB 94 E8
10 2B BB 92 41 E8 5F 27 69 59 61 BE 30 B0 33 2C
13 33 95 ED AE 73 6D 47 20 80 E3 C3 3A F3 FE 9E
7F B8 FB BF 93 60 A0 9E 47 CD 1E DE 68 93 F0 C4
CD EA E9 88 B0 52 57 79 37 DF 02 93 8A D3 A5 76
03 DB BB 13 81 D7 DF 57 C8 A3 D5 D7 F4 64 8D DC
2D 65 00 87 78 BE 95 B3 C3 5D 20 58 E7 F8 91 2D
A1 3D 03 30 28 F0 81 54 2E DD F0 FE AC A6 88 A4
0A DA BE 9F B4 71 A2 9C 94 7C AA C2 A4 4E 66 9C
1F 58 8A 43 CF 2B 3B 16 DD 0F D7 93 11 E4 0E 28
31 2F 6F 1A 96 C2 08 B0 E5 93 16 11 A2 E4 97 55
D5 F2 D4 9C F4 6E 78 77 98 46 09 03 76 2C 49 2D
77 CE 17 D6 17 27 18 4A 53 FA 4E C7 BA 56 42 93
01 CD A5 B0 7F B7 6C 60 0E FE 84 86 DD 0B F0 D0
10 A6 DF 53 7A 78 31 B4 99 1B 2B E4 FB 36 41 9D
04 C0 12 41 F1 81 E6 B0 33 0B 2D 70 0F 04 17 37
78 79 23 52 DF AB 20 91 D6 2D D1 6C FC 1F 48 CA
E9 23 6C 22 76 9E 0F 78 2C D6 FE 31 58 DC 3E 3D
78 0B 92 91 2E F0 06 CA A4 2D B5 C5 95 46 AB 18
B1 6B BC 7E DB 70 49 39 6F 0A 0A 3C A5 E2 28 B8
8A A2 8D D8 E5 F5 35 CB D3 97 65 3D 4E FC E0 41
44 E3 88 BC 72 F6 A6 76 69 F3 67 DF B1 EC CF 7D
AC E6 2C D4 41 51 B9 CB 15 B5 BB B5 04 81 35 3D
30 7E 61 30 29 1E 4D 41 91 56 B8 35 8F D5 04 2E
1D 18 6B C7 5A 6B D6 C9 28 FF 7D 8B EF 3C 17 98
8D 26 35 DB 1C 9F 7E D6 76 A7 B0 6A 27 B1 1A 07
48 9E 99 56 47 4B 91 32 B5 DB 75 27 65 99 26 B6
F6 BD 98 7E 41 1D 88 B6 D7 DC 1D D0 0C F6 4E A8
8C 50 84 5B 5D 21 26 0D CB A1 E8 25 82 ED 91 BE
8C E2 96 BD B1 25 11 0C 4A 04 8A 6D 3C F6 FE CD
B7 BA 45 6B 66 46 80 57 E8 1F 0A 95 67 3C 67 E3
4E 49 13 40 07 5C CD F0 A3 5F EF FB 07 38 75 0C
D3 A2 FA 31 C7 15 DE 56 96 55 3B 67 1E 89 75 BF
C6 AB D4 51 2B 96 85 70 9C 22 25 62 11 D2 1E FF
C9 04 5A DC 97 47 42 7B 8A 9A 85 FE EC C5 1A 7D
85 AA 05 6C 51 47 AE 61 91 AB 9E 5A CE DB 69 FC
45 35 8B BD 89 EC 5B 62 6D D9 A0 AB 5B 96 FC 40
43 6E 46 8A 7A 94 92 14 4A A5 E6 E9 26 6B B6 58
17 59 A4 3B 8F C0 E9 9A 4A C7 DF 57 57 33 90 52
B4 9E 9E 0D 91 B8 91 DB EA 89 68 78 A5 CC 61 F9
A9 EB 10 94 B0 0F 5B 08 A9 46 BE 55 62 10 2E E2
76 85 CD 09 92 40 42 C0 33 4B 28 48 4F 25 0A C3
B2 3D 53 0B 32 DB 1E AD 79 74 A9 E4 32 9B DD 51
0B 9B 7D FA CC B4 02 C8 1D E7 9F 2C 1C E4 B0 F2
54 28 72 23 F1 74 D6 59 12 6C 1F F8 47 3D 24 4F
8C 05 95 F7 CE EB B1 0F 15 76 74 07 93 6C 24 3A
E0 F8 D4 B6 99 D3 B1 89 13 07 26 63 74 9F 17 B4
E7 5D 46 69 3F F5 45 07 F8 1F 53 87 1A A0 0C A3
10 07 5C 39 5B C0 5D C8 C6 17 C7 48 3E DC 2B 0C
DA 67 7B 56 34 F4 7E 00 92 34 10 2C 5A 83 FB C0
71 F0 91 16 BA D6 BD 9A 8A 70 63 30 30 28 D6 EC
EB E7 56 92 A1 2A 08 20 B2 02 A0 44 05 AA 7D 70
7E DE 8E 49 0D 08 10 87 77 5F C3 7A DD 94 4C D4
13 4D 3E F3 B3 48 CC D0 C9 4C 97 C9 B1 AD 23 B7
B0 92 4C 1F 1F BB C7 CF 1C D5 34 39 25 C8 AC EF
D6 F4 24 7F 3A C9 74 B1 65 5C EC F5 5C 4F 9A 6B
18 98 11 6F 1C 9D 3F D0 0B 2A 0E 84 74 96 3C 47
B6 EF D4 8E D3 27 1F 7E 9F 2D DC 95 9F A9 0D 17
EA E0 0F 99 82 02 E6 66 37 03 69 6B 91 30 41 FB
C6 1B 06 51 39 8B DE EF 36 56 58 9A 5C 00 0D 08
60 1D 7E 7B 38 67 4A B5 4D 0D 98 FE F8 A1 BD 04
E5 4B 92 F8 C6 1E 69 4B 91 7A F2 75 8E 0C AB 7A
30 63 92 B2 B2 2C 72 A2 E5 05 FB B4 4F 81 1C 2F
EA AC D2 2F C6 D9 31 3E BD D2 3E D7 BE 83 31 F6
C0 97 FE 72 D9 8C 6C BC 51 27 06 CA 7A 1E F4 55
34 5F E3 5E BF C8 85 B9 CB E3 0D F9 96 DF C9 76
39 81 26 3A BE 47 80 AD D0 B4 45 75 D8 EC 13 63
1A 28 85 42 F0 66 0A E3 AE 7A 78 F2 5F F4 F3 B4
75 12 49 F7 DB 2B E5 5D 76 14 CE E0 4F 5B C8 EC
63 BD 05 C9 4E 80 79 10 D9 97 AA 85 4A 4E DB 36
F2 B2 24 E9 24 88 8E 64 EF 3D 31 AE AB CE 1B F6
5B 6E 5D 0D CE 96 D2 6E 92 6B F8 7C 28 4B E8 75
1E 6C B1 18 BB 13 86 53 17 14 C1 82 AB A0 40 A2
45 C5 5F B3 35 55 DD 4A 19 27 80 8E 5C C7 FF A4
AB E1 0A F9 91 87 73 38 D4 4F 18 AB 80 8E 4E A3
67 5E B1 FA 5B FB 84 C8 59 24 0F 4E 2E DD DE 9A
B9 30 1B B5 44 56 9E EA 84 BA 82 CE AF 9B 31 D4
D0 5B 0B AB 91 3F 59 D5 01 3A AA 32 02 80 D1 AA
E9 04 E4 4E 81 26 8F 5C 9E 89 5D 5F 7C 48 9F A5
E1 A9 FE A6 4D EB 9A CE DE 73 26 F7 2F 66 83 7E
CC CD CF 35 95 FA 21 32 9D E5 BB D1 13 BB BD A1
4D 2E 98 18 B5 71 50 72 7D 81 93 22 45 06 D1 00
0A B8 84 03 06 3D FD 81 B1 22 01 D8 83 A2 06 D4
BA 29 55 C0 92 E5 92 36 94 AC 9C EA 6E 87 6D A8
D4 33 9D 8F A7 55 08 62 B3 0E EB 78 12 E8 89 37
62 1A 77 F4 07 62 C7 47 AB 05 28 36 2E C1 AF E2
8D 22 F4 13 44 3D 8A 41 1C 3E 9B B6 41 1F BC 5D
3C 22 C5 EC 9D C2 C3 5D D7 E9 FF AB 8C E5 CB C8
1B 8A E8 75 33 5A DD C7 A6 7E 3F 78 B9 CB 63 C9
69 3D D8 FF 6F 72 37 D8 00 96 9D 2C 8E 4B 72 57
E6 BE 3C 04 A2 2E 65 10 77 B4 87 F5 E1 E5 F3 F2
D0 22 8F 51 11 44 BF 4D 40 53 BA 7B 04 43 94 93
7E 17 FB 43 0E 09 E6 18 98 DB FA 2F ED 18 9C FF
6F 62 12 07 21 D3 CB 98 D7 C2 AA C3 A1 6F A7 30
12 47 EC A1 94 A7 06 36 4A 86 4D 5D 2F 14 A8 2E
FF 2B 8A DA C3 33 C2 4F 14 E0 C1 04 F0 DC 7A 1A
58 1C C1 B3 0B 2D E3 1F E2 54 01 BD D2 D0 A7 3C
0C F8 EA D2 B4 0D 43 F0 7C 2C EF E7 94 43 4E E2
FA FB 90 2E FA 76 CA 51 1D E2 F5 C9 85 05 30 59
5F EE D0 6C C9 3D D7 40 9A D9 76 6E 3D 6C B5 81
E4 67 79 0F B5 8F 80 C0 2A 95 AA A6 6D B3 BD D5
73 21 98 1D 86 5F AF 8D 98 9D 74 22 99 03 7B 58
7C 23 63 41 7B DB D2 37 DB F1 B9 C0 44 7E 6A 4B
2A CD 2C DD 99 D4 E2 4A EF 7C 12 51 86 7D B6 E7
23 31 69 11 D4 32 C6 0A 24 DA DB 81 1F 8B 10 3E
FE F5 D1 3C 16 9E 11 B4 14 37 50 1E 30 D5 B4 EE
F2 EC 34 08 F7 20 FF CC 11 D2 DF 37 03 F0 C4 F2
C3 CB A3 60 B7 71 26 36 7A DE 69 97 63 AD B2 ED
E5 9D C2 45 19 31 0E 35 C7 96 D9 65 60 C9 92 99
B7 29 28 28 1A D9 F8 BB 0B 09 B1 E5 2C DD 39 58
B1 AE A8 0C F3 A3 2A 88 FC E2 C2 B5 A2 73 A9 78
3A EC AE D5 6F EC C0 62 33 24 2C 1C F1 27 BD 97
4B 93 9D 21 19 46 4B 0F 92 2F E3 61 93 91 19 91
1D 31 24 19 D5 2C 1D A8 D3 B8 01 0E 36 E9 1A E5
07 3E EC 55 21 5E 7D 41 6E 2B C5 C5 B8 8C 9F E0
FA C7 97 48 89 02 86 5B F9 17 E1 A5 53 4E 62 5B
B0 C6 D8 AE 15 45 E8 DC 1F 98 0C 18 EB B7 16 22
FA 86 FE DC 35 B4 AF C4 ED D0 7B C2 17 68 AC E1
32 D8 9A A2 EF 37 B3 1B E7 0C 35 5A 18 A2 82 CB
57 2D 98 76 FB BC AC B7 1B 3D 16 54 A5 14 11 C0
E6 C1 A4 71 F2 7D 92 52 20 67 D8 03 F3 78 D5 F0
B2 E9 22 63 AF 92 C0 1C 1C 42 38 F9 78 FC 31 F1
6A 5B 79 05 7D 7F FA 59 59 63 65 D7 8B 50 E1 46
B0 EA 93 6B 2B F3 7C 39 2F C4 00 D7 CE 53 6C 50
DB DF E1 73 AC 6E 22 3B 92 D0 5E 5E 9A C0 9E 29
3A 2D F4 FF B8 12 88 36 C0 0F 44 39 80 0E FF 6D
47 BD 0B 78 FD 03 57 F6 F0 22 B4 2E D1 8A 2D 6E
A6 DE F2 DB 99 C2 BB 98 D3 73 87 3D 60 F5 F9 70
D8 49 86 F4 77 9C 18 59 D0 68 CA F7 26 AC 78 90
51 25 DB 18 A1 CC 67 45 18 23 A3 AA 26 21 B9 F7
C9 08 E0 6D 16 E8 4C EC 57 74 F0 63 C4 5F F8 1E
1F 05 83 E6 9E A7 9D 43 41 E4 72 10 45 0E E0 09
63 C2 85 E5 04 7C 07 82 90 D1 B3 95 B6 50 19 2C
76 9B 1F 99 93 7D 61 76 1C E6 E7 B2 A2 2F E0 F6
35 27 82 13 AC 02 C2 D8 20 CA 9E EF FE 32 CB 21
B2 D8 01 A5 52 65 79 A1 EB E0 5B 75 7F FA CC 5E
53 D5 63 CA B8 BD AF 0D C3 A0 C4 A8 F8 0F 0D 86
15 EA 8A 42 BB 12 22 8F 72 DB 4F 4A B5 AA 44 3D
76 8B F4 B8 5B E2 42 CC 74 D9 1F 8F A5 F6 6D 2E
2C 30 C1 3C 1B 87 D8 6D BF B4 82 6D D6 04 C1 DC
7C 45 2F 3C EA 8C 61 A2 AA CB F7 DF 11 76 BA 79
E0 B3 7F FC C1 B5 81 85 86 2F B5 2D BB 94 E3 40
BC 16 FE 56 A6 5B C1 CF 63 37 96 1D 2A A2 0C FD
A0 DA 29 E5 C9 93 83 D2 C7 A1 FB 12 39 B7 A4 FE
17 05 B5 74 78 EE E9 D4 7B EF 58 81 5D 85 42 C7
86 F4 FC 57 1B 3F A5 7A E1 A0 C1 D1 2B 38 C4 74
F2 AA 43 40 2C 28 E1 35 64 15 E0 11 0B 30 3B AB
3C 0F 79 20 39 D6 93 F4 91 6D 77 E8 D9 9E 2B 58
89 43 62 58 89 59 99 D4 D3 B2 AB A7 E0 74 26 DF
68 5B 1B 38 BF B0 87 04 0E 4B 9E B1 83 B7 42 89
A4 04 AB 39 32 32 38 57 1B 31 C1 CA 5F A8 CE EA
36 27 FA 2F EA D8 4E 20 66 68 70 5C 65 32 1D 15
B6 EA 66 87 9A D9 49 73 09 06 AD 7E E5 B5 CA C4
8B ED 4F 65 69 6F 19 75 34 84 3D 8D B3 99 A8 67
EE 09 7B 59 F2 12 D3 F4 8D 22 41 2B 9E A7 CA 43
C7 71 5A 1B 3E 93 92 01 B2 1E BB 1B DA E8 F2 41
49 24 51 C4 04 CE CC CF 47 BB 2A A9 23 A4 57 32
C9 72 3E CB 4D 9D 9F BB C3 BF 5D A7 46 0A 8A C1
54 D9 42 69 5F 26 7C 79 F0 F4 BF 70 7B 4F 67 99
90 73 ED 59 82 55 DE 70 F1 8A 97 FB C9 96 86 CC
6F BD D0 A1 C0 44 4B 63 DF 65 B0 7E CF AC 2A DD
C1 2B 1B 14 7F 6F 06 8F 12 34 43 24 59 DC 08 34
02 A5 22 83 7E AF C1 B1 E2 1E ED C8 49 E9 95 CB
F7 F4 A5 30 5A C9 E7 4B 9E 29 EA B0 8C 7A 1B EE
E2 67 86 71 0C 5C 35 14 CC CC F9 E7 96 FA 6C DE
19 D9 85 A4 B1 1D 9A BE 25 10 16 01 BC 8D C5 A9
B2 54 66 48 67 06 F9 27 9A 90 D1 63 3F 61 AF 1C
C1 62 F7 04 2E F4 08 BC 18 63 53 F5 B5 E5 D5 0B
15 0D 3B 15 C3 6A 23 D9 3A AA 5D D0 63 9D 93 59
C2 03 55 C7 27 92 E1 A1 90 0C F6 00 87 12 E2 A5
70 B8 8C FD D3 8F 53 61 EA 91 06 DD 61 36 3C EA
14 E9 FC F6 C6 82 24 24 71 DA 21 50 9C 25 67 BC
DD 98 6B 65 57 C1 AB B8 A7 F9 A6 16 C5 55 33 C0
75 5E DA 18 A6 67 C9 C1 E6 3F 65 18 55 FE 54 9C
16 CD B8 84 18 2D 6D 28 1A D6 2D 64 5E 03 40 D6
31 3E 6C 29 EB 42 0B D1 56 41 3D 70 D0 C5 93 E1
3B 77 9A 08 E0 28 B2 9B 20 14 A6 2F 07 45 DB C8
EA EB 0D 9B 7E AF 79 5D 1B 88 EF 5F C6 B6 E6 76
84 1B 23 34 39 97 50 73 96 A1 D4 E4 13 DB 8D 3C
6E 48 DB 56 69 7B 03 3A 0A D7 27 5E 90 8A FC FC
09 56 93 E8 32 E6 84 64 A9 E9 1C F0 CF B1 91 E0
AF 4B AD 6C C6 F8 F2 4E 86 66 DC D8 4B F8 44 A3
06 02 3D 60 A3 95 F5 55 DE 33 D3 4C 35 81 78 2E
5A B4 93 F6 4C 87 E5 34 1D 85 2F EB 4B E7 42 56
4F 71 B7 DC D5 EF AD 96 DF E9 46 62 97 5B 09 72
3B 10 C5 95 4A 32 BA 23 91 48 A4 80 AC 9F 45 61
7D 98 A7 D3 7A 9E 9E 1E 28 D3 99 0A AD 07 E2 89
0B 01 56 66 BB 8D DE 04 DD BB CE 4B 8C 33 36 F3
69 78 CD AA 64 D5 04 A7 33 EA 9F 82 73 02 0D 82
09 3F 46 F6 24 C4 FA 5E 1F 15 2A 7F A2 98 7D CF
A0 39 06 85 88 9D D3 94 92 77 06 13 8A E5 15 6D
EE 60 40 76 C7 4F 0F 1F 2B D3 AD A4 1E EC 26 2A
D4 2D EA 4B C4 3F 19 EF 59 21 BB 9F CE 70 D2 9C
21 C1 69 E3 9B E9 9C 61 A2 B1 7B 95 E9 1D 6B 3E
7D 54 9A 29 A0 F5 D5 6C ED 33 69 DB 3D 20 DB 5D
2A 76 91 0D CB E9 11 F9 53 8B 4A D9 70 25 F5 13
F8 41 1E B3 01 77 8F A2 9B 9C 00 AE F2 BC CC B3
AA C8 FB A9 17 92 49 EC F3 91 5B 68 8F 98 CE C2
A9 60 D9 67 CF 1F 07 C8 6C A9 D0 6C 2C 02 F4 1D
9F 05 1D 88 5B 3B F8 93 2B E5 9A 41 25 85 02 73
F3 E1 D4 EA 24 2E 41 FA 69 5D 18 C8 73 DE 17 D0
00 E6 C7 03 CF 0F FE 4B 48 B5 E6 46 EA AB 26 58
92 9A 3C E2 66 2D B6 19 CB 02 5B FC 67 CA 2B A4
EA DB 15 35 43 55 EF E9 B1 97 D2 86 0A 9D 57 23
98 2F 31 B9 95 BF DB 76 07 73 32 88 72 7C 24 EA
29 C3 D0 A5 81 F8 9A B4 88 61 23 BF A0 E2 12 D1
B4 94 0D F3 70 BF C7 D0 02 90 E4 8B CD F0 31 15
5C 10 16 5F 33 50 44 7E 2D 5B B6 99 1E 07 43 0E
93 31 EB CF 9F 3F 6A 10 E1 64 CB 2D E4 08 8D 2C
E8 BD 4C ED 23 EB 74 D1 87 13 FB 09 39 57 62 F7
61 A3 6F EC 2D B4 EF 80 35 00 6D 7B 7B 33 20 ED
48 9D E4 4C A8 E2 5D 2C 02 41 02 F7 6C 1C 37 AB
45 AF 5B 78 8F 05 C1 30 E8 16 6F 5A 61 22 4E 02
37 0C 9A CD C9 79 B3 B7 47 BF 4F 22 9C 8C 23 65
5D 8B 59 91 A0 67 7A 4B B3 03 9D B5 45 72 BA 34
61 73 5D 6E C9 32 83 1E 8F 48 D3 F3 E3 F3 DA C9
4B 1D AC 88 AF 7C 08 77 77 6B 87 7D AC 54 DE BB
74 31 5A 32 88 BB 11 74 42 5E 6B AE AD E5 76 7C
0D 0F B0 DF 47 F4 BE E1 20 E3 99 8A 1F 7A 90 27
C1 9F 2F 03 5B 7C 16 96 89 C1 4B F2 74 35 13 3A
05 7D 65 7C BC ED 05 4C D8 E7 5D 7F FE 6C 43 A8
86 7A E4 25 9C 66 73 87 37 0D 97 22 E3 4B 66 36
41 EE 49 2C E3 71 46 6C 97 17 EC 57 B4 D9 42 56
BA D8 57 D8 96 B3 7B 31 DA BA EE 24 56 F5 B9 F0
15 5E 6B B0 9F 79 AB AD 81 6A 08 C9 68 8A E9 7F
86 59 DD 09 31 CD B8 69 B1 25 04 74 C6 7E 69 9C
6B 1E AB B4 B9 18 95 C0 BC 1F 9A B6 48 5D B2 4C
1F AA 5A 3A 74 38 B4 8F B6 D1 BD 02 E8 0A 3A 5C
0D 0A 5C F9 5D BB 42 83 4A EC 70 3C 4E 36 D8 B1
40 62 91 79 C7 04 F7 05 BE F2 32 E4 EF 06 DD 25
40 B1 56 2C E8 90 25 6D 62 29 11 E2 33 31 4D C9
D8 5A 95 44 D6 E7 B2 D5 F5 61 66 6F 1A 40 DC 4B
45 50 E2 73 01 65 CD BD 5A B6 E5 77 13 05 D2 17
FC 6C 72 5B 8E 46 DA 58 DC E1 DE B0 08 7C AE 67
5D 29 A6 E2 B3 99 B3 30 29 F5 F3 ED B2 46 F4 CA
94 E0 B9 94 14 C6 00 B9 61 44 93 E1 29 B1 6A C1
38 FE 49 5F 9D 45 32 4F 73 40 4C 09 08 C9 D8 D9
C4 65 08 D0 2F C5 48 7A 6B 50 1C AD 88 EF 76 7B
CD 96 C3 6E 71 C3 13 6C 3E 9E A5 8E FA 86 C2 42
42 24 B7 0D FF 0C 1C 85 87 B3 9A 4E 9F 9F C3 86
04 B2 CF DD C0 0F 13 E1 6B A8 EE 00 0A 18 3B CC
3E 40 63 4E C4 5B 44 F9 56 4B FA BE 0A 62 DC BB
17 49 84 36 B1 D9 E6 38 3B 06 78 E1 34 8D 32 42
05 65 13 18 9F 33 9B 5C 67 96 17 3C D8 79 FB 01
7B 49 02 FB 78 8A D1 3E FD D2 0B 24 96 D0 D0 9A
BE 91 8A 8F D4 B1 F1 C3 D2 7C 75 E7 34 78 59 F5
BE 41 6A E7 9E 03 22 30 67 41 DD D8 84 6D F9 47
5F 04 B0 EE F2 A1 CC 69 9D 11 54 E2 01 D3 67 93
98 FB 25 52 47 AF 4F AF 9A 6F 29 85 47 64 87 DA
61 AE 1E B1 64 EA AC A6 D3 CE 62 99 96 73 DF FA
AA FC 0E 7F FA 05 50 84 BC F4 57 DC 0F 01 36 10
33 84 50 C6 4B 54 38 C8 20 28 9B 75 4E 93 B7 2E
FE 8A 14 AC C5 DE E6 36 F6 4A 13 06 E8 EF D2 3D
63 46 9E 5F 46 3A 51 0E 6B 53 08 FC C3 7F E6 90
4C 81 03 BC A8 81 EC 88 79 F2 82 F3 C9 22 84 4A
0B 43 94 BA BF 3D EB 75 50 F0 3A 08 C9 A9 2E 04
C4 0E 1C 3A 07 70 DF E6 64 CC 51 ED D0 FB 5E 37
6D EC 10 88 D7 F1 8F 0C 1D A5 2E 22 BB 86 29 5E
E7 C1 A0 CC E0 48 A6 1C 54 46 A9 26 48 72 C0 0C
2C 7C B1 73 6F 12 3F E1 6F 58 58 C6 DC CD B1 19
EA 82 B2 3A 26 8B C9 87 7F 1C 33 6D 78 0D 11 19
3D AA 14 9D 2A 0C 27 E7 5C DF 66 90 A9 3C 9F 47
15 60 4E CF 51 ED F8 2F AD B1 3E FE 33 73 13 E2
4F D5 AA DF 11 75 C2 D7 68 0D 08 4F 0A 4D C8 B1
B6 B6 6E F7 D3 92 4E 5A 38 7A 73 8A 5B 10 C0 22
07 F2 27 63 1D 41 02 BD 94 37 4F 94 50 F8 EB 93
43 47 44 11 B2 33 8D DE 52 8B 85 C8 7D 68 96 CF
7C 6B F7 0E A4 9D 2D F8 1B 9A 85 CD AE 83 9B 40
A9 EF 66 A5 CB F8 EF BF 2F 3E 60 06 05 4C A3 FD
22 47 FD CF EE A4 8E 55 4A 69 E4 64 50 58 A1 15
8B 88 BD CA 0E F1 ED B0 C2 AC F0 34 87 BD 00 B1
EA 94 14 4C 7B 1A 2E 80 F2 05 52 97 70 66 5D 3B
BA 7E D0 BB 95 2D 01 8C 4B 7D D6 7F 85 AC 98 B9
50 EA AF 0A 3D 4D C9 7E 85 04 6D BD 00 C0 1A 9C
01 6A D4 A3 27 8A 3E A3 AF 27 23 25 E8 15 19 5D
45 1C 9F 84 16 6D E0 26 5B 83 AB 11 D9 F4 79 E1
09 B2 06 D5 B0 83 88 E2 8A 30 B4 5E A3 F4 BF 0E
54 4E 22 77 36 28 95 0A F3 B7 86 2D A7 BC 29 EE
FD D4 03 1F EB B5 21 E0 95 6C BF 14 A0 43 CC 70
C4 85 0F 88 23 44 66 AB 05 DB C6 27 41 B1 18 33
5A CB EF 89 2D 68 70 DC E4 F3 8F 52 E7 75 B1 63
34 6E FE 4B A4 D2 B6 C4 9E 0A 7C 46 58 77 CE 5F
5C BF 10 F7 3E B8 EC DB 4D F6 DE 12 4F 40 7E A0
24 61 01 50 E4 41 C4 DC 79 28 0C 05 29 2C 47 0F
15 09 FD 23 22 2C 28 E0 7E 26 48 D9 44 CE 10 FA
35 92 B3 32 C9 00 F8 0A A6 64 F6 66 96 8D C1 75
9C 1A AA 91 56 85 62 BE 00 25 97 58 0A 0E B0 11
C9 D5 33 37 A8 1C 0A EF 59 A7 D7 10 EB A8 87 20
9A 86 C0 B0 1C F6 61 AF F5 F3 2A 69 3B 89 CE 26
6B BF 09 D5 ED 65 35 A3 83 47 0C 61 CB 57 9D 51
15 D8 0F 2D 7E 1E 7A 9D 31 4A CB FE D0 1D 8B 72
6E 67 1C A9 76 05 84 67 91 3A 33 0A CF 96 59 1B
6A DD D9 8A C4 A3 AF AC 7C 82 25 7F D3 A7 3E C4
92 0B E2 9A EB B4 77 C3 DC 5D C3 D6 F0 17 33 60
B8 C1 57 3B F9 7F 3E EC 2B A2 3F B5 29 56 BA A7
B5 B3 42 57 84 0E 9B 6B A0 01 EF A0 D2 59 98 A3
E0 7A 6D BD 9C 80 1F 50 D6 58 55 E1 34 21 22 94
70 05 A7 DF 9F 68 88 55 7F A3 2E 86 BE 23 A3 5A
EF B0 D1 F0 68 88 01 81 07 82 D6 B8 45 40 D8 23
59 A8 BA 1A C4 6E 78 43 E0 28 14 A2 52 60 C6 A7
64 6A 5B F5 1F C8 EF 65 EE 40 2C 2A 4E D1 AF AD
39 63 32 21 F0 AF 96 74 56 13 A6 6E E3 AE 9F 86
A7 F7 3A 68 D9 CD 21 65 E7 F5 E2 E3 F0 6E 1F 27
D4 E0 E6 BF C1 37 AC E9 3B 54 42 1D 41 12 1B 55
6D DE F6 C5 39 52 21 F6 40 67 03 F3 FA 92 E5 6E
4A C6 00 BA D6 71 82 B9 F1 B8 A5 61 61 2E B5 C7
C8 8B 78 9F D1 4C BA 66 AC C6 35 5B 07 9B 68 84
4C C9 8B 70 7B 81 EA 83 18 CD 78 3E 76 FF E7 D6
2E B9 6C 79 AE 30 01 6B BD 05 7C 97 ED 67 94 C8
3B 93 A8 58 35 32 7E 88 92 D4 D8 17 0B 24 C5 56
82 7A F2 F5 E9 09 C0 44 83 9B 8D 6A 42 56 D5 12
BB EE 3D D8 ED 66 A3 49 0E 4C 61 47 A4 3F DD 15
78 B8 C0 1D 9E B8 06 40 CA 1B B0 8D 27 71 0B 6E
50 25 EA 53 1A 2E 99 41 26 6D 78 91 7C DD EF BB
59 D3 48 62 2B 9D A8 2A 5D FC 60 EF 87 72 B8 FC
7C E4 F1 81 BA D3 F0 F3 37 2E 5B 58 5E DD 0F 84
EE DD 76 54 95 12 EB 2C DF 5F E7 F0 07 76 46 E3
D9 96 EB 30 04 C3 57 20 B3 0E F8 B0 0C 39 5C 9D
AD 4E D9 CC 2C 2C 31 BD 6A E4 92 DA 55 69 F5 43
7F 96 FC 23 89 40 F5 D8 07 13 72 6B 03 38 CC 45
D3 9B D4 61 32 79 25 91 76 AE 93 31 9D 3D BC 9A
07 53 EB 34 A4 39 AC 3F 5E 49 15 CC 19 A5 2A DA
F7 2E 3B 06 79 B7 B3 87 E7 5A 2A 55 7F 8D 4C A2
0D FB 88 AA FB 9D 34 1E 8B 6F 4C 6F 25 1B F8 24
FC 81 56 B6 70 99 41 4C FF 13 EB D9 C5 7F C6 70
97 B9 2F CC F4 42 86 0C 3A 21 56 C3 4C 21 3C F9
A5 3A 50 96 BD E6 7D 6D B1 5B FD E7 0C A5 EC A3
31 53 DB EE 41 25 F8 F8 B6 02 D7 5C FE 49 03 95
D5 EE 7D 85 46 1D 6F 85 5A A9 1A 33 F5 EA 83 D7
BE 48 65 22 F4 0C E2 AE 4B 97 33 03 C0 13 2A 23
C8 2B A2 C0 CD 69 7F AD 50 45 8A 3A 2F 44 38 C8
C1 A4 DF 61 7A 75 BE F6 84 37 B1 26 4F C1 E0 30
EB AD DE 9E 75 B8 2D 71 AA D7 40 D7 64 3A 12 C3
DD E7 30 1F 3B 9B 86 AE F0 DB FD EC 61 64 B6 4E
6D 53 76 D7 0B 32 F4 2A 00 E7 E2 5E 4E 9A 2C 84
4F 48 A5 FB 94 FE B0 59 0B E2 77 3D 71 22 EA F9
5A 73 1B 38 98 80 2A 41 6D 8F 62 E8 13 90 39 EB
38 73 19 D5 EB CE ED 56 2D A9 E6 A2 6A 62 4D 49
A2 BF 29 E0 B9 A6 35 86 F3 D8 71 B5 96 EC 53 CC
53 90 2E D6 4F 2F 4D 51 97 A2 C2 5D C7 EC 88 E8
C2 6A 5F 01 8D 56 0C 4E 5E 8C 96 FC 9E EE D1 FF
89 DD 1E 72 D4 AE AA 7C C6 77 DF 8C 63 DB 11 6B
AB 25 B0 CC 0D C3 F4 28 0A 4D F9 C3 C5 55 10 D3
FE CA 74 07 47 74 3B 60 75 16 22 8B AF C1 C9 30
BE BE 13 B3 A8 94 D5 32 81 A5 65 77 08 B8 65 BD
BF 73 6C 1C C2 F4 27 41 30 8B 2E 2F 3D 0B 44 71
32 AA 6A 4B C3 B5 CE B3 0B 04 AB 4A CB 82 A6 5D
6E FE 07 95 C1 4A 63 49 22 D8 FB 3C 79 CD A6 19
76 F9 F2 4F 26 C1 90 DD E0 8E C5 D0 74 8E 60 3A
3A E2 4F F1 52 CB 0B 53 B7 C6 DE 3D 11 40 E6 F8
35 A6 D4 74 93 F9 E3 BB 18 8B 3C 57 3A 7B 49 B5
1E 76 18 44 5F E5 5F 67 08 DC 58 97 F5 99 A7 6A
A9 D8 F1 BC A6 0B 59 18 0C 3F 52 85 E5 C8 68 18
2C D9 84 80 D0 38 1F E4 4E 1E 0A 4F 85 B2 E0 53
39 CA 1D 58 1F 8E 35 41 B1 5A 38 5C F4 11 6E 7D
2D 75 81 4E 6F 3B 65 2E D7 9E 76 55 8A 69 25 90
BD 4B 7C 74 D1 43 22 5A 42 C6 70 D2 55 0F 02 FF
25 27 59 41 64 3E 7B 90 5C 32 B8 D7 47 08 E7 EB
1E 45 51 E8 FE BF BC DD BB 8B 49 B1 73 D3 91 34
C7 2B AD 49 0E 9C 58 F5 24 AF C8 2B 16 3B AA DF
52 2F A6 BD 06 2E B5 3F 95 9E 36 A8 78 12 DD BA
17 76 19 24 84 2A C2 F0 E8 36 64 47 A6 42 B7 58
AD 4C AC 32 FE 00 52 BC 38 C1 8C BD A2 F4 56 5F
50 35 02 52 0C BB 79 50 E3 FF 3C 65 D1 E9 9C CC
F5 65 CE 6E DF 8D 9A 67 BE BC 8D 45 1B 45 47 98
FB EE 52 0D D2 11 26 C1 03 DF B7 8F 66 AC AC 73
F8 7E 92 53 F5 EE A5 C1 06 FC E2 5C 5E 2B 79 6F
56 F6 C5 A5 64 49 F4 05 66 D8 CD 21 FD 57 8D C9
91 10 43 5A FE C2 9B 26 68 4B 23 22 87 87 20 22
4F 38 7C F7 30 0A B3 0F 46 C7 E5 B3 9D B5 06 13
3F F7 FA 9C 4C 9B 1D CD 61 51 2F 6D D3 D3 B5 9E
A7 3B 9E 5B F6 4A 7E F1 37 B5 88 21 F1 73 D1 0E
B3 7F 60 9C A9 D7 FB 16 FE 0E E3 0D A0 E8 D3 62
8C A1 AC AB AA E2 86 A8 94 03 3F 52 A4 F5 92 C7
27 68 C1 5F 40 25 1E F7 F8 15 E5 9C E9 17 33 E5
89 FC A2 7A AE 01 BB 9D D4 12 A2 0E 35 7A 49 E9
64 18 E3 C7 FA EB D7 45 5B 91 F1 62 D8 3D B6 CC
BC 34 6B 34 4C 6D D3 76 8B 71 2B 66 35 16 78 CB
AD 6D DC 3C 5B B5 30 8B 64 73 69 43 E2 56 A3 A3
5A AD FB 8A 1C 27 53 D3 61 62 64 15 9C F5 7A AC
43 B1 B1 BA B3 E7 50 BE 38 EE 3F 16 D3 04 77 27
21 39 AF CB 32 2A 7F 53 1C 9E 98 5D 1E 5C E5 C6
19 25 05 94 65 48 F4 98 30 92 F2 13 8B 41 99 C4
3E C1 4D 78 79 91 18 06 00 1C AC D4 30 C0 8B 2B
42 14 55 58 DA 1A 5A AE 85 D4 66 9E 3D FE CD F3
AE 08 82 99 D3 46 AA 41 D8 CA 02 47 18 4A C8 52
E9 BD CA E0 43 C4 8D A0 A7 3F 89 26 67 36 98 50
D3 9D BF 7A 68 F4 54 2A 0E FA 81 98 78 A0 F7 9C
F1 DA E6 24 B2 A2 31 78 0F 9C 75 37 E7 DB 4E 28
FF C3 58 67 6D 66 B1 9E F7 C3 8A 8F 08 DF 23 6D
EB 20 CC 1D E3 95 EB BF 3A 1D 2F 7D 59 35 BF A6
9F CE 4A 89 51 E5 3A 39 E9 C1 BC FA FC A9 CA FE
5E 3E 4A B2 BE 55 86 73 7A 3F DE E7 E1 66 31 55
11 5B 35 C4 D6 7E 88 CF AE A6 B6 F9 1B 8E 1F 6B
C8 CB 64 CC D5 E1 2B D5 12 6F 10 38 94 20 A1 72
04 D1 4F CF 01 63 92 7C DA 09 04 23 74 44 A1 2F
0E 83 88 80 DD 71 B3 49 10 49 ED 96 97 4D C3 55
32 59 50 83 D9 1D AC 0A 62 67 BA 35 F2 3E E2 A0
26 7B EC 14 BF 6E F3 53 DF 32 99 78 B1 D2 C1 AE
B3 F3 9C B1 24 45 D3 59 6F 78 D8 99 06 30 E4 44
58 3B EB D0 AD CC 10 40 8D F7 32 1F BF 92 0A BA
56 00 57 96 05 BF 5B 40 7D A1 2D 2F 8E E2 F4 73
8C E5 64 AE 93 64 4A AD 01 16 75 09 77 B2 A6 7B
BB 25 11 DB 66 DC 4D C7 3D 78 CC FE 9D 48 D6 B4
D6 0F 3D 27 C6 D9 FE 50 49 24 1C 41 F1 2C C8 42
F6 29 9A 8F 24 FF 26 16 41 32 C3 C4 8C D2 66 8D
D5 C0 3A 92 E9 05 EA B8 9F 1B 55 E0 3E C1 04 F0
3F 0B 1E 0A 83 7D D0 CF 1F DA 38 DA 70 46 5C A7
4F 53 F8 8A 83 9B B0 B5 C9 3D 84 CE 65 6C ED 7F
C5 B6 69 34 38 F7 B0 D8 B7 94 92 2F 19 53 BD E9
48 58 51 0A FA 7D BF CC 0B 29 6C 69 3A 5A CB 20
F4 E4 48 02 EC 0B E0 C8 42 DE 88 91 71 A8 45 20
A8 73 4C E0 22 D0 B0 56 85 AC CF B8 51 AE F3 90
32 62 E3 07 90 47 47 F2 19 60 60 C5 FA CB 23 EA
EB 10 BD 5E 5F 8E B0 91 33 E2 CD ED D2 FA 51 53
1E A3 68 10 72 91 D6 DF 14 B1 7F C6 78 59 AD 46
63 78 27 9E AA E8 86 00 73 9F 1D 8C C7 69 32 F5
65 09 F9 90 89 3B AA AC 6C 7C E3 B9 C6 74 13 22
01 CF 83 66 64 AA FC 69 2F BF 9C 2C 1E CA 7F 0E
CB D5 28 1E 4E ED CC 2C 62 04 03 F2 A3 F4 E6 A3
3D 5C 7E 64 B6 45 29 48 AE 96 80 C9 82 82 D5 93
B8 38 AF 6D 79 2F F7 C8 A6 E8 23 FA 3E 10 AB 68
C6 17 54 04 8F 33 95 5A 3B 02 5F D6 E0 88 82 0B
E1 86 D8 60 FD 1E 6B D4 30 30 0D 49 15 09 4B 16
73 AC 2E A1 C6 11 59 C0 63 A6 7E 1E 35 64 65 DD
53 39 67 0F 37 D0 F4 31 67 1D 6C 1D DE B0 E4 8D
11 ED B3 02 33 65 52 7F 61 DC 1B 29 09 16 F0 27
C2 E7 D0 A5 07 02 B2 01 83 47 6C 23 77 2B CC EF
CD 74 2C 89 95 F2 49 6B 21 7E F6 E0 49 15 9E 85
A4 A2 D5 FB 78 55 37 0D 30 0F 2B 76 7D 08 8E 7E
20 38 4B 53 A7 6C 90 1E 71 9F F4 76 BD 80 C4 91
75 E8 E2 78 0D 40 24 40 B7 1C BF 3D 15 A2 47 88
25 5F F5 69 14 29 CC DD 0A B4 07 4B 79 1A 46 9F
51 05 E4 BA C4 46 8C 0C 6A FD FC C6 7A 0A 97 8F
02 5D 41 83 C1 E1 58 47 5A C8 DB 28 D7 6D 72 0C
03 DF D0 AB 6C A6 16 06 D7 EA 8A 06 44 51 1B B8
93 6F 5B B3 10 F2 0A 2E C8 F0 2F 48 8B 06 FD C6
A3 B0 E3 66 48 CA 53 DA A0 3C 4F 4B F5 0F 90 1C
9C A8 72 00 C9 11 D7 AD 09 20 21 46 4F 92 80 D1
10 31 62 77 33 68 A5 9F DD 4A DF 39 3C C2 48 31
AE 8E B0 DA C0 10 1F 5F D4 AA F4 21 71 81 85 1D
05 A7 7D E9 08 B3 6B AA 99 8C E4 F3 0D 90 F0 F1
8B 74 59 60 9B 87 4E 75 9E CA B8 57 45 98 70 0B
C3 EF 4C F2 D5 59 B7 13 B1 E4 26 EF 6A F4 E5 B5
71 89 E5 D8 F5 E1 82 2A 0E 15 E4 31 71 78 AA FB
0E D7 40 D7 91 AC D5 27 DD E5 0C 16 6A B1 E7 0F
07 30 8F 9C 38 2A C9 91 D4 35 E5 41 6F 3B C5 FB
05 A2 9F C6 66 98 2E 49 04 4F 4F C3 22 73 61 3E
EA 8D 52 6E 5D 1F B4 87 69 65 C5 FD 98 A8 06 22
26 01 AC F1 38 47 18 C0 6B DC 97 F9 67 66 3C 5D
84 5C E1 72 F3 11 48 60 D3 2D 1C A9 74 31 8B AB
E9 F3 91 9D 01 C1 EF 50 08 BA 50 F4 0E 64 A5 F2
2A A1 55 4E F9 92 EA E4 66 AE 70 3F D8 54 63 54
85 2F D7 C0 9D EE ED 74 5D 4A BE C4 F2 56 D6 BC
3D F9 A9 9C 3E 17 C1 AC 01 AC E9 39 E5 79 4E EA
BA 89 4F 01 C7 B2 45 37 93 EB EC 50 5F DF B0 73
D3 13 87 CB C1 A6 65 20 70 1E E8 2E AF A8 68 64
EC 38 6D 07 28 9B 02 06 4F 79 ED EC 64 3C 4A 26
21 E2 B9 22 B2 21 15 6C 8A 39 FC 87 EF D2 A2 F7
39 3B 8E BD C9 E6 86 71 7E AA 01 0F 40 5D B2 34
1B 91 14 11 E2 0D EC D6 32 D7 4F D3 B6 6B 8B AE
FA 2A AA 2D 3F 29 BE 75 67 1C AA F2 39 43 FF 8B
79 46 2E 81 C3 32 2C 77 A8 31 C9 09 E9 52 D8 4D
14 B5 D3 D4 79 8A 21 14 24 84 5C BD 2A B0 05 11
36 D9 30 BE 67 FA 39 79 FB 6F 80 20 81 F3 12 32
BD B7 63 8F 6E BC F9 70 FB 00 76 F8 8F 7F A3 CF
73 11 77 04 13 9C C4 4B 02 51 5A 28 9F 6F 72 06
A2 C3 AE 2E 3C 4C A3 7F 65 58 B9 6B AC D5 D9 6D
54 24 FD 54 F5 DA AE 77 EF D3 60 F5 07 B5 0C D7
C4 3D 9C 2F 91 23 F0 F0 A8 8A 5B 92 93 AD D3 82
36 6C EF E0 7C 17 91 43 9A 7C 78 8A B0 03 E3 A0
15 FA FD E9 61 E2 6F 3C 24 84 24 CD 23 9E 4C 4E
A6 23 ED 66 76 DF 7C 9E E7 C8 02 F5 1F 1D 0C E4
5F 0D A9 06 FB D8 4A 55 8C BB 46 D6 FF 0B 3C 7E
13 81 91 22 D8 08 58 EC 56 7B 48 27 59 85 E5 28
6C 85 4A 6D 96 3D 83 D6 A2 73 E9 BA 61 60 41 39
F5 EA A1 BC 91 36 E4 FA DF 8E E0 D9 1C 33 37 45
59 68 FF 42 BF 43 CB CD 7E 4B B7 11 34 17 2F 5C
0E 2F 34 A8 57 A7 7C 20 95 BC C3 F8 B5 2E 52 24
51 E5 4B BA 70 7E E0 51 21 49 AF AD B6 EC 5F 42
05 D7 61 5A 02 43 D4 C5 24 0A 15 C7 C7 7D 43 92
A5 FC 1A 97 8D 45 7F 1F 5D 0C 80 1C 13 7E BD 6E
FE 25 FC C6 38 AE 9E 59 82 A2 6F 9F BF 3D 65 C8
A7 B6 0D 46 8A 38 62 CC AD 7A 3C AA D9 8C 31 7E
97 20 F0 5E 96 31 4B 24 CC 4F 97 AF B3 0C 4E 6E
C8 C3 CF 10 78 38 F7 29 BD F6 D7 86 F5 55 1B 86
00 51 D0 4C C9 EF B4 1F A5 60 1A AE 3E 87 E4 F3
30 62 D7 97 6A A0 26 B9 AE 76 CD 1E E7 92 4E 3C
F8 78 3E 9E E5 7A 28 9D 31 6B 2D 25 D6 79 EE F8
BE FF 5B 44 A6 30 EC B0 64 66 02 92 C2 E1 13 B9
0C 67 85 DB 31 CC F7 9F CA 60 DC 39 74 EA 4B EF
F5 9A D8 C3 71 85 72 1D CA C6 43 5F A7 94 3D E0
9D FA 15 54 41 28 D2 C8 15 2B 38 C8 91 B7 B3 C2
EA 6F 71 4E 5D A7 2F 5C 88 1E 69 F2 4B 9F 82 C2
68 0C 41 0D F3 59 E1 15 5D 58 B5 89 2F 4E 26 C9
27 BF AC 92 7A 7E 22 53 31 FC 13 02 50 D5 F6 00
51 05 9A C2 4F FE B7 B5 29 B8 53 A0 5D 1C 0B 33
D9 47 D1 B0 EF 90 90 36 A4 E3 2B 20 31 B6 5A 5E
78 F3 01 B3 AC CE AC 57 B6 47 46 13 FD A9 C2 DB
EC 48 EF 1E 02 14 4F 0C B3 8D B9 05 66 E2 3B D0
EC F4 4B 99 2C B4 02 2A 5E 17 4C 14 BE 3B EF CD
AF 75 C3 7A 2D F9 33 3C D3 78 71 8F B3 BB 97 48
D9 0C 24 17 14 37 40 C8 8A 5B 3D 64 B1 60 A0 83
95 25 18 9C 42 10 6D 94 08 E6 78 CD C7 CB F9 1B
64 8A 7D 37 6E 35 D0 FB A6 12 65 C7 97 16 A8 3B
D2 55 1D 4D 29 D4 D6 05 9B 9C 2E F1 5E 28 41 9F
8A 81 ED 54 0F 9C 6B A1 0B EA D1 2E 44 DF B1 C6
5E FB 8D E9 C5 FF 25 0A F3 A8 63 C4 54 4A E2 8F
54 4F 3F A0 10 3C 07 5B 57 7D AD 00 98 C9 EF F2
D2 6C 4A 8F EA 25 31 EF 52 E5 C5 1F D7 66 7C DC
05 7E 5D 09 95 94 4C EB 52 1E 30 68 5D 03 45 BE
69 E8 47 AE 0D 08 5A 91 32 3F 1B 68 72 81 B3 F1
0E 7E BD 95 21 9E E6 95 52 C9 A0 1A 68 CA EE 6B
5A 33 A2 81 25 D6 79 7A C3 A1 D6 5F 2D DB 3F A1
8E B4 5D 28 A7 A6 BC 70 C8 C4 6E C8 37 D1 48 B5
D4 00 27 FE 38 4B 88 17 C9 BE 2B 45 69 50 56 FA
89 E8 AE A7 E1 6F 20 C5 FA 96 FF 21 AE 57 61 D0
7D 39 C2 FD C4 BF 78 CB 84 C3 AB 7E 7B 4F 5D 30
24 93 B5 95 8A 7C 3D FD 3B 32 09 76 8C 80 4B 3D
55 FF FE 1A 65 EB BA B3 EE 28 7D 30 A9 C2 CF 12
4B 0E 98 7F 9D CB 84 AB 29 1C 8E 9C 7C E8 E4 98
A7 9F 08 E3 CC 92 06 68 C1 15 47 4F 13 7A B5 56
70 37 F5 08 DE 24 B8 0E AA 6C 8E EF 5B 46 52 F2
27 FE 68 D8 7F F2 07 B0 59 9D 1C 1F 9D 9E FE 8E
51 A4 33 56 39 47 CF B1 C0 69 CB F4 26 8B 95 20
7E 44 91 C1 B4 DB 35 E7 91 CF E3 6A 38 D3 F2 07
75 28 BC 9E C4 00 8B 57 10 47 DB 15 36 0D 67 F9
03 4E 75 A3 07 61 8B 4A A9 A8 3B A6 8D 53 E3 8C
F5 7B DE EF 4D 2B 82 2E AC 79 82 0C F3 D6 09 C7
B6 8D EE 90 67 4F E5 99 0C 29 16 35 2F EA AE C2
B7 F6 B8 52 28 A9 06 3D F0 6E BA 72 0B 00 87 2D
DE 3A 5E 72 6F CC C1 F5 7C ED 79 E2 D6 18 68 F6
9F 5B 61 96 02 96 E5 53 E6 B3 84 ED A0 99 7D 58
14 13 74 B8 14 4C AB 4B 69 51 90 BF 4B 80 D0 74
F2 5C 52 5A 05 3A 16 61 23 66 63 E9 1F A4 0A FF
86 A0 F0 C7 8B 78 2C 5B 27 7A 91 CF 75 3C 08 68
53 02 D2 C8 A6 E0 5A 30 19 FA 58 6D 7B F1 EA C3
1B 81 8F 39 0D 5F F4 BB 6C 08 C3 69 D8 E6 35 45
31 3B 5C 29 45 8E D3 B5 68 B7 96 E1 0C 91 B5 C5
00 FA 6E D7 D4 5F CE CC 37 EA 46 C6 A1 DA 37 2F
44 9B 2A F2 63 95 B0 48 2F CE 6A D9 1E AA 5A 3E
97 0E D0 22 09 40 C5 4B B4 3F 86 D4 19 85 5D 25
DE 7B CA 30 A1 00 55 77 BA BB 6A 62 C1 01 0A FA
FE 35 27 80 FF CF 26 D7 0F 23 C9 F4 5F F9 3A C8
1A 41 CE 8F 93 18 16 D0 B1 E1 7F E9 F3 8C B6 4D
EA B3 EA A9 32 0E 12 5D C6 16 CB A2 79 8F C5 15
72 36 2E 1B B0 2C EC F9 60 97 17 CD 0B E6 CC 88
6E 8B 8E 6D D5 05 57 1D 5D 4D 3B 2C F6 D5 FB 0F
A1 85 22 90 FD EE 29 BF 13 19 61 F3 1F 21 FB A9
CE C6 BD 88 95 40 61 B2 00 58 71 30 90 AB D7 1A
56 BE 38 63 F1 E5 02 19 4E 31 4E EB 42 C5 2C 4F
AF 8A 6E F6 62 A5 67 89 8C 89 63 8A 4A 6B F9 25
EB 8C 1A D0 61 92 68 46 DB 09 0E D1 9C BF 1D 56
54 ED BC DD 4F 81 87 F6 4A 28 A7 D1 25 A6 77 99
BB 42 1D AC 3C 0B EA 64 0B FA A5 B3 58 8F 4E E9
29 70 B6 6C 7F 30 DB 6E 23 DE BC 62 82 38 61 9A
69 E8 F9 0B 00 D9 15 A9 36 7A D0 C2 A6 C1 83 F9
53 D5 F9 F2 96 4A E7 E7 FF 9D D5 4D 41 39 8E 4C
2F 23 7E 2C C7 90 F1 64 EF CA 40 4F E1 16 8D 5D
29 A2 AD 1D 60 07 42 37 0D 8A 2F DD 61 78 A6 EC
8D CE 9D 77 5F 34 14 48 6A 68 9E 9A 52 21 5B F8
FF EA B5 E7 18 BA C5 4C 51 DF 21 0C 90 E0 AE DF
25 75 22 CB 8F 76 85 7E 56 07 47 17 7D 47 DB 82
FD 63 1E 29 40 BD 86 99 E7 71 90 A3 77 CC 64 9E
FB 09 F7 64 A1 9E D9 FD 60 DF A5 15 10 46 39 47
4E 39 00 49 62 9B 5D 4D C2 5F 3E 63 6D 5F 94 99
F3 C2 7A 03 7B AA E3 35 A1 1C 11 BA 7D EE 0A B4
66 4A B4 D6 7D 37 AD A9 6B AA 36 D9 FE 45 78 08
E6 08 20 7D E5 7E 20 33 C7 7B 9C B4 51 FA D2 35
7F 66 E4 50 51 D3 82 C0 7D 5F AD 5E EA A3 05 2D
2B 3A D8 35 65 D4 12 C5 B0 D5 7E 98 1D 0D 45 31
D1 85 08 EE 9F B1 D7 0A E3 3F 9C 3A 99 3E EC 8B
71 5E BA 18 F0 91 09 37 BF FE F6 BE F9 A0 C3 57
65 B1 C9 30 FC 6E 7D 2A 40 34 1B DE 86 52 E5 90
61 C9 6A 23 5D ED D5 38 DE AD 17 7E F7 B0 C4 32
43 EE 16 E5 5C 99 68 40 B6 EA 2A DE 12 14 19 4F
2A F1 68 03 4F 01 D9 65 7C C7 C3 79 B6 BF 75 EF
CF 13 FE 07 63 B4 0C FC BA 43 D6 BC B1 D6 EA F5
95 E8 AA 3B 42 AE 7B B7 71 71 32 BD 67 BB 95 98
6D A3 44 E0 60 C8 7D 78 92 9E 9C 71 17 FC 11 EF
C4 72 13 30 55 31 76 81 1B 0E 66 AE 7E E2 DD D6
F0 B1 74 6E E3 42 00 DA 12 0A 2F 3D 08 ED 11 0C
D2 49 6A 43 2A BC 44 E2 D7 87 70 37 80 61 CB 06
72 F7 56 10 47 7B 0D 89 35 07 A8 7C DC 40 52 0A
0B 39 9C 97 81 CB F7 94 5B 55 AA 61 5A 43 7D E7
C7 4D 38 8F 08 32 81 74 75 9F 03 F3 6A DD 86 28
20 AB 2F EA 5C A2 AC 2B EF 29 BA 14 C8 0D 02 BA
39 66 97 9B 8C 78 5C F2 DB 78 27 C2 6A 2A CC 88
1A 4A AC 38 DC 37 91 96 EF 50 6C CD F7 68 AE 61
4C 14 95 66 DE 49 99 71 94 D0 99 5E 92 5D 52 1B
EA 17 EE D6 47 1D C8 7E B3 87 60 B0 87 2F FB E3
15 DD B5 4F 39 A6 ED 0B 8B 27 7F 1E 0E 21 86 6F
CF 60 B8 95 D0 49 AD 5E FD 5D F0 1D C1 DF E7 52
4D 2B 52 FC C9 C3 F7 EB 83 B4 D2 97 7D FC AF 11
53 70 F8 90 0D D2 0F 88 66 9A 4F 7B 55 2A 7B E8
EA 79 11 4E 29 91 2F A3 D3 2D 32 CF 60 41 A2 C4
C5 34 27 F2 E7 B0 3C 84 2C 9B 29 1C C5 FA 4F 24
24 30 F4 9B 35 AE 66 17 67 70 EF 32 1A 8F 3F 1E
92 5E 15 15 40 54 41 71 8D 6E 9D C1 4C E3 7E 4D
C3 33 9C 70 7A F2 5D F4 26 3A D2 B3 9B E3 25 00
ED CC AA 6E 0D 44 91 DA 6E CE 86 5F 45 75 E3 90
0D 70 77 0A B7 EC 87 70 0D 49 BA 6F 76 7C 64 C8
3C 5B 4B D7 B7 39 AE 92 62 A3 3D 47 44 83 94 63
34 AE 1B EB 51 29 C8 17 D9 4C E9 40 77 42 81 A6
18 0C 49 30 28 8F 28 0D 76 B3 0A 4F CA 12 E8 84
95 0F D7 27 49 24 2E 3D EF 7F 5B 8E 48 D3 AE 17
6E 87 C7 09 A6 51 7C E1 AD FC 28 CE FB 0C CA 1C
06 F6 BC 10 1F 71 30 B5 CD A9 BD C2 21 58 09 32
63 45 CA 59 5E F4 3B 25 44 8E 1B B3 7E 73 E7 BD
49 65 18 17 A2 FF 65 B5 0B FF 69 5E EB 7A 96 19
4F 44 FB 18 FF 23 D9 78 15 8F 47 4D 4C 9E C1 34
E9 24 E9 DD 8C CF 1D 0C CE 8C CB 46 3F 4F 63 C2
61 AB 61 F7 94 1D A9 E4 A0 C0 19 D5 8F 45 E7 37
A9 3D C7 47 94 CF 84 B3 83 77 20 0D 16 59 BE A7
95 8D AA D3 15 31 4D 0B CC 73 77 03 7C F3 D9 09
A1 7C CA EA F2 A2 30 87 03 9B E6 29 6D 3A E9 AE
8F 72 00 F9 CE 74 C5 55 2C 1C 4C 28 3C C4 FA 7D
B8 43 88 0E 3E 98 5C B5 81 9C 2F AD E0 CB DD D4
DB 45 28 A6 90 E8 13 9D 5C DA F1 4C BB 67 15 EF
9C 9B EA 7E 01 48 AE F2 84 00 00 6C C4 13 67 61
A6 C2 20 2A 61 14 41 38 57 3A D1 94 DD 7B B8 54
84 77 04 06 BF 88 D7 C1 D3 CA 9F 03 E8 91 C3 02
F3 F9 73 E9 E7 79 31 BD 25 3A 1E DD 32 82 64 36
02 EA A2 69 2C 9A A4 2F 43 13 08 9A B1 24 91 86
15 2D D4 5A 69 65 B5 23 AF AF FB 9D DB 44 C3 E7
83 44 08 B1 93 9C 7D 0D 75 8F 45 FD 06 99 79 60
61 0F 9A A1 E4 60 77 D4 2F 76 66 FA 8B A6 81 8E
* End 138167944 2957739639

View File

@ -1,118 +1,124 @@
Version 4.1
SHEET 1 1124 804
WIRE -384 -720 -544 -720
WIRE -16 -720 -304 -720
Version 4
SHEET 1 1144 804
WIRE -96 -720 -256 -720
WIRE 272 -720 -16 -720
WIRE -1248 -560 -1600 -560
WIRE -992 -560 -1168 -560
WIRE -880 -560 -992 -560
WIRE -800 -560 -880 -560
WIRE -544 -560 -544 -720
WIRE -544 -560 -800 -560
WIRE -400 -560 -544 -560
WIRE -144 -560 -320 -560
WIRE -16 -560 -16 -720
WIRE -16 -560 -64 -560
WIRE 80 -560 -16 -560
WIRE 192 -560 80 -560
WIRE 288 -560 192 -560
WIRE 400 -560 288 -560
WIRE 752 -560 400 -560
WIRE -928 -560 -1168 -560
WIRE -688 -560 -928 -560
WIRE -608 -560 -688 -560
WIRE -528 -560 -608 -560
WIRE -256 -560 -256 -720
WIRE -256 -560 -528 -560
WIRE -112 -560 -256 -560
WIRE 144 -560 -32 -560
WIRE 272 -560 272 -720
WIRE 272 -560 224 -560
WIRE 304 -560 272 -560
WIRE 432 -560 304 -560
WIRE 512 -560 432 -560
WIRE 592 -560 512 -560
WIRE 752 -560 592 -560
WIRE -688 -528 -688 -560
WIRE -608 -528 -608 -560
WIRE -528 -528 -528 -560
WIRE 432 -528 432 -560
WIRE 512 -528 512 -560
WIRE 592 -528 592 -560
WIRE -1600 -496 -1600 -560
WIRE -1600 -496 -1680 -496
WIRE -1680 -480 -1680 -496
WIRE -880 -464 -880 -560
WIRE 80 -448 80 -560
WIRE 192 -448 192 -560
WIRE 288 -448 288 -560
WIRE 400 -448 400 -560
WIRE -800 -432 -800 -560
WIRE -544 -432 -544 -560
WIRE -384 -432 -544 -432
WIRE -16 -432 -16 -560
WIRE -16 -432 -320 -432
WIRE -1600 -320 -1600 -496
WIRE -880 -320 -880 -336
WIRE -800 -320 -800 -368
WIRE -1648 -256 -1840 -256
WIRE -1840 -240 -1840 -256
WIRE -1600 -208 -1600 -240
WIRE 752 -208 752 -560
WIRE -1600 -176 -1600 -208
WIRE 240 -144 208 -144
WIRE 512 -144 304 -144
WIRE 704 -128 592 -128
WIRE 208 -80 208 -144
WIRE 208 -80 96 -80
WIRE 352 -80 208 -80
WIRE 512 -80 512 -144
WIRE 512 -80 480 -80
WIRE 656 -80 512 -80
WIRE -1600 -64 -1600 -96
WIRE 656 -64 656 -80
WIRE 352 -16 320 -16
WIRE 592 -16 592 -128
WIRE 592 -16 480 -16
WIRE 320 0 320 -16
WIRE 352 48 96 48
WIRE 656 48 656 0
WIRE 656 48 480 48
WIRE 752 48 752 -112
WIRE 752 48 656 48
WIRE 976 48 752 48
WIRE -1600 80 -1600 16
WIRE -1600 80 -1728 80
WIRE -1600 96 -1600 80
WIRE 752 96 752 48
WIRE -1728 128 -1728 80
WIRE 976 128 976 48
WIRE 96 144 96 48
WIRE -1600 192 -1600 176
WIRE 752 208 752 176
WIRE 848 208 752 208
WIRE 752 240 752 208
WIRE 848 256 848 208
WIRE -1728 272 -1728 192
WIRE 752 384 752 320
WIRE 848 384 848 320
WIRE 976 384 976 192
FLAG 752 384 0
FLAG -1600 272 0
FLAG 96 224 0
WIRE -256 -432 -256 -560
WIRE -96 -432 -256 -432
WIRE 272 -432 272 -560
WIRE 272 -432 -32 -432
WIRE -688 -416 -688 -432
WIRE -608 -416 -608 -432
WIRE -528 -416 -528 -432
WIRE 432 -416 432 -432
WIRE 512 -416 512 -432
WIRE 592 -416 592 -432
WIRE -1600 -400 -1600 -496
WIRE -1600 -288 -1600 -320
WIRE -1600 -112 -1600 -208
WIRE -1600 -64 -1600 -112
WIRE -1600 -64 -1728 -64
WIRE -1600 -48 -1600 -64
WIRE -1728 -16 -1728 -64
WIRE 752 -16 752 -560
WIRE -1600 48 -1600 32
WIRE 240 48 208 48
WIRE 512 48 304 48
WIRE 704 64 592 64
WIRE 208 112 208 48
WIRE 208 112 96 112
WIRE 352 112 208 112
WIRE 512 112 512 48
WIRE 512 112 480 112
WIRE 656 112 512 112
WIRE -1728 128 -1728 48
WIRE 656 128 656 112
WIRE 352 176 320 176
WIRE 592 176 592 64
WIRE 592 176 480 176
WIRE 320 192 320 176
WIRE 352 240 96 240
WIRE 656 240 656 192
WIRE 656 240 480 240
WIRE 752 240 752 80
WIRE 752 240 656 240
WIRE 976 240 752 240
WIRE 752 288 752 240
WIRE 96 336 96 240
WIRE 976 336 976 240
WIRE 752 400 752 368
WIRE 848 400 752 400
WIRE 752 432 752 400
WIRE 848 448 848 400
WIRE 752 576 752 512
WIRE 848 576 848 512
WIRE 976 576 976 400
FLAG 752 576 0
FLAG -1600 128 0
FLAG 96 416 0
FLAG -1600 -560 vbus
FLAG -992 -560 vmid
FLAG 848 384 0
FLAG -928 -560 vmid
FLAG 848 576 0
FLAG -1680 -416 0
FLAG -1600 -208 vdrv
FLAG -1728 272 0
FLAG 320 0 0
FLAG 96 -80 cp
FLAG 96 0 0
FLAG 80 -320 0
FLAG 192 -320 0
FLAG 288 -320 0
FLAG 976 384 0
FLAG -800 -320 0
FLAG 400 -320 0
FLAG -880 -320 0
FLAG -1648 -304 0
FLAG -1840 -160 0
SYMBOL nmos 704 -208 R0
FLAG -1600 -112 vdrv
FLAG -1728 128 0
FLAG 320 192 0
FLAG 96 112 cp
FLAG 96 192 0
FLAG 304 -560 vl2
FLAG 976 576 0
FLAG -688 -416 0
FLAG -608 -416 0
FLAG -528 -416 0
FLAG 432 -416 0
FLAG 512 -416 0
FLAG 592 -416 0
SYMBOL nmos 704 -16 R0
SYMATTR InstName M1
SYMATTR Value AON7140
SYMBOL res 736 224 R0
SYMATTR Value AON7262E
SYMBOL res 736 416 R0
SYMATTR InstName R1
SYMATTR Value {rtip}
SYMBOL voltage -1600 176 R0
SYMBOL ind -128 -544 R270
WINDOW 0 32 56 VTop 2
WINDOW 3 5 56 VBottom 2
SYMATTR InstName L1
SYMATTR Value flux={L*Is}*tanh(x/{Is})
SYMBOL voltage -1600 32 R0
WINDOW 123 0 0 Left 0
WINDOW 39 24 44 Left 2
SYMATTR InstName V1
SYMATTR Value {vbus}
SYMBOL voltage 96 128 R0
SYMATTR Value PWL(0 0 1m 0 1.1m {vbus} 10m {vbus} 10.1m 0)
SYMBOL voltage 96 320 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V3
SYMATTR Value PULSE(0 5 5m 100n 100n {d*1/fsw} {1/fsw} 200)
SYMBOL cap 640 -64 R0
SYMATTR Value PULSE(0 5 2m 100n 100n {d*1/fsw} {1/fsw} 200)
SYMBOL cap 640 128 R0
SYMATTR InstName C3
SYMATTR Value 100n
SYMBOL res -1264 -544 R270
@ -120,97 +126,78 @@ WINDOW 0 32 56 VTop 2
WINDOW 3 0 56 VBottom 2
SYMATTR InstName R2
SYMATTR Value 5m
SYMBOL cap 832 256 R0
SYMBOL cap 832 448 R0
SYMATTR InstName C4
SYMATTR Value 10p
SYMBOL ind -1616 -192 R0
SYMBOL ind -1616 -416 R0
SYMATTR InstName L2
SYMATTR Value 500n
SYMATTR SpiceLine Rser=1m
SYMBOL res -1616 -80 R0
SYMBOL res -1616 -304 R0
SYMATTR InstName R8
SYMATTR Value 120m
SYMBOL cap -1696 -480 R0
SYMATTR InstName C5
SYMATTR Value 1µ
SYMBOL res -1616 80 R0
SYMBOL res -1616 -64 R0
SYMATTR InstName R9
SYMATTR Value 20m
SYMBOL cap -1744 128 R0
SYMBOL cap -1744 -16 R0
SYMATTR InstName C6
SYMATTR Value 200ľ
SYMBOL IRS10752L 416 -48 R0
SYMATTR Value 10ľ
SYMBOL cap -32 -448 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
SYMATTR InstName C7
SYMATTR Value 5p
SYMBOL res 240 -576 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R11
SYMATTR Value 18.9m
SYMBOL res 0 -736 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R12
SYMATTR Value 10Meg
SYMBOL IRS10752L 416 144 R0
WINDOW 3 2 120 Top 2
SYMATTR InstName U2
SYMBOL schottky 240 -128 R270
SYMBOL schottky 240 64 R270
WINDOW 0 32 32 VTop 2
WINDOW 3 0 32 VBottom 2
SYMATTR InstName D5
SYMATTR Value 1N5818
SYMBOL voltage 96 -96 R0
SYMBOL voltage 96 96 R0
SYMATTR InstName V2
SYMATTR Value 12
SYMBOL ind 736 80 R0
SYMBOL ind 736 272 R0
SYMATTR InstName L3
SYMATTR Value 10n
SYMATTR SpiceLine Rser=1m
SYMBOL ind -416 -544 R270
WINDOW 0 32 56 VTop 2
WINDOW 3 5 56 VBottom 2
SYMATTR InstName L1
SYMATTR Value flux={L*Is}*tanh(x/{Is})
SYMBOL cap -320 -448 R90
WINDOW 0 0 32 VBottom 2
WINDOW 3 32 32 VTop 2
SYMATTR InstName C1
SYMATTR Value 5p
SYMBOL res -48 -576 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R3
SYMATTR Value 12m
SYMBOL res -288 -736 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R4
SYMATTR Value 10Meg
SYMBOL diode 960 192 M180
SYMBOL diode 960 400 M180
WINDOW 0 24 64 Left 2
WINDOW 3 24 0 Left 2
SYMATTR InstName D1
SYMATTR Value RB068M-60
SYMBOL Contrib\\CHEMI-CON\\Capacitors\\Alcap-PolymerHybrid-SMD\\HHXC350ARA220ME61G -816 -432 R0
SYMATTR InstName C2
SYMBOL sw -1600 -336 R0
SYMATTR InstName S1
SYMATTR Value SW1
SYMBOL voltage -1840 -256 R0
SYMATTR InstName V4
SYMATTR Value PWL(0 0 1m 0 1.1m 1 6m 1 6.1m 0)
SYMBOL MMASU32MAB7106_PNA01 -880 -400 R90
SYMATTR Value Temperature=40
SYMATTR InstName U3
SYMBOL MMASU32MAB7106_PNA01 80 -384 R90
SYMATTR Value Temperature=40
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -688 -480 R270
SYMATTR InstName U1
SYMBOL MMASU32MAB7106_PNA01 192 -384 R90
SYMATTR Value Temperature=40
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -608 -480 R270
SYMATTR InstName U3
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -528 -480 R270
SYMATTR InstName U4
SYMBOL MMASU32MAB7106_PNA01 288 -384 R90
SYMATTR Value Temperature=40
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 432 -480 R270
SYMATTR InstName U5
SYMBOL MMASU32MAB7106_PNA01 400 -384 R90
SYMATTR Value Temperature=40
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 512 -480 R270
SYMATTR InstName U6
TEXT -1656 -1016 Left 2 !.tran 12m
TEXT -1648 -808 Left 2 !.param fsw=100k
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 592 -480 R270
SYMATTR InstName U7
TEXT -1656 -1016 Left 2 !.tran 10m
TEXT -192 -632 Left 2 !.param L=3.3u Is=8.2
TEXT -1648 -808 Left 2 !.param fsw=50k
TEXT -1648 -776 Left 2 !.param d={pout/(vbus*vbus/rtip)}
TEXT -1648 -904 Left 2 !.param vbus=28
TEXT -1648 -840 Left 2 !.param pout=130
TEXT -576 -40 Left 2 !.param rtip=2.5
TEXT 352 112 Left 2 !.lib IRS10752L.lib
TEXT -1648 -872 Left 2 !.param rtip=2.5
TEXT 352 304 Left 2 !.lib IRS10752L.lib
TEXT -1648 -936 Left 2 !.param vcc=3.3
TEXT -1656 -992 Left 2 !.options abstol=10n vntol=10n reltol=0.005 gmin=10p method=gear
TEXT -480 -632 Left 2 !.param L=2.2u Is=7
TEXT -584 -64 Left 2 !*.step param rtip list 2.5 3 3.5 4.5 5 100k
TEXT -1496 -16 Left 2 !.model SW1 SW(Ron=1n Roff=10Meg Vt=0.5 Vh=0.1)