JUNKERS CERAPUR smart (ZSB22-3C)

Poruchy, opravy, rady, návody

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

JUNKERS CERAPUR smart (ZSB22-3C)

#1 Příspěvek od Zmije »

Zdravim, na stole se mi válí deska z kondenzáku ZSB22-3C, chci ji otestovat, ale nemám hodnoty odporů kódovacího konektoru. Prosím má zde někdo tento kotel, nebo hodnoty ?
Předpokládané schéma je:

Kód: Vybrat vše

  R1  ___
1 ---[___]---+
             |
2 -----------+      
   R2 ___    | 
3 ---[___]---+
   R3 ___    |
4 ---[___]---+
PS: Odpovím si sám
R1=1k8, R2=12k6, R3=780Ω

Uživatelský avatar
mina
Příspěvky: 74
Registrován: 22 dub 2013, 02:00
Bydliště: ludeřov 54

#2 Příspěvek od mina »

Čao ,opravuješ desky ,zašlu CD nosič co mi prošlo rukama.
+ testery, RADIANT, DAKON,BUDERUS, a jiné.

Uživatelský avatar
fredis
Příspěvky: 5000
Registrován: 17 lis 2004, 01:00
Bydliště: Třebíčsko

#3 Příspěvek od fredis »

Zadara? :wink:

Uživatelský avatar
mina
Příspěvky: 74
Registrován: 22 dub 2013, 02:00
Bydliště: ludeřov 54

#4 Příspěvek od mina »

ANO ....CD nosič za známku Kč 10 :lol:

Uživatelský avatar
fredis
Příspěvky: 5000
Registrován: 17 lis 2004, 01:00
Bydliště: Třebíčsko

#5 Příspěvek od fredis »

javascript:emoticon(':aplause:') Škoda že jsi tak daleko...

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#6 Příspěvek od Zmije »

Co se oprav desek týče - tak daleko jsem ještě nepokročil, ale jisté dílčí výsledky jsou, např. simulátor kotle, který tuto desku dokáže zblbnout tak, aby si myslela, že je v kotli, ačkoliv nemá připojenu plyn. armaturu, 3cest. ventil, svíčky, STB ani NTC.
Plynovou armaturu jsem nahradil dvojicí relé na 48V, spínací kontakty jsou propojeny a přivádí kostru na katodu diody.
Přílohy
BHIIIsim.png
(16.96 KiB) Staženo 136 x
Naposledy upravil(a) Zmije dne 26 dub 2015, 12:27, celkem upraveno 1 x.

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#7 Příspěvek od Zmije »

Nevýhodou uvedeného zapojení je, že potřebuje ventilátor (turbodmychadlo), což je drahá součástka (>7000Kč), pokud není připojen, deska při pokusu o zapálení spadne do poruchy C6. Ventilátor má řízené otáčky a snímač otáček, napájí se síťovým napětím (230V AC), deska řídí otáčky pomocí PWM (svorka PWMO), zpětně se přenáší impulzy (PIN), které udávají aktuální počet otáček, konkrétně 4 změny úrovně na otáčku. Na 1ot. tak vychází dva impulzy se střídou 1:1. Frekvence při minimálních otáčkách je 70Hz a při maximálních 180Hz, tj. 60•70/2 = 2100ot./min. až 60•180/2 = 5400ot./min. Deska a ventilátor vytváří jednoduchou servosmyčku regulující otáčky, provedl jsem test, kdy při plných otáčkách (180Hz) jsem zacpal nasávání ventilátoru, otáčky se vlivem podtlaku zvýšili až na 208Hz, za chvíli zareagovala regulační smyčka a otáčky se snížili (175Hz) ale postupně dooscilovaly na požadovanou hodnotu (180Hz). Po uvolnění ucpávky došlo k opačné situaci otáčky nejprve poklesly a potom dokmitaly na 5400ot./min., regulační smyčka tak není příliš kvalitní.
Svorka označená symbolem GND

Kód: Vybrat vše

 |
---
je ventilátorem napájena na 110V proti kostře.

Signál na PWMO má průběh podobný jako GND, ale je na něm superponováno cca 5V PWM. Na obrázku PWMO je zobrazen rozdíl PWMO - GND.
Přílohy
GND.JPG
Průběh napětí na svorce GND vůči zemi (oscil. a kotel mají společný PE).
50V/DIV, DCoffs +150V, 5ms/DIV
(120.17 KiB) Staženo 133 x
PWMO.JPG
(92.03 KiB) Staženo 139 x
IF.png
Rozhraní pro sledování signálů PWMO(2) a PIN(3).
Připojit paralelně k ventilátoru, GND(1).
(18.35 KiB) Staženo 130 x
BHIIIplateIF.png
Rozhraní ventilátoru na desce BHIII.
(8.07 KiB) Staženo 126 x
Naposledy upravil(a) Zmije dne 20 črc 2013, 10:59, celkem upraveno 1 x.

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#8 Příspěvek od Zmije »

Na jedné straně je PWM modulace, na druhé je potřeba generovat signál se střídou 1:1 s proměnným kmitočtem, aby na výstupu platilo freq.=f(PWM). PWM lze integračním článkem převést na napětí odpovídající střídě, U=f(PWM), zbývá nalézt obvod freq.=f(U), vpodstatě převodník napětí -> kmitočet, zapojení existuje více, většinou s OZ nebo NE555, bohužel nezaručují střídu 1:1, vyřešit by se to dalo nastavením dvojnásobné frekvence a zařazením děličky dvěma (např. klopný D obvod), elegantnější způsob je použít napětím řízený oscilátor VCO např. CMOS 4046. Jedná se o kompletní obvod fázového závěsu, tj. VCO a fázový detektor v jednom pouzdře. Pro náhradu ventilátoru stačí pouze VCO, fázový detektor by při napětí 3,3V stejně nepracoval.

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#9 Příspěvek od Zmije »

Když už mám běžící simulátor kotle, rozhodl jsem se analyzovat komunikaci po sběrnici Junkers Heatronic III. Jelikož od vydání prvních výrobků s touto sběrnicí uplynulo pěkných pár let (narychlo se mi datum dohledat nepovedlo, ale podle výchozího data na regulátorech typuji rok 2005), většinu práce udělali jiní, zejména "Soudruzi z NDR" - díky!

http://www.mikrocontroller.net/topic/19 ... to=new#new
http://www.mikrocontroller.net/topic/317004
a další...

Podle informací z uvedených zdrojů by se mělo jednat o upravenou sběrnici LIN
http://www.elektrorevue.cz/clanky/04012/index.html

s tím, že neobsahuje synchronizační preambuli 0x55h, synchronizační mezera na konci rámce je kratší než obvykle a místo obyčejné sumy se používá CRC (soudruzi opět zabodovali, když se jim podařilo sestavit tabulku pro jeho výpočet), použitá rychlost je 9600 Baud, formát 8N1 (kromě synch. mezery).
Master (kotel) moduluje data změnou napětí přibližné hodnoty jsou 10V(L), 15V(H). Slave (regulátor) moduluje změnou odebíraného proudu.
Pro zachycení dat je potřeba převodník úrovní, mě se osvědčio zapojení na obrázku (zdroj: opět NDR), které sice snímá jen změny napětí, ale vidět jsou i zprávy od slave, neb změna proudu vyvolává pokles napětí. Za převodník stačí připojit sériovou linku (5V, nikoliv RS232), nebo logický analyzátor.

Tabulka pro výpočet CRC vypadá následovně (nejsem si zcela jist, zda se jedná o plnohotnotné CRC. Když jsem se snažil nalézt definující polynom, podařilo se mi to jen pro prvních cca 80 znaků, zbytek jaksi neseděl, tak buď jsem počítal špatně, nebo se toto CRC nedá definovat polynomem)

Kód: Vybrat vše

unsigned char jht_crc_table[]={
0x00, 0x02 ,0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18,
0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32,
0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C,
0x4E, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66,
0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E, 0x80,
0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9A,
0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2, 0xB4,
0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8,
0xEA, 0xEC, 0xEE, 0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x19, 0x1B,
0x1D, 0x1F, 0x11, 0x13, 0x15, 0x17, 0x09, 0x0B, 0x0D, 0x0F, 0x01, 0x03, 0x05,
0x07, 0x39, 0x3B, 0x3D, 0x3F, 0x31, 0x33, 0x35, 0x37, 0x29, 0x2B, 0x2D, 0x2F,
0x21, 0x23, 0x25, 0x27, 0x59, 0x5B, 0x5D, 0x5F, 0x51, 0x53, 0x55, 0x57, 0x49,
0x4B, 0x4D, 0x4F, 0x41, 0x43, 0x45, 0x47, 0x79, 0x7B, 0x7D, 0x7F, 0x71, 0x73,
0x75, 0x77, 0x69, 0x6B, 0x6D, 0x6F, 0x61, 0x63, 0x65, 0x67, 0x99, 0x9B, 0x9D,
0x9F, 0x91, 0x93, 0x95, 0x97, 0x89, 0x8B, 0x8D, 0x8F, 0x81, 0x83, 0x85, 0x87,
0xB9, 0xBB, 0xBD, 0xBF, 0xB1, 0xB3, 0xB5, 0xB7, 0xA9, 0xAB, 0xAD, 0xAF, 0xA1,
0xA3, 0xA5, 0xA7, 0xD9, 0xDB, 0xDD, 0xDF, 0xD1, 0xD3, 0xD5, 0xD7, 0xC9, 0xCB,
0xCD, 0xCF, 0xC1, 0xC3, 0xC5, 0xC7, 0xF9, 0xFB, 0xFD, 0xFF, 0xF1, 0xF3, 0xF5,
0xF7, 0xE9, 0xEB, 0xED, 0xEF, 0xE1, 0xE3, 0xE5, 0xE7};
Funkce pro výpočet CRC může vypadat takto

Kód: Vybrat vše

unsigned char jht_crc( unsigned char buffer[], int len )
{
    unsigned char i,crc = 0;

    for(i=0;i<len-1;i++){
        crc = jht_crc_table[crc];
        crc ^= buffer[i];
    }
    return crc;
}
Přílohy
EMS_Interface.png
(181.31 KiB) Staženo 101 x
jht.png
Logický analyzátor - celkový pohled
(58.71 KiB) Staženo 110 x
jht2.png
Detail na konec informačního rámce. Patrná je synchronizační mezera dlouhá 1,04ms. Délku trvání jednoho bitu je, kvůli nejistotám při vzorkování, vhodné určit jako průměr více bitů. Např. tři po sobě jdoucí bity (110) trvají celkem 0,3112ms => 1b trvá 103
(64.58 KiB) Staženo 111 x

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#10 Příspěvek od Zmije »

Data z logického analyzátoru je možné uložit např. v diferenciálním formátu s příponou .cvs. Data jsou uchována ve dvou sloupcích, první obsahuje čas v sekundách a druhý logickou hodnotu, která platí od času uvedeného u předešlé hodnotu po čas uvedený u aktuální hodnoty. Formát tak ukládá pouze změny signálu, nikoliv jednotlivé vzorky. Například jednotkový skok v tomto formátu zabere pouze 2 řádky dat a hlavičku (v konkrétním případě celkem 32B) bez ohledu na dobu vzorkování a vzorkovací frekvenci. Data lze dekodovat obdobným způsobem, kterým to dělá přijímač sériové linky. Dále je vhodné spočítat CRC, aby se ověřilo bezchybné přijetí a dekodování. Pro tento účel může posloužit jednoduchý skript vytvořený pro GNU Octave (opensource varianta matlabu, nemá sice k dispozici tolik knihoven a pokročilých funkcí jako MATLAB, ale je dostupný zdarma vč. zdrojových kódů).

Ve výstupu jsou k vidění dva datové rámce a spousta "synchronizačně-adresních" rámečků (ty nemají CRC)

To podstatné (CRC souhlasí tam, kde je)

Kód: Vybrat vše

0x11 0x00 << crc: 0x-1
0x88 0x00 0x18 0x00 0x23 0x01 0xEC 0x64 0x00 0x00 0x10 0x00 0xC0 0x80 0x00 0x80 0x00 0x80 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0xD6 0x00 << crc: 0xD6
0x88 0x00 0x34 0x00 0x28 0x01 0x56 0x01 0x56 0x80 0x00 0x00 0x03 0x00 0x00 0x01 0x68 0x00 0x00 0x05 0x00 0xFC 0x00 << crc: 0xFC
0x12 0x00 << crc: 0x-1
Octave skript

Kód: Vybrat vše

clear;
data_in = csvread("jht100k.csv");
out_file_name = "out.txt";
bit_period = 0.1037e-3;
since = 0;

data_in_x = data_in(:,1);
data_in_y = data_in(:,2);
N = length(data_in_x);
last_val = data_in_y([1]);

j = 1;
k = 1;
l = 1;
m = 1;
state = 'ws';
for i=1:N-1
	if (data_in_x([i]) >= since)
		break;
	endif
end

frame_time = data_in_x([i]);
for  i=i:N-1
	while (data_in_x([i+1]) > frame_time)
		switch (state)
			case 'ws'
				%printf("wait for start bit\n");
				if (data_in_y([i]) == 0)
					frame_time = data_in_x([i]) + 1.5*bit_period;
					uart_out = 0;
					bit_num = 0;
					state = 'fb';
				else
					break;
				endif
			case 'fb'
				%printf("first bit\n");
				bit_num++;
				sample_time([l]) = frame_time;
				sample_time_y([l++]) = 0.9;
				if (data_in_y([i]) > 0)
					uart_out = uart_out/2;
					uart_out += 128;
				else
					uart_out = uart_out/2;
				endif
				frame_time += bit_period;
				if (bit_num >=8)
					state = 'br';
				endif
			case 'br'
					%printf("%x\n", uart_out);
					data_out([m++]) = uart_out;
					uart_out = 0;
					if (data_in_y([i]) > 0)
						state = 'st';
					else
						sample_time([l]) = frame_time;
						sample_time_y([l++]) = 0.95;
						frame_time += bit_period;
						state = 'fs';
					endif
			case 'fs'
					if (data_in_y([i]) > 0)
						%printf("synchronization\n");
						data_out([m++]) = 512;
						state = 'st';
					else
						state = 'fe';
					endif
			case 'fe'
						%printf("frame error\n");
						state = 'st';
			case 'st'
				%printf("stopbit\n");
				sample_time([l]) = frame_time;
				sample_time_y([l++]) = 0.97;
				if (data_in_y([i]) > 0)
					state = 'ws';
				endif
				break;

		endswitch
	endwhile
	
	data_disp_x([j]) = data_in_x([i]);
	data_disp_y([j]) = last_val;
	j++;
	data_disp_x([j]) = data_in_x([i]) + 0.0000000001;
	data_disp_y([j]) = data_in_y([i]);
	j++;
	last_val = data_in_y([i]);
end

plot(((data_disp_x)*1000), data_disp_y, 'linewidth', 2, sample_time*1000,
       sample_time_y, '+', 'linewidth', 5);
xlim([since*1000 since*1000+40]); ylim([0 4]);

function crc = jht_crc (data)
	jht_crc_table=[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,26, 28, \
			 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, \
			 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, \
			 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, \
			 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, \
			 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, \
			 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, \
			 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, \
			 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, \
			 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, \
			 246, 248, 250, 252, 254, 25, 27, 29, 31, 17, 19, 21, 23, \
			 9, 11, 13, 15, 1, 3, 5, 7, 57, 59, 61, 63, 49, 51, 53, 55, \ 
			 41, 43, 45, 47, 33, 35, 37, 39, 89, 91, 93, 95, 81, 83, \
			 85, 87, 73, 75, 77, 79, 65, 67, 69, 71, 121, 123, 125, \
			 127, 113, 115, 117, 119, 105, 107, 109, 111, 97, 99, 101, \
			 103, 153, 155, 157, 159, 145, 147, 149, 151, 137, 139, \
			 141, 143, 129, 131, 133, 135, 185, 187, 189, 191, 177, \
			 179, 181, 183, 169, 171, 173, 175, 161, 163, 165, 167, \
			 217, 219, 221, 223, 209, 211, 213, 215, 201, 203, 205, \
			 207, 193, 195, 197, 199, 249, 251, 253, 255, 241, 243, \
			 245, 247, 233, 235, 237, 239, 225, 227, 229, 231 ];
			   
	N = length(data);
	crc = 0;
	for i=1:N
		crc = jht_crc_table([uint8(crc) + 1]);
		crc = bitxor(uint8(crc), uint8(data([i])));
	end 
endfunction

fid = fopen(out_file_name, 'w');
j = 1; 
for i=1:length(data_out)
	if (data_out([i]) > 255)
		if ((i - 3) >= (j + 1))
			crc = jht_crc(data_out([(j + 1):(i - 3)]));
		else
			crc = -1;
		endif
		fprintf(fid, "<< crc: 0x%02X\n", crc);
		%printf("<< crc: 0x%02X\n", crc);
		j = i;
	else
		fprintf(fid, "0x%02X ", data_out([i]));
		%printf("0x%02X ", data_out([i]));
		
	endif
end;
fclose(fid);
Přílohy
jht100k.txt
samotný kotel s JHT III
fvz = 100kHz, celkem 1M vzorků
soubor je ve formátu .cvs, avšak přejmenovaný na .txt
(24.28 KiB) Staženo 139 x

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#11 Příspěvek od Zmije »

Zpráva

Kód: Vybrat vše

0x88 0x00 0x18 0x00 0x23 0x01 0xEC 0x64 0x00 0x00 0x10 0x00 0xC0 0x80 0x00 0x80 0x00 0x80 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0xD6 0x00
je odesílána periodicky a obsahuje především data o kotli.
Typ zprávy je dán prvními čtyřmi Bajty, tedy 0x88 0x00 0x18 0x00
následuje maximální teplota na výstupu (odpovídá natočení levého knoflíku) 0x23 tj 35°C
další 2B obsahují teplotu změřenou na výstupu kotle (obvykle se zobrazuje na displeji) 0x01 0xEC tj. 1*256+14*16+12 = 492 jedná se o teplotu udanou na desetiny °C, tj 49,2°C
další Bajt je maximální výkon (nastavený v servisním řádku) 0x64 tj 100%
další Bajt je okamžitý výkon kontle 0x00

PS: tento projekt https://github.com/vegantransistor/BoschSmartHome

Odpovědět

Zpět na „Bílá technika“