Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:lna-ctrl

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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 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í
  
  
2017/lna-ctrl.1514991339.txt.gz · Poslední úprava: 2018/01/03 15:55 autor: Milan Sedlák