255 строки
7,2 КиБ
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
|
|
}
|