LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 9) – PmodNAV, PmodPMON1 i PmodTMP2

PmodPMON1

Moduł PmodPMON1 jest monitorem mocy składającym się z dwóch układów firmy Analog Devices: ADM119 i AD5112. Pierwszy układ to monitor prądu i napięcia z możliwością generacji alarmu po przekroczeniu zadanej wartości natężenia prądu, ustalanej poprzez napięcie podawane na pin SETV. Do tego celu służy drugi z układów – AD5112, będący potencjometrem cyfrowym o całkowitej rezystancji 5 kΩ i 64 pozycjach ślizgacza. Sposób połączenia obu układów przedstawiono na rysunku 4.

Fotografia 3. Moduł PmodPMON1

Rysunek 4. Połączenie układów ADM119 i AD512 w module PmodPMON1 (źródło: dokumentacja modułu PmodPMON1) 

Oba układy są podłączone do jednej magistrali I2C. Potencjometr jest widoczny pod adresem 0x2F, natomiast monitor ma adres konfigurowany za pomocą zworek JP1 i JP2. W przykładzie obie zworki są ustawione w pozycji 1, dzięki czemu ustawiony jest adres 0x30.

Połączenie z płytką KAmeleon

Moduł PmodPMON1 posiada 8-pinowe złącze Pmod I2C (J2) służące do komunikacji z obydwoma układami. Oprócz tego dostępne są: złącze J1, zawierające sygnały CONV (wyzwalanie konwersji) i ALERT (powiadomienie o przekroczeniu progu), a także J3 służące do podłączenie mierzonego układu. Do podłączenia modułu zostały wykorzystane dwa złącza na płytce KAmeleon, oznaczone jako: I2C KAmod Expander i ARDUINO CONNECTOR, zgodnie z tabelą 2.

Tabela 2. Sygnały PmodPMON1 oraz odpowiadające im piny złącz ARDUINO, I2C Expander oraz wyprowadzenia mikrokontrolera; w tabeli pominięto linie zasilania występujące na złączu Pmod

Sygnał Numer pinu PmodPMON1 Pin złącza ARDUINO CONNECTOR Pin złącza I2C Expander Pin mikrokontrolera
SCL 1 (J2) 2 PF1
SDA 2 (J2) 3 PF0
CONV 1 (J1) D15 PF14
ALERT 3 (J1) D14 PF15

Kod przykładu

Kod do obsługi modułu PmodPMON1 znajduje się w plikach PmodPMON1.c oraz PmodPMON1.h i składa się z czterech funkcji. Pierwsze dwie zajmują się konfiguracją interfejsu I2C i wyprowadzeń mikrokontrolera. Fragment funkcji PmodPMON1_Config przedstawiono na listingu 6. Konfiguruje ona interfejs I2C oraz oba układy znajdujące się w module PmodPMON1. Komenda 0x05 przesyłana do układu ADM119 uruchamia ciągłą konwersję natężenia prądu oraz napięcia. Z kolei bajty 0x02 i 0x01 przesłane do potencjometru AD5112 ustawiają wartość rezystancji zgodnie z zależnością:

W równaniu tym wartość D jest równa drugiemu z bajtów (0x01), a wartości rezystancji RAB i RW wynoszą odpowiednio 5 kΩ i 70 Ω. Takie ustawienie potencjometru ustala napięcie ~89mV na wejściu SETV monitora ADM119, co z kolei powoduje generację alarmu po przekroczeniu natężenia prądu o wartości ~49mA ze względu na wartość rezystora pomiarowego (R2) wynoszącą 0,1 Ω i wzmocnienie napięciowe układu pomiarowego wynoszące 18.

Funkcja PmodPMON1_Config konfiguruje także dwa piny mikrokontrolera podłączone do sygnałów CONV (PF14) oraz ALERT (PF15). Pierwszy z nich jest ustawiany jako wyjście w stanie wysokim, co wymusza ciągłą konwersję. Drugi jest wejściem z przerwaniem wyzwalanym na obu zboczach sygnału.

Kod programu z plikami projektowymi środowiska Atollic można pobrać w sekcji „Do pobrania”

Listing 6. Fragment funkcji konfigurującej interfejs I2C

void PmodPMON1_Config(void)
{
  ...
  pmodPmon1I2c.Instance = I2C2;
  pmodPmon1I2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  pmodPmon1I2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  pmodPmon1I2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  pmodPmon1I2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  pmodPmon1I2c.Init.OwnAddress1 = 0x01;
  // Set the I2C_TIMINGR register.
  pmodPmon1I2c.Init.Timing = 0x10563046;
  HAL_I2C_Init(&pmodPmon1I2c);
  PmodMON1_ClearAlarm();

  uint8_t monCommand = 0x05;
  HAL_I2C_Master_Transmit(&pmodPmon1I2c, PMODPMON1_MON_ADDRES, &monCommand, 1, 100);

  uint8_t potCommand[2] = {0x02, 0x01};
  HAL_I2C_Master_Transmit(&pmodPmon1I2c, PMODPMON1_POT_ADDRES, potCommand, 2, 100);
}

Druga z funkcji konfiguracyjnych – HAL_I2C_MspInit ustawia piny PF0 i PF1 w funkcji alternatywnej AF4 dla interfejsu I2C2. Zgodnie z konwencją biblioteki STM32Cube, jest ona wywoływana wewnątrz funkcji HAL_I2C_Init.

Odczyt i konwersja danych

Kolejną funkcją zaimplementowaną w pliku PmodPMON1.c jest PmodPMON1_GetMeasurements. Odczytuje ona trzy rejestry przechowujące ostatnio zmierzone wartości napięcia i natężenia prądu. Odczyty te są następnie konwertowane według zależności:

VFULLSCALE, IFULLSCALE i Sense Resistor wynoszą odpowiednio 26,52 V, 105,84 mV i 0,1Ω.

Ostatnia funkcja – PmodMON1_ClearAlarm, czyści flagę alarmu w układzie ADM119. Powoduje to zmianę stanu linii ALERT, chyba że próg alarmowy jest w dalszym ciągu przekroczony. Wówczas flaga jest ponownie ustawiania, a linia ALERT pozostaje w stanie aktywnym, czyli niskim.

Plik main.c implementuje dwie funkcje. HAL_GPIO_EXTI_Callback obsługuje przerwania od linii ALERT. Jeżeli alarm jest aktywny (stan niski), to zapalana jest dioda LED1 (PC7) i ustawiana jest programowa flaga alarmFlag. W przeciwnym razie dioda jest gaszona a flaga zerowana. W funkcji main wykonywana jest najpierw konfiguracja modułu PmodPMON1, a następnie w pętli sprawdzana jest flaga alarmFlag – jeżeli została ona ustawiona w przerwaniu, to jest wywoływana opisana wyżej funkcja zerująca alarm. Następnie odczytywane są wartości napięcia i natężenia prądu zmierzone przez układ ADM119 i wysyłane za pośrednictwem portu szeregowego LPUART1, widocznego na komputerze jako wirtualny port szeregowy. Przykładowy układ pomiarowy przedstawiono na fotografii 5.

Fotografia 5. Moduł PmodPMON1 podłączony do zestawu KAmeleon

Moduły PmodNAV, PmodPMON1 i PmodTMP2 a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl