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 | ||
|
2015:plc-st7580 [2016/01/18 08:38] Ján Sláčik |
2015:plc-st7580 [2016/01/20 16:52] (aktuální) Ján Sláčik [Rozbor zadání] |
||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== Rozbor zadání ====== | ====== Rozbor zadání ====== | ||
| - | Úkolem tohoto projektu je demonstrovat datový tok po silovém vedení a to ve standardní napájecí síti 230 VAC/50 Hz. Zvolený komunikační kmitočet spadá do kategorie úzkopásmových technologií, tedy frekvenční rozsah je 3-500 kb/s. Pro realizaci byl vybrán vhodný integrovaný obvod ST7580 v pozici PLC modemu, s programovatelnou nosnou frekvencí do 250 kHz. Obvod mimo jiné odpovídá Evropské normě CENELEC (EN 50065), tedy tento obvod je možné nasadit i do veřejných napájecích sítí. Čip vyžaduje obsluhu externím hostitelem přes rozhraní UART. Do této pozice byl vybrán mikrokontrolér architektury ARM, typu STM32 řady F0. V rámci projektu byl vytvořen obslužný software základních funkcí obvodu ST7580, které umožňují funkční přenos po uvedeném silovém vedení. | + | Úkolem tohoto projektu je demonstrovat datový tok po silovém vedení a to ve standardní napájecí síti 230 VAC/50 Hz. Zvolený komunikační kmitočet spadá do kategorie úzkopásmových technologií, tedy frekvenční rozsah je 3-500 kHz. Pro realizaci byl vybrán vhodný integrovaný obvod ST7580 v pozici PLC modemu, s programovatelnou nosnou frekvencí do 250 kHz. Obvod mimo jiné odpovídá Evropské normě CENELEC (EN 50065), tedy tento obvod je možné nasadit i do veřejných napájecích sítí. Čip vyžaduje obsluhu externím hostitelem přes rozhraní UART. Do této pozice byl vybrán mikrokontrolér architektury ARM, typu STM32 řady F0. V rámci projektu byl vytvořen obslužný software základních funkcí obvodu ST7580, které umožňují funkční přenos po uvedeném silovém vedení. |
| - | \\ ====== Princip řešení ====== | + | \\ |
| + | ====== Princip řešení ====== | ||
| Je vytvořená jednoduchá komunikační síť s dvěma uzly, které tvoří jednotky master a slave, podle obrázku níže. | Je vytvořená jednoduchá komunikační síť s dvěma uzly, které tvoří jednotky master a slave, podle obrázku níže. | ||
| {{ :2015:plc-st7580:blockdiag.png?750 |}} | {{ :2015:plc-st7580:blockdiag.png?750 |}} | ||
| Řádek 167: | Řádek 168: | ||
| #define ST7580_MODEM_CONFIG_BASE (0x00) | #define ST7580_MODEM_CONFIG_BASE (0x00) | ||
| #define ST7580_MODEM_CONFIG_LEN (0x02) | #define ST7580_MODEM_CONFIG_LEN (0x02) | ||
| - | uint8_t modemConfigIndex; /*Index where this structure is to be loaded*/ | + | uint8_t modemConfigIndex; /*Index of the MIB object (0x00)*/ |
| - | uint8_t modemConfig; /*Actual configuration*/ | + | uint8_t modemConfig; /*Actual value of the MIB object*/ |
| }ST7580modemConfigTypedef; | }ST7580modemConfigTypedef; | ||
| Řádek 175: | Řádek 176: | ||
| #define ST7580_PHY_CONFIG_BASE (0x01) | #define ST7580_PHY_CONFIG_BASE (0x01) | ||
| #define ST7580_PHY_CONFIG_LEN (0x0F) | #define ST7580_PHY_CONFIG_LEN (0x0F) | ||
| - | uint8_t phyConfigIndex; /*Index where this structure is to be loaded*/ | + | uint8_t phyConfigIndex; /* Index of the MIB object (0x01) */ |
| uint8_t DlFreqPair[6]; /* Frequency Pair Byte 0 - 5*/ | uint8_t DlFreqPair[6]; /* Frequency Pair Byte 0 - 5*/ | ||
| uint8_t DlRXControl; /*RX Control Byte 6 */ | uint8_t DlRXControl; /*RX Control Byte 6 */ | ||
| Řádek 195: | Řádek 196: | ||
| .phyConfigIndex = ST7580_PHY_CONFIG_BASE, | .phyConfigIndex = ST7580_PHY_CONFIG_BASE, | ||
| .DlFreqPair = {0x01, 0x4F, 0xF0, 0x01, 0x19, 0x40}, | .DlFreqPair = {0x01, 0x4F, 0xF0, 0x01, 0x19, 0x40}, | ||
| - | .DlRXControl = 0x0E, //master has 0E slave 0F | + | .DlRXControl = 0x0E, |
| .Gain = 0x15, | .Gain = 0x15, | ||
| .DlZeroCrossing = {0x00, 0x00}, | .DlZeroCrossing = {0x00, 0x00}, | ||
| Řádek 235: | Řádek 236: | ||
| MIB_ReadRequest, | MIB_ReadRequest, | ||
| &readAddr, | &readAddr, | ||
| - | ST7580_PHY_CONFIG_LEN-1, | + | ST7580_PHY_CONFIG_LEN-1, |
| - | /* start at the beginning of the actual object */ | + | |
| &rxPhyCfg.DlFreqPair[0], | &rxPhyCfg.DlFreqPair[0], | ||
| NULL); | NULL); | ||
| Řádek 449: | Řádek 449: | ||
| { | { | ||
| temp = sensitivityTable[j].pfuncWrite(AppCmdRegisters + i, remaining); | temp = sensitivityTable[j].pfuncWrite(AppCmdRegisters + i, remaining); | ||
| - | if(!temp) temp = 1; // safety - cannot return 0 | + | if(!temp) temp = 1; |
| i += temp; | i += temp; | ||
| remaining -= temp; | remaining -= temp; | ||