This page is a work-in-progress.
A broken mini split
I am working on a mini split heat pump unit that exhibits poor thermostat behavior, including heat/cool cycling in auto mode and an extremely wide set-point differential (particularly while heating).
According to the service manual (search for two occurrences of H: and section 8.4.4), the stock behavior works as follows:
While cooling, it exceeds the set-point by >2°C (3.6°F) before turning off.
While heating, it exceeds the set-point by >6°C (10.8°F) before turning off.
When the unit is on auto mode and it turns off, it selects the next mode (after fifteen minutes) by using a differential of 2°C (3.6°F).
While set to cool or heat mode and idle, I assume (though it is not clearly specified in the service manual) that the unit resumes cooling or heating when the set-point is exceeded by 1°C (1.8°F).
The unit is set to auto mode with a set-point of 22°C (71.6°F) and is currently cooling. It cools until it reaches <20°C (68.0°F). It switches to fan mode and waits fifteen minutes. Now the temperature is too low, so it switches to heat mode. It heats until in reaches >28°C (82.4°F). It switches to fan mode and waits fifteen minutes. Now the temperature is too high, so it selects cool mode and the cycle continues, repeatedly switching between heating to cooling every half hour or so.
The unit is set to heat mode with a set-point of 22°C (71.6°F). It heats until the room temperature is >28°C (82.4°F), then stops. It starts heating again when the temperature has reached 21°C (69.8°F). That is a differential of 7°C (12.6°F).
The unit is set to cool mode with a set-point of 22°C (71.6°F). It cools until the room temperature is <20°C (68.0°F), then stops. It starts cooling again when the temperature has reached 23°C (73.4°F). That is a differential of 3°C (5.4°F).
This seems to have been designed for a ideal scenario where a correctly-sized unit would be able to run at the lowest speed continually without ever significantly exceeding the set-point. However, this fails when the outside temperature is near the set-point or some other factor(s) require less than the unit’s minimum output.
Modifying the stock behavior
As described in the service manual, the unit uses a thermistor to detect the room temperature. Unless I am missing something, solving this problem is not particularly difficult once the pieces are in place to manipulate that temperature (simulating a temperature chosen by the custom thermostat). Like this:
Require the stock thermostat to be set to auto mode and a specific temperature.
Support high and low set-points in the custom thermostat. This is not a requirement, but it helps make the behavior very explicit.
Implement a minimum differential (high set-point minus low set-point) in the thermostat. Obviously this is important to prevent rapid on-off cycling of the unit.
Once the mid-point is reached, simulate a room temperature that forces the unit to switch to fan mode, then simulate a room temperature equal to the unit set-point. This forces the unit to turn off.
Anytime the actual room temperature is outside the set-points, just simulate a room temperature with the same offset from the unit set-point as the actual high/low set-point’s offset from the actual room temperature.
Temperatures that must be simulated
The stock set-point range is 17-30°C. The unit increases or decreases its speed based on the offset from the set-point; this offset can be up to 5°C to reach full speed (search for two occurrences of H: in the service manual). From this information, we can calculate several possible temperature ranges necessary to simulate the thermistor.
For the full set-point range of 17-30°C, the required simulated range is 12-35°C.
For the minimum set-point of 17°C, the required simulated range is 12-22°C.
For the maximum set-point of 30°C, the required simulated range is 25-35°C.
The custom thermostat will assume that the stock controller is always set to a specific set-point, such as 17°C. However, it is helpful to know what the options are in order to provide greater flexibility in the parts chosen to simulate the thermistor. For example, if the chosen set-point for the stock controller is 17°C, then the temperature range that must be simulated is different than with a set-point of 30°C.
The stock room thermistor
The room temperature (T1) sensor is a 10kΩ negative temperature coefficient (NTC) thermistor (search for Appendix 1 in the service manual). From the values given there, here are the ones that correspond to the full range of the temperatures that dictate the stock controller’s behavior:
At 12°C, the resistance is 18.7177kΩ.
At 25°C, the resistance is 10kΩ.
At 35°C, the resistance is 6.40021kΩ.
Based on those values, the Steinhart-Hart model coefficients are:
A = 0.001108306471
B = 0.0002437817347
C = 0.000000000508387064
Whereas the β model coefficients are:
R(25°C) = 10kΩ
β = 4099.70K
With the above coefficients, the two models appear to perform nearly identically for this narrow temperature range.
Simulating the thermistor with a digital potentiometer
To me, the most obvious way to simulate a thermistor is with a digital potentiometer. But see the next section.
The necessary resistance values are something like the following (based on the temperature ranges that must be simulated):
The full set-point range requires a resistance range of 6.4-18.7kΩ with a precision of approximately 0.1kΩ.
The minimum set-point range requires a resistance range of 11-19kΩ with a precision of approximately 0.2kΩ.
The maximum set-point range requires a resistance range of 6.4-10kΩ with a precision of approximately 0.1kΩ.
If only the maximum set-point range is simulated, perhaps the following would work, in series, providing a worst-case simulated range of 6.3-10.2kΩ:
Simulating the thermistor by applying a voltage
Rather than using a digital potentiometer however, it may be possible to simulate the thermistor by simply applying a voltage from a digital-to-analog converter (DAC) on a microcontroller, eliminating the need for a digital potentiometer.
The thermistor input voltage, measured with the unit powered on and the thermistor disconnected, is 5VDC. The reference resistor measurement was not stable with the unit powered off, ranging from 6.1-6.6kΩ, and seemed to slowly rise. However, with the unit powered on (and zero voltage verified across the output pin and ground), the resistance was a steady 8.06kΩ.
Assuming then that the voltage divider uses a reference resistance of 8.06kΩ, the required input voltage for simulating the full set-point range would be 1.51-2.79VDC.
Microcontroller for the custom thermostat
There are many different microcontrollers with which to build the custom thermostat. One option is the STMicroelectronics NUCLEO-F767ZI. I have selected this board because it has an Ethernet port and is supported by MicroPython, CircuitPython, and Arduino IDE. Here are links to the board documentation:
Building the thermostat
To be continued…
2022-01-26: Added See also section
2021-11-11: Added more details about stock behavior
2021-11-05: Updated details about the thermistor voltage divider
2021-10-16: Added sections with details about the stock thermistor and applying a voltage to simulate the thermistor