VNH2SP30 + Peltier: nonlinear current at high PWM frequency?

I am trying to use the VNH2SP30 Motor Driver Carrier MD01B to control a Peltier. I am not an expert, and I am observing unexpected behavior with the current as I vary the PWM duty cycle: details below…

I read that the PWM frequency should be high when one uses an H-Bridge to control current flow through Peltier elements. I chose the VNH2SP30 since the datasheet says it can handle PWM up to 20 kHz.

An Arduino (Atmega 328) is controlling the MD01B. Prior to hooking up the Peltier, I have measured the PWM frequency with an oscilloscope. I can heat or cool one side of the Peltier depending on the IN_A and IN_B pins.

My Peliter is rated for Vmax = 15.4V and Imax = 4A, so my power supply is dialed to 15V max. The power supply shows the current draw, and I can also monitor the voltage across the Peliter.

At low PWM frequency, i.e. 250 Hz, the current increases (approximately) linearly as I increase the duty cycle. However, since I want high PWM frequencies, I tried to increase this, and weird things start to happen. For example, at 500 Hz, the current flattens out at around 70% duty cycle, and then jumps to full current at 100% (but not even at 99% duty cycle). At 2kHz, something incomprehensible happens – it stays at 0.4A all the way from 10% to 99% duty cycle and then jumps to 3.1A at 100% duty cycle. At 2.5kHz, the behavior is quite different from 2kHz. The current is linear, but only reaches 1/2 max at 90% duty. At 20kHz, the current doesn’t even reach 1/10th max at 90% duty.

			current draw at various PWM
duty	250Hz	500Hz	1kHz	2kHz	2.5kHz	5kHz	10kHz	20kHz
10%	0.38A	0.39A	0.39A	0.39A	0.21A	0.14A	0.09A	0.05A
20%	0.72A	0.73A	0.75A	0.40A	0.38A	0.27A	0.17A	0.07A
30%	1.05A	1.06A	1.09A	0.40A	0.58A	0.39A	0.24A	0.09A
40%	1.37A	1.39A	1.43A	0.40A	0.75A	0.52A	0.31A	0.11A
50%	1.67A	1.68A	1.72A	0.40A	0.93A	0.64A	0.39A	0.15A
60%	1.95A	1.97A	1.83A	0.40A	1.10A	0.76A	0.39A	0.17A
70%	~2.2A	~2.3A	~1.8A	0.40A	1.27A	0.87A	0.39A	0.18A
80%	~2.45A	~2.3A	~1.8A	0.40A	1.43A	0.91A	0.39A	0.20A
90%	~2.7A	~2.3A	~1.8A	0.40A	1.50A	0.91A	0.39A	0.22A
100%	~3.1A	~3.1A	~3.1A	~3.1A	~3.1A	~3.1A	~3.1A	~3.1A

These measurements are all approximate.

Can someone please help me understand what is going on and suggest pointers on how to proceed so that I can linearly vary current over the full range at 10 or 20 kHz PWM?

Thank you for your assistance.

BTW, I reproducibly get a DIAG_B error at 2.5kHz with 99% duty cycle or at 5 kHz with 98% duty cycle or at 10 kHz with 96% duty cycle, i.e. when the PWM pin is off for 4 microseconds. After this error, the pin states are: IN_A = 1, IN_B = 0, DIAG_A = 1, DIAG_B = 0.

Follow-up: I monitored the output voltage across the Peltier with an oscilloscope and can now provide some detail (but not a solution) regarding the the non-linear relation betwen current and duty cycle. I found out that the problem occurs only above a threshold Vcc voltage.

For example, at 10 KHz PWM, when I set Vcc below 12.35V, the current is roughly proportional to the duty cycle and the oscilloscope shows the expected voltage pulse across the Peltier occuring at 10 KHz. However, there is a sudden transition when I start to increase Vcc. At about Vcc = 12.5 volts, suddenly the voltage across the Peltier no longer pulses with every PWM period. Instead, it only occurs every four periods – that explains why the current measurement in my original post (where Vcc was 15V) showed 0.72A at 250 Hz PWM 20% duty but 0.17A at 20KHz PWM 20% duty – a four fold difference.

In summary, with Vcc = 12V, I can run at 20 KHz and get current proportional to the duty cycle. But I cannot increase Vcc to 15V since the output pulse no longer occurs at every PWM pulse. As for why this is happening and if it is possible to fix this, I have no idea. Does anyone have any suggestions?


That’s strange. Can you verify the motor driver output is doing the correct thing at 15V without the peltier device attached? Can you show us a screenshot from your oscilloscope that shows the PWM input and an output?

- Jan

Thanks for the suggestion. I replaced the Peltier with a large resistor and monitored the output voltage with Vcc = 15V at 10KHz PWM. Although with the resistor the voltage no longer looks like a step function, it is periodic at 10KHz. I also changed the Peltier for an even larger one (i.e. larger max current), and I see the same phenomenon as before, but this time at a different threshold voltage. Although I’m not 100% certain, those observations suggest that the effect I reported is due to the Peltier and not the motor driver. I am going to try contacting the manufacturer and/or some other forums about what is the appropriate PWM frequency for Peltiers.


I remember reading that Peltiers have different efficiencies at different temperatures. Could you be observing this temperature dependency?

- Ryan

I don’t know if the temperature dependence of Peltier efficiency would result in the dramatic transition I see.

From some searching, I think what I may need is an LC filter between the motor board output and the Peltier.

I just wanted to update this thread. I called two companies who make Peltier TECs. I told them I wanted to use an H-Bridge and PWM to control it, so what minimum frequency is necessary? Both of them said above 500 Hz is OK, since the thermal time constant of a TEC is quite slower than that (I think one guy said about 0.5 seconds). So I am running at a lower frequency now.