Poza 4 wyjściami przekaźnikowymi moduł ma 4 wejścia cyfrowe. Wejścia i wyjścia cyfrowe doprowadzone są do złącza. Opcjonalnie można dodać w programie obsługę 4 wejść analogowych, interfejsów SPI, I2C oraz USART. Otwarte oprogramowanie umożliwi łatwe dostosowanie możliwości
modułu do własnych wymagań.
Budowa i zasadza działania
Schemat ideowy modułu zamieszczono na rysunku 1. Jego głównym elementem jest mikrokontroler STM32F103C8T6 z wbudowanym interfejsem USB pracującym w trybie device. Napięcie zasilania ze złącza USB jest obniżane w stabilizatorze SPX1117MP-3.3. Sterowanie przekaźników jest buforowane układem ULN2003. Przekaźniki mogą być zasilane napięciem +5 V z USB lub z zewnętrznego zasilacza. Maksymalne napięcie akceptowane przez bufor to +50 V. Moduł ma 4 wejścia cyfrowe wewnętrznie podciągnięte do zasilania. Sygnały wejść/wyjść cyfrowych wyprowadzono na złącze J9. Wejścia analogowe (J5) oraz SPI, I2C, USART, w aktualnej wersji oprogramowania nie są używane. W razie zainteresowania taką funkcjonalnością proszę o e-maile. Całość dopełniają diody LED informujące o statusie urządzenia (tabela 1).
Montaż i uruchomienie:
Schemat montażowy pokazano na rysunku 2. Montaż najlepiej rozpocząć od uruchomienia stabilizatora. Jeśli pracuje poprawnie, to należy zamontować pozostałe elementy rozpoczynając od najmniejszych, kończąc na złączach. W sytuacji, gdy przekaźniki są zasilane z USB, należy zewrzeć piny 4 i 5 złącza J13. Jeśli zasilanie przekaźników jest zewnętrzne, podane na wyprowadzenia 1-2 J13, należy zewrzeć piny 3-4 J13, natomiast na JP1 zewrzeć piny 4-6. Wymiary płytki przystosowane są do obudowy KM-35.
Przy pierwszym połączeniu z komputerem konieczne jest zainstalowanie sterowników. Można je pobrać spod adresu http://bit.ly/2C3SNsK. Po zainstalowaniu sterowników na liście Menedżera Urządzeń zostanie wyświetlony nowy wirtualny port COM nazwie „STMicroelectronics Virtual COM port” (rysunek 3)
Moduł przekaźników otrzyma numer kolejnego wolnego portu w systemie. Jeśli w systemie był już zainstalowany sterownik o tych samych identyfikatorów VID i PID, to zobaczymy jego numer i nazwę. Niestety Windows w takiej sytuacji nie pokaże faktycznej nazwy urządzenia tylko tę, która pojawiła się podczas pierwszej instalacji sterowników. W systemie Linux nie jest wymagana instalacja sterowników. Urządzenia klasy CDC mają nadawane kolejne nazwy „ttyACM0” „ttyACM1” itd.
Obsługa programowa
Komunikacja z modułem przebiega za pomocą nieskomplikowanego protokołu tekstowego. Podczas testowania programem terminala trzeba pamiętać, aby dane wysyłać w postaci kompletnych łańcuchów, a transmitując znak po znaku. Wygodne jest użycie „TeraTerm”, który to wysyła ciąg znaków po naciśnięciu klawisza „Enter”. W innych programach można posłużyć się kopiowaniem tekstu w oknie terminala (najczęściej CTRL+V) lub makrami, jak w BrayTerminal+.
W pierwszej kolejności należy wybrać w programie terminala numer portu COM, który nadał system Windows instalując sterowniki. Parametry transmisji są nieistotne. Karta akceptuje komendy wymienione w tabeli 2. Komendy nie muszą kończyć się znakami CR/LF. Zmiana stanu wejścia, powoduje automatyczne wygenerowanie ramki „@i:” zwracającej stan wejść. Uwalnia to program od ciągłego odpytywania karty w celu sprawdzenia stanu wejść.
Na ekranie programu „Termite” widać efekty działania komend „ati” „@r”, „@i” (rysunek 4). W Linuksie (Debian) listę ostatnio przyłączonych urządzeń wyświetlamy wydając komendę „dmesg | tail”. Na zrzucie ekranowym pokazano efekt działania komendy przed i po przyłączeniu modułu przekaźników (rysunek 5). Do komunikacji można wykorzystać „minicom”. Uruchamiając program z parametrem „–s” (minicom –s) zostanie wyświetlone okno konfiguracji (rysunek 6). Wybierając „Serial port setup” możemy zmienić ustawienia portu komunikacyjnego (rysunek 7). Na rysunku 8 pokazano efekt działania komendy zmieniającej stan wejść cyfrowych. Przy okazji warto wspomnieć, że w Linuksie, wklejanie to nie CTRL+V tylko SHIFT+INSERT.
Rezystory: (SMD 1206)
R14: 1,5 kV
R6, R7: 2,2 kV
R13: 10 kV
R15, R16: 22 V
R17: 100 kV
R1…R5, R8…R12: 560 V
Kondensatory:
C1, C2: 10 mF (SMD 1206)
C5, C6: 20 pF (SMD 1206)
C3, C4, C7, C8: 100 nF (SMD 1206)
Półprzewodniki:
U1: SPX1117MP-3.3 (SOT223)
U2: STM32F103C8T6 (LQFP48)
U3: ULN2003D (SO16)
D1: LED niebieski
D2, D4…D9: LED zielona
D3: LED czerwona
D10: LED żółta
Inne:
Q1: rezonator kwarcowy 8 MHz
PK1…PK4: AZ822-2C-5DSE
JP1: goldpin 3×2
J1, J8, J9: ZL231-10PG (KG)
J3…J5: T821-1-06-S1
J6: USB-B
J7. J10…J12: TB-5.0-PP-3P + TB-5.0-PIN24
J13: goldpin 1×9
Aplikacja dla Windows
Do sterowania kartą można użyć aplikacji, której zrzut ekranowy pokazano na rysunku 9. W pierwszej kolejności z listy należy wybrać odpowiedni VCOM. Jest to łatwe, ponieważ na liście, poza numerem portu, zostaje wyświetlona „przyjazna” nazwa portu/urządzenia. Po kliknięcie na „Połącz” w oknie terminala zostanie pokazana nazwa i wersja programu karty (rysunek 10). Stan przekaźników można zmienić za pomocą przycisków. Należy zaznaczyć, że program odzwierciedla faktyczny ich stan, dlatego po uruchomieniu programu, jeśli karta ma załączone przekaźniki, będzie to odpowiednio pokazywane (rysunek 11). Wyświetlany jest także stan wejść cyfrowych, a utrata połączenia USB będzie sygnalizowana w chwili próby zmiany stanu przekaźnika stosownym komunikatem (rysunek 12).
Numer wybranego portu COM jest zapamiętywany w pliku „*ini”. Dzięki temu, po kolejnym uruchomieniu programu połączenie z kartą zostanie nawiązane automatycznie o ile będzie dołączona do komputera.
Oprogramowanie mikrokontrolera
Program dla mikrokontrolera nie jest zbyt skomplikowany. W pętli głównej mikrokontroler aktualizuje rejestr watchdog, po czym jest mikrokontroler jest wprowadzany w tryb obniżonego poboru energii:
IWDG->KR = 0xaaaa;
__WFI();
Ważniejsze fragmenty programu sterującego pracą modułu zamieszczono na listingu 1. Wystąpienie przerwania (od USB, timera) wybudza mikrokontroler, który sprawdza czy odebrano ramkę danych. Ponadto, jest sprawdzany stan wejść oraz testowana konieczność wysłania ramki „@a”. Fakt połączenia z hostem USB stwierdza się na podstawie obecności pakietów SOF:
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
{
USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
extern char volatile TimSof;
TimSof = 50;
}
W przerwaniu jest aktualizowany timer softwareowy TomSof. Jeśli w przerwaniu milisekundowym timer doliczy do zera, to jest to sygnalizowane przez zgaszenie diody LED.
u8 volatile TimSof;
void Tick1ms()
{
if( TimSof )
{
TimSof--;
HAL_GPIO_WritePin( LED_SOF_GPIO_Port, LED_SOF_Pin, GPIO_PIN_RESET );
}
else
{
HAL_GPIO_WritePin( LED_SOF_GPIO_Port, LED_SOF_Pin, GPIO_PIN_SET );
}
}
Aktualne oprogramowanie jest dostępne w materiałach dodatkowych dołączonych do artykułu. Najnowsze wersje dostępne na http://avt.4ra.pl.
ES2 & KK, EP