PID Design & Simulation
Problems

I think the main problem is that you've provided an error input that makes no sense. You are using a pulse that is either \$0\:\text{V}\$ or else \$1\:\text{V}\$. It's never negative. So the integrator is integrating this error over time and driving the system to the rails. As it should.

There is another problem, I think. The LM741 input specification clearly states that these parts can have an input impedance as low as \$300\:\text{k}\Omega\$. They will simulate at a higher value -- probably set for the typical value of \$2\:\text{M}\Omega\$. But that's not the point. You need to design for worst case. Your PI opamp is using extremely high resistance values and I'd worry about error and oscillation. You need to tone down those values and put them into a reasonable range for operating with an LM741.

And there is yet another problem, I think. The LM741's short circuit output is specified at something like \$25\:\text{mA}\$, in broad strokes. It should be kept well within that limit. Your use of \$750\:\Omega\$ and \$1\:\text{k}\Omega\$ resistors is pushing things too far and I think you need to back off a little on those values.



Re-write

Here's my re-write of your system, with additions and changes that I think you may need to actually allow it to operate within a reasonable environment so you can see that it may work within some reasonable expectation. I did some divide by 10 and multiply by 10 things to keep your constants similar and I lightened the loading a little. There is a "plant" and an error term calculation, now, too.







simulate this circuit &ndash; Schematic created using CircuitLab

Please note that there is an actual error term being computed now. Also note that I've reduced your \$500\:\text{k}\Omega\$ resistor value, which was way too high in general and certainly for the LM741, as well. And I've increased your D-term impedances, too. Finally, I increased the summing node/inverter impedances a little bit, as well. I think these will keep it within some bounds without my having to waste a lot of time reading the datasheet. It "feels" better to me, now.

As I said earlier, you were just driving in \$0\:\text{V}\$ and \$1\:\text{V}\$ as inputs to the controller and all it was doing was what it should do if the error is always on one side of \$0\:\text{V}\$. It was railing. No shock there.

To repair this problem, I've added the simplest "plant" I could (simple RC) so that I could provide some feedback (close the loop.) I've also added something to compute an error term. A real error term. Now a control set-point can be used and hopefully the "plant" will track it.

Let's see.



Spice Results

Here's a quick LTspice simulation:



And the results comparing the set point with the output of the RC:



I think this shows you that pretty much the same circuit, but with appropriate values and with some kind of realistic error term works fine.



Now, above circuit with your error term

Below is the the above working PID circuit but now without the error term calculation to close the loop. This time, instead, leaving the loop open and using your error term input:



In both the displays below, check out the display of the PI term, the D term and the summing result.

This first output allows Spice to perform a DC operating point calculation, which may (often does) pre-charge capacitors.



This second output prevents Spice from performing its initial DC operating point calculation. So the capacitors start out with \$0\:\text{V}\$ across them.



Look familiar???

Same circuit. A "user error" input makes all the difference.

(There are some differences between the two. But they are not important ones for the purposes of demonstrating the problem with your error input.)