# -*- coding: utf-8 -*- """P2-CHANNEL 单路完整连线定义。跑 `python nets.py` 做本地几何校验。""" import sys from router import w, gnd, pwr, port, txt, check, crossings, SEGS, FLAGS, PORTS MULTI = {'GND', '+3V3', '+12V', 'VO1', 'EFUSE_EN1', 'VO1_P'} # ===== Block 1 Buck ===== pwr('+12V', 90, 795) w('+12V', (90, 795), (90, 645)) w('+12V', (90, 775), (225, 775)) for x in (120, 155, 190, 225): w('+12V', (x, 775), (x, 760)) w('+12V', (90, 645), (230, 645)); w('+12V', (230, 645), (240, 645)) w('+12V', (230, 645), (230, 665)) w('+12V', (230, 655), (240, 655)) w('+12V', (230, 665), (240, 665)) for x in (120, 155, 190, 225): w('GND', (x, 720), (x, 705)) w('GND', (100, 705), (225, 705)) w('GND', (100, 695), (100, 705)) w('GND', (240, 685), (210, 685)); w('GND', (240, 675), (210, 675)) w('GND', (210, 675), (210, 705)) w('GND', (170, 705), (170, 690)); gnd(170, 690) w('RT1', (240, 695), (140, 695)) w('EN12V', (360, 655), (430, 655)); w('EN12V', (430, 655), (430, 550)) w('EN12V', (430, 550), (445, 550)) w('EN12V', (445, 570), (445, 530)) w('+12V', (445, 610), (445, 630)); pwr('+12V', 445, 630) w('GND', (445, 490), (445, 470)); gnd(445, 470) w('SS1', (360, 645), (400, 645)); w('SS1', (400, 645), (400, 615)) w('GND', (400, 585), (400, 565)); gnd(400, 565) w('COMP1', (360, 635), (385, 635)); w('COMP1', (385, 635), (385, 565)) w('COMP1', (385, 565), (340, 565)) w('COMP1', (295, 525), (295, 590)); w('COMP1', (295, 590), (385, 590)) w('COMPZ', (340, 525), (340, 505)) w('GND', (340, 470), (340, 450)); w('GND', (295, 495), (295, 450)) w('GND', (295, 450), (340, 450)); w('GND', (315, 450), (315, 435)); gnd(315, 435) w('GND', (360, 625), (375, 625)); w('GND', (375, 625), (375, 610)); gnd(375, 610) w('BOOT1', (360, 685), (380, 685)); w('BOOT1', (380, 685), (380, 730)) w('SW1', (360, 675), (420, 675)) w('SW1', (360, 665), (400, 665)); w('SW1', (400, 665), (400, 675)) w('SW1', (420, 730), (420, 700)); w('SW1', (420, 700), (410, 700)) w('SW1', (410, 700), (410, 675)) w('PWRGD', (360, 695), (370, 695)); w('PWRGD', (370, 695), (370, 760)) port('BUCK_PG', 370, 760, 0, 'OUT') # ===== VO1 母线 ===== w('VO1', (460, 675), (630, 675)) w('VO1', (480, 655), (480, 675)); w('VO1', (515, 655), (515, 675)) w('VO1', (550, 660), (550, 675)) w('GND', (480, 625), (480, 615)); w('GND', (515, 625), (515, 615)) w('GND', (550, 620), (550, 615)) w('GND', (480, 615), (550, 615)); w('GND', (480, 615), (480, 600)); gnd(480, 600) w('VO1', (465, 675), (465, 705)); port('VO1', 465, 705, 0, 'OUT') # ===== Block 2 反馈 + DAC 注入 ===== w('VO1', (180, 360), (180, 385)); port('VO1', 180, 385, 0, 'IN') w('FB1', (180, 320), (180, 280)) w('FB1', (240, 300), (180, 300)) w('FB1', (215, 300), (215, 635)); w('FB1', (215, 635), (240, 635)) w('GND', (180, 240), (180, 220)); gnd(180, 220) w('VDAC_F', (280, 300), (350, 300)) w('VDAC_F', (325, 300), (325, 270)) w('GND', (325, 240), (325, 220)); gnd(325, 220) w('VDAC1', (390, 300), (420, 300)); port('VDAC1', 420, 300, 0, 'IN') # ===== Block 3 eFuse ===== w('VO1', (610, 675), (610, 655)) w('VO1', (610, 665), (630, 665)); w('VO1', (610, 655), (630, 655)) w('VO1', (600, 675), (600, 720)); w('VO1', (600, 720), (770, 720)) w('VO1', (770, 720), (770, 660)) w('VO1', (770, 675), (730, 675)); w('VO1', (770, 665), (730, 665)) w('EFUSE_EN1', (630, 645), (565, 645)); w('EFUSE_EN1', (565, 645), (565, 570)) w('EFUSE_EN1', (565, 570), (490, 570)) w('EFUSE_EN1', (530, 570), (530, 600)); port('EFUSE_EN1', 530, 600, 0, 'IN') w('GND', (490, 530), (490, 510)); gnd(490, 510) w('OVP1', (630, 635), (575, 635)); w('OVP1', (575, 635), (575, 525)) w('OVP1', (575, 525), (465, 525)); w('OVP1', (465, 525), (465, 500)) w('VO1', (465, 565), (465, 675)) w('GND', (465, 460), (465, 440)); gnd(465, 440) w('GND', (630, 625), (585, 625)); w('GND', (585, 625), (585, 510)) w('GND', (585, 510), (545, 510)); gnd(545, 510) w('ILIM1', (630, 615), (595, 615)); w('ILIM1', (595, 615), (595, 500)) w('ILIM1', (595, 500), (565, 500)) w('GND', (565, 460), (540, 460)); w('GND', (540, 460), (540, 445)); gnd(540, 445) w('DVDT1', (630, 605), (605, 605)); w('DVDT1', (605, 605), (605, 440)) w('DVDT1', (605, 440), (595, 440)) w('GND', (595, 405), (595, 385)); w('GND', (595, 385), (575, 385)); gnd(575, 385) w('IMON1', (630, 595), (610, 595)); w('IMON1', (610, 595), (610, 400)) w('IMON1', (610, 400), (520, 400)) w('GND', (480, 400), (460, 400)); w('GND', (460, 400), (460, 385)); gnd(460, 385) w('FLT1', (630, 585), (620, 585)); w('FLT1', (620, 585), (620, 355)) w('FLT1', (620, 355), (545, 355)) w('+3V3', (545, 395), (545, 415)); pwr('+3V3', 545, 415) w('FLT1', (600, 355), (600, 375)); port('EFUSE_FLT1', 600, 375, 0, 'OUT') w('GND', (630, 575), (625, 575)); w('GND', (625, 575), (625, 340)) w('GND', (625, 340), (615, 340)); gnd(615, 340) w('GND', (730, 585), (755, 585)); w('GND', (755, 585), (755, 565)); gnd(755, 565) w('EFUSE_PG1', (730, 595), (790, 595)); w('EFUSE_PG1', (790, 595), (790, 565)) w('+3V3', (790, 525), (790, 505)); pwr('+3V3', 790, 505) w('EFUSE_PG1', (760, 595), (760, 530)); port('EFUSE_PG1', 760, 530, 180, 'OUT') w('PGTH1', (730, 605), (810, 605)); w('PGTH1', (810, 605), (810, 585)) w('PGTH1', (810, 585), (830, 585)); w('PGTH1', (830, 595), (830, 575)) w('GND', (830, 535), (830, 515)); gnd(830, 515) for y in (615, 625, 635, 645, 655): w('VO1_F', (730, y), (790, y)) w('VO1_F', (790, 655), (790, 615)) w('VO1_F', (790, 635), (900, 635)) w('VO1_P', (900, 675), (900, 695)); w('VO1_P', (900, 695), (1130, 695)) w('VO1_P', (1060, 695), (1060, 765)); w('VO1_P', (1060, 765), (1100, 765)) w('GND', (1100, 755), (1075, 755)); gnd(1075, 755) # ===== INA226 ===== w('VO1_F', (870, 480), (880, 480)); w('VO1_F', (880, 480), (880, 635)) w('VO1_P', (870, 470), (930, 470)); w('VO1_P', (930, 470), (930, 695)) w('VO1_P', (870, 460), (890, 460)); w('VO1_P', (890, 460), (890, 470)) w('GND', (870, 450), (920, 450)); w('GND', (920, 450), (920, 425)); gnd(920, 425) w('+3V3', (870, 440), (960, 440)); w('+3V3', (960, 440), (960, 520)) w('+3V3', (960, 520), (975, 520)); w('+3V3', (960, 545), (960, 520)); pwr('+3V3', 960, 545) w('GND', (1015, 520), (1035, 520)); w('GND', (1035, 520), (1035, 500)); gnd(1035, 500) w('GND', (770, 480), (740, 480)); w('GND', (770, 470), (740, 470)) w('GND', (740, 470), (740, 480)); w('GND', (740, 480), (685, 480)) w('GND', (685, 480), (685, 440)); gnd(685, 440) w('INA_ALERT', (770, 460), (700, 460)); port('INA_ALERT', 700, 460, 180, 'OUT') w('SDA', (770, 450), (700, 450)); w('SDA', (700, 450), (700, 400)) port('SDA', 700, 400, 180, 'BI') w('SCL', (770, 440), (750, 440)); w('SCL', (750, 440), (750, 395)) port('SCL', 750, 395, 0, 'BI') # ===== 放电联锁 ===== w('+3V3', (1060, 565), (1060, 585)); pwr('+3V3', 1060, 585) w('DIS1_G', (1060, 525), (1060, 505)); w('DIS1_G', (1060, 505), (1090, 505)) w('DIS1_G', (1090, 505), (1090, 490)) w('DIS1_G', (1075, 505), (1075, 560)); w('DIS1_G', (1075, 560), (1100, 560)) w('GND', (1090, 450), (1090, 430)); gnd(1090, 430) w('EFUSE_EN1', (1060, 470), (1060, 430)); w('EFUSE_EN1', (1060, 430), (1000, 430)) port('EFUSE_EN1', 1000, 430, 180, 'IN') w('VO1_P', (1130, 650), (1130, 695)) w('DIS1_D', (1130, 610), (1130, 580)) w('GND', (1130, 540), (1130, 520)); gnd(1130, 520) # ===== Block 4 按键驱动 + J7 ===== KEYS = [ ('K1_PWR', 600, 380), ('K1_VUP', 760, 370), ('K1_VDN', 920, 360), ] for name, rx, jy in KEYS: w(name, (rx - 20, 300), (rx - 40, 300)); w(name, (rx - 40, 300), (rx - 40, 340)) port(name, rx - 40, 340, 0, 'IN') w(name + '_G', (rx + 20, 300), (rx + 30, 300)) w(name + '_G', (rx + 25, 300), (rx + 25, 285)) w('GND', (rx + 25, 245), (rx + 25, 230)); gnd(rx + 25, 230) w('GND', (rx + 60, 280), (rx + 60, 255)); gnd(rx + 60, 255) w(name + '_D', (rx + 60, 320), (rx + 60, jy)); w(name + '_D', (rx + 60, jy), (1025, jy)) w('GND', (1025, 350), (1010, 350)); w('GND', (1010, 350), (1010, 330)); gnd(1010, 330) w('GND', (1025, 330), (1010, 330)) w('GND', (1025, 400), (1025, 420)); w('GND', (1025, 420), (960, 420)); gnd(960, 420) # ===== 文字 ===== txt('P2 CH1 单路通道(5 路完全相同:复制后改位号 / INA226 地址 / 网络名后缀)', 60, 805, 16) txt('TPS54622: Vref 0.6V, fsw 480kHz(R3=100k), Vout = 4.222 - 0.2813*Vd', 60, 185, 11) txt('TPS25940A: OVP 4.36V(R9/R10), ILIM 4.45A(R11), dVdT 33nF -> 0.36V/ms', 60, 165, 11) txt('缓启动 11.5ms / 涌流 0.8A ; INA226 CH1: A1=A0=GND -> 0x40', 60, 145, 11) txt('放电互锁: EN 低 -> Q1 截止 -> Q2 导通 -> R19 10R 泄放手机侧 2200uF', 60, 125, 11) if __name__ == '__main__': errs = [e for e in check() if not any(e.startswith('网络 %s ' % m) for m in MULTI)] for e in errs: print('ERR', e) print('--- segs %d flags %d ports %d ---' % (len(SEGS), len(FLAGS), len(PORTS))) cr = crossings() print('crossings %d:' % len(cr)) for c in cr: print(' ', c) sys.exit(1 if errs else 0)