PDA

View Full Version : Air Conditioning Power Control


Garfield
12 Nov 09, 10:24 AM
I have had a Daikin ducted air conditioner installed and needed to interface it to C-Bus. I had heard that you can use an interface board to control the air conditioner from C-Bus but it was extraordinarily difficult to find any information about it, so I will share what I found.

The board was a KRP4A series product. I can't remember exactly which one and it is buried in the roof now :(

Anyway, the documentation provided with the board is rather confusing (and has errors). My air conditioning installer said he had tried to use it before and had given up because he couldn't make sense of the instructions.

I found the attached PDF document on an air conditioning forum which explains the first three of the 11 modes of operation. I chose mode 1 which means C-Bus has exclusive control over the air conditioner power. All it needs is a single voltage-free relay:

1114

When I work out how to do temperature control, I will let you know...

Automan
13 Nov 09, 11:36 PM
My air conditioning installer said he had tried to use it before and had given up because he couldn't make sense of the instructions.


Hi Garfield

I have used this type of aircon interface before and in order to control
the temperature of the aircon, basically it requires a switched resistor network to allow you to set the temp.

If you use an 8 channel relay and wire your resistors in parrallel the temperature will be determined by the value of resistance you select via your relay module.

It will allow you to set say 8 different temperatures ( one per channel )
Note the resistances values are relatively low so measure the resistance after it is connected to determine the correct value. Range is 0 to 135 ohms and will result 16 to 32 degree respectively.

Its a bit of messy and costly because of the module to control the temperature but it does work.

I hope this helps you.

Cheers
Automan

Garfield
15 Nov 09, 12:23 PM
Thanks Automan. I had just worked out how I was going to do this :)

I used Excel to plot the min/max values of resistance from the KRP4A data sheet. I worked out a best fit curve which went through the middle which is:

R = 8.46 (T - 16)

Here it is from Excel:

1115

I want to use the range from about 18C to about 28C which will be a resistance of around 17 ohms to 101 ohms.

I decided to make a binary arrangement of resistors (in a 1:2:4:8 ratio) with them being shorted out by relays. Four relays will then give me 16 settings:

1116

This circuit will give me about 17.8C to 27.5C.

I paralleled up some resistors to get the values I needed, but I haven't tried it out yet.

I am going to use a lighting group to control the temperature, but I don't want it to set the temperature from 0C to 255C (255C is too hot even for Adelaide).

I put a percentage on a page to display a custom group level. On the value tab I clicked the calculate button and put in my end points of 18 and 27.5 and got the equation I need in my logic:

SetPoint := GetLightingLevel("AC Set Point") * 0.03725 + 18;

Now I just need to work out the logic to control the relays.

Darren
15 Nov 09, 04:01 PM
You could use some logic like this to control the relays:

Resistance := 8.46 * (SetPoint - 16);
BinaryValue := Round((Resistance - 15) / 5.5);
if BinaryValue <> OldBinaryValue then
begin
SetLightingState("R1", BinaryValue and 1 = 0);
SetLightingState("R2", BinaryValue and 2 = 0);
SetLightingState("R4", BinaryValue and 4 = 0);
SetLightingState("R8", BinaryValue and 8 = 0);
OldBinaryValue := BinaryValue;
end;

The "and" operator in this case is doing a bitwise AND to check whether a particular bit in the BinaryValue is set, and then setting the corresponding relay accordingly. If a bit is set, the relay is off and vice versa.

The OldBinaryValue is kept so that C-Bus commands are sent to the relays only when the set point changes. You could add a delay too, so that if the user is changing the set-point rapidly, you only get commands sent every second or so.

Automan
15 Nov 09, 09:00 PM
On the value tab I clicked the calculate button and put in my end points of 18 and 27.5

Good work Garfield, logic is the best way!

For better temperature range your resistor values should be
Minimum base value 12 ohms =18 degrees
and binary resistor value 8,16,32 & 64 this will give you temperature range
upto 32degrees in closer steps of 1 degree.

Cheers
Automan

ashleigh
15 Nov 09, 09:12 PM
Resistance := 8.46 * (SetPoint - 16);
BinaryValue := Round((Resistance - 15) / 5.5);
if BinaryValue <> OldBinaryValue then
begin
SetLightingState("R1", BinaryValue and 1 = 0);
...
end;


Crikey - that aint half bleedin' obvious. Can you explain it for us mere mortals?

daky
15 Nov 09, 10:51 PM
Automan, How did you know what resistance range is? :)

Automan
15 Nov 09, 11:56 PM
Automan, How did you know what resistance range is?

A friend of mine asked me if I could assist him with one of his automation jobs
however he was not using C-bus, using brand x. Anyway he sent me the data sheet for the same board that Garfield in using. The input range is 0 to 135 ohms and will result 16 to 32 degree respectively.

So it functions as Garfield has plotted using excel.

Sayonara

Automan

Darren
16 Nov 09, 09:35 AM
Crikey - that aint half bleedin' obvious. Can you explain it for us mere mortals?

I think you are being modest. Having a brain the size of a planet, you would have no problems understanding this ;)

From Garfield's graph and equation:

Resistance := 8.46 * (SetPoint - 16);

From Garfield's circuit, the four relays form a binary value (http://en.wikipedia.org/wiki/Binary_numeral_system) where each relay represents one binary digit (bit):

Binary value = Relay 1 + 2 * Relay 2 + 4 * Relay 4 + 8 * Relay 8

Where
Relay 1 = 5.5 ohm
Relay 2 = 11 ohm
Relay 4 = 22 ohm
Relay 8 = 44 ohm

From this we get:

Resistance = 15 + BinaryValue * 5.5

Rearranging this equation gives:

BinaryValue := Round((Resistance - 15) / 5.5);

To find out if the least significant bit of the BinaryValue is set (corresponding to the 5.5 ohm resistor being in circuit), we AND (http://en.wikipedia.org/wiki/Logical_conjunction) with a binary value of 0001 (decimal 1). If this value is 0, then the bit is not set and the relay needs to be closed/on (shorting out the resistor). So we set relay R1 to the boolean value given by:

(BinaryValue and 1) = 0

which leads to:

SetLightingState("R1", BinaryValue and 1 = 0);

This is the same as:

if (BinaryValue and 1) = 0 then
SetLightingState("R1", ON)
else
SetLightingState("R1", OFF);

Setting the other relays, using a binary weighting of 2, 4 and 8, is similar.

Garfield
17 Nov 09, 06:49 AM
Thanks Darren. It looks like that will do what I want. When I get a chance I will wire it up and let you know how it goes.

Garfield
19 Nov 09, 07:35 PM
I have just got the temperature control all working. That logic code worked nicely. I can set it from C-Bus and the Daikin controller shows the right temperature.

The only potential issue is that even if you set the set-point temperature via C-Bus and the KPR4A interface board, you can still change it from the Daikin controller. Obviously, this change does not get fed back to C-Bus so you can see the actual set-point :(

ashleigh
19 Nov 09, 11:06 PM
No 2-way control.... a bit sucky. Its a shame they use a variable reistance thingy as input, I had heard of that form of control being used about 10 years ago (and it was old-fashioned even back then). Daikin... how about entering the moden age.... the 1990's will be good enough! How about an RS-232 serial interface?

Htnut
20 Nov 09, 03:56 PM
There is a serial interface that works very well. It is not a Daikin product but nor does it have a Daikin pricetag :)

Details are here

www.xdimax.com/cool/cool.html (http://www.xdimax.com/cool/cool.html)