Peltier Driver with Power Op Amp Oscillating - Page 1
Forum section: electronics / beginners

author: tb42
author_rank: Newbie
timestamp: April 24, 2020, 05:48:47 pm
content: Hi guys,I'm currently working on a driver for peltier elements (4.2V 3.7A). I tried to realize a voltage controlled current source with a power op amp (OPA549) and an ADA4522 for current feedback (see attached schematic). For testing the circuit, I first used a 7.5Ohms resistance as load. Everything works as expected, the output current is a nice linear function of the input voltage.However, if I use the peltier, the output oscillates with a frequency of 120kHz, like shown in the attached picture. The yellow trace is the OPA549 output, blue the ADA4522 output supplied to the -In pin of the OPA549 and pink the signal voltage at +In which I supply with a function generator at dc. (Notice there is also some oscillation in the pink signal, is this to be expected?)To further investigate I tried a couple of things.The pcb traces are short, the decoupling capacitors as close as possible to the pins and I use a ground plane, so there should be no problems regarding these issues.My first idea was, that maybe the small reverse current induced by the heating peltier could be a problem so the peltier would act a bit like a capacitor. So I tried to simulate that situation with the 7.5Ohms resistor and connected some capacitors in parallel. For anything under 100nF, the circuit is stable, everything above oscillates. With a capacitance of 1uF I get the same frequency as with the peltier. But thinking about this again it seemed very unlikely that this thermal effect could cause such a fast oscillation and the peltier has, as expected, no measurable capacitance either.The next thing I tried was a test resistor with 1Ohms, which is closer to the actual peltier resistance of 0.88Ohms. For positive input voltages the output is stable but for negative input it starts to oscillate at 140kHz. That makes me think that the main problem is the low load resistance.So I would need to do some output compensation. But as I'm not an expert regarding op amps, I would need some help with that.Some ideas:For driving large capacities one would use a snubber circuit. That probably would not help here, and a quick test with putting a 7Ohms resistor in series with a 100nF cap from V_out to GND had indeed no effect on the peltier oscillation. But maybe putting some capacitor somewhere else could help?Maybe the gain of ~0.8 is problematic? I could lower the input range to -2V-2V for a gain of 2 and adjust the current sense gain accordingly. Also for a negative gain the datasheet of the OPA549 shows a way higher maximum load capacity, could a negative gain help here, too? I should get a negative gain just by swapping the OPA549's +In pin with the -In pin, right?Does it play a role wether I use low side current sensing as in the current design or high side?If possible I would prefer a solution where I don't need to completely redesign the circuit as I would like to use the pcb i already have.I'm looking forward to your comments on my problem.Best regardsTobias

author: Kleinstein
author_rank: Super Contributor
timestamp: April 24, 2020, 08:56:57 pm
content: It is problematic to have a second OP inside the FB loop of the OPA549. Even if not adding effective gain, it can add phase shift, especially with the high gain.The usual way would be to have some extra capacitive feedback directly from the output of the OPA549 and an additional resistor from the ADA4522 output to the OPA549 input. This way one would have more voltage control for the higher frequencies and current control for the low frequencies. The peltier elements are usually relative close to an ohmic resistor, so the voltage control is not a problem.

author: udok
author_rank: Regular Contributor
timestamp: April 24, 2020, 09:41:43 pm
content: You don't need output compensation. You need to compensate your loop(and have a look at the datasheet).The ADA4522 has a gain of over 130, which means that the -3dB frequency is below 10 kHz.Above this frequency the ADA4522 adds 90 degree phase, and your phase margin is zero.Increase the current measurement resistor, to get the gain down and the bandwidth up.Or use a much faster opamp. In addition you will probably need the capacitive feedbackbetween the output of the opa549 and the input as suggested by Kleinstein.

author: tb42
author_rank: Newbie
timestamp: April 27, 2020, 12:16:13 pm
content: Thank you very much for your advice, I lowered the ADA4522 gain to 15 (using a lower input voltage range until I get a 0.1Ohms shunt resistor) and added a 33nF cap between the OPA549 -In and Out. The output is stable now, even when I connect the peltier via 5m of spooled cable. For the final circuit I will lower the gain a little more to about 8.

author: Kleinstein
author_rank: Super Contributor
timestamp: April 27, 2020, 01:38:33 pm
content: The extra capacitor in feedback only works well and predictable with a series resistor to the ADA4522 output. Than there is no real need to lower the gain even more.

author: tb42
author_rank: Newbie
timestamp: April 27, 2020, 06:44:22 pm
content: I added the resistor to the ADA4522 output and played a bit with different resistance and capacitance values. I optimised for stability and a linear response while having the peltier connected with 2m cables. For capacities under 1nF I get too much ringing in the step response as can be seen in the pictures (input voltage in yellow, OPA549 output in blue). It seems like 50Ohms and 12nF are sufficient for my purposes, although the linearity suffers at higher frequencies.For setting the input voltage, I will use an DAC, so by lowering the ADA4522 gain a bit I want to adjust the input voltage range to the DAC output range without the need of an additional voltage divider. Although a lower gain is not needed for stability purposes it should not cause further problems?

author: Kleinstein
author_rank: Super Contributor
timestamp: April 27, 2020, 08:43:08 pm
content: Peltier elements are usually relatively slow. So who need sub ms response for the driver ?