File: LT3757DPV.m4

package info (click to toggle)
texlive-base 2024.20250309-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,058,192 kB
  • sloc: perl: 44,903; sh: 5,008; makefile: 4,278; javascript: 3,034; ruby: 2,428; tcl: 2,131; xml: 1,874; python: 1,385; pascal: 1,249; cpp: 549; awk: 512; lisp: 447; ansic: 103; sed: 8
file content (274 lines) | stat: -rw-r--r-- 12,362 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
.PS
# LT3757DPV.m4
# https://html.alldatasheet.com/html-pdf/349964/LINER/LT3757/1234/8/LT3757.html
# https://en.wikipedia.org/wiki/Single-ended_primary-inductor_converter
# https://www.analog.com/media/en/technical-documentation/data-sheets/lt3757-3757a.pdf
#
# This diagram does not contain much repetitive structure so the code is long
# but straightforward.
cct_init
include(icsDPV.m4)
  linethick = 1.2

ifelse(1,1,`
# This draws the symbolic chip with external circuitry
svg_font(sans-serif,9bp__)

define(`pinsep',`svg_baselineskip*2.5')
define(`hght',`9*pinsep')
define(`wdth',`0.6*hght')

Q1: LT3757

  resistor(down_ dimen_*3/4 from Q1.VC); llabel(,22 k)
  capacitor(down_ dimen_/2); llabel(6.8 nF); GNDL: dot
  line from Q1.SS left_ dimen_/2; continue down_ to (Here,Q1.VC)
  capacitor(to (Here,GNDL)); llabel(0.1 svg_micro`'F); dot
  up_; M1: mosfet(,,TEDSQuB) with .G at Q1.GATE
  dot(at (M1.S,Q1.SENSE)); {line to Q1.SENSE}; line from M1.S to (M1.S,Q1.VC)
  resistor(down_ to (Here,GNDL)); llabel(,0.01 svg_ohm); dot
  line from Q1.GND to (Q1.GND,GNDL); dot
  capacitor(down_ from Q1.INTVCC to (Q1.INTVCC,GNDL))
  llabel(,"4.7 svg_micro(F)" ljust "10 V" ljust "X5R" ljust); dot 
  ground
  line up_ dimen_/3 from M1.D; DD: dot
  diode(right_ dimen_,Z); DE: dot
  { resistor(down_ to (Here,Q1.FBX)); llabel(,"226 k")
    line to(Here,Q1.VC); resistor(to (Here,GNDL)); llabel(,"16.2 k"); dot }
  dot(at Here+(dimen_,0))
  { capacitor(down_ to (Here,GNDL),C+);
    llabel(,"47 svg_micro(F)" ljust "35 V" ljust "x2"); dot }
  dot(at Here+(dimen_,0))
  { capacitor(down_ to (Here,GNDL));
    llabel(,"10 svg_micro(F)" ljust "25 V" ljust "X5R"); GG: dot; ground }
  line from DE to Here+(dimen_/2,0); {line invis right dimen_}
  "V`'svg_sub(OUT)" ljust at Here+(2bp__,5bp__) "24 V" ljust "2 A" ljust
  line from Q1.RT left_ dimen_; continue down_ to (Here,Q1.VC)
  resistor(to (Here,GNDL)); rlabel(,"41.2 k" rjust "300 kHz" rjust)
  line to GG
  line from Q1.VIN up_ dimen_/3; dot
  dot(at (Q1.w,Here)-(dimen_,0))
  {resistor(down_ to (Here,Q1.SHU)); llabel(,"200 k"); dot; {line to Q1.SHU}
   resistor(down_ to (Here,Q1.SYNC)); llabel(,"43.2 k"); dot
   {line to Q1.SYNC}; ground }
  dot(at Here-(dimen_,0))
  {capacitor(down_ to (Here,Q1.SHU))
   llabel(,"10 svg_micro(F)" ljust "25 V" ljust "X5R" ljust); ground }
  VIN: Here+(-dimen_/2,0); {line invis left_ 70bp__}
  {"V`'svg_sub(IN)" at VIN rjust "8 V TO 16 V" rjust}
  line from VIN to (DD,VIN); inductor(down_ to DD); llabel(,"10 svg_micro(H)")

	"High efficiency" ljust below at (DE,Q1.n) "boost converter" ljust

  command "</g>" # end font
',`
# The operational diagram of the chip interior with external circuitry
maxpswid = 10

  textht = 5bp__
  lw = dimen_/4

  define(`Pin',`P`'in`$1': box wid dimen_/3 ht dimen_/3 "`$1'" fill_(1)')

  boardw = 13.5
  boardh = 14
 Board: box thick 2 wid boardw*dimen_ ht boardh*dimen_
  define(`coord',`Board.sw+(`$1',`$2')*dimen_')
 A11: opamp at coord(2.5,boardh-5)
  LH_symbol(,wdth=0.5) at A11.C; "A11" at A11.NE above ljust
 A12: opamp at A11+(0,-A11.ht*5/4); LH_symbol(,wdth=0.5) at A12.C
  "A12" at A12.NE above ljust
 D1112: dot(at (A11.In2.x-lw,(A11.y+A12.y)/2))
  line from A11.In2 to (D1112,A11.In2) then to (D1112,A12.In1) then to A12.In1
 G6: OR_gate with .w at (A11.Out.x+3*L_unit,(A11.y+A12.y)/2); {"G6" at G6}
  line from G6.In1 left_ lw*5/4 then up A11.Out.y-G6.In1.y then to A11.Out
  line from G6.In2 left_ lw*5/4 then up A12.Out.y-G6.In2.y then to A12.Out
  line left_ lw from A11.In1; { "1.72 V" rjust }
  line left_ lw from A12.In2; { "-0.88 V" rjust }

  up_; Q3: bi_tr(,R) with .C at G6.Out+(3*lw,A11.ht*2)
  "Q3" at Q3.ne above rjust
  ground(at Q3.E); line up_ lw then left_ lw from Q3.C; Q3C: dot
 S2: source(down_ elen_ with .end at Q3C,G); "2.5 V" at S2.n above
  rlabel(,"S2"); larrow; "10 svg_micro(A)" at last arrow ljust
  left_; G4: OR_gate(3) with .Out at Q3.B+(lw,0); line from G4.Out to Q3.B 
  G3: NAND_gate with .Out at G4.In2+(lw*3/2,0); line from G3.Out to G4.In2 
  line from G3.In2 right_ lw then up_ A11.Out.y-G6.In1.y # then right_ lw
  left_; A9: opamp with .Out at Here
  left_; A8: opamp at A9-(0,A9.ht*5/4); LH_symbol(,wdth=0.5) at A8.C
   "A8" at A8.SE above rjust
  line from G3.In1 to (A8.Out,G3.In1) then to A8.Out
 D89: dot(at (A9.In2.x+lw,(A9.y+A8.y)/2))
  line from A9.In1 to (D89,A9.In1) then to (D89,A8.In2) then to A8.In2
  line from A9.In2 right_ lw; "17.5 V" ljust above at A9.In2
  line from A8.In1 right_ lw;"2.7 V UP" ljust "2.6 V DOWN" ljust

  line from G4.In1 right_ lw then down_ 3/2*G3.ht then right_ lw
  box wid boxwid*2/3 ht boxht*2/3 "TSD" "165 svg_deg`'C"

  D8: dot(at D89+(boxwid*1.75,0))
  down_; INTVcc: mosfet(,R,TEDSQdB) with .D at D8+(0,lw)
 B72: box ht boxht/3 "7.2 V LDO" with .e at INTVcc.G
  dot(at (B72,D89)); line to B72.s; line from D8 to INTVcc.D
  Pin(8) at (Board.e,D8); "INTV`'svg_sub(CC)" at Pin8.n+(0,2bp__) above rjust
  line from D89 to Pin8.w
  line from B72.n up_ lw/2
 CL: box ht boxht*2/3 "CURRENT" "LIMIT" with .s at Here
  line from CL.e to (INTVcc.S,CL); dot

  line from G4.In3 right_ lw then up_ CL.n.y-G4.In3.y-boxht/2+lw
 UVLO: box "INTERNAL" "REGULATOR" "AND UVLO" with .s at Here
  "UVLO" at UVLO.sw below ljust
  line from UVLO.e to (D8,UVLO.e); dot
  Pin(10) at (Here,Board.n); "V`'svg_sub(IN)" at Pin10.se below ljust
  line from INTVcc.S to Pin10.s

  line up_ 2*lw from UVLO.n; DUV: dot; left_
 A10: opamp(,,,,R) at (UVLO.e,Here); LH_symbol at A10.C
  "A10" at A10.SE above rjust
  line from A10.In1 right_ lw; "1.22 V" ljust
  arrow from A10.Out left A10.Out.x-UVLO.w.x+lw
 S1: source(down_ elen_ with .c at Here+(-dimen_/6,0),G)
  rarrow; "I`'svg_sub(S1)" rjust at last arrow above "2 svg_micro(A)" rjust
  ground(at S1.end,T)
  line from A10.In2 right_ lw then up_ S1.start.y-A10.In2.y
  dot; { "SHDN/UVLO" at last [].e ljust }
  { line from last [].e+(textoffset,3bp__) right_ 16bp__  }
  { line to S1.start }
  { Pin(9) at (Here,Board.n)}; line to Pin9.s

  right_; A7: opamp with .n at (UVLO.x,G6.y-lw); "VC" at A7.nw rjust
  line from A7.Out right_ A8.Out.x-A7.Out.x+lw
 G5: OR_gate(3) with .In2 at Here
  line from G5.In1 left_ lw then up G6.Out.y-G5.In1.y then to G6.Out; right_
 G2: opamp(right_ dimen_,"","") with .NE at (D8.x,G5.y+A9.ht/4)
  ground(at G2.SE)
  Pin(7) at (Board.e,G2); "GATE" at Pin7.n above rjust
  line from G2.E to Pin7.w; line from D8 to G2.NE
  line from G2.w left_ dimen_*2/3
 SR1: box ht G2.ht wid boxwid*2/3; "SR1" at SR1.n above
  "R" at SR1.w ljust; "O" at SR1.e rjust; "S" at SR1.s above
  line right_ from G5.Out to SR1.w

 Pin(3) at (Q3C,Board.s); line from Q3C to Pin3.n; "SS" at Pin3.ne above ljust
 D67: dot(at (G6.Out+(lw,0),A7.In1)); line to A7.In1
  dot(at (Q3C.x,D67.y-dimen_)); down_
 Q2: bi_tr(,R,P) with .B at Here; ground(at Q2.C); "Q2" at Q2.e ljust
  line from Q2.E to (Q2.E,A7.In1); dot

 A1: opamp(right_ dimen_,,,,R) at A12+(0,-3/2*dimen_); T1: dot(at (D67,A1))
 A2: opamp(right_ dimen_,,,,R) at A1+(0,-A1.ht*5/4)
 D12: dot(at (A1.w.x-lw,(A1.y+A2.y)/2))
  Pin(2) at (Board.w,D12); line from Pin2.e to D12; "FBX" at Pin2.ne above ljust
  line from A1.In2 to (D12,A1.In2) then to (D12,A2.In1) then to A2.In1
  line from A1.In1 left_ lw; "1.6 V" rjust
  line from A2.In2 left_ lw; "-0.8 V" rjust

  Pin(1) at (Board.w,Q3C); "V`'svg_sub(CC)" at Pin1.ne above ljust
 S3: source(down_ elen_ at ((Board.w+Pin3)/2,S2),G);rlabel(,"S3")
  larrow("I`'svg_sub(S3)")
  "2.5 V" at S3.start above; line from S3.end to (S3,Pin1); dot

  diode(from T1 to A1.Out)
 D2: diode(from (T1,A2) to A2.Out)
  line from D2.start to (D2.start,Pin1) then to Pin1.e

  left_; A6: opamp(,,,,R) with .Out at (SR1,A1)
 A5: opamp at (A6,A6+(0,-A6.ht*5/4))
  line from A6.In2 right_ lw; "108 mV" ljust
  line from A5.In2 right_ lw; { dot; line to (Here,A6.In1) then to A6.In1 }
  {Pin(6) at (Board.e,Here)}; line to Pin6.w; "SENSE" at Pin6.n above rjust
  line from A5.In1 right_ lw then down_ dimen_
  dot; ground; {Pin(11) at (Board.e,Here)}; line to Pin11.w
  "GND" at Pin11.n above rjust 
  line from G5.In3 left_ lw then down G5.In3.y-A6.y then to A6.Out

 Summer: circle rad 0.15 "svg_Sigma" with .w at (G5.Out,A5)
  line from A7.In2 left lw then down_ A7.In2.y-Summer.y then to Summer.w
  line from Summer.e to A5.Out
  "V`'svg_sub(ISENSE)" at Summer.ne above ljust; "SLOPE" at Summer.nw above rjust
  "RAMP" at Summer.sw below rjust
  line down_ 2*lw from Summer.s
  box ht boxht*2/3 with .n at Here "RAMP" "GENERATOR"
  {[ line for_(1,3,1,`up_ dimen_/4 right_ dimen_/6 then down_ dimen_/4 then') \
     up_ dimen_/4 right_ dimen_/6 ] with .sw at last box.n+(lw/2,lw/2)}
  line down_ lw*3/2
  OSC: box ht boxht*2/3 \
   "100 kHZ-1 MHZ" "OSCILLATOR"
  {[line right_ dimen_/2; [for_(1,4,1,`line from (m4x*dimen_/10,0) \
    up_ dimen_/4')] with .s at last line ] with .sw at OSC.n+(lw/2,2bp__)}
  line right_ from OSC.e to (SR1,OSC.e) then to SR1.s
 G1: OR_gate with .Out at OSC.w+(-2*lw,0); line from G1.Out to OSC.w
 A3: opamp with .Out at G1.In1+(-lw,0); line from A3.Out to G1.In1
  line left_ lw from A3.In1; "1.25 V" rjust

  line from OSC.s down_ A2.ht*3/4; up_
 Q1: bi_tr with .C at Here; right_
 A4: opamp(,,,,R) with .E at Q1.B; "+" at A4.w +(4pt__,0)
  "FREQ" at A4.SE+(0,-lw) below ljust "PROG" ljust
  line from A4.In2 left lw then down_ A4.ht/2; continue to  (Q1.E,Here); dot
  {Pin(4) at (Here,Board.s); "R`'svg_sub(T)" at Pin4.ne above ljust};
  line from Q1.E to Pin4.n
  line from A4.In1 left_ lw; "1.25 V  " above
  Pin(5) at (A4.w.x-3*lw,Board.s.y); "SYNC" at Pin5.ne above ljust
  line from Pin5.n to (Pin5,G1.In2) then to G1.In2
  line from A3.In2 left_ lw; continue to (Here,A4.w) then to A4.w
  "FREQ" at (A3.In2.x-lw,A4.w.y+dimen_/2) ljust above "FOLD" ljust "BACK" ljust

 D3: dot(at A3.In2-(lw,0)); right_
 FFB: box ht boxht*2/3 "FREQUENCY" "FOLDBACK" at (A2,D3); line to D3
 DFFB: dot(at Pin2.e+(2*lw,0))
  line from FFB.w to (DFFB,FFB); continue to (Here,D1112) then to D1112
 DF: dot(at (DFFB,FFB)); line down_ boxht
  resistor(right_ elen_); llabel(,"R5") rlabel(,"8 k")
  diode(right_ dimen_/3); llabel(,"D2")
  reversed(`diode',right_ dimen_*2/3,Z); llabel(,"D3"); ground

  foreach_(`gate',`"gate" at gate.C',A1,A2,A3,A4,A5,A6,A7,A9,G1,G2,G3,G4,G5)

  line from Pin9.n up_ dimen_*2/3; dot
  {resistor(left_ dimen_); rlabel(,"R4"); ground}
  resistor(right_ dimen_); llabel(,"R3"); line up_ dimen_/2; VCC: dot
  dot(at Here+(dimen_/2,0)); {capacitor(down_ dimen_/2,C+)
  llabel(,"C`'svg_sub(IN)"); ground(,T)}
  L1D: dot(at (Pin10,Here)); {line to Pin10.n}; {line to (Board.n,Here)
   "V`'svg_sub(IN)" rjust}

 line from Pin8.e right_ dimen_/4; capacitor(down_ dimen_/3)
  {"C`'svg_sub(VCC)" at Pin8.ne ljust above}; ground
  up_; M1: mosfet(,,TEDSQuB) with .G at Pin7.e; "M1" at M1.n above
  inductor(right_ from L1D to (Board.e.x+lw,L1D.y),,,M); llabel(,"L1"); DL1: dot
  line down_ 3*dimen_; continue to (M1.D,Here) then to M1.D 
  line from M1.S to (M1.S,Pin6); dot; {line to Pin6.e}
  resistor(down_ to (Here,Pin11)); llabel(,"R`'svg_sub(SENSE)"); dot
  ground; line to Pin11.e

  capacitor(from DL1 right_ dimen_/2); llabel(,"C`'svg_sub(DC)"); T2: dot
  diode(right_ dimen_,Z); { line right_ dimen_; "V`'svg_sub(OUT)" above}
  dot(at Here+(dimen_/2,0)); line down_ lw; dot;
 P3: parallel_(`Sep=dimen_*2/3; capacitor(down_ elen_)
                 rlabel("C`'svg_sub(OUT2)"); line down_ elen_/3',
            `line down_ elen_/3; capacitor(down_ elen_*2/3,C)
                 llabel("C`'svg_sub(OUT1)")',
            `resistor(down_ elen_*2/3); llabel(,"R2"); dot
             { line left_ lw; "FBX" above }
             R1: resistor(down_ elen_*2/3); llabel(,"R1"); dot')
  dot; ground
  inductor(from T2 to (T2,P3.E3.R1.end),,,M); rlabel(,"L2")
  line to P3.E3.R1.end

  resistor(from Pin4.s down_ dimen_*2/3); llabel(,"R`'svg_sub(T)"); ground(,T)
  capacitor(from Pin3.s down_ dimen_*2/3); llabel(,"C`'svg_sub(SS)"); ground(,T)
  line from Pin2.w left_ lw; "FBX" rjust
 TV: dot(at Pin1-(dimen_/2,0))
  resistor(down_ dimen_*2/3); llabel(,"R`'svg_sub(C)")
  capacitor(down_ dimen_*2/3); llabel("C`'svg_sub(C1)"); dot; ground
  line left_ dimen_*0.6
  capacitor(down_ from (Here,TV) to Here); llabel("C`'svg_sub(C2)")
  line from Pin1.w to last line.start

  move to Board.se+(5bp__,20bp__)
  "LT3757 block diagram" ljust "working as a" ljust "SEPIC converter" ljust
')

.PE