Version 4 SHEET 1 1268 1716 WIRE 112 272 112 176 WIRE 112 -48 112 -112 WIRE 112 -112 336 -112 WIRE 336 -112 336 -80 WIRE 336 0 336 32 WIRE 64 32 -48 32 WIRE -1088 80 -1088 192 WIRE -1088 320 -1088 272 WIRE 112 176 112 48 WIRE -128 32 -256 32 WIRE 112 352 112 416 WIRE 352 560 112 560 WIRE 112 560 112 576 WIRE 112 176 352 176 WIRE 352 176 352 320 WIRE 112 528 112 560 WIRE 352 384 352 560 WIRE 112 416 48 416 WIRE 112 416 112 448 WIRE -256 176 112 176 WIRE -256 64 -256 32 WIRE -256 144 -256 176 WIRE -304 128 -304 160 WIRE -304 80 -448 80 WIRE -1088 80 -1056 80 WIRE -1056 80 -720 80 WIRE -448 80 -624 80 WIRE -720 128 -848 128 WIRE -1104 800 -1104 752 WIRE -1104 752 -1088 752 WIRE -1104 880 -1104 912 WIRE -624 800 -624 752 WIRE -624 752 -560 752 WIRE -624 880 -624 912 WIRE -1120 1136 -1120 1168 WIRE -1120 1056 -1120 1008 WIRE -1120 1008 -1056 1008 WIRE -1120 1408 -1120 1440 WIRE -1120 1328 -1120 1280 WIRE -1120 1280 -1040 1280 WIRE -1104 464 -1104 512 WIRE -1104 624 -1104 592 WIRE -1104 464 -1072 464 WIRE -896 256 -896 320 WIRE -896 176 -896 128 WIRE -848 128 -896 128 WIRE -32 416 -80 416 WIRE -80 464 -80 416 WIRE -80 416 -112 416 WIRE -80 528 -80 576 WIRE 240 896 240 848 WIRE 240 848 304 848 WIRE 240 976 240 1008 WIRE 32 880 32 848 WIRE 32 848 -80 848 WIRE 32 960 32 1008 WIRE -96 896 -96 1136 WIRE -144 896 -144 928 WIRE -160 848 -224 848 WIRE -224 848 -256 848 WIRE 32 848 80 848 WIRE 80 848 128 848 WIRE 480 1200 480 1232 WIRE 336 1296 336 1328 WIRE 176 1376 176 1408 WIRE -16 1136 -96 1136 WIRE 48 1088 480 1088 WIRE 48 1120 336 1120 WIRE 336 1120 336 1216 WIRE 176 1296 176 1152 WIRE 176 1152 48 1152 WIRE 480 1088 480 1120 WIRE -1120 1648 -1120 1696 WIRE -1120 1568 -1120 1520 WIRE -1120 1520 -1056 1520 WIRE -1008 800 -1008 832 WIRE -960 800 -960 832 WIRE -960 832 -928 832 WIRE -944 752 -816 752 WIRE -768 752 -768 800 WIRE -768 864 -768 912 WIRE -816 752 -768 752 WIRE -1088 752 -1024 752 FLAG 336 32 0 FLAG 112 576 0 FLAG -112 416 Vsense IOPIN -112 416 Out FLAG -1056 80 period FLAG -304 160 0 FLAG -448 80 pwm FLAG -1088 320 0 FLAG -1104 912 0 FLAG -1088 752 icoil IOPIN -1088 752 Out FLAG -624 912 0 FLAG -560 752 error IOPIN -560 752 Out FLAG -1120 1168 0 FLAG -1056 1008 pid IOPIN -1056 1008 Out FLAG -1120 1440 0 FLAG -1040 1280 pid_clamp IOPIN -1040 1280 Out FLAG -1072 464 target IOPIN -1072 464 Out FLAG -1104 624 0 FLAG -896 320 0 FLAG -848 128 pwmres FLAG -80 576 0 FLAG 240 1008 0 FLAG 304 848 i_error IOPIN 304 848 Out FLAG 32 1008 0 FLAG -144 928 0 FLAG -224 848 error FLAG 80 848 elim FLAG 480 1232 0 FLAG 336 1328 0 FLAG 176 1408 0 FLAG -1120 1696 0 FLAG -1056 1520 pwm_val IOPIN -1056 1520 Out FLAG -1008 832 0 FLAG -928 832 period IOPIN -928 832 In FLAG -768 912 0 FLAG -816 752 icoil_adc SYMBOL ind2 96 256 R0 WINDOW 39 36 108 Left 0 SYMATTR SpiceLine Rser=20 SYMATTR InstName L1 SYMATTR Value 120m SYMATTR Type ind SYMBOL nmos 64 -48 R0 SYMATTR InstName M1 SYMATTR Value Si4850EY SYMBOL voltage -1088 176 R0 WINDOW 3 -28 188 Left 0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR Value PULSE(0 1 0 10n 10n {MIN_ON} {PERIOD}) SYMATTR InstName V1 SYMBOL voltage 336 -96 R0 SYMATTR InstName V2 SYMATTR Value 14 SYMBOL res -144 48 R270 WINDOW 0 32 56 VTop 0 WINDOW 3 0 56 VBottom 0 SYMATTR InstName R2 SYMATTR Value 50 SYMBOL schottky 368 384 R180 WINDOW 0 24 72 Left 0 WINDOW 3 24 0 Left 0 SYMATTR InstName D2 SYMATTR Value MURS320 SYMATTR Description Diode SYMATTR Type diode SYMBOL res 96 432 R0 SYMATTR InstName Rsense SYMATTR Value 0.5 SYMBOL e -256 48 R0 SYMATTR InstName E1 SYMATTR Value 5 SYMBOL Digital\\srflop -672 32 R0 WINDOW 3 -40 28 Left 0 SYMATTR Value td=10n SYMATTR InstName A1 SYMBOL bv -1104 784 R0 WINDOW 3 -39 169 Left 0 SYMATTR InstName B2 SYMATTR Value V=int(V(Vsense)*2/ADC_REF*ADC_RES)/ADC_RES SYMBOL bv -624 784 R0 SYMATTR InstName B3 SYMATTR Value V=V(target)-V(icoil_adc) SYMBOL bv -1120 1040 R0 SYMATTR InstName B5 SYMATTR Value V={K1}*V(error) + V(i_error) SYMBOL bv -1120 1312 R0 SYMATTR InstName B6 SYMATTR Value V=limit({MIN_DUTY}, V(pid), {MAX_DUTY}) SYMBOL voltage -1104 496 R0 WINDOW 3 25 91 Left 0 WINDOW 123 0 0 Left 0 WINDOW 39 0 0 Left 0 SYMATTR Value PULSE(0.2 0.4 0 10n 20n 40m 80m) SYMATTR InstName V3 SYMBOL bv -896 160 R0 SYMATTR InstName B7 SYMATTR Value V=delay(V(period),V(pwm_val)*{PERIOD}) SYMBOL res -48 432 R270 WINDOW 0 32 56 VTop 0 WINDOW 3 0 56 VBottom 0 SYMATTR InstName R1 SYMATTR Value 10k SYMBOL cap -96 464 R0 SYMATTR InstName C1 SYMATTR Value 100n SYMBOL bv 240 880 R0 SYMATTR InstName B1 SYMATTR Value V=idt({K2}*V(elim)/{PERIOD}) SYMBOL sw -176 848 R270 SYMATTR InstName S1 SYMATTR Value SW1 SYMBOL res 16 864 R0 SYMATTR InstName R3 SYMATTR Value 1k SYMBOL bv 480 1104 R0 SYMATTR InstName B9 SYMATTR Value V=IF( (V(i_error)>{INT_MIN} & V(i_error) < {INT_MAX}) , 1, 0) SYMBOL bv 336 1200 R0 SYMATTR InstName B8 SYMATTR Value V=IF( (V(i_error)<={INT_MIN} & V(error) > 0 ), 1, 0) SYMBOL bv 176 1280 R0 SYMATTR InstName B10 SYMATTR Value V=IF( (V(i_error)>={INT_MAX} & V(error) < 0) , 1, 0) SYMBOL Digital\\or 16 1184 R180 SYMATTR InstName A2 SYMBOL bv -1120 1552 R0 SYMATTR InstName B4 SYMATTR Value V=int(V(pid_clamp)*PWM_RES+0.5)/PWM_RES SYMBOL sw -1040 752 R270 SYMATTR InstName S2 SYMATTR Value SW2 SYMBOL cap -784 800 R0 SYMATTR InstName C2 SYMATTR Value 10n TEXT -1104 -592 Left 0 !.tran 0 80m 0 {MIN_TSTEP} TEXT -336 -592 Left 0 ;Pseudo Code of Software Control Loop\n// Interrupt loop \n \n// ADC \nicoil = 2* Vsense\n// Error \nerror = Itarget - Icoil\n// Integrator \ni_error = i_error+k2*error\ni_error = limit(-0.1, i_error, 1)\n// PI(D) sum \npid = k1 * error + i_error\n// Clamping \npid_clamp = limit(min, pid, max)\n// PWM quantization \npwm = int(pid_clamp*PWM_RES+0.5)\n// Write to PWM TEXT -1104 -520 Left 0 !.param PERIOD=100u\n.param MIN_DUTY=0.01\n.param MAX_DUTY=1-2*MIN_DUTY\n.param MIN_ON=MIN_DUTY*PERIOD\n.param PWM_RES=256\n.param ADC_RES=1024\n.param ADC_REF=1\n.param MIN_TSTEP=0.2*PERIOD*MIN(MIN_DUTY,1/PWM_RES)\n \n* PI(D) parameters\n.param K1=25\n.param K2=0.5\n.param INT_MIN=-0.1\n.param INT_MAX=1 TEXT -1008 1336 Left 0 ;Limiter:\n0...1 = 0...100% duty cycle TEXT -72 344 Left 0 ;RC-Filter TEXT 320 904 Left 0 ;Integral TEXT -536 824 Left 0 ;Proportional TEXT -208 752 Left 0 !.MODEL SW1 SW(Ron=1m, Roff=1G Vt=0.5 Vh=0) TEXT -1104 -816 Left 0 ;Digital PI(D) Controller with digital PWM\n \nHelmut Sennewald 4/18/2004 TEXT -1008 16 Left 0 ;Digital PWM inside uC TEXT -984 1080 Left 0 ;Sum of Control TEXT 640 752 Left 0 ;Integrator with Limiter TEXT -1056 1576 Left 0 ;Quantization TEXT -1024 520 Left 0 ;Target current of coil TEXT -1104 -704 Left 0 ;Watch V(Icoil) and V(pwm_val)\n \nThe used integrator is clamped to INT_MIN and INT_MAX. TEXT -1032 656 Left 0 !.MODEL SW2 SW(Ron=1, Roff=1G Vt=0.5 Vh=0) TEXT -992 904 Left 0 ;ADC RECTANGLE Normal -368 400 -1168 -16 2 RECTANGLE Normal 1264 1472 -288 704 2