Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2017:digitizer [2018/01/14 19:12] Jonáš Čech |
2017:digitizer [2018/01/14 22:55] (aktuální) Jonáš Čech |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
====== Řízení digitizeru ====== | ====== Řízení digitizeru ====== | ||
Vypracoval Jonáš Čech | Vypracoval Jonáš Čech | ||
- | |||
===== Zadání ===== | ===== Zadání ===== | ||
Řádek 7: | Řádek 6: | ||
===== Úvod ===== | ===== Úvod ===== | ||
+ | Na obrázku níže je blokové schéma měřícího systému pro měření s můstkovými tlakovými senzory. Tento projekt je vypracováván v rámci diplomové práce. Možnost změny parametrů měření a použitých obvodů slouží k vyhodnocení vlivu dvou zesilovačů s programovatelným ziskem na měřený signál a následný výběr jediného obvodu zesilovače. | ||
{{ :2017:digitizer:blok_sch.png?600 |Obr 1.1: Blokové schéma }} | {{ :2017:digitizer:blok_sch.png?600 |Obr 1.1: Blokové schéma }} | ||
Řádek 17: | Řádek 16: | ||
Tato část byla navržena v rámci semestrálního projektu. Její shcématické zapojení je na obrázku níže. Hlavními obvody (pro tento projekt) jsou dva přístrojové zesilovače s programovatelným ziskem, [[http://www.analog.com/en/products/amplifiers/instrumentation-amplifiers/ad8557.html|AD8557]] od Analog Devices a [[http://www.ti.com/product/PGA308|PGA308]] od Texas Instruments a také AD převodník [[http://www.analog.com/en/products/analog-to-digital-converters/ad7175-2.html|AD7175-2]] od Analog Devices. Zbylé obvody jsou na digitální části nezávislé, jako přístrojový zesilovač s OZ a napěťové stabilizátory. | Tato část byla navržena v rámci semestrálního projektu. Její shcématické zapojení je na obrázku níže. Hlavními obvody (pro tento projekt) jsou dva přístrojové zesilovače s programovatelným ziskem, [[http://www.analog.com/en/products/amplifiers/instrumentation-amplifiers/ad8557.html|AD8557]] od Analog Devices a [[http://www.ti.com/product/PGA308|PGA308]] od Texas Instruments a také AD převodník [[http://www.analog.com/en/products/analog-to-digital-converters/ad7175-2.html|AD7175-2]] od Analog Devices. Zbylé obvody jsou na digitální části nezávislé, jako přístrojový zesilovač s OZ a napěťové stabilizátory. | ||
- | {{ :2017:digitizer:fips_sch.png?600 |Obr 1.1: Celkové schéma analogově-digitální části }} | + | {{ :2017:digitizer:fips_sch.png?600 |Obr 1.2: Celkové schéma analogově-digitální části }} |
Zapojení je realizováno na 4vrstvé DPS, pro zajištění co nejlepšího rozvodu zemí (digitální a analogová), referenčního a napájecího napětí, čímž bylo také dosaženo získání většího prostoru k rozmístění obvodů tak, aby byly minimalizováno jejich vzájemné ovlivňování. | Zapojení je realizováno na 4vrstvé DPS, pro zajištění co nejlepšího rozvodu zemí (digitální a analogová), referenčního a napájecího napětí, čímž bylo také dosaženo získání většího prostoru k rozmístění obvodů tak, aby byly minimalizováno jejich vzájemné ovlivňování. | ||
Řádek 23: | Řádek 22: | ||
Výsledná sestava je napájena ze zdroje napětí v rozashu 7-12 V. Toto napětí je stabilizováno na 5 V, kterým je napájena analogová část zapojení a některé obvody digitální části, na jejíž desce je toto napětí stabilizováno na 3,3 V pro většinu obvodů a také pro napájení digitální části AD převodníku. | Výsledná sestava je napájena ze zdroje napětí v rozashu 7-12 V. Toto napětí je stabilizováno na 5 V, kterým je napájena analogová část zapojení a některé obvody digitální části, na jejíž desce je toto napětí stabilizováno na 3,3 V pro většinu obvodů a také pro napájení digitální části AD převodníku. | ||
+ | {{ :2017:digitizer:fips_top.jpg?200 |Obr 1.3: DPS analogově-digitální části}} | ||
+ | {{ :2017:digitizer:fips_bot.jpg?200 |Obr 1.4: DPS analogově-digitální části}} | ||
=== Digitální část === | === Digitální část === | ||
- | Digitální část zapojení je realizována v rámci komerční vývojové desky [[http://www.st.com/en/evaluation-tools/32f746gdiscovery.html|STM32F746G-DISCO]] od STMicroelectronics. Tato deska poskytuje veškeré potřebné periferie pro záznam dat a komunikaci s uživatelem. | + | Digitální část zapojení je realizována v rámci komerční vývojové desky [[http://www.st.com/en/evaluation-tools/32f746gdiscovery.html|STM32F746G-DISCO]] od STMicroelectronics. Tato deska poskytuje veškeré potřebné periferie pro záznam dat a komunikaci s uživatelem, jako je displej s dotykovou vrstvou, paměť typu SDRAM, připojený slot pro SD kartu a ethernetové rozhraní pro další rozšíření. SDRAM paměť má celkovou kapacitu 128 Mbit, ovšem z důvodu zapojení jen části datových a adresních pinů je k dispozici pouze polovina její velikosti, což ovšem dostačuje pro měření o maximální délce 8 vteřin. |
{{ https://os.mbed.com/media/uploads/adustm/disco_f746ng_mbed_pinout_v5.png?600 }} | {{ https://os.mbed.com/media/uploads/adustm/disco_f746ng_mbed_pinout_v5.png?600 }} | ||
Řádek 41: | Řádek 42: | ||
===== Firmware ===== | ===== Firmware ===== | ||
Řídící firmware je psán ve vývojovém prostředí [[https://www.mbed.com/en/|Mbed]], jelikož je kompatibilní s použitou vývojovou deskou a poskytuje některé knihovny k jejím periferiím (LCD s dotykovou vrstvou apod.), což zjednodušuje tvorbu firmwaru pro tento prototyp. Tyto knihovny slouží většinou ve své podstatě jako "převdení" BSP knihoven (poskytovaných výrobcem pro své konkrétní vývojové desky) na C++ knihovny, jelikož Mbed pracuje s tímto programovacím jazykem. I přes tuto skutečnost byla snaha psát kód v jazyku C, z důvodu možného pozdějšího převzetí částí kódu do finální verze firmwaru (psané v C). | Řídící firmware je psán ve vývojovém prostředí [[https://www.mbed.com/en/|Mbed]], jelikož je kompatibilní s použitou vývojovou deskou a poskytuje některé knihovny k jejím periferiím (LCD s dotykovou vrstvou apod.), což zjednodušuje tvorbu firmwaru pro tento prototyp. Tyto knihovny slouží většinou ve své podstatě jako "převdení" BSP knihoven (poskytovaných výrobcem pro své konkrétní vývojové desky) na C++ knihovny, jelikož Mbed pracuje s tímto programovacím jazykem. I přes tuto skutečnost byla snaha psát kód v jazyku C, z důvodu možného pozdějšího převzetí částí kódu do finální verze firmwaru (psané v C). | ||
+ | |||
+ | Exportovaný projekt z prostředí Mbed (pro SW4STM32) je k dispozici zde: {{ wiki:mpoa_fips_sw4stm32_disco_f746ng.zip}} | ||
<code cpp> | <code cpp> | ||
Řádek 185: | Řádek 188: | ||
=== Konfigurace obvodů === | === Konfigurace obvodů === | ||
== AD7175-2 == | == AD7175-2 == | ||
- | Pro komunikaci s AD převodníkem AD7175-2 bylo využito knihovny [[https://wiki.analog.com/resources/tools-software/uc-drivers/ad717x|AD717X No-OS Software Drivers]] od Analog Devices, obsahující samotnou knihovnu pro AD převodník a dále také generickou komunikační knihovnu pro SPI komunikaci. V této knihovně byly napsány funkce pro inicializaci, čtení a zápis po SPI. S touto knihovnou pracuje hlavičkový soubor AD7175_2_regs.h (pro každý konkrétní obvod jiný) obsahující deklaraci struktury s adresami vnitřních registrů AD převodníku, jejich počáteční hodnotou a velikostí. Při zápisu do jakéhokoliv registru AD převodníku je třeba nejprve zapsat požadovanou hodnotu do této struktury a poté zavolat funkci pro zápis do AD převodníku. Obdobný princip funguje při čtení, kdy je hodnota registru uložena do této struktury a poté je třeba hodnoty vyčíst z ní. | + | Pro komunikaci s AD převodníkem [[http://www.analog.com/en/products/analog-to-digital-converters/ad7175-2.html|AD7175-2]] bylo využito knihovny [[https://wiki.analog.com/resources/tools-software/uc-drivers/ad717x|AD717X No-OS Software Drivers]] od Analog Devices, obsahující samotnou knihovnu pro AD převodník a dále také generickou komunikační knihovnu pro SPI komunikaci. V této knihovně byly napsány funkce pro inicializaci, čtení a zápis po SPI. S touto knihovnou pracuje hlavičkový soubor AD7175_2_regs.h (pro každý konkrétní obvod jiný) obsahující deklaraci struktury s adresami vnitřních registrů AD převodníku, jejich počáteční hodnotou a velikostí. Při zápisu do jakéhokoliv registru AD převodníku je třeba nejprve zapsat požadovanou hodnotu do této struktury a poté zavolat funkci pro zápis do AD převodníku. Obdobný princip funguje při čtení, kdy je hodnota registru uložena do této struktury a poté je třeba hodnoty vyčíst z ní. |
{{ https://wiki.analog.com/_media/resources/tools-software/uc-drivers/spi_architecture.png?600 }} | {{ https://wiki.analog.com/_media/resources/tools-software/uc-drivers/spi_architecture.png?600 }} | ||
Řádek 325: | Řádek 328: | ||
</code> | </code> | ||
- | Funkce zajišťující zápis naměřených dat na SD kartu (je zde zbavena částí, způsobujících hlášení chyby, kvůli zkrácení kódu). | + | Funkce zajišťující zápis naměřených dat na SD kartu (v tomto výpisu jsou pro zkrácení smazány části, zajiˇštující pouhé vypsání hlásky o chybě, pokud nastane). Data z SDRAM a SD karty jsou postupně vypsána do konzole (v případě dat z SDkarty jsou vypisována po blocích) pro názornou ukázku jejich správnosti. |
<code c> | <code c> | ||
- | void ulozData(uint32_t pocetVzorku, FMC_SDRAM_CommandTypeDef* SDRAMCommandStructure) | + | void ulozData(uint32_t pocetVzorku) |
{ | { | ||
- | int32_t b = 0; | + | int32_t b = 0; // pomocna promenna pro vytvoreni bloku dat |
- | uint32_t indexBlok = 0; | + | uint32_t indexBlok = 0; |
uint8_t SD_state = MSD_OK; | uint8_t SD_state = MSD_OK; | ||
uint32_t vzorek[1]; | uint32_t vzorek[1]; | ||
uint32_t poleSD[128]; | uint32_t poleSD[128]; | ||
- | uint32_t NUM_OF_BLOCKS = (uint32_t)ceil((32.0*(float)pocetVzorku)/(4096.0)); | + | uint32_t NUM_OF_BLOCKS = (uint32_t)ceil((32.0*(float)pocetVzorku)/(4096.0)); // Pocet pametovych bloku v SD karte pro zapis vzorku |
printf("Num_of_blocks: %d\n", NUM_OF_BLOCKS); | printf("Num_of_blocks: %d\n", NUM_OF_BLOCKS); | ||
printf("Pocet vzorku: %d\n", pocetVzorku); | printf("Pocet vzorku: %d\n", pocetVzorku); | ||
- | |||
- | SDRAMCommandStructure->CommandMode = FMC_SDRAM_CMD_SELFREFRESH_MODE; | ||
- | SDRAMCommandStructure->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; | ||
- | SDRAMCommandStructure->AutoRefreshNumber = 1; | ||
- | SDRAMCommandStructure->ModeRegisterDefinition = 0; | ||
| | ||
- | // SDRAM memory read back access | + | // Vymazani casti pameti SD karty |
- | SDRAMCommandStructure->CommandMode = FMC_SDRAM_CMD_NORMAL_MODE; | + | |
SD_state = sd.Erase(BLOCK_START_ADDR, (BLOCK_START_ADDR + NUM_OF_BLOCKS - 1)); | SD_state = sd.Erase(BLOCK_START_ADDR, (BLOCK_START_ADDR + NUM_OF_BLOCKS - 1)); | ||
// Cekej dokud neni mazani dokonceno | // Cekej dokud neni mazani dokonceno | ||
Řádek 354: | Řádek 350: | ||
for (uint32_t a = 0; a < pocetVzorku; a++) { | for (uint32_t a = 0; a < pocetVzorku; a++) { | ||
sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR + 4 * a, (uint32_t*)&vzorek[0], 1); | sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR + 4 * a, (uint32_t*)&vzorek[0], 1); | ||
- | printf("DataSDRAM %d: %x\r\n", a, vzorek[0]); | + | printf("DataSDRAM %d: %x\r\n", a, vzorek[0]); // Vypis vzorku v SDRAM pro kontrolu se vzorky v SDkarte |
- | | + | // Naplneni pole odpovidajiciho bloku v SD karte |
if (b < 128) { | if (b < 128) { | ||
poleSD[b] = vzorek[0]; | poleSD[b] = vzorek[0]; | ||
b++; | b++; | ||
} | } | ||
- | // Zapis a vycitani dat z SD karty | + | // Zapis a vycitani dat z SD karty (po blocich) |
if ((b >= 128) || (a >= (pocetVzorku-1))) { | if ((b >= 128) || (a >= (pocetVzorku-1))) { | ||
SD_state = sd.WriteBlocks(poleSD, BLOCK_START_ADDR + 512 * indexBlok, 1, 10000); | SD_state = sd.WriteBlocks(poleSD, BLOCK_START_ADDR + 512 * indexBlok, 1, 10000); | ||
Řádek 367: | Řádek 363: | ||
} | } | ||
| | ||
- | printf("SD Zapsana\n"); | + | uint32_t poleSD[128] = {NULL}; |
- | uint32_t poleSD[128] = {NULL}; | + | |
| | ||
+ | // Cteni bloku dat z SD karty | ||
SD_state = sd.ReadBlocks(poleSD, BLOCK_START_ADDR + 512 * indexBlok, 1, 10000); | SD_state = sd.ReadBlocks(poleSD, BLOCK_START_ADDR + 512 * indexBlok, 1, 10000); | ||
// Cekej dokud neni cteni dokonceno | // Cekej dokud neni cteni dokonceno | ||
Řádek 375: | Řádek 371: | ||
} | } | ||
| | ||
- | b--; | + | b--; // dekrementace indexu pro vypsani vsech vzorku |
for (; b > -1; b--) { | for (; b > -1; b--) { | ||
- | printf("SD data %d: %x\n", b, poleSD[b]); | + | printf("SD data %d: %x\n", b, poleSD[b]); // vypsani vsech vzorku v bloku SD karty |
} | } | ||
| | ||
Řádek 390: | Řádek 386: | ||
} | } | ||
</code> | </code> | ||
+ | == AD8557 == | ||
+ | Přístrojový zesilovač s programovatelným ziskem (v rozsahu 28 až 1300) [[http://www.analog.com/en/products/amplifiers/instrumentation-amplifiers/ad8557.html|AD8557]] je konfigurován přes rozhraní 1W. Vzhledem k napájení tohoto převodníku napětím 5 V, je pro zajištění úrovňové kompatibility použit převodník úrovní s tranzistorem BSS138. Parametry je možné naprogramovat a poté pomocí programovací sekvence napevno uložit v paměti nebo je možné tyto parametry tzv. simulovat, tedy naprogramovat jejich hodnotu dočasně. Je možné ji přepsat, případně dojde k resetu při odpojení napájení. Zisk je možné nastavovat pro vstupní a výstupní část přístrojového zesilovače. Dále je možné nastavovat výstupní offsetové napětí v rozsahu mezi oběma napájecími potenciály (s 8bitovým rozlišením). | ||
+ | Konfigurace probíhá pomocí vyslání 38bitového sériového slova na příslušný pin obvodu, viz [[http://www.analog.com/media/en/technical-documentation/data-sheets/AD8557.pdf|datasheet]]. Konfigurační slovo má následující strukturu: \\ | ||
+ | * Bit 0-11 : Startovací paket | ||
+ | * Bit 12-13 : Volba funkce (v tomto případě se jedná o simulaci parametrů) | ||
+ | * Bit 14-15 : Výběr parametru | ||
+ | * Bit 16-17 : Dummy bit "10", zabraňuje předčasnému vzniku startovacího/ukončovacího paketu kombinací bitů | ||
+ | * Bit 18-25 : Hodnota parametru | ||
+ | * Bit 26-37 : Ukončovací paket | ||
+ | Vytvořená knihovna pro konfiguraci tohoto obvodu obsahuje deklaraci již zmíněné struktury, k uchování hodnot jednotlivých parametrů, funkci pro vysílání sériového slova a funkci pro jeho sestavování. | ||
+ | |||
+ | == PGA308 == | ||
+ | Přístrojový zesilovač s programovatelným ziskem [[http://www.ti.com/product/PGA308|PGA308]] od Texas Instruments je přímo určen k použití při měření s můstkovými senzory. Tomu odpovídají jeho vnitřní funkce a možnosti jeho nastavení. Zesílení lze nastavovat v rozsahu od 2,66 až 9600. Nastavení zesílení probíhá pomocí více stupňů, je tedy možné dosáhnout jeho různých hodnot.Dále je také možné nastavit offset v rozsahu -2,5 V do 2,5 V při referenčním napětí 5 V. | ||
+ | Konfigurace tohoto bvodu probíhá přes rozhraní 1W, které je v tomto případě kompatibilní s UART rozhraním. Lze tedy využít výstupní pin UARTu na MCU. Rychlosti komunikace se mohou pohybovat v rozsahu 4,9 kbit/s až 114 kbit/s, přičemž pro každý jednotlivý přenos lze využít jinou rychlost. Při komunikaci je nejdříve vyslán inicializační byte (hodnota 0x55), pomocí kterého se nastaví datová rychlost na přijímači. Dále je odeslán řídící byte, nastavující čtení/zápis registru a jeho adresu. Následují dva datové byty v pořadí LSB, MSB. | ||
+ | Pro tento obvod byla také napsána knihovna obsahující strukturu (jako v případě AD8557) a dále funkci sestavující jednotlivé byty a jejich odesílání na UART. Funkce této knihovny nebyla zatím prakticky ověřena. | ||
+ | |||
+ | ===== Závěr ===== | ||
+ | Vytvořený firmware dokáže pomocí GUI uživatelsky volit různé parametry použitého AD převodníku a programovatelného zesilovače, kromě PGA308 u něhož nebyla zatím ověřena funkčnost konfigurační knihovny - bude provedeno později. Dále je schopen zajišťovat spouštění měření a to jak úrovní signálu (viz demonstrační video), tak externím signálem (který je v tomto případě simulován tlačítkem). Měření probíhá po zvolenou dobu, což lze také vyvodit z počtu vzorků a zvolené vzorkovací frekvence (v demonstračním videu: čas měření 100 ms, datová výstupní rychlost AD převodníku 100 kSa/s, počet vzorků 11). Ukládání dat na SDRAM a SD kartu probíhá v pořádku, viz obrázek níže. | ||
+ | Bylo by vhodné doplnit firmware o část, zajišťující práci se souborovým systémem na SD kartě a ukládání dat do csv souboru. Dále by bylo uživatelsky přívětivější, kdyby zvolený parametr byl zvýraznět, ovšem není to nutné pro tyto potřeby. | ||
+ | V další fázi dojde k ověření funkčnosti konfigurační knihovny pro PGA308, porovnání obou programovatelných zesilovačů a implementaci ethernetového rozhraní. | ||
+ | |||
+ | {{ :2017:digitizer:termite_vypis.png?500 |Obr 3.1: Výpis naměřených dat (z SDRAM a SD karty) do terminálu }} | ||
+ | |||
+ | Na videu je zachycen způsob spouštění měření pomocí úrovně signálu. Úroveň měřeného signálu je změněna zatlačením na membránu připojeného tlakového snímače. | ||
+ | |||
+ | {{ youtube>aAxsckU9gyo?medium }} | ||