Controlling a Latching Solenoid using a PSoC | Cypress Semiconductor
Controlling a Latching Solenoid using a PSoC
Back to the blog world after a long period of inactivity. In the past few months, I have had a chance to work on a very interesting project for our CEO T.J. Rodgers. He is donating 152 wine fermenters to the U.C Davis School of Enology and Viticulture. A couple of articles that talk about the project: Blending Science With Wine, UC Davis claims world’s greenest winery
An important part of the fermenter is a temperature controller that controls the temperature of the fermenting grape juice – also known as “Must” – during the fermentation process. The stainless steel drum that holds the ”must” is surrounded by a jacket through which cold or warm water is passed. A PSoC is used to sense the temperature of the “must” using a thermistor, and based on the desired set point, controls the flow of cold or warm water through the jacket to maintain the temperature of the “must”. The PSoC controls the water flow by operating a solenoid valve connected to the outlet port of the jacket.
In this blog post, I am going to discuss the valve control section of the temperature controller. This can be used in many other interesting applications like automatic garden irrigation, bathtub overflow control etc.
The primary design challenge was that the temperature controller was battery operated. Because of this, a continuously on solenoid valve cannot be used. The solution was a latching solenoid valve from Orbit.
This valve is used in commercial water sprinklers. The valve has an inlet port and an outlet port for water. A plunger opens or closes the valve. This plunger is operated by two magnetic coils. Energizing one of the coils with a 15V/20mS pulse opens the valve. Once on, the valve latches and stays on without any further need for power. Energizing the other coil with the same pulse closes the valve and the valve latches and stays closed. The schematic of the valve control is shown below.
LT1303 is a charge pump, which is used to step up the 3.5V - 4.5V battery voltage to 15V and charge C6, a 2200uF capacitor. J3 is a socket for the Orbit valve. The common is connected to the +ve of the 2200uF capacitor. The other two pins are connected to the drain of T1 and T2, N Channel MOSFETs. Applying a pulse to the gate of these transistors will discharge the charge in capacitor through the corresponding coil. Let us have the look at how the PSoC controls this circuit.
The PSoC controls the charge pump through the CH_PMP_SHDN and VB_FB signals. CH_PMP_SHDN is a GPIO pin configured as StdCPU/Strong and turns on or off the charge pump. VB_FB is the feedback signal used to sense the voltage on the 2200uF capacitor. Figure below shows the PSoC Designer resource placement for the valve control.
A comparator is used to compare VB_FB with a fixed threshold generated by a DAC6. The voltage on the 2200uF capacitor is derived by the formula.
Vout = Vref/10K * 160K
Vout = Voltage on the 2200uF
Vref = Comparator reference voltage
When the voltage across the 2200uF cross the desired output, the comparator goes high, and the PSoC turns off the charge pump and generates a 20mS pulse on gate of the respective MOSFET to turn On or Off the Orbit valve.
Following code is used to turn on the valve.
// Enable the Charge Pump
/* Set Analog reference power to SC On / Ref Med */
ARF_CR |= 0x06;
/* Start the CMP and DAC modules */
/* A small delay for the DAC and comparator to stabilize */
/* Wait for the comparator output to go high
When comparator output becomes high, it means Vboost is around 18V */
while(!(CMP_CR0 & 0x80));
// Disable the Charge Pump
// Set the VALVE_ON GPIO
VALVE_ON_Data_ADDR |= VALVE_ON_MASK;
/* Switch off the CMP and DAC */
/* Set analog reference power to all off */
ARF_CR &= ~0x07;
// 20mS Delay
// Clear the VALVE_ON GPIO
VALVE_ON_Data_ADDR &= ~VALVE_ON_MASK;
Enable the charge pump, switch on the comparator and DAC, wait for the comparator output to go high, disable the charge pump, turn off comparator and DAC and switch on the VALVE_ON GPIO for 20mS. This will turn on T1 and discharge C6 through the On coil thus turning on the valve. Similar code is used for turning off the valve where T2 is switched On.
Stay tuned for more interesting topics on the Fermenter!