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 }