lestnica_dvizh/pkg/schema/schema.go

255 строки
7,2 КиБ
Go

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
}