I'm developing a heating pad controller with an Arduino. Since I don't want to use the PWM + MOSFET combination, I researched and ended up with a DAC + amplifier solution.

I have a 24-watt heating pad (12V, 2A), and I'll use an Arduino and MCP4922 (DAC) to generate a variable 0-5V output. At this point, I want to use an amplifier that supports at least 24 watts to drive 0-12V into the heat-pad.

Since I don't have any experience with amplifiers, I have a few questions:

  • Is this the right solution for me?
  • What amplifier should I use for this purpose?


There will be multiple heating pad controllers with a shared power source (12V, 6A), and since each cycle of PWM will draw maximum load from the source (no matter what the actual heating target is,) I want to switch from this design.

My current setup uses PWM + MOSFET, and the power source produces weird sounds on each PWM cycle. With a voltage-controlled solution, it's also possible to limit the whole consumption of the setup to, for example 5A.

  • 5
    \$\begingroup\$ PWM + MOSFET is an amplifier, it's just a class D amplifier. Alternatives will, under certain conditions, dissipate more heat in the amplifier than in the pad. Could you edit your question to say what you mean when you say "amplifer"? Can you give an example, or say "class A" amplifier, or otherwise clarify. \$\endgroup\$
    – TimWescott
    Aug 12, 2022 at 15:27
  • 2
    \$\begingroup\$ For a heater, PWM is the ideal solution. It's cheap, essentially lossless, and completely adequate given the time constant of any practical heating element. \$\endgroup\$
    – Neil_UK
    Aug 12, 2022 at 15:29
  • 3
    \$\begingroup\$ If you have multiple pads, then the controller can choose to drive the pads sequentially, limiting the peak load current, by 'underlapping' the PWM waveforms. If you use linear amplifiers, you waste power in them, and you'll require more current from your supply to get the same heat in the pads. To answer your headline question - No, a linear amplifier is never the right choice for a heating pad. \$\endgroup\$
    – Neil_UK
    Aug 12, 2022 at 15:55
  • 4
    \$\begingroup\$ @AmirrezaNasiri A linear amplifier (class A or AB) will never have better than 50% efficiency. Class C amplifiers do better, but are nonlinear, and class D amplifiers (which is what your PWM solution is) are theoretically (not practically, of course) 100% efficient. Given the amount of power heaters take, and the fact that the slow thermal processes work as a low-pass filter anyway, a class-D amplifier is the obvious choice. \$\endgroup\$
    – Hearth
    Aug 12, 2022 at 16:26
  • 2
    \$\begingroup\$ @Neil_UK: your comment about sequenced PWM looks a heck of a lot like the answer to me -- consider yourself encouraged to copy & paste it into an answer (and remember to mention that PWM for a heater can be pretty slow, unless the heater is minuscule). \$\endgroup\$
    – TimWescott
    Aug 12, 2022 at 16:34

1 Answer 1


PWM is the right way to go for heaters. It wastes practically no power, which linear amplifiers certainly will. Practical sized heaters have time constants in the many seconds, which means a 1 Hz rate is more than enough for a steady heat output. That sort of rate is easily slow enough to be generated by software, there's no need to force multiple hardware PWM generators to co-operate.

You say that your power supply 'produces weird sounds' on each cycle. You could put a large capacitor on the output to source the sudden PWM edges, giving the supply more time for its control to respond.

You say there will be many 24 W heating pads (12 V 2 A), and you have a 12 V 6 A power supply. This means you will not be able to have more than three pads on at the same time. You can control more than three pads if you don't switch them all on at the same time. The trick is to stagger the PWM pulses so that they 'underlap'.

Strawman design. For instance, to control 10 pads. A simple design might run 1 Hz PWM into each heater. You would set up your Arduino with, for instance, a 100 Hz interrupt, which would give you 100:1 control. In the interrupt routine, count mod 100 to give you the 1 Hz. Divide the one second into staggered time slots, starting at counts of 0, 10, 20 etc. Turn each pad on at the start of its respective slot.

If all the pads were on 5%, then your supply would be pulsing between 0 and 2 A, as each heater turned on individually for 5 of 100 counts. If they were on 15%, then heater 1 would turn on before 0 turned off, and the power supply current would vary between 2 A and 4 A. If you were to run all the pads, then 30% would be the maximum setting, running the supply at a steady 6 A.

This is the simplest possible control algorithm. It would fail if you wanted pads 0, 1, 2, 3 all running at 50%, even though the total power consumption was only 48 watts and the supply can handle 72 watts. This is due to the fixed time slots I've described demanding 8 A once heater 3 turns on. It's quite straightforward to see that moving the heaters' designated time slots around would resolve the peak current issue, for instance 0, 1, 5, 6 would work fine at 50%. I'll leave it as an exercise for the reader to come up with an algorithm to either rearrange the time slots, chain the pads so one starts when the previous switches off, or to delay the start of overlapping pulses, to maintain the peak current at 6 A or less.

  • \$\begingroup\$ Thank you sooo much for your answer, Neil. I got the overall idea and will try to figure out an algorithm and timing that's suitable for my application. \$\endgroup\$ Aug 12, 2022 at 19:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.