Добавлена электрическая схема платы
Этот коммит содержится в:
родитель
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 {
|
||||
|
||||
}
|
||||
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче