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:lna-ctrl [2018/01/03 15:55] Milan Sedlák |
2017:lna-ctrl [2018/01/07 23:28] (aktuální) Milan Sedlák |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | (Pracovni) | ||
- | |||
===== Zadání ===== | ===== Zadání ===== | ||
Řádek 7: | Řádek 5: | ||
---- | ---- | ||
===== Úvod ===== | ===== Úvod ===== | ||
- | Cílem projektu je sestavit kompletní HW včetně obslužného FW, umožňující řízení externí DPS realizující nízkošumový předzesilovač, jehož součástí je digitální atenuátor, ovladatelný přes SPI. Aby bylo zařízení kompaktní, bude pro napájení využit Li-Ion akumulátor (nominální napětí: 7,2V; kapacita: 2600 mAh). | + | Cílem projektu je sestavit kompletní HW včetně obslužného FW, umožňující řízení externí DPS realizující nízkošumový předzesilovač, jehož součástí je digitální atenuátor, ovládatelný přes SPI. Aby bylo zařízení kompaktní, bude pro napájení využit Li-Ion akumulátor (CL-18650-26H/2S1P - https://www.tme.eu/cz/Document/aaa419bfc53b2c461a40a88733ebb793/1130.00.00.PDF). |
===== Řešení ===== | ===== Řešení ===== | ||
- | Protože při psaní FW přestal být procesor LPC1111JHN33/103 dostačující (především flash paměťú, byl v průběhu vývoje nahrazen procesorem LPC11U34FHN33/311, obsahující především větší flash paměť a nově vnitřní paměť EEPROM. Stejně tak umožňuje v budoucnu použití USB bez externího driveru (FTDI). Schéma disponuje drobnými úpravami, které nejsou promítnuty ve verzi DPS, pro kterou byl psán FW - jde o nepatrné úpravy typu odstranění již zbytečných jumperů, využití stabilizátorů s vyšším proudovým zatížením, nahrazení 2 SMD LED za RGB LED, možnost nevyužití FTDI. | + | Protože při psaní FW přestal být procesor LPC1111JHN33/103 dostačující (především flash paměť), byl v průběhu vývoje nahrazen procesorem LPC11U34FHN33/311 (https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-hvqfn32-package:LPC11U34FHN33), obsahující především větší flash paměť a nově vnitřní paměť EEPROM. Procesor je napájen napětím 3.3V. Hodinový signál je zajištěn externím krystalem 12 MHz. Stejně tak umožňuje v budoucnu použití USB bez externího driveru (FTDI). Schéma disponuje drobnými úpravami, které nejsou promítnuty ve verzi DPS, pro kterou byl psán FW - jde o nepatrné úpravy typu odstranění již zbytečných jumperů, využití stabilizátorů s vyšším proudovým zatížením, nahrazení 2 SMD LED za RGB LED, možnost nevyužití FTDI. |
{{ :2017:msedlak:sch.png?direct&600 |}} | {{ :2017:msedlak:sch.png?direct&600 |}} | ||
<code> Obr.1 Schéma zapojení MCU_board </code> | <code> Obr.1 Schéma zapojení MCU_board </code> | ||
+ | |||
+ | Pro vývoj FW je využíváno prostředí LPCXpresso v8.1.4 [Build 606] s využitím platformy LPCOpen v2.03 pro procesory LPC11XX (https://www.nxp.com/support/developer-resources/software-development-tools/lpc-developer-resources-/lpcopen-libraries-and-examples/lpcopen-software-development-platform-lpc11xx:LPCOPEN-SOFTWARE-FOR-LPC11XX). | ||
+ | Běh programu je zajištěn pomocí handlerů: | ||
+ | <code c> | ||
+ | int main(void) { | ||
+ | |||
+ | MySystemInit(); | ||
+ | eeprom.iap_return_code = IAP_read_eeprom( (char*)TARGET_EEPROM_ADDRESS, mem, MEM_SIZE ); // default set of attenuator after reset (read from eeprom memory) | ||
+ | eeprom.actual_attenuation = ((100 * mem[ATT_INTEGERS]) + (mem[ATT_TENTHS])); | ||
+ | if (eeprom.iap_return_code == 0) //eeprom_read_OK | ||
+ | sky12343_driver(mem[ATT_INTEGERS],mem[ATT_TENTHS]); | ||
+ | |||
+ | while(1) { | ||
+ | if (flags.ms) | ||
+ | { | ||
+ | flags.ms = false; | ||
+ | ADC_read_all_channels(); | ||
+ | if (!DEBUG_MODE) | ||
+ | WDT_RESET(); | ||
+ | } | ||
+ | |||
+ | if(flags.sec) | ||
+ | { | ||
+ | flags.sec = false; | ||
+ | Signalization_handler(); | ||
+ | PC_detection_handler(); | ||
+ | Charge_handler(); | ||
+ | Uart_handler(); | ||
+ | } | ||
+ | } | ||
+ | return 0 ; | ||
+ | } | ||
+ | |||
+ | void SysTick_Handler(void) | ||
+ | { | ||
+ | flags.ms = true; | ||
+ | ms_tick++; | ||
+ | |||
+ | if(ms_tick == 1000) | ||
+ | { | ||
+ | ms_tick = 0; | ||
+ | flags.sec = true; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
==== Nabíjení: ==== | ==== Nabíjení: ==== | ||
Nabíjecí část je ve schématu v levém dolním rohu. Tato část je složena ze vstupní ochrany proti přepólování a přepětí na vstupním konektoru. Součástí je i vratná 1.1A pojistka. Jako nabíjecí obvod je využit IO MCP73213 (http://ww1.microchip.com/downloads/en/DeviceDoc/20002190C.pdf). | Nabíjecí část je ve schématu v levém dolním rohu. Tato část je složena ze vstupní ochrany proti přepólování a přepětí na vstupním konektoru. Součástí je i vratná 1.1A pojistka. Jako nabíjecí obvod je využit IO MCP73213 (http://ww1.microchip.com/downloads/en/DeviceDoc/20002190C.pdf). | ||
- | Pomocí AD převodníku procesoru je snímání napětí na napájecím konektoru. Je-li toto napětí větší než 10V, dojde k sepnutí tranzistoru pomocí pinu procesoru CHARGE_CURRENT_SET, což zajistí snížení odporu na pinu PROG nabíjecího obvodu. Je-li napětí baterie menší než 7,4V nabíjecí obvod změní stav pinu STAT na stav nízké impedance, což zapříčiní změnu napětí na pinu procesoru STAT_DET (z 3V0 na 0V). Nabíjení je v této fázi aktivní. Jakmile je baterie nabita, nabíjecí obvod změní pin STAT na úroveň vysoké impedance, pin procesoru STAT_DET změní napětí z 0V na 3V0 - nabíjení je kompletní a procesor rozpojí tranzistor na pinu CHARGE_CURRENT_SET, díky čemuž přejde nabíjecí obvod do režimu shutdown. Po celou dobu nabíjení je externí LNA odpojeno. | + | Pomocí AD převodníku procesoru je snímání napětí na napájecím konektoru. Je-li toto napětí větší než 10V, dojde k sepnutí tranzistoru pomocí pinu procesoru CHARGE_CURRENT_SET, což zajistí snížení odporu na pinu PROG nabíjecího obvodu. Je-li napětí akumulátoru menší než 7,4V nabíjecí obvod změní stav pinu STAT na stav nízké impedance, což zapříčiní změnu napětí na pinu procesoru STAT_DET (z 3V0 na 0V). Nabíjení je v této fázi aktivní. Jakmile je akumulátor nabit, nabíjecí obvod změní pin STAT na úroveň vysoké impedance, pin procesoru STAT_DET změní napětí z 0V na 3V0 - nabíjení je kompletní a procesor rozpojí tranzistor na pinu CHARGE_CURRENT_SET, díky čemuž přejde nabíjecí obvod do režimu shutdown. Po celou dobu nabíjení je externí LNA odpojeno. |
Handler obsluhující nabíjení: | Handler obsluhující nabíjení: | ||
<code c> | <code c> | ||
Řádek 86: | Řádek 129: | ||
</code> | </code> | ||
- | Využitím pravidelného logování (1x za 15 min) byla změřena nabíjecí křivka: | + | Využitím pravidelného logování (1x za 5 min) byla změřena nabíjecí křivka: |
{{ :2017:msedlak:nabijeni.png?direct&400 |}} | {{ :2017:msedlak:nabijeni.png?direct&400 |}} | ||
+ | |||
+ | Stejným způsobem byla změřena vybíjecí křivka, při připojeném LNA, jehož spotřeba je cca 130 mA: | ||
+ | {{ :2017:msedlak:vybijeni.png?direct&400 |}} | ||
+ | |||
==== Komunikace a ovládání: ==== | ==== Komunikace a ovládání: ==== | ||
Řádek 131: | Řádek 178: | ||
</code> | </code> | ||
- | Je-li USB připojen, řídící DPS začne posílat pravidelnou zprávu (aktuálně po 1s), obsahující informace o aktuálním stavu. Součástí této zprávy je synchronizační znak (AA 11), dále struktura obsahující jednotlivá napětí [mV] (napětí externě připojeného adaptéru, detektor nabíjecího obvodu pomocí jeho pinu STAT, napětí USB, napájecí napětí nízkošumového předzesilovače, napětí baterie), IAP kód určující, zda bylo správně zapsáno do pamětí EEPROM, aktuální hodnotu nastaveného útlumu digitálního atenuátoru, hodnoty všech flagů. | + | Je-li USB připojen, řídící DPS začne posílat pravidelnou zprávu (aktuálně po 1s), obsahující informace o aktuálním stavu. Součástí této zprávy je synchronizační znak (AA 11), dále struktura obsahující jednotlivá napětí [mV] (napětí externě připojeného adaptéru, detektor nabíjecího obvodu pomocí jeho pinu STAT, napětí USB, napájecí napětí nízkošumového předzesilovače, napětí akumulátoru), IAP kód určující, zda bylo správně zapsáno do pamětí EEPROM, aktuální hodnotu nastaveného útlumu digitálního atenuátoru, hodnoty všech flagů. |
Příklad takové zprávy je např:<code> | Příklad takové zprávy je např:<code> | ||
11 AA 11 02 C4 0B 8A 13 14 00 47 20 00 00 1A 04 C9 00 | 11 AA 11 02 C4 0B 8A 13 14 00 47 20 00 00 1A 04 C9 00 | ||
Řádek 137: | Řádek 184: | ||
Rozparsováním lze získat zpětně jednotlivé informace: | Rozparsováním lze získat zpětně jednotlivé informace: | ||
- | {{ :2017:msedlak:ramec.png?direct&400 |}} | + | {{ :2017:msedlak:ramec.png?direct&300 |}} |
V budoucnu tato data budou rozparsována a prezentována pomocí jednoduché PC aplikace. | V budoucnu tato data budou rozparsována a prezentována pomocí jednoduché PC aplikace. | ||
Řádek 165: | Řádek 212: | ||
} | } | ||
</code> | </code> | ||
- | Posláním zprávy (např. pomocí programu Terminal) lze nastavit externí atenuátor (http://www.skyworksinc.com/uploads/documents/201355C.pdf). Například, pro nastavení hodnoty útlumu 10,5 dB je nutné poslat sekvenci 11150, kde 1 je příkaz pro nastavení atenuátoru, 11 je hodnota celočíselného útlumu v dB a 50 je hodnota desetinné části útlumu. Pomocí logického analyzátoru lze po zadání tohoto příkazu vidět data, která odpovídají požadovanému nastavení dle katalogového listu: | + | Posláním zprávy (např. pomocí programu Terminal) lze nastavit externí atenuátor (http://www.skyworksinc.com/uploads/documents/201355C.pdf). Například, pro nastavení hodnoty útlumu 11,5 dB je nutné poslat sekvenci 11150, kde 1 je příkaz pro nastavení atenuátoru, 11 je hodnota celočíselného útlumu v dB a 50 je hodnota desetinné části útlumu. Pomocí logického analyzátoru lze po zadání tohoto příkazu vidět data, která odpovídají požadovanému nastavení dle katalogového listu: |
+ | {{ :2017:msedlak:spi_com.png?direct&400 |}} | ||
- | + | Tato nastavená hodnota je současně uložena do vnitřní EEPROM paměti, která je přístupná pomocí IAP. Pro její využití byly využity a lehce upraveny zdrojové soubory dostupné na https://os.mbed.com/users/okano/code/IAP/ Hodnota nastaveného útlumu uložená v EEPROM je pak při resetu vyčtena z paměti a atenuátor je nastaven na hodnotu útlumu vyčteného z EEPROM. Není tak třeba vždy po resetu nutné nastavovat požadovaný útlum stále znovu. | |
- | Tato nastavená hodnota je současně uložena do vnitřní EEPROM paměti, která je přístupná pomocí IAP. Pro její využití byly využity a lehce upraveny zdrojové soubory dostupné na https://os.mbed.com/users/okano/code/IAP/ Hodnota nastaveného útlumu uložená v EEPROM se pak při resetu vyčte z paměti a nastaví atenuátor. Není tak třeba vždy po resetu nutné nastavovat požadovaný útlum stále znovu. | + | |
==== Signalizace: ==== | ==== Signalizace: ==== | ||
+ | |||
+ | Pro signalizaci jsou aktuálně využity 2 smd LED (zelená a červená). Na budoucí verzi (která je i ve schématu), bude využito RGB led, nicméně signalizace bude stejná. | ||
+ | * Zelená led bliká, červená zhasnutá - stav nabíjení. LNA je odpojeno, akumulátor se nabíjí | ||
+ | * Červená led bliká, zelená zhasnutá - stav nízkého napětí akumulátoru. LNA je napájeno, akumulátor je třeba dobít | ||
+ | * Zelená i červená led bliká - při pokusu o nabíjení došlo k chybě. LNA je napájeno. | ||
+ | * Zelená led svítí, červená zhasnutá - normální stav, značící běžnou funčknost. LNA je napájeno, UART a nabíjení neaktivní. | ||
+ | * Zelená i červená led svítí - k DPS je připojeno USB. LNA je odpojeno, komunikace s PC je aktivní | ||
+ | * Zelená led bliká, červená svítí - k DPS je připojeno USB. LNA je odpojeno, komunikace s PC je aktivní a dochází k nabíjení akumulátoru | ||
+ | * Žádná led nesvítí - defuaultní stav | ||
+ | |||
+ | <code c> | ||
+ | extern void Signalization_handler(void) | ||
+ | { | ||
+ | switch(state) | ||
+ | { | ||
+ | case charging: | ||
+ | LED_GREEN_BLINKING; | ||
+ | LED_RED(false); | ||
+ | break; | ||
+ | case batt_need_charging: | ||
+ | LED_RED_BLINKING; | ||
+ | LED_GREEN(false); | ||
+ | break; | ||
+ | case charging_err: | ||
+ | LED_GREEN_BLINKING; | ||
+ | LED_RED_BLINKING; | ||
+ | break; | ||
+ | case normal_operation: | ||
+ | LED_GREEN(true); | ||
+ | LED_RED(false); | ||
+ | break; | ||
+ | case pc_connected: | ||
+ | if(flags.charging) | ||
+ | { | ||
+ | LED_GREEN_BLINKING; | ||
+ | LED_RED(true); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | LED_GREEN(true); | ||
+ | LED_RED(true); | ||
+ | } | ||
+ | break; | ||
+ | default: | ||
+ | LED_GREEN(false); | ||
+ | LED_RED(false); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
==== Videoukázka: ==== | ==== Videoukázka: ==== | ||
+ | Ve videoukázce je LNA nahrazen vývodovou LED, která svítí v případě že má být napájeno. Opačně je LED zhasnuta. | ||
+ | {{youtube>23a6nrlqmTg?medium}} | ||
==== Projekt včetně zdojových kódů: ==== | ==== Projekt včetně zdojových kódů: ==== | ||
+ | {{ :2017:msedlak:mcu_board_lpcxpresso.zip |}} | ||
===== Závěr ===== | ===== Závěr ===== | ||
- | Vzhledem k faktu, že je využit procesor umožňující využití USB bez přídavného driveru (FTDI), nebude nutné v další verzi HW mít FTDI. | + | Byl navržen HW a napsán FW umožnující automatické ovládání externě připojeného nízkošumového předzesilovače. Hlavní činností je kontrola napětí akumulátoru, jeho řízené nabíjení, odpojování nízkošumového předzesilovače v situacích, při kterých není nutné jeho napájení (se kterou je spojen jeho velký proudový odběr). Prostřednictvím USB umožňuje jednotka ovládat digitální atenuátor, který je součástí nízkošumového předzesilovače. Stejně tak dochází k pravidelným informačním zprávám z MCU_board. |
+ | |||
+ | Vzhledem k faktu, že je využit procesor umožňující využití USB bez přídavného driveru (FTDI), bude snaha o rozchození USB bez použití FTDI. Stejně tak bude v blízké době napsána PC aplikace umožňující zobrazování informací o aktuálním stavu zařízení. | ||