analogue P(ID) controller to digital PID controller

Hi

I try to simulate an old design controller circuit "PID.asc" on a microcontroller

LTspice/SwitcherCAD III software here is PID.asc file :

---------

Version 4 SHEET 1 5945676 13421556 WIRE 1696 -224 1680 -224 WIRE 1920 -224 1696 -224 WIRE 880 -160 880 -176 WIRE 1696 -160 1696 -224 WIRE 1712 -160 1696 -160 WIRE 1840 -144 1776 -144 WIRE 2000 -144 1920 -144 WIRE 1712 -128 1696 -128 WIRE 1696 -80 1696 -128 WIRE 1920 96 1696 96 WIRE 1696 160 1696 96 WIRE 1712 160 1696 160 WIRE 1840 176 1776 176 WIRE 2000 176 1920 176 WIRE 1712 192 1696 192 WIRE 1696 240 1696 192 WIRE 880 320 880 304 WIRE 1776 432 1696 432 WIRE 1920 432 1776 432 WIRE 1920 464 1920 432 WIRE 2016 464 1920 464 WIRE 2016 480 2016 464 WIRE 1696 528 1696 432 WIRE 1712 528 1696 528 WIRE 1840 544 1776 544 WIRE 2016 544 1920 544 WIRE 2112 544 2016 544 WIRE 1616 560 1616 464 WIRE 1712 560 1616 560 WIRE 1824 672 1600 672 WIRE 1040 736 1024 736 WIRE 1264 736 1040 736 WIRE 1040 800 1040 736 WIRE 1056 800 1040 800 WIRE 1184 816 1120 816 WIRE 1344 816 1264 816 WIRE 1056 832 1040 832 WIRE 1600 832 1600 736 WIRE 1616 832 1600 832 WIRE 1744 848 1680 848 WIRE 1824 848 1824 752 WIRE 1888 848 1824 848 WIRE 2032 848 1888 848 WIRE 2048 848 2032 848 WIRE 1616 864 1600 864 WIRE 1600 928 1600 864 FLAG 1616 -128 0 FLAG 880 -176 V+ FLAG 1744 -176 V+ FLAG 1744 -112 V- FLAG 880 208 V- FLAG 880 0 Vin1 FLAG 1600 -224 Vin1 FLAG 880 128 0 FLAG 880 -80 0 FLAG 880 80 0 FLAG 1696 0 0 FLAG 2000 -144 Vout1 FLAG 1744 512 V+ FLAG 1744 576 V- FLAG 1536 560 Vout2 FLAG 880 304 Vin2 FLAG 880 400 0 FLAG 1744 144 V+ FLAG 1744 208 V- FLAG 1616 192 Vin2 FLAG 2000 176 Vout2 FLAG 1696 304 0 FLAG 1536 464 Vout1 FLAG 1776 352 0 FLAG 1920 624 0 FLAG 2112 544 Vout3 FLAG 960 832 0 FLAG 1088 784 V+ FLAG 1088 848 V- FLAG 944 736 Vout3 FLAG 1344 816 Vout4 FLAG 1648 816 V+ FLAG 1648 880 V- FLAG 1520 832 Vout4 FLAG 1888 784 0 FLAG 2032 848 VoutF FLAG 1520 928 0 SYMBOL voltage 880 -16 R0 WINDOW 123 24 132 Left 0 WINDOW 39 0 0 Left 0 SYMATTR InstName V1 SYMATTR Value PULSE(0 5 100m 100m 100m 100m 10 10) SYMBOL res 1696 -240 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R1 SYMATTR Value 10K SYMBOL res 1936 -160 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R4 SYMATTR Value 2.2K SYMBOL res 1712 -144 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R6 SYMATTR Value 10K SYMBOL voltage 880 -176 R0 WINDOW 123 0 0 Left 0 WINDOW 39 24 44 Left 0 SYMATTR InstName V3 SYMATTR Value 15 SYMBOL voltage 880 112 R0 WINDOW 123 0 0 Left 0 WINDOW 39 24 132 Left 0 SYMATTR InstName V4 SYMATTR Value 15 SYMBOL Opamps\\\\LT1001 1744 -208 R0 SYMATTR InstName U1 SYMBOL res 1904 -240 R0 SYMATTR InstName R2 SYMATTR Value 5.1K SYMBOL res 1680 -96 R0 SYMATTR InstName R3 SYMATTR Value 5.1K SYMBOL res 1632 544 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R5 SYMATTR Value 20K SYMBOL res 1936 528 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R7 SYMATTR Value 2K SYMBOL Opamps\\\\LT1001 1744 480 R0 SYMATTR InstName U2 SYMBOL res 1904 448 R0 SYMATTR InstName R9 SYMATTR Value 120K SYMBOL voltage 880 304 R0 WINDOW 123 0 0 Left 0 WINDOW 39 24 44 Left 0 SYMATTR InstName V2 SYMATTR Value PULSE(0 5 100 100 100 100 10 10) SYMBOL res 1712 176 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R11 SYMATTR Value 120K SYMBOL res 1936 160 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R12 SYMATTR Value 2.2K SYMBOL Opamps\\\\LT1001 1744 112 R0 SYMATTR InstName U3 SYMBOL res 1904 80 R0 SYMATTR InstName R14 SYMATTR Value 120K SYMBOL cap 1680 240 R0 SYMATTR InstName C1 SYMATTR Value 10=B5 SYMATTR SpiceLine V=3D10 Irms=3D0 Rser=3D0.009 MTBF=3D0 Lser=3D0 ppPkg=3D1 SYMBOL res 1632 448 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R13 SYMATTR Value 20K SYMBOL res 1760 336 R0 SYMATTR InstName R8 SYMATTR Value 18K SYMBOL cap 2000 480 R0 SYMATTR InstName C2 SYMATTR Value 0.068=B5 SYMBOL res 1904 528 R0 SYMATTR InstName R10 SYMATTR Value 300K SYMBOL res 1040 720 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R15 SYMATTR Value 75K SYMBOL res 1280 800 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R16 SYMATTR Value 2.2K SYMBOL res 1056 816 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R17 SYMATTR Value 5.8K SYMBOL Opamps\\\\LT1001 1088 752 R0 SYMATTR InstName U4 SYMBOL res 1248 720 R0 SYMATTR InstName R18 SYMATTR Value 6.8K SYMBOL res 1840 832 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R19 SYMATTR Value 2.2K SYMBOL Opamps\\\\LT1001 1648 784 R0 SYMATTR InstName U5 SYMBOL res 1808 656 R0 SYMATTR InstName R20 SYMATTR Value 234.5K SYMBOL polcap 1584 672 R0 WINDOW 3 24 64 Left 0 SYMATTR InstName C3 SYMATTR Value 10=B5 SYMATTR Description Capacitor SYMATTR Type cap SYMATTR SpiceLine V=3D100 Irms=3D22m Rser=3D3.9 MTBF=3D2000 Lser=3D0 ppPkg= =3D1 SYMBOL res 1616 816 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R23 SYMATTR Value 120K SYMBOL zener 1872 784 R0 SYMATTR InstName D1 SYMATTR Value BZX84C10L SYMATTR Description Diode SYMATTR Type diode SYMBOL res 1616 912 R90 WINDOW 0 0 56 VBottom 0 WINDOW 3 32 56 VTop 0 SYMATTR InstName R21 SYMATTR Value 120K TEXT 1008 -48 Left 0 !;ac dec 100 1 1M TEXT 1008 -80 Left 0 !.tran 300m startup TEXT 920 40 Left 0 ;Vin1 : from output of pressure transducer (0-5V) TEXT 920 360 Left 0 ;Vin2 : from pressure setting potensiometer of panel (0-5V) TEXT 1824 896 Left 0 ;VoutF : goto pressure controller (0-10V)

----------

and it is uC function

u16 UpdatePID1(u16 plant_value, u16 setpoint) { u16 error; u32 pTerm, dTerm, iTerm, sum; error =3D plant_value - setpoint; pTerm =3D (u32)PID1_pGain * (u32)error; // calculate the proportional term PID1_iState +=3D error; // calculate the integral state with appropriate limiting if (PID1_iState > PID1_iMax) { PID1_iState =3D PID1_iMax;} else if (PID1_iState < PID1_iMin) { PID1_iState =3D PID1_iMin;} iTerm =3D (u32)PID1_iGain * (u32)PID1_iState ; // calculate the integral term error =3D (plant_value - PID1_dState); dTerm =3D (u32)PID1_dGain * (u32)error; // calculate the differential term PID1_dState =3D plant_value; // keep prev. pant_value sum =3D pTerm + iTerm ; sum -=3D dTerm; sum /=3D 1000; //Gain was * 1000 error =3D (u16)sum; if (error > PID1_Max) { error =3D PID1_Max;} else if (error < PID1_Min) { error =3D PID1_Min;} return (error); }

///////////////

What PID parameters values { u16 PID1_dState , PID1_iState,PID1_iMax,PID1_iMin,PID1_iGain, PID1_pGain,PID1_dGain, PID1_Min,PID1_Max; } calculated from circuit?

Reply to
jsmith
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.