Arduino driver hardware for 0-10V power controller
I've been working on a project to send excess energy from my PV panels to the immersion heater.
I thought I would share the details in case they are useful. You are welcome to take this information as the basis of your own project, but I provide no guarantee as to its fitness or performance. Please remember that you must be suitably qualified to work on electrical equipment.
Rather than try to make my own solution for the power electronics, I choose the CARLO GAVAZZI
RJ1P23V30 which requires 0-10V for the control input, plus a 20-28V supply. It is available from Farnell:
- requires a single 5V supply from the Arduino from which the necessary voltages are derived
- requires a single Arduino PWM output to control the power in the load
- accepts a single digital output from the Arduino to provide a safety watchdog timer.
The watchdog has two purposes:
- it allows the 24V circuit to be powered down when it is not needed (and in so doing guarantees that the controlled device is fully off)
- it automatically turns off the 24V circuit if your software crashes.
I've uploaded the following files here:
immersion_driver.sch a schematic file to load into gschem
immersion_driver.pdf the same schematic as a pdf
immersion_driver.pcb a suggestion for layout on stripboard to load into the gEDA PCB editor
immersion_driver.png the strip board layout as a simple graphic.
Here are some notes on the circuit...
The PWM input needs to be connected to an Arduino pin that supports pulse width modulation.
The op-amp U1 has a gain of two (set by R2 and R3) to generate the required output range of 0-10V. The components R1+C1 form a standard RC circuit to integrate the PWM output to a voltage of 0-5V. Note that the output of this stage actually depends on the voltage coming out of the Arduino's output pin. If the 5V supply is low (on my board it drops to 4.9V), then this will be reflected as a lower range (0-9.8V in this case) on the output. If this is a problem for you, you can change the value of the resistors which set the op-amp's gain.
The dc-dc converter derives 24V from the 5V supply. You should do a quick calculation of the power dissipation in your Arduino's supply regulator, especially if you are running the board from a supply at the upper end of the range. I run my Arduino Ethernet board from 6V and it works fine.
The watchdog timer U3 controls power to the dc-dc converter via Q1. In your main software loop, toggle the WD pin so that there is a positive transition at least once every 3 seconds.
If you don't want to use this facility then you can simply connect the WD input to any pin on your Arduino which will provide a positive edge more often than every 3 seconds. You could even connect it to the same pin as you use to generate the PWM signal, provided you treat 254 as the maximum value for analogWrite()
The diode D1 protects the input to the op-amp in the case that the PCM output has a voltage on it, but the watchdog has shut the 24V supply down.