mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 18:55:13 +03:00
Compare commits
4 Commits
faeac98318
...
fbf0a87d8d
| Author | SHA1 | Date | |
|---|---|---|---|
| fbf0a87d8d | |||
| 8bb8f93f83 | |||
| 6adf025f62 | |||
| f46185feaf |
@ -1,5 +1,124 @@
|
||||
Get data from 2 encoders by BISS-C protocol
|
||||
===========================================
|
||||
|
||||
This device works with two BISS-C encoders (resolution from 8 to 32 bit).
|
||||
|
||||
If you want to test readout from device, run `./testDev /dev/encoder_X0` or `./testDev /dev/encoder_X0`.
|
||||
|
||||
## Encoder cable pinout:
|
||||
|
||||
* 1 - NC or shield
|
||||
* 2 - CLK_A - positive of SSI clock out
|
||||
* 3 - CLC_B - negative of SSI clock out
|
||||
* 4 - NC or shield
|
||||
* 5 - +5V - 5V power for sensor (at least 250mA)
|
||||
* 6 - DATA_A - positive of data in
|
||||
* 7 - DATA_B - negative of data in
|
||||
* 8 - NC
|
||||
* 9 - Gnd - common ground
|
||||
|
||||
|
||||
## Device interfaces
|
||||
|
||||
After connection you will see device 0483:5740 with three CDC interfaces. Each interface
|
||||
have its own `iInterface` field, by default they are:
|
||||
|
||||
* encoder_cmd - configure/command/debugging interface
|
||||
* encoder_X - X sensor output
|
||||
* encoder_Y - Y sensor output
|
||||
|
||||
Add to udev-rules file `99-myHW.rules` which will create symlinks to each interface in `/dev/` directory.
|
||||
You can change all three `iInterface` values and store them in device' flash memory.
|
||||
|
||||
The readout of encoders depends on settings. If you save in flash `autom=1`, readout of both encoders
|
||||
will repeat each `amperiod` milliseconds. Also you always can ask for readout sending any '\n'-terminated
|
||||
data into encoder's interface or running commands `readenc`, `readX` or `readY` in command interface.
|
||||
|
||||
|
||||
## Protocol
|
||||
|
||||
The device have simple text protocol, each text string should be closed by '\n'.
|
||||
Base format is 'param [ = value]', where 'param' could be command to run some procedure
|
||||
or getter, 'value' is setter.
|
||||
|
||||
Answer for all getters is 'param=value'. Here are answers for setters and procedures:
|
||||
|
||||
* OK - all OK
|
||||
* FAIL - procedure failed to run
|
||||
* BADCMD - your entered wrong command
|
||||
* BADPAR - parameter of setter is out of allowable range
|
||||
|
||||
Some procedures (like 'help' or 'readenc') returns a lot of data after calling.
|
||||
|
||||
|
||||
### Base commands on command interface
|
||||
|
||||
These are commands for directrly work with SPI interfaces:
|
||||
|
||||
* readenc - read both encoders once
|
||||
* readX - read X encoder once
|
||||
* readY - read Y encoder once
|
||||
* help - show full help
|
||||
* reset - reset MCU
|
||||
* spideinit - deinit SPI
|
||||
* spiinit - init SPI
|
||||
* spistat - get status of both SPI interfaces
|
||||
|
||||
|
||||
### Configuration commands
|
||||
|
||||
This set of commands allows to change current configuration (remember: each time SPI configuration changes
|
||||
you need to run `spiinit`) and store it into flash memory.
|
||||
|
||||
* autom - turn on or off automonitoring
|
||||
* amperiod - period of monitoring, 1..255 milliseconds
|
||||
* BR - change SPI BR register (1 - 18MHz ... 7 - 281kHz)
|
||||
* CPHA - change CPHA value (0/1)
|
||||
* CPOL - change CPOL value (0/1)
|
||||
* dumpconf - dump current configuration
|
||||
* encbits - set encoder data bits amount (26/32)
|
||||
* encbufsz - change encoder auxiliary buffer size (8..32 bytes)
|
||||
* erasestorage - erase full storage or current page (=n)
|
||||
* maxzeros - maximal amount of zeros in preamble
|
||||
* minzeros - minimal amount of zeros in preamble
|
||||
* setiface1 - set name of first (command) interface
|
||||
* setiface2 - set name of second (axis X) interface
|
||||
* setiface3 - set name of third (axis Y) interface
|
||||
* storeconf - store configuration in flash memory
|
||||
|
||||
Here is example of default configuration ouput (`dumpconf`):
|
||||
|
||||
```
|
||||
userconf_sz=108
|
||||
currentconfidx=-1
|
||||
setiface1=
|
||||
setiface2=
|
||||
setiface3=
|
||||
autom=0
|
||||
amperiod=1
|
||||
BR=4
|
||||
CPHA=0
|
||||
CPOL=1
|
||||
encbits=26
|
||||
encbufsz=12
|
||||
maxzeros=50
|
||||
minzeros=4
|
||||
```
|
||||
|
||||
`userconf_sz` is some type of "magick sequence" to find start of last record in flash memory.
|
||||
`currentconfidx` shows number of record (-1 means that the storage is empty and you see default values).
|
||||
Empty field of `setifaceX` means default interface name.
|
||||
|
||||
|
||||
### Debugging commands
|
||||
|
||||
Some of these commands could be usefull when you're trying to play with settings or want to measure maximal
|
||||
readout speed for encoders (when each reading starts immediately after parsing previous result).
|
||||
|
||||
* dummy - dummy integer setter/getter
|
||||
* fin - reinit flash (e.g. to restore last configuration)
|
||||
* sendx - send text string to X encoder's terminal
|
||||
* sendy - send text string to Y encoder's terminal
|
||||
* testx - test X-axis throughput
|
||||
* testy - test Y-axis throughput
|
||||
|
||||
tl;dr
|
||||
|
||||
@ -17,16 +17,14 @@
|
||||
*/
|
||||
|
||||
#include "bissC.h"
|
||||
#include "usb_dev.h"
|
||||
#include "flash.h"
|
||||
#ifdef EBUG
|
||||
#include "strfunc.h"
|
||||
#endif
|
||||
#include "flash.h"
|
||||
#include "spi.h"
|
||||
#include "usb_dev.h"
|
||||
|
||||
#define MAX_BITSTREAM_UINTS 4 // 4 * 32 = 128 bits capacity
|
||||
// min/max zeros before preambule
|
||||
#define MINZEROS 4
|
||||
#define MAXZEROS 40
|
||||
#define MAX_BITSTREAM_UINTS (ENCODER_BUFSZ_MAX / 4) // ENCODER_BUFSZ_MAX bits capacity
|
||||
|
||||
static uint32_t bitstream[MAX_BITSTREAM_UINTS] = {0};
|
||||
|
||||
@ -50,11 +48,6 @@ static void bytes_to_bitstream(const uint8_t *bytes, uint32_t num_bytes, uint32_
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Store remaining bits if any
|
||||
if(*num_bits % 32 != 0){
|
||||
current <<= (32 - (*num_bits % 32));
|
||||
bitstream[pos] = current;
|
||||
}*/
|
||||
}
|
||||
|
||||
// Compute CRC-6 using polynomial x^6 + x + 1
|
||||
@ -102,7 +95,7 @@ BiSS_Frame parse_biss_frame(const uint8_t *bytes, uint32_t num_bytes){
|
||||
if(!curbit){
|
||||
zero_count++;
|
||||
}else{
|
||||
if(zero_count >= MINZEROS && zero_count <= MAXZEROS){
|
||||
if(zero_count >= the_conf.minzeros && zero_count <= the_conf.maxzeros){
|
||||
if((i + 1) < num_bits && !get_bit(i + 1)){
|
||||
data_start = i + 2;
|
||||
found = 1;
|
||||
|
||||
@ -20,6 +20,11 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "spi.h"
|
||||
#if ENCRESOL_MAX > 32
|
||||
#error "Change full code. Current don't support more than 32 bits of encoder resolution."
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint32_t data; // 26/32/36-bit data
|
||||
uint8_t error : 1; // error flag (0 - error: bad value or high temperature)
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 15.0.1, 2025-04-02T14:36:26. -->
|
||||
<!-- Written by QtCreator 15.0.1, 2025-04-02T18:29:56. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
||||
@ -33,7 +33,11 @@ user_conf the_conf = {
|
||||
.userconf_sz = sizeof(user_conf),
|
||||
.flags.CPOL = 1,
|
||||
.flags.BR = 4,
|
||||
.encbits = 26
|
||||
.encbits = 26,
|
||||
.encbufsz = 12,
|
||||
.minzeros = 4,
|
||||
.maxzeros = 50,
|
||||
.monittime = 1,
|
||||
};
|
||||
|
||||
int currentconfidx = -1; // index of current configuration
|
||||
|
||||
@ -27,10 +27,17 @@
|
||||
// maximal size (in letters) of iInterface for settings
|
||||
#define MAX_IINTERFACE_SZ (16)
|
||||
|
||||
// min/max zeros before preambule
|
||||
#define MINZEROS_MIN 2
|
||||
#define MINZEROS_MAX 60
|
||||
#define MAXZEROS_MIN 4
|
||||
#define MAXZEROS_MAX 120
|
||||
|
||||
typedef struct{
|
||||
uint8_t CPOL : 1;
|
||||
uint8_t CPHA : 1;
|
||||
uint8_t BR : 3;
|
||||
uint8_t monit: 1; // auto monitoring of encoder each `monittime` milliseconds
|
||||
} flags_t;
|
||||
|
||||
/*
|
||||
@ -40,8 +47,12 @@ typedef struct __attribute__((packed, aligned(4))){
|
||||
uint16_t userconf_sz; // "magick number"
|
||||
uint16_t iInterface[bTotNumEndpoints][MAX_IINTERFACE_SZ]; // hryunikod!
|
||||
uint8_t iIlengths[bTotNumEndpoints];
|
||||
flags_t flags; // flags: CPOL, CPHA etc
|
||||
uint8_t encbits; // encoder bits: 26 or 32
|
||||
uint8_t encbufsz; // encoder buffer size (up to ENCODER_BUFSZ_MAX)
|
||||
uint8_t minzeros; // min/max zeros in preamble when searching start of record
|
||||
uint8_t maxzeros;
|
||||
uint8_t monittime; // auto monitoring period (ms)
|
||||
flags_t flags; // flags: CPOL, CPHA etc
|
||||
} user_conf;
|
||||
|
||||
extern user_conf the_conf;
|
||||
|
||||
27
F1:F103/BISS_C_encoders/kicad/BOM.csv
Normal file
27
F1:F103/BISS_C_encoders/kicad/BOM.csv
Normal file
@ -0,0 +1,27 @@
|
||||
"Reference","Value","Datasheet","Footprint","Qty","DNP"
|
||||
"C1,C2,C6,C7,C8,C9,C10,C11,C12,C15,C16,C20,C21","0.1","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","13",""
|
||||
"C3","22u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","1",""
|
||||
"C4,C5","12","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","2",""
|
||||
"C13,C14,C22,C23","1u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","4",""
|
||||
"C17,C18,C19","0.47","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","3",""
|
||||
"D1,D2,D7","1N5817","~","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","3",""
|
||||
"D3,D4,D8,D9","SM712_SOT23","https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sm712_datasheet.pdf.pdf","Package_TO_SOT_SMD:SOT-23","4",""
|
||||
"D5,D6","SMAJ15CA","https://www.littelfuse.com/media?resourcetype=datasheets&itemid=75e32973-b177-4ee3-a0ff-cedaf1abdb93&filename=smaj-datasheet","Diode_SMD:D_SMA","2",""
|
||||
"F1,F2","0.5A","~","Fuse:Fuse_1206_3216Metric","2",""
|
||||
"J1","Screw_Terminal_01x02","~","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","1",""
|
||||
"J2","USB_B","~","Connector_USB:USB_B_OST_USB-B1HSxx_Horizontal","1",""
|
||||
"J5,J6,J7,J11","HOLE","~","MountingHole:MountingHole_3.2mm_M3","4",""
|
||||
"J8,J10","SSI/422","~","my_footprints:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm","2",""
|
||||
"J9","4P4C","~","Connector_RJ:RJ9_Evercom_5301-440xxx_Horizontal","1",""
|
||||
"Q1","DTA114Y","","Package_TO_SOT_SMD:SOT-323_SC-70_Handsoldering","1",""
|
||||
"Q2,Q3","B0505S-2W","","my_footprints:B0505S-2W","2",""
|
||||
"R1,R2,R3","22","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","3",""
|
||||
"R4","1k5","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R5","1k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R6","10k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"U1","LM1117MP-3.3","http://www.ti.com/lit/ds/symlink/lm1117.pdf","Package_TO_SOT_SMD:SOT-223-3_TabPin2","1",""
|
||||
"U2","USBLC6-2SC6","https://www.st.com/resource/en/datasheet/usblc6-2.pdf","Package_TO_SOT_SMD:SOT-23-6","1",""
|
||||
"U3","STM32F103C8Tx","https://www.st.com/resource/en/datasheet/stm32f103c8.pdf","Package_QFP:LQFP-48_7x7mm_P0.5mm","1",""
|
||||
"U4,U6","ISO3086","","Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm","2",""
|
||||
"U5","MAX3232","https://datasheets.maximintegrated.com/en/ds/MAX3222-MAX3241.pdf","Package_SO:SOIC-16_3.9x9.9mm_P1.27mm","1",""
|
||||
"Y1","8MHz","~","Crystal:Crystal_HC49-U_Vertical","1",""
|
||||
|
3532
F1:F103/BISS_C_encoders/kicad/elements.kicad_sym
Normal file
3532
F1:F103/BISS_C_encoders/kicad/elements.kicad_sym
Normal file
File diff suppressed because it is too large
Load Diff
30004
F1:F103/BISS_C_encoders/kicad/encoder.kicad_pcb
Normal file
30004
F1:F103/BISS_C_encoders/kicad/encoder.kicad_pcb
Normal file
File diff suppressed because it is too large
Load Diff
132
F1:F103/BISS_C_encoders/kicad/encoder.kicad_prl
Normal file
132
F1:F103/BISS_C_encoders/kicad/encoder.kicad_prl
Normal file
@ -0,0 +1,132 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "All Layers",
|
||||
"auto_track_width": false,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"shapes": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"prototype_zone_fills": false,
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": true,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
"vias",
|
||||
"footprint_text",
|
||||
"footprint_anchors",
|
||||
"ratsnest",
|
||||
"grid",
|
||||
"footprints_front",
|
||||
"footprints_back",
|
||||
"footprint_values",
|
||||
"footprint_references",
|
||||
"tracks",
|
||||
"drc_errors",
|
||||
"drawing_sheet",
|
||||
"bitmaps",
|
||||
"pads",
|
||||
"zones",
|
||||
"drc_warnings",
|
||||
"locked_item_shadows",
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "encoder.kicad_prl",
|
||||
"version": 5
|
||||
},
|
||||
"net_inspector_panel": {
|
||||
"col_hidden": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"col_order": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"col_widths": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"custom_group_rules": [],
|
||||
"expanded_rows": [],
|
||||
"filter_by_net_name": true,
|
||||
"filter_by_netclass": true,
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
"sorting_column": 0
|
||||
},
|
||||
"open_jobsets": [],
|
||||
"project": {
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
"labels": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
}
|
||||
}
|
||||
}
|
||||
685
F1:F103/BISS_C_encoders/kicad/encoder.kicad_pro
Normal file
685
F1:F103/BISS_C_encoders/kicad/encoder.kicad_pro
Normal file
@ -0,0 +1,685 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 2,
|
||||
"dimension_units": 2,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": true,
|
||||
"text_position": 0,
|
||||
"units_format": 0
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.8,
|
||||
"height": 1.27,
|
||||
"width": 2.54
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.0
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "ignore",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_on_edge_cuts": "error",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.2,
|
||||
"min_connection": 0.2,
|
||||
"min_copper_edge_clearance": 1.0,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.3,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.4,
|
||||
"min_track_width": 0.2,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.6,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.2,
|
||||
0.25,
|
||||
0.5,
|
||||
1.0
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [
|
||||
{
|
||||
"diameter": 0.0,
|
||||
"drill": 0.0
|
||||
},
|
||||
{
|
||||
"diameter": 0.8,
|
||||
"drill": 0.4
|
||||
},
|
||||
{
|
||||
"diameter": 1.0,
|
||||
"drill": 0.6
|
||||
},
|
||||
{
|
||||
"diameter": 1.2,
|
||||
"drill": 0.8
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"component_class_settings": {
|
||||
"assignments": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"sheet_component_classes": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "ignore",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "error",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [
|
||||
"Connector_minidin"
|
||||
],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "encoder.kicad_pro",
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "gerbers/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "BOM.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "#",
|
||||
"name": "${ITEM_NUMBER}",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Manufacturer",
|
||||
"name": "Manufacturer",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Description",
|
||||
"name": "Description",
|
||||
"show": false
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": false,
|
||||
"name": "",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"ngspice": {
|
||||
"fix_include_paths": true,
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"model_mode": 4,
|
||||
"workbook_filename": ""
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"8d999898-5824-4200-a5bb-e5cd72e34b91",
|
||||
"Root"
|
||||
],
|
||||
[
|
||||
"73c963f6-4efe-4c55-af10-7cb25f15b728",
|
||||
"SSI_422_2"
|
||||
],
|
||||
[
|
||||
"8303fa26-68ce-4671-900d-4c072b8eabbd",
|
||||
"RS-232_1"
|
||||
],
|
||||
[
|
||||
"80264a45-619f-4fbb-976c-6c15dcb432b8",
|
||||
"SSI_422_1"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
8985
F1:F103/BISS_C_encoders/kicad/encoder.kicad_sch
Normal file
8985
F1:F103/BISS_C_encoders/kicad/encoder.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
62721
F1:F103/BISS_C_encoders/kicad/fp-info-cache
Normal file
62721
F1:F103/BISS_C_encoders/kicad/fp-info-cache
Normal file
File diff suppressed because it is too large
Load Diff
4
F1:F103/BISS_C_encoders/kicad/fp-lib-table
Normal file
4
F1:F103/BISS_C_encoders/kicad/fp-lib-table
Normal file
@ -0,0 +1,4 @@
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "my_footprints")(type "KiCad")(uri "${KIPRJMOD}/my_footprints.pretty")(options "")(descr ""))
|
||||
)
|
||||
5477
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Cu.gbr
Normal file
5477
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
169
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Mask.gbr
Normal file
169
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Mask.gbr
Normal file
@ -0,0 +1,169 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-04-04T18:35:25+03:00*%
|
||||
%TF.ProjectId,encoder,656e636f-6465-4722-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-04-04 18:35:25*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,3.000000*%
|
||||
%ADD11C,3.200000*%
|
||||
%ADD12R,1.000000X1.000000*%
|
||||
%ADD13C,1.000000*%
|
||||
%ADD14C,3.250000*%
|
||||
%ADD15RoundRect,0.250000X-0.650000X-0.650000X0.650000X-0.650000X0.650000X0.650000X-0.650000X0.650000X0*%
|
||||
%ADD16C,1.800000*%
|
||||
%ADD17C,1.500000*%
|
||||
%ADD18RoundRect,0.381000X0.619000X0.381000X-0.619000X0.381000X-0.619000X-0.381000X0.619000X-0.381000X0*%
|
||||
%ADD19RoundRect,0.381000X0.762000X0.381000X-0.762000X0.381000X-0.762000X-0.381000X0.762000X-0.381000X0*%
|
||||
%ADD20C,4.000000*%
|
||||
%ADD21R,1.600000X1.600000*%
|
||||
%ADD22C,1.600000*%
|
||||
%ADD23RoundRect,0.250000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X0*%
|
||||
%ADD24C,2.600000*%
|
||||
%ADD25R,1.700000X1.700000*%
|
||||
%ADD26C,1.700000*%
|
||||
%ADD27C,3.500000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,TP2*%
|
||||
X129500000Y-111000000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J11*%
|
||||
X74500000Y-126500000D03*
|
||||
%TD*%
|
||||
%TO.C,J5*%
|
||||
X74500000Y-53500000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,TP1*%
|
||||
X129500000Y-106000000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J7*%
|
||||
X144500000Y-126500000D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,TP3*%
|
||||
X144000000Y-90000000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J6*%
|
||||
X144500000Y-53500000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,J3*%
|
||||
X145246400Y-77435400D03*
|
||||
D13*
|
||||
X145246400Y-78705400D03*
|
||||
X145246400Y-79975400D03*
|
||||
X145246400Y-81245400D03*
|
||||
X145246400Y-82515400D03*
|
||||
X145246400Y-83785400D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,J9*%
|
||||
X117673600Y-53459000D03*
|
||||
X125173600Y-53459000D03*
|
||||
D15*
|
||||
X119583600Y-59809000D03*
|
||||
D16*
|
||||
X120853600Y-62349000D03*
|
||||
X122123600Y-59809000D03*
|
||||
X123393600Y-62349000D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,Y1*%
|
||||
X111157400Y-97780000D03*
|
||||
X111157400Y-102660000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,Q3*%
|
||||
X100750800Y-82000000D03*
|
||||
X98210800Y-82000000D03*
|
||||
D19*
|
||||
X93130800Y-82000000D03*
|
||||
X88050800Y-82000000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,Q2*%
|
||||
X100679200Y-115058400D03*
|
||||
X98139200Y-115058400D03*
|
||||
D19*
|
||||
X93059200Y-115058400D03*
|
||||
X87979200Y-115058400D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,J8*%
|
||||
X78870900Y-119604300D03*
|
||||
X78870900Y-94604300D03*
|
||||
D21*
|
||||
X79170900Y-101564300D03*
|
||||
D22*
|
||||
X79170900Y-104334300D03*
|
||||
X79170900Y-107104300D03*
|
||||
X79170900Y-109874300D03*
|
||||
X79170900Y-112644300D03*
|
||||
X76330900Y-102949300D03*
|
||||
X76330900Y-105719300D03*
|
||||
X76330900Y-108489300D03*
|
||||
X76330900Y-111259300D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,J1*%
|
||||
X143357600Y-114500000D03*
|
||||
D24*
|
||||
X143357600Y-119500000D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,J10*%
|
||||
X78942500Y-86545900D03*
|
||||
X78942500Y-61545900D03*
|
||||
D21*
|
||||
X79242500Y-68505900D03*
|
||||
D22*
|
||||
X79242500Y-71275900D03*
|
||||
X79242500Y-74045900D03*
|
||||
X79242500Y-76815900D03*
|
||||
X79242500Y-79585900D03*
|
||||
X76402500Y-69890900D03*
|
||||
X76402500Y-72660900D03*
|
||||
X76402500Y-75430900D03*
|
||||
X76402500Y-78200900D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,J2*%
|
||||
X140544800Y-102108000D03*
|
||||
D26*
|
||||
X140544800Y-99608000D03*
|
||||
X142544800Y-99608000D03*
|
||||
X142544800Y-102108000D03*
|
||||
D27*
|
||||
X145254800Y-94838000D03*
|
||||
X145254800Y-106878000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
6128
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Silkscreen.gbr
Normal file
6128
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-B_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load Diff
51
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-Edge_Cuts.gbr
Normal file
51
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-Edge_Cuts.gbr
Normal file
@ -0,0 +1,51 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-04-04T18:35:26+03:00*%
|
||||
%TF.ProjectId,encoder,656e636f-6465-4722-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-04-04 18:35:26*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X96000000Y-89500000D02*
|
||||
X96000000Y-62500000D01*
|
||||
X95500000Y-62500000D02*
|
||||
G75*
|
||||
G02*
|
||||
X96000000Y-62500000I250000J0D01*
|
||||
G01*
|
||||
X96000000Y-89500000D02*
|
||||
G75*
|
||||
G02*
|
||||
X95500000Y-89500000I-250000J0D01*
|
||||
G01*
|
||||
X95500000Y-62500000D02*
|
||||
X95500000Y-89500000D01*
|
||||
X95500000Y-95500000D02*
|
||||
G75*
|
||||
G02*
|
||||
X96000000Y-95500000I250000J0D01*
|
||||
G01*
|
||||
X96000000Y-122500000D02*
|
||||
G75*
|
||||
G02*
|
||||
X95500000Y-122500000I-250000J0D01*
|
||||
G01*
|
||||
X95500000Y-95500000D02*
|
||||
X95500000Y-122500000D01*
|
||||
X96000000Y-122500000D02*
|
||||
X96000000Y-95500000D01*
|
||||
X70500000Y-49500000D02*
|
||||
X148500000Y-49500000D01*
|
||||
X148500000Y-130500000D01*
|
||||
X70500000Y-130500000D01*
|
||||
X70500000Y-49500000D01*
|
||||
M02*
|
||||
14711
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Cu.gbr
Normal file
14711
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
544
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Mask.gbr
Normal file
544
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Mask.gbr
Normal file
@ -0,0 +1,544 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-04-04T18:35:25+03:00*%
|
||||
%TF.ProjectId,encoder,656e636f-6465-4722-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-04-04 18:35:25*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
%AMOutline4P*
|
||||
0 Free polygon, 4 corners , with rotation*
|
||||
0 The origin of the aperture is its center*
|
||||
0 number of corners: always 4*
|
||||
0 $1 to $8 corner X, Y*
|
||||
0 $9 Rotation angle, in degrees counterclockwise*
|
||||
0 create outline with 4 corners*
|
||||
4,1,4,$1,$2,$3,$4,$5,$6,$7,$8,$1,$2,$9*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
|
||||
%ADD11RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
|
||||
%ADD12C,3.000000*%
|
||||
%ADD13RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
|
||||
%ADD14RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD15C,3.200000*%
|
||||
%ADD16RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
|
||||
%ADD17RoundRect,0.375000X-0.625000X-0.375000X0.625000X-0.375000X0.625000X0.375000X-0.625000X0.375000X0*%
|
||||
%ADD18RoundRect,0.500000X-0.500000X-1.400000X0.500000X-1.400000X0.500000X1.400000X-0.500000X1.400000X0*%
|
||||
%ADD19RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
|
||||
%ADD20Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X90.000000*%
|
||||
%ADD21Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X270.000000*%
|
||||
%ADD22RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
|
||||
%ADD23RoundRect,0.150000X-0.512500X-0.150000X0.512500X-0.150000X0.512500X0.150000X-0.512500X0.150000X0*%
|
||||
%ADD24RoundRect,0.250000X0.625000X-0.375000X0.625000X0.375000X-0.625000X0.375000X-0.625000X-0.375000X0*%
|
||||
%ADD25RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
|
||||
%ADD26RoundRect,0.250000X0.650000X-1.000000X0.650000X1.000000X-0.650000X1.000000X-0.650000X-1.000000X0*%
|
||||
%ADD27RoundRect,0.150000X0.875000X0.150000X-0.875000X0.150000X-0.875000X-0.150000X0.875000X-0.150000X0*%
|
||||
%ADD28RoundRect,0.075000X-0.662500X-0.075000X0.662500X-0.075000X0.662500X0.075000X-0.662500X0.075000X0*%
|
||||
%ADD29RoundRect,0.075000X-0.075000X-0.662500X0.075000X-0.662500X0.075000X0.662500X-0.075000X0.662500X0*%
|
||||
%ADD30Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X0.000000*%
|
||||
%ADD31Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X180.000000*%
|
||||
%ADD32RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
|
||||
%ADD33R,1.000000X1.000000*%
|
||||
%ADD34C,1.000000*%
|
||||
%ADD35RoundRect,0.112500X-0.112500X-0.637500X0.112500X-0.637500X0.112500X0.637500X-0.112500X0.637500X0*%
|
||||
%ADD36RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
|
||||
%ADD37RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
|
||||
%ADD38RoundRect,0.250000X-0.650000X1.000000X-0.650000X-1.000000X0.650000X-1.000000X0.650000X1.000000X0*%
|
||||
%ADD39RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
|
||||
%ADD40C,3.250000*%
|
||||
%ADD41RoundRect,0.250000X-0.650000X-0.650000X0.650000X-0.650000X0.650000X0.650000X-0.650000X0.650000X0*%
|
||||
%ADD42C,1.800000*%
|
||||
%ADD43C,1.500000*%
|
||||
%ADD44RoundRect,0.381000X0.619000X0.381000X-0.619000X0.381000X-0.619000X-0.381000X0.619000X-0.381000X0*%
|
||||
%ADD45RoundRect,0.381000X0.762000X0.381000X-0.762000X0.381000X-0.762000X-0.381000X0.762000X-0.381000X0*%
|
||||
%ADD46C,4.000000*%
|
||||
%ADD47R,1.600000X1.600000*%
|
||||
%ADD48C,1.600000*%
|
||||
%ADD49RoundRect,0.250000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X0*%
|
||||
%ADD50C,2.600000*%
|
||||
%ADD51R,1.700000X1.700000*%
|
||||
%ADD52C,1.700000*%
|
||||
%ADD53C,3.500000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,C8*%
|
||||
X126593600Y-94435000D03*
|
||||
X126593600Y-92710000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,C11*%
|
||||
X98596400Y-108556000D03*
|
||||
X100321400Y-108556000D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,TP2*%
|
||||
X129500000Y-111000000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C23*%
|
||||
X89481000Y-79409200D03*
|
||||
X91556000Y-79409200D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,D9*%
|
||||
X83485100Y-70359100D03*
|
||||
X83485100Y-68459100D03*
|
||||
X81610100Y-69409100D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J11*%
|
||||
X74500000Y-126500000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C5*%
|
||||
X111200100Y-100736400D03*
|
||||
X109475100Y-100736400D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,U1*%
|
||||
X133959600Y-88110000D03*
|
||||
X133959600Y-90410000D03*
|
||||
D18*
|
||||
X140259600Y-90410000D03*
|
||||
D17*
|
||||
X133959600Y-92710000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J5*%
|
||||
X74500000Y-53500000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,R3*%
|
||||
X146151600Y-87071200D03*
|
||||
X144326600Y-87071200D03*
|
||||
%TD*%
|
||||
D10*
|
||||
%TO.C,C2*%
|
||||
X131572800Y-89849000D03*
|
||||
X131572800Y-88124000D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,D7*%
|
||||
X109169600Y-65553800D03*
|
||||
D21*
|
||||
X109169600Y-59753800D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,C17*%
|
||||
X117847600Y-68583200D03*
|
||||
X117847600Y-66508200D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,TP1*%
|
||||
X129500000Y-106000000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,U2*%
|
||||
X130911600Y-98567200D03*
|
||||
X130911600Y-99517200D03*
|
||||
X130911600Y-100467200D03*
|
||||
X133186600Y-100467200D03*
|
||||
X133186600Y-99517200D03*
|
||||
X133186600Y-98567200D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,F1*%
|
||||
X100679200Y-120138400D03*
|
||||
X100679200Y-117338400D03*
|
||||
%TD*%
|
||||
%TO.C,F2*%
|
||||
X100750800Y-87080000D03*
|
||||
X100750800Y-84280000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,C4*%
|
||||
X111152600Y-95961200D03*
|
||||
X112877600Y-95961200D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C15*%
|
||||
X121556000Y-66398800D03*
|
||||
X119831000Y-66398800D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,R6*%
|
||||
X120853200Y-93163400D03*
|
||||
X120853200Y-91338400D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,C9*%
|
||||
X121311500Y-107492800D03*
|
||||
X123036500Y-107492800D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,D5*%
|
||||
X126848000Y-73728200D03*
|
||||
X126848000Y-69728200D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,U6*%
|
||||
X100371600Y-73211600D03*
|
||||
X100371600Y-71941600D03*
|
||||
X100371600Y-70671600D03*
|
||||
X100371600Y-69401600D03*
|
||||
X100371600Y-68131600D03*
|
||||
X100371600Y-66861600D03*
|
||||
X100371600Y-65591600D03*
|
||||
X100371600Y-64321600D03*
|
||||
X91071600Y-64321600D03*
|
||||
X91071600Y-65591600D03*
|
||||
X91071600Y-66861600D03*
|
||||
X91071600Y-68131600D03*
|
||||
X91071600Y-69401600D03*
|
||||
X91071600Y-70671600D03*
|
||||
X91071600Y-71941600D03*
|
||||
X91071600Y-73211600D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J7*%
|
||||
X144500000Y-126500000D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,C7*%
|
||||
X112878700Y-93878400D03*
|
||||
X114603700Y-93878400D03*
|
||||
%TD*%
|
||||
%TO.C,C1*%
|
||||
X133911000Y-111201200D03*
|
||||
X135636000Y-111201200D03*
|
||||
%TD*%
|
||||
D12*
|
||||
%TO.C,TP3*%
|
||||
X144000000Y-90000000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C14*%
|
||||
X89409400Y-112467600D03*
|
||||
X91484400Y-112467600D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,U3*%
|
||||
X116128800Y-97783200D03*
|
||||
X116128800Y-98283200D03*
|
||||
X116128800Y-98783200D03*
|
||||
X116128800Y-99283200D03*
|
||||
X116128800Y-99783200D03*
|
||||
X116128800Y-100283200D03*
|
||||
X116128800Y-100783200D03*
|
||||
X116128800Y-101283200D03*
|
||||
X116128800Y-101783200D03*
|
||||
X116128800Y-102283200D03*
|
||||
X116128800Y-102783200D03*
|
||||
X116128800Y-103283200D03*
|
||||
D29*
|
||||
X117541300Y-104695700D03*
|
||||
X118041300Y-104695700D03*
|
||||
X118541300Y-104695700D03*
|
||||
X119041300Y-104695700D03*
|
||||
X119541300Y-104695700D03*
|
||||
X120041300Y-104695700D03*
|
||||
X120541300Y-104695700D03*
|
||||
X121041300Y-104695700D03*
|
||||
X121541300Y-104695700D03*
|
||||
X122041300Y-104695700D03*
|
||||
X122541300Y-104695700D03*
|
||||
X123041300Y-104695700D03*
|
||||
D28*
|
||||
X124453800Y-103283200D03*
|
||||
X124453800Y-102783200D03*
|
||||
X124453800Y-102283200D03*
|
||||
X124453800Y-101783200D03*
|
||||
X124453800Y-101283200D03*
|
||||
X124453800Y-100783200D03*
|
||||
X124453800Y-100283200D03*
|
||||
X124453800Y-99783200D03*
|
||||
X124453800Y-99283200D03*
|
||||
X124453800Y-98783200D03*
|
||||
X124453800Y-98283200D03*
|
||||
X124453800Y-97783200D03*
|
||||
D29*
|
||||
X123041300Y-96370700D03*
|
||||
X122541300Y-96370700D03*
|
||||
X122041300Y-96370700D03*
|
||||
X121541300Y-96370700D03*
|
||||
X121041300Y-96370700D03*
|
||||
X120541300Y-96370700D03*
|
||||
X120041300Y-96370700D03*
|
||||
X119541300Y-96370700D03*
|
||||
X119041300Y-96370700D03*
|
||||
X118541300Y-96370700D03*
|
||||
X118041300Y-96370700D03*
|
||||
X117541300Y-96370700D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J6*%
|
||||
X144500000Y-53500000D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,D1*%
|
||||
X133950800Y-105968800D03*
|
||||
D31*
|
||||
X139750800Y-105968800D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,U4*%
|
||||
X100300000Y-106270000D03*
|
||||
X100300000Y-105000000D03*
|
||||
X100300000Y-103730000D03*
|
||||
X100300000Y-102460000D03*
|
||||
X100300000Y-101190000D03*
|
||||
X100300000Y-99920000D03*
|
||||
X100300000Y-98650000D03*
|
||||
X100300000Y-97380000D03*
|
||||
X91000000Y-97380000D03*
|
||||
X91000000Y-98650000D03*
|
||||
X91000000Y-99920000D03*
|
||||
X91000000Y-101190000D03*
|
||||
X91000000Y-102460000D03*
|
||||
X91000000Y-103730000D03*
|
||||
X91000000Y-105000000D03*
|
||||
X91000000Y-106270000D03*
|
||||
%TD*%
|
||||
D32*
|
||||
%TO.C,U5*%
|
||||
X121810000Y-71050000D03*
|
||||
X120540000Y-71050000D03*
|
||||
X119270000Y-71050000D03*
|
||||
X118000000Y-71050000D03*
|
||||
X116730000Y-71050000D03*
|
||||
X115460000Y-71050000D03*
|
||||
X114190000Y-71050000D03*
|
||||
X112920000Y-71050000D03*
|
||||
X112920000Y-76000000D03*
|
||||
X114190000Y-76000000D03*
|
||||
X115460000Y-76000000D03*
|
||||
X116730000Y-76000000D03*
|
||||
X118000000Y-76000000D03*
|
||||
X119270000Y-76000000D03*
|
||||
X120540000Y-76000000D03*
|
||||
X121810000Y-76000000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C18*%
|
||||
X120540000Y-68481600D03*
|
||||
X122615000Y-68481600D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,J3*%
|
||||
X145246400Y-77435400D03*
|
||||
D34*
|
||||
X145246400Y-78705400D03*
|
||||
X145246400Y-79975400D03*
|
||||
X145246400Y-81245400D03*
|
||||
X145246400Y-82515400D03*
|
||||
X145246400Y-83785400D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,R1*%
|
||||
X137308600Y-98552000D03*
|
||||
X135483600Y-98552000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C10*%
|
||||
X118159700Y-93878400D03*
|
||||
X116434700Y-93878400D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C3*%
|
||||
X126644400Y-88138000D03*
|
||||
X128719400Y-88138000D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,D2*%
|
||||
X133595200Y-119481600D03*
|
||||
D31*
|
||||
X139395200Y-119481600D03*
|
||||
%TD*%
|
||||
D35*
|
||||
%TO.C,Q1*%
|
||||
X127670800Y-100898000D03*
|
||||
X128970800Y-100898000D03*
|
||||
X128320800Y-98238000D03*
|
||||
%TD*%
|
||||
D36*
|
||||
%TO.C,C19*%
|
||||
X115460000Y-66508200D03*
|
||||
X115460000Y-68583200D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C21*%
|
||||
X92775200Y-75446800D03*
|
||||
X91050200Y-75446800D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,C6*%
|
||||
X113741200Y-102997000D03*
|
||||
X113741200Y-104722000D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,D8*%
|
||||
X83434300Y-74016700D03*
|
||||
X83434300Y-72116700D03*
|
||||
X81559300Y-73066700D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C13*%
|
||||
X98401000Y-112467600D03*
|
||||
X100476000Y-112467600D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,D4*%
|
||||
X83413500Y-103417500D03*
|
||||
X83413500Y-101517500D03*
|
||||
X81538500Y-102467500D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,R2*%
|
||||
X137310500Y-100482400D03*
|
||||
X135485500Y-100482400D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,C22*%
|
||||
X98472600Y-79409200D03*
|
||||
X100547600Y-79409200D03*
|
||||
%TD*%
|
||||
D14*
|
||||
%TO.C,D3*%
|
||||
X83362700Y-107075100D03*
|
||||
X83362700Y-105175100D03*
|
||||
X81487700Y-106125100D03*
|
||||
%TD*%
|
||||
D38*
|
||||
%TO.C,D6*%
|
||||
X126898800Y-62399800D03*
|
||||
X126898800Y-66399800D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,C20*%
|
||||
X98668000Y-75497600D03*
|
||||
X100393000Y-75497600D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C16*%
|
||||
X122064000Y-78336800D03*
|
||||
X120339000Y-78336800D03*
|
||||
%TD*%
|
||||
D39*
|
||||
%TO.C,R4*%
|
||||
X130911600Y-94999800D03*
|
||||
X130911600Y-96824800D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,C12*%
|
||||
X92703600Y-108505200D03*
|
||||
X90978600Y-108505200D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,R5*%
|
||||
X112014000Y-104749600D03*
|
||||
X110189000Y-104749600D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,J9*%
|
||||
X117673600Y-53459000D03*
|
||||
X125173600Y-53459000D03*
|
||||
D41*
|
||||
X119583600Y-59809000D03*
|
||||
D42*
|
||||
X120853600Y-62349000D03*
|
||||
X122123600Y-59809000D03*
|
||||
X123393600Y-62349000D03*
|
||||
%TD*%
|
||||
D43*
|
||||
%TO.C,Y1*%
|
||||
X111157400Y-97780000D03*
|
||||
X111157400Y-102660000D03*
|
||||
%TD*%
|
||||
D44*
|
||||
%TO.C,Q3*%
|
||||
X100750800Y-82000000D03*
|
||||
X98210800Y-82000000D03*
|
||||
D45*
|
||||
X93130800Y-82000000D03*
|
||||
X88050800Y-82000000D03*
|
||||
%TD*%
|
||||
D44*
|
||||
%TO.C,Q2*%
|
||||
X100679200Y-115058400D03*
|
||||
X98139200Y-115058400D03*
|
||||
D45*
|
||||
X93059200Y-115058400D03*
|
||||
X87979200Y-115058400D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,J8*%
|
||||
X78870900Y-119604300D03*
|
||||
X78870900Y-94604300D03*
|
||||
D47*
|
||||
X79170900Y-101564300D03*
|
||||
D48*
|
||||
X79170900Y-104334300D03*
|
||||
X79170900Y-107104300D03*
|
||||
X79170900Y-109874300D03*
|
||||
X79170900Y-112644300D03*
|
||||
X76330900Y-102949300D03*
|
||||
X76330900Y-105719300D03*
|
||||
X76330900Y-108489300D03*
|
||||
X76330900Y-111259300D03*
|
||||
%TD*%
|
||||
D49*
|
||||
%TO.C,J1*%
|
||||
X143357600Y-114500000D03*
|
||||
D50*
|
||||
X143357600Y-119500000D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,J10*%
|
||||
X78942500Y-86545900D03*
|
||||
X78942500Y-61545900D03*
|
||||
D47*
|
||||
X79242500Y-68505900D03*
|
||||
D48*
|
||||
X79242500Y-71275900D03*
|
||||
X79242500Y-74045900D03*
|
||||
X79242500Y-76815900D03*
|
||||
X79242500Y-79585900D03*
|
||||
X76402500Y-69890900D03*
|
||||
X76402500Y-72660900D03*
|
||||
X76402500Y-75430900D03*
|
||||
X76402500Y-78200900D03*
|
||||
%TD*%
|
||||
D51*
|
||||
%TO.C,J2*%
|
||||
X140544800Y-102108000D03*
|
||||
D52*
|
||||
X140544800Y-99608000D03*
|
||||
X142544800Y-99608000D03*
|
||||
X142544800Y-102108000D03*
|
||||
D53*
|
||||
X145254800Y-94838000D03*
|
||||
X145254800Y-106878000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
3708
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Silkscreen.gbr
Normal file
3708
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-F_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load Diff
35
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-drl.rpt
Normal file
35
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-drl.rpt
Normal file
@ -0,0 +1,35 @@
|
||||
Drill report for encoder.kicad_pcb
|
||||
Created on 2025-04-04T18:35:21+0300
|
||||
|
||||
Copper Layer Stackup:
|
||||
=============================================================
|
||||
L1 : F.Cu front
|
||||
L2 : B.Cu back
|
||||
|
||||
|
||||
Drill file 'encoder.drl' contains
|
||||
plated through holes:
|
||||
=============================================================
|
||||
T1 0.400mm 0.0157" (52 holes)
|
||||
T2 0.600mm 0.0236" (5 holes)
|
||||
T3 0.600mm 0.0236" (8 holes)
|
||||
T4 0.700mm 0.0276" (6 holes)
|
||||
T5 0.800mm 0.0315" (2 holes)
|
||||
T6 0.900mm 0.0354" (4 holes)
|
||||
T7 0.920mm 0.0362" (4 holes)
|
||||
T8 1.000mm 0.0394" (18 holes)
|
||||
T9 1.300mm 0.0512" (2 holes)
|
||||
T10 1.500mm 0.0591" (3 holes)
|
||||
T11 2.330mm 0.0917" (2 holes)
|
||||
T12 3.200mm 0.1260" (4 holes)
|
||||
|
||||
Total plated holes count 110
|
||||
|
||||
|
||||
Not plated through holes are merged with plated holes
|
||||
unplated through holes:
|
||||
=============================================================
|
||||
T13 3.200mm 0.1260" (5 holes)
|
||||
T14 3.250mm 0.1280" (1 hole)
|
||||
|
||||
Total unplated holes count 6
|
||||
109
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-job.gbrjob
Normal file
109
F1:F103/BISS_C_encoders/kicad/gerbers/encoder-job.gbrjob
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "9.0.0"
|
||||
},
|
||||
"CreationDate": "2025-04-04T18:35:26+03:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "encoder",
|
||||
"GUID": "656e636f-6465-4722-9e6b-696361645f70",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 78.05,
|
||||
"Y": 81.05
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "HAL SnPb"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.2,
|
||||
"PadToTrack": 0.2,
|
||||
"TrackToTrack": 0.2,
|
||||
"MinLineWidth": 0.2,
|
||||
"TrackToRegion": 0.2,
|
||||
"RegionToRegion": 0.2
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "encoder-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "encoder-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Thickness": 1.51,
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
170
F1:F103/BISS_C_encoders/kicad/gerbers/encoder.drl
Normal file
170
F1:F103/BISS_C_encoders/kicad/gerbers/encoder.drl
Normal file
@ -0,0 +1,170 @@
|
||||
M48
|
||||
; DRILL file {KiCad 9.0.0} date 2025-04-04T18:35:22+0300
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2025-04-04T18:35:22+03:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.0
|
||||
; #@! TF.FileFunction,MixedPlating,1,2
|
||||
FMAT,2
|
||||
METRIC
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T1C0.400
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T2C0.600
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T3C0.600
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T4C0.700
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T5C0.800
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T6C0.900
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T7C0.920
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T8C1.000
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T9C1.300
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T10C1.500
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T11C2.330
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T12C3.200
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T13C3.200
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T14C3.250
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X81.488Y-106.125
|
||||
X81.559Y-73.067
|
||||
X83.363Y-105.175
|
||||
X83.413Y-101.517
|
||||
X83.434Y-72.117
|
||||
X83.485Y-68.459
|
||||
X103.124Y-98.65
|
||||
X103.175Y-86.055
|
||||
X103.175Y-87.921
|
||||
X103.378Y-111.354
|
||||
X103.429Y-113.284
|
||||
X105.308Y-111.354
|
||||
X105.308Y-113.233
|
||||
X106.832Y-82.855
|
||||
X106.832Y-86.106
|
||||
X108.102Y-69.139
|
||||
X109.068Y-102.311
|
||||
X110.236Y-69.139
|
||||
X112.014Y-104.75
|
||||
X112.37Y-69.088
|
||||
X113.741Y-102.997
|
||||
X114.097Y-77.927
|
||||
X114.605Y-60.909
|
||||
X114.656Y-58.674
|
||||
X116.535Y-105.816
|
||||
X117.683Y-106.72
|
||||
X118.0Y-76.0
|
||||
X118.516Y-78.384
|
||||
X118.711Y-107.745
|
||||
X119.27Y-76.0
|
||||
X120.54Y-76.098
|
||||
X121.183Y-100.863
|
||||
X121.31Y-72.796
|
||||
X122.123Y-94.234
|
||||
X122.834Y-70.968
|
||||
X122.834Y-73.812
|
||||
X123.038Y-90.373
|
||||
X126.441Y-103.008
|
||||
X126.594Y-94.435
|
||||
X126.848Y-69.728
|
||||
X126.899Y-62.4
|
||||
X127.508Y-96.114
|
||||
X128.067Y-102.972
|
||||
X128.981Y-100.889
|
||||
X132.893Y-96.723
|
||||
X132.893Y-109.372
|
||||
X132.944Y-103.175
|
||||
X134.874Y-96.723
|
||||
X134.874Y-109.372
|
||||
X134.925Y-103.175
|
||||
X139.5Y-104.0
|
||||
X143.358Y-84.938
|
||||
T2
|
||||
X100.679Y-120.138
|
||||
X100.751Y-87.08
|
||||
X109.17Y-65.554
|
||||
X133.909Y-105.969
|
||||
X133.96Y-92.71
|
||||
T3
|
||||
X87.979Y-115.058
|
||||
X88.051Y-82.0
|
||||
X93.059Y-115.058
|
||||
X93.131Y-82.0
|
||||
X98.139Y-115.058
|
||||
X98.211Y-82.0
|
||||
X100.679Y-115.058
|
||||
X100.751Y-82.0
|
||||
T4
|
||||
X145.246Y-77.435
|
||||
X145.246Y-78.705
|
||||
X145.246Y-79.975
|
||||
X145.246Y-81.245
|
||||
X145.246Y-82.515
|
||||
X145.246Y-83.785
|
||||
T5
|
||||
X111.157Y-97.78
|
||||
X111.157Y-102.66
|
||||
T6
|
||||
X119.584Y-59.809
|
||||
X120.854Y-62.349
|
||||
X122.124Y-59.809
|
||||
X123.394Y-62.349
|
||||
T7
|
||||
X140.545Y-99.608
|
||||
X140.545Y-102.108
|
||||
X142.545Y-99.608
|
||||
X142.545Y-102.108
|
||||
T8
|
||||
X76.331Y-102.949
|
||||
X76.331Y-105.719
|
||||
X76.331Y-108.489
|
||||
X76.331Y-111.259
|
||||
X76.403Y-69.891
|
||||
X76.403Y-72.661
|
||||
X76.403Y-75.431
|
||||
X76.403Y-78.201
|
||||
X79.171Y-101.564
|
||||
X79.171Y-104.334
|
||||
X79.171Y-107.104
|
||||
X79.171Y-109.874
|
||||
X79.171Y-112.644
|
||||
X79.242Y-68.506
|
||||
X79.242Y-71.276
|
||||
X79.242Y-74.046
|
||||
X79.242Y-76.816
|
||||
X79.242Y-79.586
|
||||
T9
|
||||
X143.358Y-114.5
|
||||
X143.358Y-119.5
|
||||
T10
|
||||
X129.5Y-106.0
|
||||
X129.5Y-111.0
|
||||
X144.0Y-90.0
|
||||
T11
|
||||
X145.255Y-94.838
|
||||
X145.255Y-106.878
|
||||
T12
|
||||
X78.871Y-94.604
|
||||
X78.871Y-119.604
|
||||
X78.942Y-61.546
|
||||
X78.942Y-86.546
|
||||
T13
|
||||
X74.5Y-53.5
|
||||
X74.5Y-126.5
|
||||
X117.674Y-53.459
|
||||
X144.5Y-53.5
|
||||
X144.5Y-126.5
|
||||
T14
|
||||
X125.174Y-53.459
|
||||
M30
|
||||
110
F1:F103/BISS_C_encoders/kicad/iso3086.kicad_sym
Normal file
110
F1:F103/BISS_C_encoders/kicad/iso3086.kicad_sym
Normal file
@ -0,0 +1,110 @@
|
||||
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
|
||||
(symbol "ISO3086" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (id 0) (at 0 20.32 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "ISO3086" (id 1) (at 0 17.78 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "RS422 isolator" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "ISO3086_0_0"
|
||||
(rectangle (start -11.43 15.24) (end 13.97 -15.24)
|
||||
(stroke (width 0.254) (type default) (color 0 0 0 0))
|
||||
(fill (type background))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 15.24)
|
||||
(xy -1.27 -15.24)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 15.24)
|
||||
(xy 1.27 -15.24)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "GALVANIC ISOLATION" (at 0 0.508 900)
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(symbol "ISO3086_1_1"
|
||||
(pin power_in line (at -6.35 17.78 270) (length 2.54)
|
||||
(name "Vcc1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 8.89 -17.78 90) (length 2.54)
|
||||
(name "GND2" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin bidirectional line (at 16.51 -8.89 180) (length 2.54)
|
||||
(name "Y" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin bidirectional line (at 16.51 -5.08 180) (length 2.54)
|
||||
(name "Z" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin bidirectional line (at 16.51 5.08 180) (length 2.54)
|
||||
(name "B" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin bidirectional line (at 16.51 8.89 180) (length 2.54)
|
||||
(name "A" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 11.43 -17.78 90) (length 2.54)
|
||||
(name "GND2" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 8.89 17.78 270) (length 2.54)
|
||||
(name "Vcc2" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at -8.89 -17.78 90) (length 2.54)
|
||||
(name "GND1" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin output line (at -13.97 -2.54 0) (length 2.54)
|
||||
(name "R" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -13.97 -5.08 0) (length 2.54)
|
||||
(name "~{RE}" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -13.97 7.62 0) (length 2.54)
|
||||
(name "DE" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at -13.97 2.54 0) (length 2.54)
|
||||
(name "D" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at -6.35 -17.78 90) (length 2.54)
|
||||
(name "GND1" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at -3.81 -17.78 90) (length 2.54)
|
||||
(name "GND1" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 6.35 -17.78 90) (length 2.54)
|
||||
(name "GND2" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
2879
F1:F103/BISS_C_encoders/kicad/isolated_232.kicad_sch
Normal file
2879
F1:F103/BISS_C_encoders/kicad/isolated_232.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,19 @@
|
||||
(footprint "B0505S-2W" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 0)
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at 10.2 7.2 unlocked) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 063944c1-1524-42ff-905d-c6b885fc84e4)
|
||||
)
|
||||
(fp_text value "B0505S-2W" (at 11.4 3.1 unlocked) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 7415e127-24bc-4666-a29b-ff109d7551a2)
|
||||
)
|
||||
(fp_rect (start -2 -0.9) (end 17.6 6.1) (layer "F.SilkS") (width 0.15) (fill none) (tstamp 57bbab45-a75a-4905-a574-87517a61f8db))
|
||||
(fp_line (start 5.08 -2.54) (end 5.08 7.62) (layer "Dwgs.User") (width 0.12) (tstamp a22d139b-ae36-48a3-b52e-1d45f780278d))
|
||||
(pad "1" thru_hole roundrect (at 0 0) (size 2 1.524) (drill 0.6) (layers *.Cu *.Mask) (roundrect_rratio 0.25) (tstamp ddbc7909-3eed-4032-bb90-06d3d67deab6))
|
||||
(pad "2" thru_hole roundrect (at 2.54 0) (size 2 1.524) (drill 0.6) (layers *.Cu *.Mask) (roundrect_rratio 0.25) (tstamp e2c7f9a0-cd9c-40f2-8bc0-64127c765f0d))
|
||||
(pad "4" thru_hole roundrect (at 7.62 0) (size 2.286 1.524) (drill 0.6) (layers *.Cu *.Mask) (roundrect_rratio 0.25) (tstamp ab22ff25-f082-49df-a551-c9a53e6f86a3))
|
||||
(pad "6" thru_hole roundrect (at 12.7 0) (size 2.286 1.524) (drill 0.6) (layers *.Cu *.Mask) (roundrect_rratio 0.25) (tstamp 2c7aecb6-ba12-4511-83ea-d194a95071b1))
|
||||
)
|
||||
@ -0,0 +1,215 @@
|
||||
(footprint "B0x0xS"
|
||||
(version 20250309)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -2.54 2.286 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "ee98884c-b01e-42c7-8815-70c63ca0380a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "B0x0xS"
|
||||
(at 0 -3.048 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "1a9a2254-801e-44cc-8499-5009849477a8")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "bc9c3dde-2efe-45e1-bd44-32a6ae7e881e")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "a468b167-8529-4df4-bd4f-e1bfc8c650fc")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -5.8 -5.1)
|
||||
(end -5.8 0.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "91575876-2f5f-4300-a59e-6327bd41978a")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.8 0.9)
|
||||
(end -0.7112 0.9144)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "da822648-b16d-46ef-87d0-571b66c556db")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.508 -5.08)
|
||||
(end -5.8 -5.1)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "8e59ddde-6d7b-4614-9742-26db8138db0f")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.8 -5.1)
|
||||
(end 0.508 -5.08)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f87c72b9-c305-489a-bd04-b4a4d58b725c")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.8 -5.1)
|
||||
(end 5.8 0.9)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "dbc34d16-64b1-40be-9926-084f9486b43d")
|
||||
)
|
||||
(fp_line
|
||||
(start 5.8 0.9)
|
||||
(end 0.7112 0.9144)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0b84b7ec-816f-417e-80c2-0f03b7ee6c7b")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.254 -5.0292)
|
||||
(end -0.254 1.0668)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "a79606de-8ac2-4d48-8694-8906053dee31")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.254 1.0668)
|
||||
(end 0.254 -5.0292)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "935182ad-231d-4492-a2e6-b8ef4f61bdd9")
|
||||
)
|
||||
(fp_arc
|
||||
(start -0.254 -5.0292)
|
||||
(mid 0 -5.2832)
|
||||
(end 0.254 -5.0292)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "376daf3d-77a6-4454-837b-ecaaa3bfab58")
|
||||
)
|
||||
(fp_arc
|
||||
(start 0.254 1.0668)
|
||||
(mid 0 1.3208)
|
||||
(end -0.254 1.0668)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "f817554e-83c7-4eb1-9e73-a6b2db3e941a")
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at -3.81 0)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(tenting
|
||||
(front none)
|
||||
(back none)
|
||||
)
|
||||
(uuid "3679fd64-6d94-4bd2-ac77-833e9fb0e6b1")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at -1.27 0)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(tenting
|
||||
(front none)
|
||||
(back none)
|
||||
)
|
||||
(uuid "51cfc21e-2343-41b5-b7a1-6cbb380df6a0")
|
||||
)
|
||||
(pad "3" thru_hole circle
|
||||
(at 1.27 0)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(tenting
|
||||
(front none)
|
||||
(back none)
|
||||
)
|
||||
(uuid "753f1d53-de67-4ec3-9369-8afe92344e33")
|
||||
)
|
||||
(pad "4" thru_hole circle
|
||||
(at 3.81 0)
|
||||
(size 1.5 1.5)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(tenting
|
||||
(front none)
|
||||
(back none)
|
||||
)
|
||||
(uuid "ca5c819c-51a9-4cb4-96b3-826dc377af10")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KICAD8_3DMODEL_DIR}/Converter_DCDC.3dshapes/Converter_DCDC_Murata_CRE1xxxxxx3C_THT.wrl"
|
||||
(offset
|
||||
(xyz -3.85 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -90)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -0,0 +1,65 @@
|
||||
(module DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm (layer F.Cu) (tedit 59FEDEE2)
|
||||
(descr "9-pin D-Sub connector, horizontal/angled (90 deg), THT-mount, female, pitch 2.77x2.84mm, pin-PCB-offset 4.9399999999999995mm, distance of mounting holes 25mm, distance of mounting holes to PCB edge 7.4799999999999995mm, see https://disti-assets.s3.amazonaws.com/tonar/files/datasheets/16730.pdf")
|
||||
(tags "9-pin D-Sub connector horizontal angled 90deg THT female pitch 2.77x2.84mm pin-PCB-offset 4.9399999999999995mm mounting-holes-distance 25mm mounting-hole-offset 25mm")
|
||||
(fp_text reference REF** (at -5.54 -3.7) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm (at -5.54 15.85) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_arc (start -18.04 0.3) (end -19.64 0.3) (angle 180.000000) (layer F.Fab) (width 0.1))
|
||||
(fp_arc (start 6.96 0.3) (end 5.36 0.3) (angle 180.000000) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.965 -2.7) (end -20.965 7.78) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.965 7.78) (end 9.885 7.78) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.885 7.78) (end 9.885 -2.7) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.885 -2.7) (end -20.965 -2.7) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.965 7.78) (end -20.965 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.965 8.18) (end 9.885 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.885 8.18) (end 9.885 7.78) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.885 7.78) (end -20.965 7.78) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -13.69 8.18) (end -13.69 14.35) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -13.69 14.35) (end 2.61 14.35) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 2.61 14.35) (end 2.61 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 2.61 8.18) (end -13.69 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.54 8.18) (end -20.54 13.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -20.54 13.18) (end -15.54 13.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -15.54 13.18) (end -15.54 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -15.54 8.18) (end -20.54 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 4.46 8.18) (end 4.46 13.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 4.46 13.18) (end 9.46 13.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.46 13.18) (end 9.46 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 9.46 8.18) (end 4.46 8.18) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -19.64 7.78) (end -19.64 0.3) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -16.44 7.78) (end -16.44 0.3) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 5.36 7.78) (end 5.36 0.3) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 8.56 7.78) (end 8.56 0.3) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -21.025 7.72) (end -21.025 -2.76) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -21.025 -2.76) (end 9.945 -2.76) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 9.945 -2.76) (end 9.945 7.72) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -0.25 -3.654338) (end 0.25 -3.654338) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 0.25 -3.654338) (end 0 -3.221325) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 0 -3.221325) (end -0.25 -3.654338) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -21.5 -3.25) (end -21.5 14.85) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -21.5 14.85) (end 10.4 14.85) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 10.4 14.85) (end 10.4 -3.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 10.4 -3.25) (end -21.5 -3.25) (layer F.CrtYd) (width 0.05))
|
||||
(pad 1 thru_hole rect (at 0 0) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 2 thru_hole circle (at -2.77 0) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 3 thru_hole circle (at -5.54 0) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 4 thru_hole circle (at -8.31 0) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 5 thru_hole circle (at -11.08 0) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 6 thru_hole circle (at -1.385 2.84) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 7 thru_hole circle (at -4.155 2.84) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 8 thru_hole circle (at -6.925 2.84) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 9 thru_hole circle (at -9.695 2.84) (size 1.6 1.6) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 0 thru_hole circle (at -18.04 0.3) (size 4 4) (drill 3.2) (layers *.Cu *.Mask))
|
||||
(pad 0 thru_hole circle (at 6.96 0.3) (size 4 4) (drill 3.2) (layers *.Cu *.Mask))
|
||||
(fp_text user %R (at -5.54 11.265) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(model ${KISYS3DMOD}/Connector_Dsub.3dshapes/DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
@ -0,0 +1,9 @@
|
||||
(module Hole_3mm (layer F.Cu) (tedit 5913F6E4)
|
||||
(fp_text reference REF** (at 0 3.81) (layer F.SilkS) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value Hole_3mm (at 0 -7.62) (layer F.Fab) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(pad 1 thru_hole circle (at 0 0) (size 5 5) (drill 3) (layers *.Cu *.Mask))
|
||||
)
|
||||
2096
F1:F103/BISS_C_encoders/kicad/my_footprints.pretty/QR.kicad_mod
Normal file
2096
F1:F103/BISS_C_encoders/kicad/my_footprints.pretty/QR.kicad_mod
Normal file
File diff suppressed because it is too large
Load Diff
BIN
F1:F103/BISS_C_encoders/kicad/my_footprints.pretty/QR.png
Normal file
BIN
F1:F103/BISS_C_encoders/kicad/my_footprints.pretty/QR.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 733 B |
@ -0,0 +1,31 @@
|
||||
(module RJ9-4P4C (layer F.Cu) (tedit 555F7A30)
|
||||
(fp_text reference J** (at 0 -10.1346) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value RJ9-4P4C (at 0 10.2108) (layer F.Fab) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_circle (center 0 0) (end -0.25 0) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -5.84 -9.25) (end 5.84 -9.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 5.84 -9.25) (end 5.84 9.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 5.84 9.25) (end -5.84 9.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -5.84 9.25) (end -5.84 -9.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0 -0.35) (end 0 0.35) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -0.35 0) (end 0.35 0) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -5.59 9) (end -5.59 -9) (layer F.Fab) (width 0.12))
|
||||
(fp_line (start -5.59 -9) (end 5.59 -9) (layer F.Fab) (width 0.12))
|
||||
(fp_line (start 5.59 -9) (end 5.59 9) (layer F.Fab) (width 0.12))
|
||||
(fp_line (start 5.59 9) (end -5.59 9) (layer F.Fab) (width 0.12))
|
||||
(fp_line (start -5.59 8.8) (end -5.59 -9) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -5.59 -9) (end 5.59 -9) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 5.59 -9) (end 5.59 8.8) (layer F.SilkS) (width 0.12))
|
||||
(fp_circle (center 3.81 1.15) (end 5.75 1.15) (layer B.CrtYd) (width 0.05))
|
||||
(fp_circle (center -3.81 1.15) (end -5.75 1.15) (layer B.CrtYd) (width 0.05))
|
||||
(fp_circle (center -1.905 -6.12) (end -1.805 -6.12) (layer F.SilkS) (width 0.2))
|
||||
(pad 1 thru_hole circle (at -1.905 -5.2) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask))
|
||||
(pad 2 thru_hole circle (at -0.635 -7.74) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask))
|
||||
(pad 3 thru_hole circle (at 0.635 -5.2) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask))
|
||||
(pad 4 thru_hole circle (at 1.905 -7.74) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask))
|
||||
(pad "" np_thru_hole circle (at -3.81 1.15) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask))
|
||||
(pad "" np_thru_hole circle (at 3.81 1.15) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask))
|
||||
)
|
||||
3555
F1:F103/BISS_C_encoders/kicad/ssi_422.kicad_sch
Normal file
3555
F1:F103/BISS_C_encoders/kicad/ssi_422.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
5
F1:F103/BISS_C_encoders/kicad/sym-lib-table
Normal file
5
F1:F103/BISS_C_encoders/kicad/sym-lib-table
Normal file
@ -0,0 +1,5 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "iso3086")(type "KiCad")(uri "${KIPRJMOD}/iso3086.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "elements")(type "KiCad")(uri "${KIPRJMOD}/elements.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
@ -27,6 +27,7 @@
|
||||
|
||||
volatile uint32_t Tms = 0;
|
||||
static char inbuff[RBINSZ];
|
||||
static uint32_t monitT[2] = {0};
|
||||
|
||||
/* Called when systick fires */
|
||||
void sys_tick_handler(void){
|
||||
@ -47,7 +48,6 @@ static void printResult(BiSS_Frame *result){
|
||||
}
|
||||
|
||||
static void proc_enc(uint8_t idx){
|
||||
uint8_t encbuf[ENCODER_BUFSZ];
|
||||
static uint32_t lastMSG[2], gotgood[2], gotwrong[2];
|
||||
int iface = idx ? I_Y : I_X;
|
||||
char ifacechr = idx ? 'Y' : 'X';
|
||||
@ -65,9 +65,11 @@ static void proc_enc(uint8_t idx){
|
||||
CMDWR("'\n");
|
||||
}
|
||||
}
|
||||
if(l > 0) spi_start_enc(idx); // start encoder reading on each request from given interface
|
||||
}
|
||||
if(!spi_read_enc(idx, encbuf)) return;
|
||||
BiSS_Frame result = parse_biss_frame(encbuf, ENCODER_BUFSZ);
|
||||
uint8_t *encbuf = spi_read_enc(idx);
|
||||
if(!encbuf) return;
|
||||
BiSS_Frame result = parse_biss_frame(encbuf, the_conf.encbufsz);
|
||||
char *str = result.crc_valid ? u2str(result.data) : NULL;
|
||||
uint8_t testflag = (idx) ? user_pars.testy : user_pars.testx;
|
||||
if(CDCready[I_CMD]){
|
||||
@ -86,11 +88,11 @@ static void proc_enc(uint8_t idx){
|
||||
if(str) ++gotgood[idx];
|
||||
else ++gotwrong[idx];
|
||||
}
|
||||
}else{
|
||||
}else if(!the_conf.flags.monit){
|
||||
printResult(&result);
|
||||
CMDWR("ENC"); USB_putbyte(I_CMD, ifacechr);
|
||||
USB_putbyte(I_CMD, '=');
|
||||
hexdump(I_CMD, encbuf, ENCODER_BUFSZ);
|
||||
hexdump(I_CMD, encbuf, the_conf.encbufsz);
|
||||
CMDWR(" (");
|
||||
if(str) CMDWR(str);
|
||||
else CMDWR("wrong");
|
||||
@ -102,22 +104,17 @@ static void proc_enc(uint8_t idx){
|
||||
USB_putbyte(iface, '\n');
|
||||
}
|
||||
if(result.error) spi_setup(1+idx); // reinit SPI in case of error
|
||||
if(testflag) spi_start_enc(idx);
|
||||
if(the_conf.flags.monit) monitT[idx] = Tms;
|
||||
else if(testflag) spi_start_enc(idx);
|
||||
}
|
||||
|
||||
int main(){
|
||||
uint32_t lastT = 0;//, lastS = 0;
|
||||
uint32_t lastT = 0;
|
||||
StartHSE();
|
||||
flashstorage_init();
|
||||
hw_setup();
|
||||
USBPU_OFF();
|
||||
SysTick_Config(72000);
|
||||
/*
|
||||
#ifdef EBUG
|
||||
usart_setup();
|
||||
uint32_t tt = 0;
|
||||
#endif
|
||||
*/
|
||||
USB_setup();
|
||||
#ifndef EBUG
|
||||
iwdg_setup();
|
||||
@ -129,29 +126,18 @@ int main(){
|
||||
LED_blink(LED0);
|
||||
lastT = Tms;
|
||||
}
|
||||
/*
|
||||
#ifdef EBUG
|
||||
if(Tms != tt){
|
||||
__disable_irq();
|
||||
usart_transmit();
|
||||
tt = Tms;
|
||||
__enable_irq();
|
||||
}
|
||||
#endif
|
||||
*/
|
||||
if(CDCready[I_CMD]){
|
||||
/*if(Tms - lastS > 9999){
|
||||
USB_sendstr(I_CMD, "Tms=");
|
||||
USB_sendstr(I_CMD, u2str(Tms));
|
||||
CMDn();
|
||||
lastS = Tms;
|
||||
}*/
|
||||
int l = USB_receivestr(I_CMD, inbuff, RBINSZ);
|
||||
if(l < 0) CMDWRn("ERROR: CMD USB buffer overflow or string was too long");
|
||||
else if(l) parse_cmd(inbuff);
|
||||
}
|
||||
proc_enc(0);
|
||||
proc_enc(1);
|
||||
if(the_conf.flags.monit){
|
||||
for(int i = 0; i < 2; ++i){
|
||||
if(Tms - monitT[i] >= the_conf.monittime) spi_start_enc(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1,94 +1,4 @@
|
||||
set FLASH_SIZE 0x10000
|
||||
|
||||
source [find interface/stlink.cfg]
|
||||
|
||||
|
||||
# script for stm32f1x family
|
||||
|
||||
#
|
||||
# stm32 devices support both JTAG and SWD transports.
|
||||
#
|
||||
source [find target/swj-dp.tcl]
|
||||
source [find mem_helper.tcl]
|
||||
|
||||
if { [info exists CHIPNAME] } {
|
||||
set _CHIPNAME $CHIPNAME
|
||||
} else {
|
||||
set _CHIPNAME stm32f1x
|
||||
}
|
||||
|
||||
set _ENDIAN little
|
||||
|
||||
# Work-area is a space in RAM used for flash programming
|
||||
# By default use 4kB (as found on some STM32F100s)
|
||||
if { [info exists WORKAREASIZE] } {
|
||||
set _WORKAREASIZE $WORKAREASIZE
|
||||
} else {
|
||||
set _WORKAREASIZE 0x1000
|
||||
}
|
||||
|
||||
# Allow overriding the Flash bank size
|
||||
if { [info exists FLASH_SIZE] } {
|
||||
set _FLASH_SIZE $FLASH_SIZE
|
||||
} else {
|
||||
# autodetect size
|
||||
set _FLASH_SIZE 0
|
||||
}
|
||||
|
||||
#jtag scan chain
|
||||
if { [info exists CPUTAPID] } {
|
||||
set _CPUTAPID $CPUTAPID
|
||||
} else {
|
||||
if { [using_jtag] } {
|
||||
# See STM Document RM0008 Section 26.6.3
|
||||
set _CPUTAPID 0x2ba01477
|
||||
} {
|
||||
# this is the SW-DP tap id not the jtag tap id
|
||||
set _CPUTAPID 0x2ba01477
|
||||
}
|
||||
}
|
||||
|
||||
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
|
||||
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
|
||||
|
||||
if {[using_jtag]} {
|
||||
jtag newtap $_CHIPNAME bs -irlen 5
|
||||
}
|
||||
|
||||
set _TARGETNAME $_CHIPNAME.cpu
|
||||
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
|
||||
|
||||
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
|
||||
|
||||
# flash size will be probed
|
||||
set _FLASHNAME $_CHIPNAME.flash
|
||||
flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME
|
||||
|
||||
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
|
||||
adapter_khz 1000
|
||||
|
||||
adapter_nsrst_delay 100
|
||||
if {[using_jtag]} {
|
||||
jtag_ntrst_delay 100
|
||||
}
|
||||
|
||||
reset_config srst_nogate
|
||||
|
||||
if {![using_hla]} {
|
||||
# if srst is not fitted use SYSRESETREQ to
|
||||
# perform a soft reset
|
||||
cortex_m reset_config sysresetreq
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event examine-end {
|
||||
# DBGMCU_CR |= DBG_WWDG_STOP | DBG_IWDG_STOP |
|
||||
# DBG_STANDBY | DBG_STOP | DBG_SLEEP
|
||||
mmw 0xE0042004 0x00000307 0
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event trace-config {
|
||||
# Set TRACE_IOEN; TRACE_MODE is set to async; when using sync
|
||||
# change this value accordingly to configure trace pins
|
||||
# assignment
|
||||
mmw 0xE0042004 0x00000020 0
|
||||
}
|
||||
source [find target/stm32f1x.cfg]
|
||||
|
||||
94
F1:F103/BISS_C_encoders/openocd.cfg_cs32
Normal file
94
F1:F103/BISS_C_encoders/openocd.cfg_cs32
Normal file
@ -0,0 +1,94 @@
|
||||
set FLASH_SIZE 0x10000
|
||||
|
||||
source [find interface/stlink.cfg]
|
||||
|
||||
|
||||
# script for stm32f1x family
|
||||
|
||||
#
|
||||
# stm32 devices support both JTAG and SWD transports.
|
||||
#
|
||||
source [find target/swj-dp.tcl]
|
||||
source [find mem_helper.tcl]
|
||||
|
||||
if { [info exists CHIPNAME] } {
|
||||
set _CHIPNAME $CHIPNAME
|
||||
} else {
|
||||
set _CHIPNAME stm32f1x
|
||||
}
|
||||
|
||||
set _ENDIAN little
|
||||
|
||||
# Work-area is a space in RAM used for flash programming
|
||||
# By default use 4kB (as found on some STM32F100s)
|
||||
if { [info exists WORKAREASIZE] } {
|
||||
set _WORKAREASIZE $WORKAREASIZE
|
||||
} else {
|
||||
set _WORKAREASIZE 0x1000
|
||||
}
|
||||
|
||||
# Allow overriding the Flash bank size
|
||||
if { [info exists FLASH_SIZE] } {
|
||||
set _FLASH_SIZE $FLASH_SIZE
|
||||
} else {
|
||||
# autodetect size
|
||||
set _FLASH_SIZE 0
|
||||
}
|
||||
|
||||
#jtag scan chain
|
||||
if { [info exists CPUTAPID] } {
|
||||
set _CPUTAPID $CPUTAPID
|
||||
} else {
|
||||
if { [using_jtag] } {
|
||||
# See STM Document RM0008 Section 26.6.3
|
||||
set _CPUTAPID 0x2ba01477
|
||||
} {
|
||||
# this is the SW-DP tap id not the jtag tap id
|
||||
set _CPUTAPID 0x2ba01477
|
||||
}
|
||||
}
|
||||
|
||||
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
|
||||
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
|
||||
|
||||
if {[using_jtag]} {
|
||||
jtag newtap $_CHIPNAME bs -irlen 5
|
||||
}
|
||||
|
||||
set _TARGETNAME $_CHIPNAME.cpu
|
||||
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
|
||||
|
||||
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
|
||||
|
||||
# flash size will be probed
|
||||
set _FLASHNAME $_CHIPNAME.flash
|
||||
flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME
|
||||
|
||||
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
|
||||
adapter_khz 1000
|
||||
|
||||
adapter_nsrst_delay 100
|
||||
if {[using_jtag]} {
|
||||
jtag_ntrst_delay 100
|
||||
}
|
||||
|
||||
reset_config srst_nogate
|
||||
|
||||
if {![using_hla]} {
|
||||
# if srst is not fitted use SYSRESETREQ to
|
||||
# perform a soft reset
|
||||
cortex_m reset_config sysresetreq
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event examine-end {
|
||||
# DBGMCU_CR |= DBG_WWDG_STOP | DBG_IWDG_STOP |
|
||||
# DBG_STANDBY | DBG_STOP | DBG_SLEEP
|
||||
mmw 0xE0042004 0x00000307 0
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event trace-config {
|
||||
# Set TRACE_IOEN; TRACE_MODE is set to async; when using sync
|
||||
# change this value accordingly to configure trace pins
|
||||
# assignment
|
||||
mmw 0xE0042004 0x00000020 0
|
||||
}
|
||||
@ -72,6 +72,11 @@ typedef enum{
|
||||
C_encbits,
|
||||
C_testX,
|
||||
C_testY,
|
||||
C_encbufsz,
|
||||
C_minzeros,
|
||||
C_maxzeros,
|
||||
C_autom,
|
||||
C_amperiod,
|
||||
C_AMOUNT
|
||||
} cmd_e;
|
||||
|
||||
@ -223,58 +228,64 @@ static errcode_e spideinit(_U_ cmd_e idx, _U_ char *par){
|
||||
return ERR_SILENCE;
|
||||
}
|
||||
|
||||
static errcode_e setflags(cmd_e idx, char *par){
|
||||
static errcode_e setuintpar(cmd_e idx, char *par){
|
||||
uint32_t val;
|
||||
if(par){
|
||||
if(*par < '0' || *par > '9') return ERR_BADPAR;
|
||||
uint8_t val = *par - '0';
|
||||
if(par == getnum(par, &val)) return ERR_BADPAR;
|
||||
switch(idx){
|
||||
case C_cpha:
|
||||
if(val > 1) return ERR_BADPAR;
|
||||
the_conf.flags.CPHA = val;
|
||||
break;
|
||||
case C_cpol:
|
||||
if(val > 1) return ERR_BADPAR;
|
||||
the_conf.flags.CPOL = val;
|
||||
break;
|
||||
case C_br:
|
||||
if(val == 0 || val > 7) return ERR_BADPAR;
|
||||
the_conf.flags.BR = val;
|
||||
break;
|
||||
case C_encbits:
|
||||
if(val < ENCRESOL_MIN || val > ENCRESOL_MAX) return ERR_BADPAR; // don't support less than 8 of more than 32
|
||||
the_conf.encbits = val;
|
||||
break;
|
||||
case C_encbufsz:
|
||||
if(val < 8 || val > ENCODER_BUFSZ_MAX) return ERR_BADPAR;
|
||||
the_conf.encbufsz = val;
|
||||
break;
|
||||
case C_minzeros:
|
||||
if(val < MINZEROS_MIN || val > MINZEROS_MAX) return ERR_BADPAR;
|
||||
the_conf.minzeros = val;
|
||||
break;
|
||||
case C_maxzeros:
|
||||
if(val < MAXZEROS_MIN || val > MAXZEROS_MAX) return ERR_BADPAR;
|
||||
the_conf.maxzeros = val;
|
||||
break;
|
||||
case C_amperiod:
|
||||
if(val > 255 || val == 0) return ERR_BADPAR;
|
||||
the_conf.monittime = val;
|
||||
break;
|
||||
default:
|
||||
return ERR_BADCMD;
|
||||
}
|
||||
}
|
||||
uint8_t val = 0;
|
||||
CMDWR(commands[idx].cmd);
|
||||
USB_putbyte(I_CMD, '=');
|
||||
switch(idx){
|
||||
case C_cpha:
|
||||
val = the_conf.flags.CPHA;
|
||||
break;
|
||||
case C_cpol:
|
||||
val = the_conf.flags.CPOL;
|
||||
break;
|
||||
case C_br:
|
||||
val = the_conf.flags.BR;
|
||||
break;
|
||||
case C_encbits:
|
||||
val = the_conf.encbits;
|
||||
break;
|
||||
case C_encbufsz:
|
||||
val = the_conf.encbufsz;
|
||||
break;
|
||||
case C_minzeros:
|
||||
val = the_conf.minzeros;
|
||||
break;
|
||||
case C_maxzeros:
|
||||
val = the_conf.maxzeros;
|
||||
break;
|
||||
case C_amperiod:
|
||||
val = the_conf.monittime;
|
||||
break;
|
||||
default:
|
||||
return ERR_BADCMD;
|
||||
}
|
||||
CMDWR(commands[idx].cmd);
|
||||
USB_putbyte(I_CMD, '=');
|
||||
USB_putbyte(I_CMD, '0' + val);
|
||||
CMDn();
|
||||
return ERR_SILENCE;
|
||||
}
|
||||
|
||||
static errcode_e encbits(cmd_e idx, char *par){
|
||||
if(par){
|
||||
uint32_t N;
|
||||
if(par == getnum(par, &N)) return ERR_BADPAR;
|
||||
if(N < 26 || N > 32) return ERR_BADPAR; // don't support less than 26 of more than 32
|
||||
the_conf.encbits = N;
|
||||
}
|
||||
CMDWR(commands[idx].cmd);
|
||||
USB_putbyte(I_CMD, '=');
|
||||
CMDWR(u2str(the_conf.encbits));
|
||||
CMDWR(u2str(val));
|
||||
CMDn();
|
||||
return ERR_SILENCE;
|
||||
}
|
||||
@ -285,24 +296,42 @@ static errcode_e setboolpar(cmd_e idx, char *par){
|
||||
if(*par != '0' && *par != '1') return ERR_BADPAR;
|
||||
val = *par - '0';
|
||||
switch(idx){
|
||||
case C_cpha:
|
||||
the_conf.flags.CPHA = val;
|
||||
break;
|
||||
case C_cpol:
|
||||
the_conf.flags.CPOL = val;
|
||||
break;
|
||||
case C_testX:
|
||||
user_pars.testx = val;
|
||||
if(val) spi_start_enc(0);
|
||||
break;
|
||||
case C_testY:
|
||||
user_pars.testy = val;
|
||||
if(val) spi_start_enc(1);
|
||||
break;
|
||||
case C_autom:
|
||||
the_conf.flags.monit = val;
|
||||
break;
|
||||
default:
|
||||
return ERR_BADCMD;
|
||||
}
|
||||
}
|
||||
switch(idx){
|
||||
case C_cpha:
|
||||
val = the_conf.flags.CPHA;
|
||||
break;
|
||||
case C_cpol:
|
||||
val = the_conf.flags.CPOL;
|
||||
break;
|
||||
case C_testX:
|
||||
val = user_pars.testx;
|
||||
if(val) spi_start_enc(0);
|
||||
break;
|
||||
case C_testY:
|
||||
val = user_pars.testy;
|
||||
if(val) spi_start_enc(1);
|
||||
break;
|
||||
case C_autom:
|
||||
val = the_conf.flags.monit;
|
||||
break;
|
||||
default:
|
||||
return ERR_BADCMD;
|
||||
@ -320,10 +349,15 @@ static errcode_e dumpconf(cmd_e _U_ idx, char _U_ *par){
|
||||
CMDn();
|
||||
for(int i = 0; i < bTotNumEndpoints; ++i)
|
||||
setiface(C_setiface1 + i, NULL);
|
||||
setflags(C_br, NULL);
|
||||
setflags(C_cpha, NULL);
|
||||
setflags(C_cpol, NULL);
|
||||
encbits(C_encbits, NULL);
|
||||
setboolpar(C_autom, NULL);
|
||||
setuintpar(C_amperiod, NULL);
|
||||
setuintpar(C_br, NULL);
|
||||
setboolpar(C_cpha, NULL);
|
||||
setboolpar(C_cpol, NULL);
|
||||
setuintpar(C_encbits, NULL);
|
||||
setuintpar(C_encbufsz, NULL);
|
||||
setuintpar(C_maxzeros, NULL);
|
||||
setuintpar(C_minzeros, NULL);
|
||||
return ERR_SILENCE;
|
||||
}
|
||||
|
||||
@ -347,12 +381,17 @@ static const funcdescr_t commands[C_AMOUNT] = {
|
||||
[C_spistat] = {"spistat", spistat},
|
||||
[C_spiinit] = {"spiinit", spiinit},
|
||||
[C_spideinit] = {"spideinit", spideinit},
|
||||
[C_cpol] = {"CPOL", setflags},
|
||||
[C_cpha] = {"CPHA", setflags},
|
||||
[C_br] = {"BR", setflags},
|
||||
[C_encbits] = {"encbits", encbits},
|
||||
[C_cpol] = {"CPOL", setboolpar},
|
||||
[C_cpha] = {"CPHA", setboolpar},
|
||||
[C_br] = {"BR", setuintpar},
|
||||
[C_encbits] = {"encbits", setuintpar},
|
||||
[C_testX] = {"testx", setboolpar},
|
||||
[C_testY] = {"testy", setboolpar},
|
||||
[C_encbufsz] = {"encbufsz", setuintpar},
|
||||
[C_minzeros] = {"minzeros", setuintpar},
|
||||
[C_maxzeros] = {"maxzeros", setuintpar},
|
||||
[C_autom] = {"autom", setboolpar},
|
||||
[C_amperiod] = {"amperiod", setuintpar},
|
||||
};
|
||||
|
||||
typedef struct{
|
||||
@ -362,28 +401,33 @@ typedef struct{
|
||||
|
||||
// SHOUL be sorted and grouped
|
||||
static const help_t helpmessages[] = {
|
||||
{-1, "Configuration"},
|
||||
{C_dumpconf, "dump current configuration"},
|
||||
{C_erasestorage, "erase full storage or current page (=n)"},
|
||||
{C_setiface1, "set name of first (command) interface"},
|
||||
{C_setiface2, "set name of second (axis X) interface"},
|
||||
{C_setiface3, "set name of third (axis Y) interface"},
|
||||
{C_storeconf, "store configuration in flash memory"},
|
||||
{-1, "Different commands"},
|
||||
{C_dummy, "dummy integer setter/getter"},
|
||||
{C_encstart, "start reading encoders"},
|
||||
{C_encX, "read only X encoder"},
|
||||
{C_encY, "read only Y encoder"},
|
||||
{-1, "Base commands"},
|
||||
{C_encstart, "read both encoders once"},
|
||||
{C_encX, "read X encoder once"},
|
||||
{C_encY, "read Y encoder once"},
|
||||
{C_help, "show this help"},
|
||||
{C_reset, "reset MCU"},
|
||||
{C_spideinit, "deinit SPI"},
|
||||
{C_spiinit, "init SPI"},
|
||||
{C_spistat, "get status of both SPI interfaces"},
|
||||
{-1, "Debug"},
|
||||
{-1, "Configuration"},
|
||||
{C_autom, "turn on or off automonitoring"},
|
||||
{C_amperiod, "period (ms) of monitoring, 1..255"},
|
||||
{C_br, "change SPI BR register (1 - 18MHz ... 7 - 281kHz)"},
|
||||
{C_cpha, "change CPHA value (0/1)"},
|
||||
{C_cpol, "change CPOL value (0/1)"},
|
||||
{C_encbits, "set encoder data bits amount"},
|
||||
{C_dumpconf, "dump current configuration"},
|
||||
{C_encbits, "set encoder data bits amount (26/32)"},
|
||||
{C_encbufsz, "change encoder auxiliary buffer size (8..32 bytes)"},
|
||||
{C_erasestorage, "erase full storage or current page (=n)"},
|
||||
{C_maxzeros, "maximal amount of zeros in preamble"},
|
||||
{C_minzeros, "minimal amount of zeros in preamble"},
|
||||
{C_setiface1, "set name of first (command) interface"},
|
||||
{C_setiface2, "set name of second (axis X) interface"},
|
||||
{C_setiface3, "set name of third (axis Y) interface"},
|
||||
{C_storeconf, "store configuration in flash memory"},
|
||||
{-1, "Debug commands"},
|
||||
{C_dummy, "dummy integer setter/getter"},
|
||||
{C_fin, "reinit flash"},
|
||||
{C_sendX, "send text string to X encoder's terminal"},
|
||||
{C_sendY, "send text string to Y encoder's terminal"},
|
||||
|
||||
@ -34,7 +34,7 @@ static volatile SPI_TypeDef* const SPIs[AMOUNT_OF_SPI+1] = {NULL, SPI1, SPI2};
|
||||
static volatile DMA_Channel_TypeDef * const DMAs[AMOUNT_OF_SPI+1] = {NULL, DMA1_Channel2, DMA1_Channel4};
|
||||
#define WAITX(x) do{volatile uint32_t wctr = 0; while((x) && (++wctr < 3600)) IWDG->KR = IWDG_REFRESH; if(wctr==3600){ DBG("timeout"); return 0;}}while(0)
|
||||
|
||||
static uint8_t encoderbuf[AMOUNT_OF_SPI][ENCODER_BUFSZ] = {0};
|
||||
static uint8_t encoderbuf[AMOUNT_OF_SPI][ENCODER_BUFSZ_MAX] = {0};
|
||||
static uint8_t freshdata[AMOUNT_OF_SPI] = {0};
|
||||
|
||||
// init SPI to work RX-only with DMA
|
||||
@ -81,8 +81,6 @@ void spi_onoff(uint8_t idx, uint8_t on){
|
||||
CHKIDX(idx);
|
||||
volatile SPI_TypeDef *SPI = SPIs[idx];
|
||||
if(on){
|
||||
//DBGs(u2str(idx));
|
||||
//DBG("turn on SPI");
|
||||
SPI->CR1 |= SPI_CR1_SPE;
|
||||
spi_status[idx] = SPI_BUSY;
|
||||
}else{
|
||||
@ -114,20 +112,15 @@ static int spi_waitbsy(uint8_t idx){
|
||||
DBG("Busy - turn off");
|
||||
spi_onoff(idx, 0); // turn off SPI if it's busy
|
||||
}
|
||||
//DBGs(u2str(idx));
|
||||
//DBG("wait busy");
|
||||
//WAITX(SPIs[idx]->SR & SPI_SR_BSY);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// just copy last read encoder value into `buf`
|
||||
// @return TRUE if got fresh data
|
||||
int spi_read_enc(uint8_t encno, uint8_t buf[ENCODER_BUFSZ]){
|
||||
if(encno > 1 || !freshdata[encno]) return FALSE;
|
||||
//DBGs(u2str(encno)); DBG("Read encoder data");
|
||||
memcpy(buf, encoderbuf[encno], ENCODER_BUFSZ);
|
||||
// @return pointer to buffer if got fresh data
|
||||
uint8_t *spi_read_enc(uint8_t encno){
|
||||
if(encno > 1 || !freshdata[encno]) return NULL;
|
||||
freshdata[encno] = 0; // clear fresh status
|
||||
return TRUE;
|
||||
return encoderbuf[encno];
|
||||
}
|
||||
|
||||
// start encoder reading over DMA
|
||||
@ -135,16 +128,12 @@ int spi_read_enc(uint8_t encno, uint8_t buf[ENCODER_BUFSZ]){
|
||||
// here `encodernum` is 0 (SPI1) or 1 (SPI2), not 1/2 as SPI index!
|
||||
int spi_start_enc(int encodernum){
|
||||
int spiidx = encodernum + 1;
|
||||
//DBG("start enc");
|
||||
if(spiidx < 1 || spiidx > AMOUNT_OF_SPI) return FALSE;
|
||||
if(spi_status[spiidx] != SPI_READY) return FALSE;
|
||||
if(!spi_waitbsy(spiidx)) return FALSE;
|
||||
if(SPI1->CR1 & SPI_CR1_SPE){ DBG("spi1 works!");}
|
||||
if(SPI2->CR1 & SPI_CR1_SPE){ DBG("spi2 works!");}
|
||||
volatile DMA_Channel_TypeDef *DMA = DMAs[spiidx];
|
||||
DMA->CMAR = (uint32_t) encoderbuf[encodernum];
|
||||
DMA->CNDTR = ENCODER_BUFSZ;
|
||||
//DBG("turn on spi");
|
||||
DMA->CNDTR = the_conf.encbufsz;
|
||||
spi_onoff(spiidx, 1);
|
||||
DMA->CCR |= DMA_CCR_EN;
|
||||
return TRUE;
|
||||
@ -159,12 +148,8 @@ void dma1_channel2_isr(){
|
||||
DMA1->IFCR = DMA_IFCR_CTEIF2;
|
||||
}
|
||||
if(DMA1->ISR & DMA_ISR_TCIF2){
|
||||
//uint32_t ctr = TIM2->CNT;
|
||||
DMA1->IFCR = DMA_IFCR_CTCIF2;
|
||||
freshdata[0] = 1;
|
||||
//encoderbuf[5] = (ctr >> 16) & 0xff;
|
||||
//encoderbuf[6] = (ctr >> 8 ) & 0xff;
|
||||
//encoderbuf[7] = (ctr >> 0 ) & 0xff;
|
||||
}
|
||||
spi_status[1] = SPI_READY;
|
||||
}
|
||||
|
||||
@ -2,9 +2,13 @@
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
// two SPI interfaces for two sensors
|
||||
#define AMOUNT_OF_SPI (2)
|
||||
|
||||
#define ENCODER_BUFSZ (12)
|
||||
// static buffer size
|
||||
#define ENCODER_BUFSZ_MAX (32)
|
||||
// encoder resolution
|
||||
#define ENCRESOL_MIN (8)
|
||||
#define ENCRESOL_MAX (32)
|
||||
|
||||
typedef enum{
|
||||
SPI_NOTREADY,
|
||||
@ -18,4 +22,4 @@ void spi_onoff(uint8_t idx, uint8_t on);
|
||||
void spi_deinit(uint8_t idx);
|
||||
void spi_setup(uint8_t idx);
|
||||
int spi_start_enc(int encodernum);
|
||||
int spi_read_enc(uint8_t encno, uint8_t buf[ENCODER_BUFSZ]);
|
||||
uint8_t *spi_read_enc(uint8_t encno);
|
||||
|
||||
22
F1:F103/BISS_C_encoders/testDev
Executable file
22
F1:F103/BISS_C_encoders/testDev
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
trap ctrl_c INT
|
||||
|
||||
function ctrl_c() {
|
||||
echo "Terminated - exit" >&2
|
||||
exit 0
|
||||
}
|
||||
|
||||
if [[ $# != 1 ]]; then
|
||||
echo "Point device name, e.g. /dev/encoder_X0" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
stty -F $1 -echo
|
||||
|
||||
START=$(date +%s)
|
||||
|
||||
while read VAL; do
|
||||
CUR=$(($(date +%s) - $START))
|
||||
echo -e "$CUR.$(date +%N)\t$VAL"
|
||||
done < $1
|
||||
@ -1,100 +0,0 @@
|
||||
/*
|
||||
* usart.c
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "stm32f1.h"
|
||||
#include "usart.h"
|
||||
#include "ringbuffer.h"
|
||||
|
||||
extern volatile uint32_t Tms;
|
||||
// buffers for out ringbuffer and DMA send
|
||||
static uint8_t buf[UARTBUFSZ], txbuf[UARTBUFSZ];
|
||||
static ringbuffer ringbuf = {.data = buf, .length = UARTBUFSZ};
|
||||
|
||||
static volatile int usart_txrdy = 1; // transmission done
|
||||
|
||||
// transmit current tbuf
|
||||
void usart_transmit(){
|
||||
if(RB_hasbyte(&ringbuf, '\n') < 0 || !usart_txrdy) return;
|
||||
int L = 0, l = 0;
|
||||
do{
|
||||
l = RB_readto(&ringbuf, '\n', txbuf + L, UARTBUFSZ - L);
|
||||
if(l > 0) L += l;
|
||||
}while(l > 0 && L < UARTBUFSZ);
|
||||
if(L < 1) return;
|
||||
usart_txrdy = 0;
|
||||
if(L < UARTBUFSZ-1){
|
||||
txbuf[L++] = '$'; txbuf[L++] = '\n';
|
||||
}
|
||||
DMA1_Channel4->CCR &= ~DMA_CCR_EN;
|
||||
DMA1_Channel4->CMAR = (uint32_t) txbuf; // mem
|
||||
DMA1_Channel4->CNDTR = L;
|
||||
DMA1_Channel4->CCR |= DMA_CCR_EN;
|
||||
}
|
||||
|
||||
void usart_putchar(const char ch){
|
||||
RB_write(&ringbuf, (const uint8_t*)&ch, 1);
|
||||
}
|
||||
|
||||
void usart_send(const char *str){
|
||||
int l = strlen(str);
|
||||
if(RB_datalen(&ringbuf) > UARTBUFSZ/2) usart_transmit();
|
||||
RB_write(&ringbuf, (const uint8_t*)str, l);
|
||||
}
|
||||
|
||||
/*
|
||||
* USART speed: baudrate = Fck/(USARTDIV)
|
||||
* USARTDIV stored in USART->BRR
|
||||
*
|
||||
* for 72MHz USARTDIV=72000/f(kboud); so for 115200 USARTDIV=72000/115.2=625 -> BRR=0x271
|
||||
* 9600: BRR = 7500 (0x1D4C)
|
||||
*/
|
||||
|
||||
void usart_setup(){
|
||||
uint32_t tmout = 16000000;
|
||||
// PA9 - Tx, PA10 - Rx
|
||||
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN | RCC_APB2ENR_AFIOEN;
|
||||
RCC->AHBENR |= RCC_AHBENR_DMA1EN;
|
||||
GPIOA->CRH |= CRH(9, CNF_AFPP|MODE_NORMAL) | CRH(10, CNF_FLINPUT|MODE_INPUT);
|
||||
|
||||
// USART1 Tx DMA - Channel4 (Rx - channel 5)
|
||||
DMA1_Channel4->CPAR = (uint32_t) &USART1->DR; // periph
|
||||
DMA1_Channel4->CCR |= DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE; // 8bit, mem++, mem->per, transcompl irq
|
||||
// Tx CNDTR set @ each transmission due to data size
|
||||
NVIC_SetPriority(DMA1_Channel4_IRQn, 3);
|
||||
NVIC_EnableIRQ(DMA1_Channel4_IRQn);
|
||||
NVIC_SetPriority(USART1_IRQn, 0);
|
||||
// setup usart1
|
||||
USART1->BRR = 72000000 / 4000000;
|
||||
USART1->CR1 = USART_CR1_TE | USART_CR1_UE; // 1start,8data,nstop; enable Rx,Tx,USART
|
||||
while(!(USART1->SR & USART_SR_TC)){if(--tmout == 0) break;} // polling idle frame Transmission
|
||||
USART1->SR = 0; // clear flags
|
||||
USART1->CR1 |= USART_CR1_RXNEIE; // allow Rx IRQ
|
||||
USART1->CR3 = USART_CR3_DMAT; // enable DMA Tx
|
||||
}
|
||||
|
||||
void dma1_channel4_isr(){
|
||||
if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx
|
||||
DMA1->IFCR = DMA_IFCR_CTCIF4; // clear TC flag
|
||||
usart_txrdy = 1;
|
||||
}
|
||||
}
|
||||
@ -1,2 +1,2 @@
|
||||
#define BUILD_NUMBER "91"
|
||||
#define BUILD_DATE "2025-04-02"
|
||||
#define BUILD_NUMBER "96"
|
||||
#define BUILD_DATE "2025-04-04"
|
||||
|
||||
@ -78,13 +78,19 @@ static void chkin(uint8_t ifno){
|
||||
static void send_next(uint8_t ifno){
|
||||
uint8_t usbbuff[USB_TXBUFSZ];
|
||||
int buflen = RB_read((ringbuffer*)&rbout[ifno], (uint8_t*)usbbuff, USB_TXBUFSZ);
|
||||
if(!CDCready[ifno]){
|
||||
lastdsz[ifno] = -1;
|
||||
return;
|
||||
}
|
||||
if(buflen == 0){
|
||||
if(lastdsz[ifno] == 64) EP_Write(1+ifno, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
if(lastdsz[ifno] == USB_TXBUFSZ){
|
||||
EP_Write(1+ifno, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
lastdsz[ifno] = 0;
|
||||
}else lastdsz[ifno] = -1; // OK. User can start sending data
|
||||
return;
|
||||
}else if(buflen < 0){
|
||||
DBG("Buff busy");
|
||||
lastdsz[ifno] = 0;
|
||||
lastdsz[ifno] = -1;
|
||||
return;
|
||||
}
|
||||
DBG("Got data in buf");
|
||||
@ -221,14 +227,17 @@ int USB_send(uint8_t ifno, const uint8_t *buf, int len){
|
||||
if(!buf || !CDCready[ifno] || !len) return FALSE;
|
||||
DBG("USB_send");
|
||||
while(len){
|
||||
if(!CDCready[ifno]) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
int a = RB_write((ringbuffer*)&rbout[ifno], buf, len);
|
||||
if(lastdsz[ifno] == 0) send_next(ifno); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(a > 0){
|
||||
len -= a;
|
||||
buf += a;
|
||||
} else if (a < 0) continue; // do nothing if buffer is in reading state
|
||||
}else if(a == 0){ // overfull
|
||||
if(lastdsz[ifno] < 0) send_next(ifno);
|
||||
}
|
||||
}
|
||||
if(buf[len-1] == '\n' && lastdsz[ifno] < 0) send_next(ifno);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -236,10 +245,15 @@ int USB_putbyte(uint8_t ifno, uint8_t byte){
|
||||
if(!CDCready[ifno]) return FALSE;
|
||||
int l = 0;
|
||||
while((l = RB_write((ringbuffer*)&rbout[ifno], &byte, 1)) != 1){
|
||||
if(!CDCready[ifno]) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
if(lastdsz[ifno] == 0) send_next(ifno); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(l < 0) continue;
|
||||
if(l == 0){ // overfull
|
||||
if(lastdsz[ifno] < 0) send_next(ifno);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// send line if got EOL
|
||||
if(byte == '\n' && lastdsz[ifno] < 0) send_next(ifno);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -75,13 +75,19 @@ static void chkin(){
|
||||
static void send_next(){
|
||||
uint8_t usbbuff[USB_TXBUFSZ];
|
||||
int buflen = RB_read((ringbuffer*)&rbout, (uint8_t*)usbbuff, USB_TXBUFSZ);
|
||||
if(!CDCready){
|
||||
lastdsz = -1;
|
||||
return;
|
||||
}
|
||||
if(buflen == 0){
|
||||
if(lastdsz == 64) EP_Write(1, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
if(lastdsz == USB_TXBUFSZ){
|
||||
EP_Write(1, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
lastdsz = 0;
|
||||
}else lastdsz = -1;
|
||||
return;
|
||||
}else if(buflen < 0){
|
||||
DBG("Buff busy");
|
||||
lastdsz = 0;
|
||||
lastdsz = -1;
|
||||
return;
|
||||
}
|
||||
DBG("Got data in buf");
|
||||
@ -193,14 +199,17 @@ int USB_send(const uint8_t *buf, int len){
|
||||
if(!buf || !CDCready || !len) return FALSE;
|
||||
DBG("USB_send");
|
||||
while(len){
|
||||
if(!CDCready) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
int a = RB_write((ringbuffer*)&rbout, buf, len);
|
||||
if(lastdsz == 0) send_next(); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(a > 0){
|
||||
len -= a;
|
||||
buf += a;
|
||||
} else if (a < 0) continue; // do nothing if buffer is in reading state
|
||||
}else if(a == 0){ // overfull
|
||||
if(lastdsz < 0) send_next();
|
||||
}
|
||||
}
|
||||
if(buf[len-1] == '\n' && lastdsz < 0) send_next();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -208,10 +217,14 @@ int USB_putbyte(uint8_t byte){
|
||||
if(!CDCready) return FALSE;
|
||||
int l = 0;
|
||||
while((l = RB_write((ringbuffer*)&rbout, &byte, 1)) != 1){
|
||||
if(!CDCready) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
if(lastdsz == 0) send_next(); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(l < 0) continue;
|
||||
if(l == 0){ // overfull
|
||||
if(lastdsz < 0) send_next();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(byte == '\n' && lastdsz < 0) send_next();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -81,12 +81,18 @@ static void chkin(){
|
||||
static void send_next(){
|
||||
uint8_t usbbuff[USB_TXBUFSZ];
|
||||
int buflen = RB_read((ringbuffer*)&rbout, (uint8_t*)usbbuff, USB_TXBUFSZ);
|
||||
if(!CDCready){
|
||||
lastdsz = -1;
|
||||
return;
|
||||
}
|
||||
if(buflen == 0){
|
||||
if(lastdsz == 64) EP_Write(3, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
if(lastdsz == 64){
|
||||
EP_Write(3, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
lastdsz = 0;
|
||||
} else lastdsz = -1; // OK. User can start sending data
|
||||
return;
|
||||
}else if(buflen < 0){
|
||||
lastdsz = 0;
|
||||
lastdsz = -1;
|
||||
return;
|
||||
}
|
||||
EP_Write(3, (uint8_t*)usbbuff, buflen);
|
||||
@ -231,16 +237,19 @@ int USB_sendall(){
|
||||
// put `buf` into queue to send
|
||||
int USB_send(const uint8_t *buf, int len){
|
||||
if(!buf || !CDCready || !len) return FALSE;
|
||||
DBG("send");
|
||||
DBG("USB_send");
|
||||
while(len){
|
||||
if(!CDCready) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
int a = RB_write((ringbuffer*)&rbout, buf, len);
|
||||
if(lastdsz == 0) send_next(); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(a > 0){
|
||||
len -= a;
|
||||
buf += a;
|
||||
} else if (a < 0) continue; // do nothing if buffer is in reading state
|
||||
}else if(a == 0){ // overfull
|
||||
if(lastdsz < 0) send_next();
|
||||
}
|
||||
}
|
||||
if(buf[len-1] == '\n' && lastdsz < 0) send_next();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -248,10 +257,15 @@ int USB_putbyte(uint8_t byte){
|
||||
if(!CDCready) return FALSE;
|
||||
int l = 0;
|
||||
while((l = RB_write((ringbuffer*)&rbout, &byte, 1)) != 1){
|
||||
if(!CDCready) return FALSE;
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
if(lastdsz == 0) send_next(); // need to run manually - all data sent, so no IRQ on IN
|
||||
if(l < 0) continue;
|
||||
if(l == 0){ // overfull
|
||||
if(lastdsz < 0) send_next();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// send line if got EOL
|
||||
if(byte == '\n' && lastdsz < 0) send_next();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user