AUTO-320 · Lesson 12 of 12 · 23 min
Capstone: diagnosing a no-cool and a heater complaint
Kiran's climate control term ends with two jobs that Marty assigns to her alone, with the rule he uses for every capstone: he will answer questions, but she must plan each diagnosis, write down what she expects to find before every test, and write the repair order herself. The first job arrives in July, on the hottest day of the year: courier van 3, R-1234yf, with a note from its driver that reads "A/C blows cold for a minute then warm. Worse in traffic. Fine on the highway sometimes." The second arrives the following January, on a −8 °F morning: Gord Haney's pickup, R-134a, with Gord's own description: "Heater's barely warm at idle, I hear water gurgling behind the dash, and the low coolant light came on twice this week."
This lesson follows both diagnoses from the interview to the verified repair, using everything in the course: the comfort checks of Lesson 1, the pressure-temperature reasoning of Lesson 2, the compressor controls of Lesson 5, superheat and subcooling from Lesson 6, the heater measurements of Lesson 7, the service procedure of Lesson 11 and the rules of Lesson 4. Each job ends in a repair order written as complaint, cause and correction.
Job one: the plan
Before she touches the van, Kiran talks to the driver, Priyanka, on the phone. The air conditioning cools for a minute or two after a cold start, then blows warm; on the highway it sometimes recovers, in traffic it never does; there is no unusual noise and no warning light. Kiran writes her plan in the order the course taught her: verify the complaint with a performance test and the scan tool recording; inspect the cabin air filter, the condenser and the cooling fan; read the high-side and low-side pressures and convert them to temperatures; and check the compressor's command and any reason the module is holding it off. She also writes down her expectation. A system that cools briefly and then quits in traffic suggests a high-side pressure that climbs until the compressor is switched off: a condenser airflow problem or an overcharge, rather than a low charge, which would usually cool poorly from the start.
The cabin air filter was changed at the last service and is clean. The condenser face and the gap behind it are clean; the van's route is paved. With the engine running and the air conditioning on, she watches the front of the van and sees the problem in thirty seconds: the electric cooling fan does not turn.
Job one: the measurements
Kiran connects the R-1234yf service machine's gauges and records the pressures every 15 seconds at idle with the air conditioning on maximum, alongside the scan tool's high-side pressure sensor, the compressor command and the fan command. The low side settles normally. The high side climbs steadily. After about a minute and a half, the engine control module switches the compressor off with the reason "high-side pressure", the high side falls, and two minutes later the compressor is allowed back on and the cycle starts again. Throughout, the module commands the fan to 100 percent.
def sat_temp(p_abs, table):
for (t1, p1), (t2, p2) in zip(table, table[1:]):
if p1 <= p_abs <= p2:
return t1 + (t2 - t1) * (p_abs - p1) / (p2 - p1)
raise ValueError("outside table")
table = [(14, 32.1), (23, 38.4), (32, 45.8), (41, 54.2), (50, 63.6), (59, 74.2), (68, 85.8), (77, 99.0), (86, 113.5), (95, 129.5), (104, 147.6), (113, 167.2), (122, 188.9), (131, 212.5), (140, 238.1), (149, 265.9), (158, 296.1), (167, 328.7)] # R-1234yf saturation (temperature, absolute pressure), rounded
atm = 12.1 # Ridgeline's altitude
ambient = 93
cutout = 282 # gauge pressure at which the module switches the compressor off (illustrative)
log = [(0, 171), (15, 202), (30, 226), (45, 248), (60, 265), (75, 277), (90, 283)]
for t, gauge in log:
cond = sat_temp(gauge + atm, table)
flag = " compressor switched off" if gauge >= cutout else ""
print(f"{t:3} s: high side {gauge:4} psi, condensing {cond:5.1f} F, {cond - ambient:4.1f} F above ambient{flag}")0 s: high side 171 psi, condensing 119.6 F, 26.6 F above ambient 15 s: high side 202 psi, condensing 131.6 F, 38.6 F above ambient 30 s: high side 226 psi, condensing 140.0 F, 47.0 F above ambient 45 s: high side 248 psi, condensing 147.1 F, 54.1 F above ambient 60 s: high side 265 psi, condensing 152.3 F, 59.3 F above ambient 75 s: high side 277 psi, condensing 155.9 F, 62.9 F above ambient 90 s: high side 283 psi, condensing 157.7 F, 64.7 F above ambient compressor switched off
The data says exactly what she expected. The refrigerant is condensing ever further above the outside air because nothing is moving air through the condenser at idle, until the high-side pressure reaches the module's limit. On the highway, ram air does the fan's job, which is why the system "sometimes recovers". The module is protecting the system correctly, and the charge is not the problem; adding refrigerant would only have made the pressure climb faster. The fan is commanded on and not turning, so the fault is in the fan, its power, or its control.
The van's fan is driven by a fan control module mounted on the shroud, powered through a 40 ampere fuse and commanded by the engine control module with a pulse-width modulated signal. Kiran checks the fuse first: it is blown. A blown fuse is a symptom, not a cause; something drew too much current. She turns the fan by hand with the engine off and the key out. It turns, but stiffly, with a rough spot, unlike the free spin of a healthy fan. With a new fuse fitted and a clamp-on ammeter around the fan module's supply, she commands the fan to 100 percent with the scan tool.
# Cooling fan current at full command: compare with the specification (illustrative)
spec_max_a = 28.0 # maximum running current at full speed, from service information
fuse_a = 40
readings = [("first second (starting)", 52.0), ("after 3 s", 41.5), ("after 10 s", 39.8)]
for label, amps in readings:
note = "over specification" if amps > spec_max_a else "within specification"
print(f"{label:<24} {amps:5.1f} A: {note}{', near the fuse rating' if amps > 0.9 * fuse_a else ''}")
print("a motor drawing far more than its rating with a rough, stiff shaft has failing bearings: replace the fan and motor assembly")first second (starting) 52.0 A: over specification, near the fuse rating after 3 s 41.5 A: over specification, near the fuse rating after 10 s 39.8 A: over specification, near the fuse rating a motor drawing far more than its rating with a rough, stiff shaft has failing bearings: replace the fan and motor assembly
The fan runs, slowly, drawing about 40 amperes against a maximum of 28. Its bearings are failing; the motor struggles, overheats and, on a hot day, draws enough to blow the fuse. The fan control module is not at fault, but Kiran checks its connector and the main ground for heat damage, because a fan drawing that current can burn a connector. Both are clean.
Job one: repair and verification
The repair is a new fan and motor assembly with its shroud, as the parts catalog supplies it, and a new fuse. Because the refrigerant circuit was never opened and the charge was never in doubt, there is no recovery or recharge, which Kiran notes on the repair order so that nobody later wonders whether one was skipped. With the new fan fitted, she repeats the same idle test on the same hot afternoon, then a performance test against the maker's chart.
def sat_temp(p_abs, table):
for (t1, p1), (t2, p2) in zip(table, table[1:]):
if p1 <= p_abs <= p2:
return t1 + (t2 - t1) * (p_abs - p1) / (p2 - p1)
raise ValueError("outside table")
table = [(14, 32.1), (23, 38.4), (32, 45.8), (41, 54.2), (50, 63.6), (59, 74.2), (68, 85.8), (77, 99.0), (86, 113.5), (95, 129.5), (104, 147.6), (113, 167.2), (122, 188.9), (131, 212.5), (140, 238.1), (149, 265.9), (158, 296.1), (167, 328.7)]
atm = 12.1
ambient = 93
gauge_high, gauge_low = 202, 36
liquid_line, evap_outlet = 117, 48
cond = sat_temp(gauge_high + atm, table)
boil = sat_temp(gauge_low + atm, table)
print(f"high side {gauge_high} psi: condensing {cond:5.1f} F, {cond - ambient:4.1f} F above ambient, subcooling {cond - liquid_line:4.1f} F")
print(f"low side {gauge_low} psi: boiling {boil:4.1f} F, superheat {evap_outlet - boil:4.1f} F")
print("dash vent 46 F at 93 F ambient and 25 % humidity: chart allows 41 to 50 F")high side 202 psi: condensing 131.6 F, 38.6 F above ambient, subcooling 14.6 F low side 36 psi: boiling 34.5 F, superheat 13.5 F dash vent 46 F at 93 F ambient and 25 % humidity: chart allows 41 to 50 F
The high side now settles instead of climbing, the condensing temperature sits a normal margin above the outside air, subcooling and superheat are both normal, and the vent temperature is within the chart. The compressor runs continuously for twenty minutes at idle. Kiran drives the van in traffic for another twenty and confirms that it stays cold.
Job two: the plan
Gord's pickup arrives the next January. Gord's three facts, heat that is barely warm at idle, a gurgling behind the dashboard, and a low coolant warning, point in one direction before any test. Kiran writes her expectation down: coolant is leaking somewhere, the level has fallen, air has entered the system and collected at its highest point, the heater core, and the air pocket blocks flow through the core, worst at idle when the pump turns slowly. Her plan is to confirm the engine reaches normal temperature, measure the heater hose temperatures, find the leak with a pressure test, repair it, refill without air and verify.
The coolant reservoir is below its cold mark. The engine coolant temperature on the scan tool reaches 207 °F in normal time, so the thermostat is working and the engine is warm enough to give good heat. The blend door moves fully to hot, confirmed with the scan tool and by feel, and the blower works on every speed. With the engine warm and the heater on full, she measures the heater hoses at the firewall.
# Heater hoses before the repair: air at the core starves it of coolant (engine warm, full heat, blower high)
engine = 207
for label, inlet, outlet, vent in (("idle", 126, 111, 72), ("2,000 rpm", 158, 142, 104)):
drop = inlet - outlet
if inlet < engine - 45:
verdict = "inlet far below engine temperature: little hot coolant reaching the core (air or low level)"
elif drop > 27:
verdict = "restricted core"
else:
verdict = "normal"
print(f"{label:<10} inlet {inlet} F, outlet {outlet} F, vent {vent} F: {verdict}")idle inlet 126 F, outlet 111 F, vent 72 F: inlet far below engine temperature: little hot coolant reaching the core (air or low level) 2,000 rpm inlet 158 F, outlet 142 F, vent 104 F: inlet far below engine temperature: little hot coolant reaching the core (air or low level)
At idle both hoses are only lukewarm, far below the engine's temperature, and the vent air is barely warm: hot coolant is hardly reaching the core. At 2,000 rpm the pump pushes some coolant past the air and the core warms partly, but its inlet is still far below engine temperature. The pattern matches an air pocket, not the restricted core of Lesson 7, where the inlet was hot and the outlet cold.
Job two: finding the leak
With the engine cool, Kiran tops up the reservoir and pressure-tests the cooling system with the hand pump and adapter at the cap's rated pressure. The gauge falls slowly over ten minutes, so there is a leak. She checks the radiator, the hoses, the water pump's weep hole and the heater hose connections with a light and a mirror. At the firewall, the heater core's inlet hose uses a quick-connect fitting, and its O-ring is weeping: there is dried coolant crust around the joint and, with the system under pressure, a drop forms every few seconds. On a cold morning the plastic fitting and its seal shrink, the leak gets worse, and the system pulls in air as it cools overnight. She also tests the cap itself on the adapter; it holds its rated pressure.
Because a slow loss of coolant can also come from inside the engine, she rules that out too: the engine oil shows no sign of coolant, there is no white smoke or sweet smell from the exhaust, and a combustion leak test, a chemical that changes color in the presence of exhaust gas, held over the reservoir with the engine running shows no change. The leak is the quick-connect O-ring.
Job two: repair and verification
The repair is a new O-ring kit for the heater hose quick-connect fittings, both inlet and outlet because they share the same age and design, fitted with the coolant drained below their level. Kiran refills with the maker's specified coolant at the correct mixture for Denver winters, using the shop's vacuum filler so that almost no air remains, then runs the engine to operating temperature with the heater on full and checks for gurgling, the hoses and the level. She repeats the pressure test, which now holds steady for ten minutes, and measures the heater again.
# Heater hoses and output after the repair (engine warm, full heat, blower high, idle)
engine, inlet, outlet, vent, inlet_air = 207, 198, 178, 140, -8
drop = inlet - outlet
print(f"inlet {inlet} F ({engine - inlet} F below engine), outlet {outlet} F, drop {drop} F: flow normal")
print(f"vent {vent} F with {inlet_air} F outside air: a rise of {vent - inlet_air} F")inlet 198 F (9 F below engine), outlet 178 F, drop 20 F: flow normal vent 140 F with -8 F outside air: a rise of 148 F
At idle the heater core's inlet is now close to engine temperature, the drop across the core is normal, and the vent air is hot. Kiran asks Gord to watch the coolant level for a week and to call if the warning returns; Simone books a free level check. The warning does not return.
The repair orders
Kiran writes both repair orders in Ridgeline's format: complaint, cause and correction, with the readings that prove each, and the labor and parts. Marty reads them twice. On the van's order, he points out that she recorded that no refrigerant was recovered or charged, and why, which protects the shop. On Gord's, he likes that she recorded the combustion leak test, because it answers the question Gord will be asked at his next service elsewhere.
# Repair order totals (illustrative rates and prices)
rate = 155
jobs = {
"van 3: diagnose no-cool, replace cooling fan assembly": {"labor_h": 2.1, "parts": 455.0},
"pickup: diagnose heater, pressure test, heater hose O-rings, vacuum fill": {"labor_h": 1.8, "parts": 104.8},
}
for name, j in jobs.items():
labor = j["labor_h"] * rate
parts = j["parts"]
tax = 0.0915 * parts # Denver combined sales tax on parts
total = labor + parts + tax
print(f"{name}")
print(f" labor {j['labor_h']} h x {rate} = {labor:7.2f}, parts {parts:7.2f}, tax {tax:6.2f}, total {total:8.2f} USD")van 3: diagnose no-cool, replace cooling fan assembly labor 2.1 h x 155 = 325.50, parts 455.00, tax 41.63, total 822.13 USD pickup: diagnose heater, pressure test, heater hose O-rings, vacuum fill labor 1.8 h x 155 = 279.00, parts 104.80, tax 9.59, total 393.39 USD
| Line | Complaint | Cause | Correction |
|---|---|---|---|
| Van 3 | A/C cold briefly, then warm; worse in traffic | Cooling fan bearings failing; fan drawing about 40 A against 28 A maximum, blowing its 40 A fuse; high side rising to cut-out at idle | Replaced fan and motor assembly and fuse; checked connector and ground; no refrigerant recovered or charged; verified pressures, subcooling, superheat and vent temperature against the chart |
| Pickup | Heater barely warm at idle, gurgling, low coolant warning | Heater hose quick-connect O-ring leaking at the firewall; low level let air collect at the heater core | Replaced both quick-connect O-rings; refilled with specified coolant by vacuum fill; pressure test holds; combustion leak test negative; heater hose drop and vent temperature normal |
On her last day of the climate term, Bev asks Kiran the question she asks every apprentice at the end of a term: what would she tell a new apprentice about climate control? Kiran thinks about the summer and the winter: Gord's fluff-packed condenser, Theo's slipping clutch, Harold's contaminated cans and his loose aspirator hose, the Lindqvists' clicking door and blocked rear valve, Marcus's fogged windshield, the vans' plugged heater core and failing fan, Dr. Singh's honest heat pump. "Turn every pressure into a temperature," she says, "and never add refrigerant until you know where it went. Most of the time it didn't go anywhere."
Worked problem
Same symptom, different cause
Another van cools briefly and then blows warm in traffic, like van 3, but its fan runs normally and its condenser is clean. The high side climbs to the cut-out, and subcooling is very high. What might be the cause?
Show solution
- High subcooling with high head pressure suggests too much refrigerant in the condenser.
- An overcharge, often from a top-up by pressure rather than by weight, fits the pattern.
- A restriction downstream of the condenser can also hold liquid back; check for a temperature drop or frost at a component.
- Recover and weigh the charge: if it is well over the label, evacuate and charge by weight.
Answer: An overcharge or a high-side restriction; recovering and weighing the charge separates them.
Common mistakes
MistakeAdding refrigerant to a system that cuts out on high pressure.
InsteadFind out why the pressure climbs: airflow, fan, condenser or overcharge.
MistakeReplacing a blown fan fuse without finding why it blew.
InsteadMeasure the fan's current and check its bearings and wiring.
MistakeTopping up coolant without finding the leak.
InsteadPressure-test the cooling system and find the leak.
MistakeRefilling a cooling system without removing the air.
InsteadVacuum-fill or bleed as specified, then verify the heater hose temperatures.
MistakeWriting a vague repair order.
InsteadRecord complaint, cause and correction with the readings that prove them.
Summary and key terms
- Plan each diagnosis and write down the expected result before testing.
- Brief cooling followed by warm air in traffic points to high-side pressure reaching the cut-out.
- Convert pressures to temperatures and compare them with ambient to find heat-rejection problems.
- A fan commanded on but not turning: check its fuse, current, bearings, power and ground.
- Lukewarm heater hoses at idle with gurgling point to air in the system from a leak.
- Pressure-test the cooling system, rule out combustion leaks, repair, vacuum-fill and verify.
- Record each repair as complaint, cause and correction, including what was not done and why.
- High-pressure cut-out
- The point at which the module switches the compressor off to protect the system.
- Fan control module
- An electronic module that drives the cooling fan motor at a commanded speed.
- Cooling system pressure test
- Pressurizing the cooling system with a hand pump to find leaks.
- Combustion leak test
- A chemical test that detects exhaust gas in the coolant.
- Quick-connect fitting
- A push-on hose connection sealed with an O-ring.
- Verification
- Repeating the original test conditions after a repair to prove the fix.
Practice problems
Work each problem on paper first, then reveal the answer to check.
Why did adding refrigerant not suit van 3?
Show answer
The charge was fine; the pressure climbed because the fan was not moving air, and more refrigerant would raise it faster.
Why was the fan's current measured instead of just replacing the fuse?
Show answer
A blown fuse shows excess current; the current showed the motor itself was at fault.
What distinguished Gord's air pocket from the restricted core in Lesson 7?
Show answer
Both hoses were lukewarm and far below engine temperature, instead of a hot inlet and cold outlet.
Why did Kiran run a combustion leak test?
Show answer
To rule out a head gasket leak as the source of the coolant loss and the air.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.