Oprava DDS generátoru funkcí MOTECH FG503

      15.1.2019 Před časem jsem získal tento postarší generátor v nefunkčním stavu a konečně se pustil do jeho opravy. Jedná se o generátor funkcí na principu DDS (Direct Digital Synthesis) se základními průběhy sinus, obdélník (do 3 MHz) a trojúhelník, vzestupná/sestupná pila (do 20 kHz) s možností frekvenčního rozmítání a externí AM modulace. Je osazen komunikačními rozhraními RS-232 a GPIB. Stručný popis parametrů je zde a v češtině zde, servisní manuál ani žádný software jsem nikde nenašel. Výhodou je, že mám na opravu ještě půjčený druhý generátor stejného typu jako referenci.
      Po zapnutí přístroje se normálně rozsvítí alfanumerický displej a funguje ovládání funkcí přes tlačítka (kromě tlačítka "dolů"), ale výstup je trvale v záporné saturaci. Tak mě hned napadlo, že asi někdo vnějším napětím odpráskl výstupní buffer a po výměně to určitě pojede. Po odšroubování dvou křížových šroubků vzadu lze stáhnout dozadu horní a dolní plastový kryt a odhalí se velká, hustě osázená deska s několika přídavnými moduly. Trochu mě zarazilo, že asi polovina všech integrovaných obvodů měla vybroušené značení a to ruční frézkou, nikoliv strojově, to si někdo dal při výrobě práci. Mozkem generátoru je 8-bitový MCU Philips P80C32EBPN rodiny x51 s 64kB externí pamětí programu M27C512 a 2kB externí datovou SRAM HM6116-L. K tomu kupa programovatelné logiky v podobě obvodů GAL16/20V8, 74xx a operáků.

MOTECH FG503-inside MOTECH FG503-inside MOTECH FG503-triangle synth board MOTECH FG503-MCU P80C32EBPN, SRAM, EPROM, EEPROM
vnitřek - PCB vnitřek - PCB gen. pily a trojúhelníku SRAM, EPROM, MCU

      Začal jsem tedy sondou osciloskopu pátrat po generovaném signálu, ale nemohl jsem nikde nic najít. Chybějící značení IO ztěžovalo identifikaci D/A převodníku. Našel jsem sice jeden DAC08E na desce modulu P503Z2D, ale později se ukázalo, že ten se využívá jen pro generátor trojúhelníku a pily. Na referenčním generátoru jsem vyzkoumal, že sinusový signál vzniká v modulu P503Z6C, ale ve vadném generátoru po něm nebylo ani vidu. Postupně jsem prohodil všechny moduly a IO, které byly v paticích mezi referenčním a vadným generátorem, abych ověřil jejich funkčnost a nikde jsem nenašel chybu. Až došlo na malou sériovou SPI EEPROM 93LC66B, které jsem si předtím nějak nevšiml a hle, najednou výstup generátoru ožil! Avšak sinusový signál se zdál býti poněkud zkryplený - horní půlvlna byla nějak divně spláclá a dolní půlvlna ve 2/3 tvrdě oříznutá. Při změně výstupní amplitudy se tvar signálu vůbec neměnil, ale amplituda se normálně měnila, takže na problém ve výstupním bufferu to nevypadá. Také jsem si všiml, že skutečná amplituda nesedí s nastavenou, ale je o dost větší. Takto zmrvený průběh lezl už z modulu P503Z6C, kde jsem ho naměřil na pinech 2 OZ UA07 a UA08. Nezbylo než zkusit poladit okolní odporové trimry. VRA1 a VRA4 ovlivňují velikost kladné, resp. záporné půlvlny a také střídu obdélníkového průběhu. Tím se mi podařilo ořez téměř eliminovat. VRA3 pak mění DC offset (i obdélníkového průběhu), který jsem tak tak s malou rezervou vyvážil, aby nebyla žádná z půlvln deformovaná a offset byl zhruba na nule. VRA5 nemá na průběh viditelný vliv. I přes tuto korekci byl pořád výstupní signál asi 1,5x větší, než by měl být podle nastavení na displeji. Amplitudu pouze sinusového signálu lze dále měnit hrubě pomocí víceotáčkového trimru VR28 (rozsah cca 1:4,5) a jemně pomocí víceotáčkového trimru VR12 (rozsah cca 1:1,8), VR11 neměl žádný vliv. Tímto se mi podařilo snížit amplitudu sinusovky tak, aby odpovídala údaji na displeji. Amplituda ostatních průběhů tímto ovlivněná není a byla celou dobu v pořádku. Nakonec jsem se ještě podíval FFTéčkem na spektrum sinusovky, abych zjistil odstup vyšších harmonických. Ty mají úroveň cca o 56 dB nižší než základní harmonická, což zhruba odpovídá katalogu.

zmršená sinusovka zmršená sinusovka a spektrum vyladěná sinusovka a spektrum vyladěná sinusovka-spektrum
zmršený sinus zmršený sinus vyladěný sinus vyladěný sinus-spektrum

      Obsah všech pamětí a PLD jsem vyčetl programátorem LabProg-48LV, balíček s image soubory je ke stažení zde. Při pohledu na obsah EEPROM vadného generátoru bylo na první pohled patrné, že je tam uloženo mnohem méně informací, než v EEPROM referenčního generátoru. Buď došlo nějakou chybou ke smazání obsahu nebo tam někdo strčil prázdnou EEPROM, když se ho pokoušel oživit (o jeho minulosti nic nevím). Ověřil jsem, že když se EEPROM kompletně vymaže (hodnotou FFh nebo 00h) a strčí do generátoru, tak nefunguje a na začátek paměti je uloženo pár Byte, podobně jako to bylo u této paměti. Zkoumáním programové EPROM jsem zjistil, že generátor obsahuje nějaké servisní menu nebo protokol (patrně přes sériovou linku), který umožňuje kalibrovat celou řadu parametrů včetně amplitudy a offsetu generovaného průběhu (tyto jsou pak uloženy v sériové EEPROM). Je tedy logické, že každý kus se nějak liší a má jiné kalibrační konstanty, takže když jsem obsah EEPROM zkopíroval, tak na jiném HW už kalibrace neseděla a musel jsem to dokroutit trimrama. A patrně by mohla nastat i situace, že to při příliš odlišné kalibraci ani dokroutit nepůjde. Jak se do kalibračního menu dostat zatím nevím, nikde není dostupný žádný popis a ni SW. To by vyžadovalo disassemblování a důkladnou analýzu kódu. Z disassembleru vypadl cca 3MB výstup, což se mi zrovna mi moc probírat nechce. Další možností by bylo metodou pokus-omyl zkoušet měnit Byty v EEPROM a zjišťovat, co ovlivňují, ale to je také dost zdlouhavé. Další zajímavostí je, že jsem našel rozdíly v obsahu 2 PLD U302 (GAL16V8D) a U402 (GAL20V8B). U referenčního generátoru obsahovaly JEDEC soubory téměř samé 1, jako by celé pole bylo prázdné, zatím co u vadného generátoru byla převaha 0 a vypadalo to, že má obvod skutečně něco dělat. Deklarované funkce generátoru to ale nijak neovlivňuje, možná to implementuje nějaké další skryté nebo volitelné funkce, např. generátor mohl být ještě rozšířen o modul čítače, atp.
      Oprava nefunkčního tlačítka "dolů" se také vyvíjela docela zajímavě. Napřed jsem myslel, že se prostě vymačkala guma s kontaktní vodivou ploškou, ale bylo to úplně jinak. Vyšrouboval jsem z bočnic 2 páry šroubků vpředu a sejmul plastový čelní panel. Pak jsem odšrouboval samořezné šroubky držící z vnitřní strany PCB tlačítkové matice. Pod každým tlačítkem se nachází klasický "had" 2 vodivých cestiček, který je při stisku spojen ploškou vodivé gumy z druhé strany hmatníku a tím se přizemní vstup PLD U901 (GAL16V8D). Zkusil jsem vyndat a zandat švába do patice a zkontroloval, jestli nemá ohnutou nožičku. Drátkem jsem zkusil přizemnit přímo pin snímající problémové tlačítko, ale nic se nedělo. Podle multimetru daný pin také nevykazoval žádné anomálie, že by měl být snad odpálený. Opět tedy došlo na prohození švába z referenčního generátoru a opět to začalo fungovat jak má. Přečetl jsem tedy obě PLD v programátoru a nemohl jsem věřit svým očím, když se oba JEDEC soubory vůbec nelišily (resp. jen časem zapsaným v hlavičce)! PLD z vadného generátoru jsem tedy smazal a znovu napálil a tlačítko začlo fungovat. Tohle mi teda hlava nebere...

      18.1.2019 S pomocí programátoru EPROM jsem zkusil zmapovat alespoň část obsahu EEPROM. Provedl jsem vždy změnu jednoho parametru ovládacími tlačítky, vyčetl EEPROM a porovnal její obsah s předchozím image. Změny byly dle očekávání v několika málo Bytech, nebyla zatím zjištěna přítomnost kontrolního součtu. 2-bytové položky jsou uloženy jako little-endian, 4-bytové pak po dvou slovech little-endian, kde vyšší slovo je uloženo na nižší adrese, takže je to takový mix.

EEPROM hexa-view

      30.1.2019 Metodou pokus/omyl a půlením intervalu se mi podařilo identifikovat v EEPROM Byty, které slouží pro kalibraci generovaného signálu (amplituda, DC offset, frekvence) a pro nastavení bitové rychlosti sériového portu. Význam Bytů amplitudy uložené na adresách 05C - 05Dh se mi nepodařilo přesně určit, oba Byty mají značný vliv na amplitudu a navíc nejsou monotónní (s klesající hodnotou se amplituda chvíli snižuje, ale pak zas skokově vyskočí nahoru, např. pro hodnotu 3F49h byl výstup na minimu 1,56 Vpp a pro 3F48h vyskočil výstup na maximum 4,75 Vpp). Jemnou změnou z 3F82h na 3F83h jsem zvětšil amplitudu obdélníkového průběhu asi o 7 mV a dorovnal tak na požadovanou hodnotu 2,0 Vpp. Amplitudu sinusového průběhu na 2,0 Vpp jsem pak ručně dokroutil trimrem VR12. Výstupní offset jsem vynuloval změnou hodnoty na adrese 120-121 z 42CBh na 4338h. Znovu jsem změřil spektrum sinusového průběhu a o trochu se snížil podíl vyšších harmonických.

address size description
006-007h 2 sine wave output voltage LE [mV]
008-009h 2 sine wave frequency MSW-LE (e.g. 01h, 00h, A0h, 86h -> 000186A0h = 100000*0.01 = 1000 Hz)
00A-00Bh 2 sine wave frequency LSW-LE [10 mHz]
00C-00Dh 2 triangle wave frequency MSW-LE
00E-00Fh 2 triangle wave frequency LSW-LE [10 mHz]
010-011h 2 ramp up/down wave frequency MSW-LE
012-013h 2 ramp up/down wave frequency LSW-LE [10 mHz]
018-019h 2 sine wave output offset MSW-LE [mV]
01A-01Bh 2 sine wave output offset LSW-LE [mV]
01Ch 1 wave mode and voltage dependent (00h for 1 V, 02h for 20 mV and 10 V, 03h for sine+offset,
01h for triangle, sine+sync, 05h for sine+sweep, 07h for sine+AM)
01Dh 1 mode flags (bit 0: offset, bit 1: sync, bit 2: ext. AM)
01Eh 1 wave mode and frequency dependent (90h for 1 - 20 kHz, A5h for 10 - 20 mHz, 27h for 1 MHz and DC,
30h sine+sweep, 01h sine+AM)
01Fh 1 waveform type (00h = sine, 01h = square, 02h = triangle, 03h = ramp up, 04h = ramp down, 05h = DC)
024-02Dh 2 output wave frequency calibration (all waveforms) LE [6,5 Hz] (3F99h for 1 kHz)
05C-05Dh 2 output wave amplitude calibration (all waveforms) LE [7,3 mV] (3FFFh for 3,83 Vpp, 3F49h for 1,56 Vpp)
0D4-0D5h 2 output wave offset calibration (all waveforms) LE [mV]
120-121h 2 output wave offset calibration (all waveforms) LE [mV]
1FEh 1 RS232 baudrate (00h for 9600 baud, 04h for 2400 baud, 06h for 4800 baud, 08h for 1200 baud,
always 7 bit, even parity)



Zpět

Aktualizováno 7.2.2019 v 23:59