PSoC3 je v současné době vybaven Delta-Sigma převodníkem s širokou škálou nastavení. Převodník je možné konfigurovat s rozlišením 8-20 bitů, přičemž rychlost převodu může činit 10-375000 vzorků / sekundu. Převodník může pracovat ve třech základních nastaveních:
- Fast Filter
- Continuous
- Fast FFT
V závislosti na nastaveném režimu může převodník provádět převod pouze jednoho signálu, nebo multiplex několik nezávislých zdrojů. Jeho vložení do projektu a následná konfigurace je velmi intuitivní. Vkládá se stejným způsobem jako ostatní komponenty, přetáhnutím Component Catalogu (Analog/ADC). Konfigurace se pak provádí prostřednictvím dialogového okna Configure ‘ADC_DelSig’. Jsou-li nastaveny nesprávně parametry, vývojové prostředí to dá uživateli ihned na vědomí červenými vykřičníky vedle chybných parametrů.
Obrázek 1: Konfigurace ADC
Dále v textu následuje podrobný popis parametrů převodníku:
- Power – tento parametr nastavuje výkonové nastavení převodníku. Obecně platí, že čím vyšší výkon je nastaven, tím vyšší spotřebu převodník má. Na druhou stranu lze očekávat lepší parametry. Možná nastavení [LOW POWER, MEDIUM POWER, HIGH POWER].
- Conversion Mode – určuje mimo jiné způsob jakým je zacházeno s obsahem filtrů převodníku. Celkem převodník poskytuje tři režimy, z nichž jeden (Continuous) je vhodný pouze pro jeden nepřepínaný zdroj signálu a další dva (Fast_Filter a Fast_FIR) je možné využít i pro přepínané zdroje signálu. Více informací je možné nastudovat v katalogovém listu převodníku.
- Resolution - určuje rozlišení převodníku. Lze jej nastavit v rozmezí 8-20 bitů.
- Conversion Rate – parametr určuje počet vzorků za sekundu. Maximální počet vzoků je omezen hodinovou rychlostí a zvoleným konverzním módem.
- Clock Frequency – editovatelný parametr informující uživatele o požadované hodinové frekvenci pro zvolený konverzní mód a požadovanou vzorkovou rychlost.
- Start of Conversion – volitelné nastavení mezi softwarovým a hardwarovým spuštěním konverze
- Clock Source – umožňuje volit mezi interním zdrojem hodin (zabudovaným v ADC) a externím zdrojem hodin (standardní zdroj, nebo jiný blok).
- Input Range, Reference – volba několika rozsahů vstupního signálu. Je možné volit mezi interními a externími referenčními napětí o několika rozsazích. Více v katalogovém listě ADC.
- Input Buffer Gain – Umožňuje zesílit signál z důvodu využití celého rozsahu AD převodníku a tím také ke zvýšení odstupu signál-šum.
Podrobnější informace je možné nastudovat z katalogového listu ADC, který je součástí instalace PSoC Creatoru. Katalogové listy je možné prohlížet přímo ve vývojovém prostředí, a nebo v samostatném okně. V současné době jsou katalogové listy ve verzi preliminary. Je téměř jisté, že po vydání řádné verze PSoC Creatoru budou přepracování do konečné verze.
Testovací projekt
Jak už bylo uvedeno na začátku článku, cílem našeho dnešního snažení bude vytvořit jednoduchý teploměr založený na měření na termistoru osazeném na desce plošného spoje na kitu. Měření bude obstarávat AD převodník. Pro naše účely postačí 8bitové rozlišení, konverzní rychlost jistě není požadována nijak závratná, proto si vystačíme se softwarovým řízením (využijeme pooling). Hodiny převodníku využijeme interní, nemáme na ně žádné zvláštní nároky.
Pro zobrazení využijeme opět LED umístěných na DPS kitu. Vytvoříme si z nich jednoduchý progressbar. Protože jsou LED zapojeny na dva různé porty, je vhodné si práci nějakým způsobem zjednodušit. Proto umístíme do projektu komponentu Control Register (Digital/Registers), jejíž výstupy jsou připojeny k příslušným LED. Následující schéma zobrazuje zapojení dnešního projektu:
Obrázek 2: Schéma projektu
Obrázek 3: Nastavení Control Registru
Jak už bylo uvedeno, obsluha převodníku a následné zobrazení stavu bude probíhat softwarovou cestou. Vzhledem k předpřipraveným API bude tato práce tak jako minule velice jednoduchá:
#include void main() { char result; int result_offset; unsigned char uresult; Pin_2_Write(1); ADC_DelSig_1_Start(); ADC_DelSig_1_StartConvert(); for(;;) { // pokud je dokoncen predchazejici prevod if (ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT)) { // precte vysledek prevodu result = ADC_DelSig_1_GetResult8(); // a prevede cislo do tvaru offset binnary if (result < 0) result_offset = 0x7F + result; else result_offset = result+0x80; uresult = (unsigned char)result_offset; // vypocita pozici LED for (result=0; result < 8; result++) if ((1< uresult) break; Control_Reg_1_Write(~(1<<(result-1))); // odstartuje dalsi prevod ADC_DelSig_1_StartConvert(); } } }
A konečně napování pinů:
Obrázek 4: Mapování portů
Program je velice jednoduchý. Na začátku je nastaven port P5.5, který napájí vrchní konec děliče tvořeného rezistorem 10k a termistorem 10k (25°C). Následně je nakonfigurován převodník a odstartována konverze. Ve smyčce je poté kontrolováno dokončení převodu. Je-li nastaven příznak, pak je číslo nejprve převedeno do formátu offset-binary a poté odhadnut logaritmus o základu 2 převedeného čísla. Ten tvoří index LED, která představuje teplotu naměřenou termočlánkem. Program je velice jednoduchý a měl by fungovat na první vykoušení. Otestovat jej lze například přiložením nahřátého pera mikropájky k termočlánku.
Obrázek 5: Schéma zapojení termočlánku
Kit pro testování věnovalo české zastoupení společnosti MSC Vertriebs GmbH.
Odkazy & Download
- Kompletní projekt ke stažení
- www.cypress.com – výrobce PSoC
- www.msc-ge.com – distributor PSoC v ČR