Добавлена электрическая схема платы
Этот коммит содержится в:
родитель
976c0a9170
коммит
6448ba2d29
4 изменённых файлов: 366 добавлений и 0 удалений
87
pkg/schema/Magefile.go
Обычный файл
87
pkg/schema/Magefile.go
Обычный файл
|
@ -0,0 +1,87 @@
|
||||||
|
//go:build mage
|
||||||
|
// +build mage
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
// mage:import
|
||||||
|
. "magefile/docker"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
AppName = "kicad"
|
||||||
|
UpperAppName = "Kicad"
|
||||||
|
ImageName = "my/kicad"
|
||||||
|
|
||||||
|
RunFn = run
|
||||||
|
}
|
||||||
|
|
||||||
|
func Generate() {
|
||||||
|
GeneratePySkidl()
|
||||||
|
GenerateNetlist()
|
||||||
|
}
|
||||||
|
func GeneratePySkidl() {
|
||||||
|
Bash(`go-tr -p schema.go schema.py`)
|
||||||
|
}
|
||||||
|
func GenerateNetlist() {
|
||||||
|
Bash(`sudo docker run -ti --rm \
|
||||||
|
--net=none \
|
||||||
|
\
|
||||||
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
|
\
|
||||||
|
-v $PWD:/app \
|
||||||
|
\
|
||||||
|
-w /app \
|
||||||
|
--entrypoint=/bin/bash \
|
||||||
|
\
|
||||||
|
` + ImageName + ` -c '\
|
||||||
|
python schema.py
|
||||||
|
'`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func run() {
|
||||||
|
Bash(`sudo docker run -d \
|
||||||
|
--restart=no \
|
||||||
|
-h ` + AppName + ` \
|
||||||
|
--name=` + AppName + ` \
|
||||||
|
--net=` + NetName + ` \
|
||||||
|
\
|
||||||
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
|
\
|
||||||
|
-v ` + AppName + `:/home/user \
|
||||||
|
\
|
||||||
|
-e LANG=ru_RU.UTF-8 \
|
||||||
|
-v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 \
|
||||||
|
-e DISPLAY=:0 \
|
||||||
|
\
|
||||||
|
-w / \
|
||||||
|
\
|
||||||
|
` + ImageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Как пользовать:
|
||||||
|
// https://devbisme.github.io/skidl/
|
||||||
|
|
||||||
|
func SkidlShell() {
|
||||||
|
fmt.Println(`
|
||||||
|
from skidl import *
|
||||||
|
search("ESP32")
|
||||||
|
show("RF_Module", "ESP32-WROOM-32")
|
||||||
|
search_footprints("ESP32")
|
||||||
|
`)
|
||||||
|
Bash(`sudo docker run -ti --rm \
|
||||||
|
--net=none \
|
||||||
|
\
|
||||||
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
|
\
|
||||||
|
-v $PWD:/app \
|
||||||
|
\
|
||||||
|
-w /app \
|
||||||
|
--entrypoint=/bin/bash \
|
||||||
|
\
|
||||||
|
` + ImageName + ` -c '\
|
||||||
|
python \
|
||||||
|
'`)
|
||||||
|
}
|
5
pkg/schema/runonsave.sh
Исполняемый файл
5
pkg/schema/runonsave.sh
Исполняемый файл
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go-tr -p schema.go schema.py
|
||||||
|
|
||||||
|
tail -10 schema.py
|
255
pkg/schema/schema.go
Обычный файл
255
pkg/schema/schema.go
Обычный файл
|
@ -0,0 +1,255 @@
|
||||||
|
package dvizhenie
|
||||||
|
|
||||||
|
import (
|
||||||
|
"skidl"
|
||||||
|
. "skidl"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
_ = skidl.X
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
vin := Net("3.3в")
|
||||||
|
gnd := Net("GND")
|
||||||
|
xl4016_fb := Net("XL4016 fb pin")
|
||||||
|
vkl := Net("Вкл")
|
||||||
|
vfb := Net("Обратная связь")
|
||||||
|
mk_onoff := Net("МК OnOff")
|
||||||
|
Nets := Interface(
|
||||||
|
vin == vin,
|
||||||
|
gnd == gnd,
|
||||||
|
xl4016_fb == xl4016_fb,
|
||||||
|
vkl == vkl,
|
||||||
|
vfb == vfb,
|
||||||
|
mk_onoff == mk_onoff,
|
||||||
|
)
|
||||||
|
n := Nets
|
||||||
|
|
||||||
|
ESP32 := Part("RF_Module", "ESP32-WROOM-32", TEMPLATE, footprint == "RF_Module:ESP32-WROOM-32")
|
||||||
|
Клема := Part("Connector_Generic", "Conn_01x01", TEMPLATE, footprint == "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical")
|
||||||
|
tr_fet := Part("Transistor_FET", "BSS138", TEMPLATE, footprint == "SOT-23_Handsoldering")
|
||||||
|
r := Part("Device", "R", TEMPLATE, footprint == "Resistor_SMD:R_0805_2012Metric")
|
||||||
|
r_jmp := Part("Device", "R", TEMPLATE, footprint == "Resistor_SMD:R_1206_3216Metric")
|
||||||
|
r_jmp_big := Part("Device", "R", TEMPLATE, footprint == "Resistor_SMD:R_1812_4532Metric")
|
||||||
|
diode := Part("Diode", "1N4001", TEMPLATE, footprint == "Diode_SMD:D_0805_2012Metric")
|
||||||
|
stabilitron := Part("Device", "D_Zener", TEMPLATE, footprint == "Diode_SMD:D_0805_2012Metric")
|
||||||
|
condensator := Part("Device", "C", TEMPLATE, footprint == "Capacitor_SMD:C_0805_2012Metric")
|
||||||
|
conn2 := Part("Connector_Generic", "Conn_01x02", TEMPLATE, footprint == "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical")
|
||||||
|
conn3 := Part("Connector_Generic", "Conn_01x03", TEMPLATE, footprint == "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical")
|
||||||
|
conn3_big := Part("Connector_Generic", "Conn_01x03", TEMPLATE, footprint == "Package_TO_SOT_THT:TO-3P-3_Vertical")
|
||||||
|
conn4 := Part("Connector_Generic", "Conn_01x04", TEMPLATE, footprint == "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical")
|
||||||
|
Parts := Interface(
|
||||||
|
ESP32 == ESP32,
|
||||||
|
Клема == Клема,
|
||||||
|
tr_fet == tr_fet,
|
||||||
|
r == r,
|
||||||
|
r_jmp == r_jmp,
|
||||||
|
r_jmp_big == r_jmp_big,
|
||||||
|
condensator == condensator,
|
||||||
|
diode == diode,
|
||||||
|
stabilitron == stabilitron,
|
||||||
|
conn2 == conn2,
|
||||||
|
conn3 == conn3,
|
||||||
|
conn3_big == conn3_big,
|
||||||
|
conn4 == conn4,
|
||||||
|
)
|
||||||
|
p := Parts
|
||||||
|
|
||||||
|
dcdc_3_3_v(Nets, Parts)
|
||||||
|
n.gnd &
|
||||||
|
p.r_jmp_big(ref == "main_gnd", value == "0") &
|
||||||
|
n.gnd
|
||||||
|
|
||||||
|
esp32 := NewESP32(Nets, Parts)
|
||||||
|
|
||||||
|
xl4016_driver(Nets, Parts, mk_vkl_net == esp32["IO18"], mk_yark_net == esp32["IO19"])
|
||||||
|
|
||||||
|
z1 := NewPinZaschita(name == "z1", n == n, p == p)
|
||||||
|
dvizh_verh := NewDvizh(name == "dvizh_verh", n == n, p == p)
|
||||||
|
dvizh_verh.out & z1.i
|
||||||
|
z1.o &
|
||||||
|
// p.r_jmp_big(ref == "esp32_dv_rj", value == "0") &
|
||||||
|
esp32["IO4"]
|
||||||
|
z1.g & n.gnd
|
||||||
|
|
||||||
|
z2 := NewPinZaschita(name == "z2", n == n, p == p)
|
||||||
|
dvizh_niz := NewDvizh(name == "dvizh_niz", n == n, p == p)
|
||||||
|
dvizh_niz.out & z2.i
|
||||||
|
z2.o & esp32["IO16"]
|
||||||
|
z2.g & n.gnd
|
||||||
|
|
||||||
|
generate_netlist()
|
||||||
|
}
|
||||||
|
|
||||||
|
// @subcircuit
|
||||||
|
func NewESP32(n, p any) any {
|
||||||
|
esp32 := p.ESP32(ref == "ESP32", value == " ")
|
||||||
|
|
||||||
|
// lgnd := Net("ESP32_GND")
|
||||||
|
// lvin := Net("ESP32_VIN")
|
||||||
|
lgnd := n.gnd
|
||||||
|
lvin := n.vin
|
||||||
|
|
||||||
|
esp32["GND"] += lgnd
|
||||||
|
lgnd &
|
||||||
|
// p.r_jmp_big(ref == "rj_esp32_gnd", value == "0") &
|
||||||
|
n.gnd
|
||||||
|
esp32["VDD"] += lvin
|
||||||
|
lvin &
|
||||||
|
// p.r_jmp_big(ref == "rj_esp32_vin", value == "0") &
|
||||||
|
n.vin
|
||||||
|
|
||||||
|
esp32["VDD"] &
|
||||||
|
p.r(ref == "r_esp32_en", value == "10k") &
|
||||||
|
esp32["EN"]
|
||||||
|
|
||||||
|
z1 := NewPinZaschita(name == "esp32_z1", n == n, p == p)
|
||||||
|
z2 := NewPinZaschita(name == "esp32_z2", n == n, p == p)
|
||||||
|
z3 := NewPinZaschita(name == "esp32_z3", n == n, p == p)
|
||||||
|
z4 := NewPinZaschita(name == "esp32_z4", n == n, p == p)
|
||||||
|
|
||||||
|
rxtx := p.conn4(ref == "rxtx", value == " ")
|
||||||
|
rxtx[1] & z1.i
|
||||||
|
z1.o &
|
||||||
|
// p.r_jmp_big(ref == "rj_rx", value == "0") &
|
||||||
|
esp32["RXD0/IO3"]
|
||||||
|
z1.g & lgnd
|
||||||
|
|
||||||
|
rxtx[2] & z2.i
|
||||||
|
z2.o & esp32["TXD0/IO1"]
|
||||||
|
z2.g & lgnd
|
||||||
|
|
||||||
|
rxtx[3] & z3.i
|
||||||
|
z3.o &
|
||||||
|
// p.r_jmp_big(ref == "rj_en", value == "0") &
|
||||||
|
esp32["EN"]
|
||||||
|
z3.g & lgnd
|
||||||
|
|
||||||
|
rxtx[4] & z4.i
|
||||||
|
z4.o &
|
||||||
|
// p.r_jmp_big(ref == "rj_dl", value == "0") &
|
||||||
|
esp32["IO0"]
|
||||||
|
z4.g & lgnd
|
||||||
|
|
||||||
|
vin_gnd := p.conn2(ref == "vin_gnd", value == " ")
|
||||||
|
vin_gnd[1] & lvin
|
||||||
|
vin_gnd[2] & lgnd
|
||||||
|
|
||||||
|
return esp32
|
||||||
|
}
|
||||||
|
|
||||||
|
// @subcircuit
|
||||||
|
func xl4016_driver(n, p, mk_vkl_net, mk_yark_net any) {
|
||||||
|
// полевики для включателя, МК и яркости
|
||||||
|
tr_mk := p.tr_fet(ref == "tr_mk", value == "тр МК")
|
||||||
|
tr_yark := p.tr_fet(ref == "tr_yark", value == "тр ярк P-тип")
|
||||||
|
|
||||||
|
// Диод с выключателя на полевик МК
|
||||||
|
d_vkl := p.diode(ref == "d_vkl", value == "диод вкл")
|
||||||
|
|
||||||
|
// Обратная связь с резистора
|
||||||
|
k_vfb := p.Клема(ref == "k_vfb", value == " ")
|
||||||
|
// Выход на обратную связь микрухи
|
||||||
|
k_xl4016_fb := p.Клема(ref == "k_xl4016_fb", value == " ")
|
||||||
|
|
||||||
|
k_xl4016_fb &
|
||||||
|
// p.r_jmp_big(ref == "rj_xl4016_fb", value == "0") &
|
||||||
|
tr_mk["S"]
|
||||||
|
// n.xl4016_fb
|
||||||
|
k_vfb &
|
||||||
|
// p.r_jmp_big(ref == "rj_vfb", value == "0") &
|
||||||
|
n.vfb
|
||||||
|
|
||||||
|
vkl_iface := p.conn2(ref == "vkl_iface", value == "Вкл")
|
||||||
|
n.vkl & vkl_iface & n.vin
|
||||||
|
|
||||||
|
r_fb := p.r(ref == "r_fb", value == "100k") // Или 1M
|
||||||
|
r_mk := p.r(ref == "r_mk", value == "10k")
|
||||||
|
|
||||||
|
// Потягушка FB ноги на 3.3в - по умолчанию всё выключено
|
||||||
|
// n.vin & r_fb & n.xl4016_fb
|
||||||
|
n.vin & r_fb & tr_mk["S"]
|
||||||
|
|
||||||
|
// Выходы полевиков
|
||||||
|
n.xl4016_fb &
|
||||||
|
// p.r_jmp_big(ref == "rj_tr_mk", value == "0") &
|
||||||
|
tr_mk["S"]
|
||||||
|
tr_mk["D"] & n.vfb
|
||||||
|
|
||||||
|
// Полевик МК
|
||||||
|
tr_mk["G"] & r_mk & n.gnd
|
||||||
|
tr_mk["G"] & mk_vkl_net
|
||||||
|
// Диод с выключателя
|
||||||
|
n.vkl & d_vkl & tr_mk["G"]
|
||||||
|
|
||||||
|
// Полевик яркости
|
||||||
|
tr_yark["G"] & n.vkl
|
||||||
|
mk_yark_net &
|
||||||
|
// p.r_jmp_big(ref == "rj_tr_yark", value == "0") &
|
||||||
|
tr_yark["S"]
|
||||||
|
|
||||||
|
r_diode := p.r(ref == "r_yark_pre_diode", value == "100")
|
||||||
|
diode := p.diode(ref == "yark_diode", value == " ")
|
||||||
|
|
||||||
|
tr_yark["D"] & r_diode & diode & n.vfb
|
||||||
|
|
||||||
|
// От выключателя потягушка на землю
|
||||||
|
r_tr_g_yark := p.r(ref == "r_tr_g_yark", value == "10k")
|
||||||
|
n.vkl & r_tr_g_yark & n.gnd
|
||||||
|
}
|
||||||
|
|
||||||
|
// @subcircuit
|
||||||
|
func dcdc_3_3_v(n, p any) {
|
||||||
|
high_vin := p.conn2(ref == "high_vin", value == "24В")
|
||||||
|
|
||||||
|
lgnd := n.gnd
|
||||||
|
// lgnd := p.r_jmp_big(ref == "rj_dcdc_gnd", value == "0")
|
||||||
|
|
||||||
|
dcdc := p.conn4(ref == "dcdc", value == "3.3В")
|
||||||
|
dcdc[1] &
|
||||||
|
// p.r_jmp_big(ref == "rj_dcdc_vin", value == "0") &
|
||||||
|
n.vin
|
||||||
|
dcdc[2] & lgnd & n.gnd
|
||||||
|
dcdc[3] & high_vin & lgnd
|
||||||
|
}
|
||||||
|
|
||||||
|
// @package
|
||||||
|
func NewDvizh(out, name, n, p any) any {
|
||||||
|
d := p.conn3_big(ref == name, value == " ")
|
||||||
|
d[1] &
|
||||||
|
n.vin
|
||||||
|
d[2] &
|
||||||
|
out
|
||||||
|
d[3] &
|
||||||
|
n.gnd
|
||||||
|
}
|
||||||
|
|
||||||
|
// @package
|
||||||
|
func NewPinZaschita(i, o, g, name, n, p any) any {
|
||||||
|
r := p.r(ref == name+"_r_in", value == "1k")
|
||||||
|
d_vin := p.diode(ref == name+"_d_vin", value == " ")
|
||||||
|
d_gnd := p.diode(ref == name+"_d_gnd", value == " ")
|
||||||
|
stabil := p.stabilitron(ref == name+"_stabil", value == " ")
|
||||||
|
cond := p.condensator(ref == name+"_cond", value == " ")
|
||||||
|
|
||||||
|
// Первый резистор
|
||||||
|
i &
|
||||||
|
p.r_jmp_big(ref == name+"_rj1", value == "0") &
|
||||||
|
r
|
||||||
|
|
||||||
|
// Диоды Шоттки в обратном включении
|
||||||
|
r & d_vin & n.vin
|
||||||
|
r & d_gnd & g
|
||||||
|
|
||||||
|
// Стабилитрон - тоже в обратном включении (он, собсно, тока так и используется)
|
||||||
|
r & stabil & g
|
||||||
|
|
||||||
|
// Конденсатор - фильтр по частоте. Ставить тока на низкочастотные линии (на RX/TX - оставлять пустыми).
|
||||||
|
r & cond & g
|
||||||
|
|
||||||
|
// Выход на пин МК
|
||||||
|
r &
|
||||||
|
p.r_jmp_big(ref == name+"_rj2", value == "0") &
|
||||||
|
o
|
||||||
|
}
|
19
pkg/schema/variables.go
Обычный файл
19
pkg/schema/variables.go
Обычный файл
|
@ -0,0 +1,19 @@
|
||||||
|
package dvizhenie
|
||||||
|
|
||||||
|
const (
|
||||||
|
TEMPLATE = ""
|
||||||
|
footprint = ""
|
||||||
|
value = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
func Net(string) func(...any) any {
|
||||||
|
return func(...any) any {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part(string, string, string, bool) func(...any) any {
|
||||||
|
return func(...any) any {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче