LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 10) – PmodGYRO, PmodTMP3 i PmodWiFi

PmodTMP3

Drugim z modułów jest PmodTMP3 – czujnik temperatury z układem Microchip TCN75A. Zapewnia on pomiary z dokładnością ±2°C (typowo ±1°C) w zakresie od -40°C do +125°C i regulowaną rozdzielczością 0,5°C (9 bitów), 0,25°C (10 bitów), 0,125°C (11 bitów), lub 0,0625°C (12 bitów). Układ TCN75A umożliwia konfigurację progu temperatury, którego przekroczenie wyzwala przerwanie na pinie AL. Przerwanie to jest aktywne do momentu odczytu dowolnego rejestru (w trybie przerwań), lub do momentu kiedy temperatura spadnie poniżej progu z uwzględnieniem histerezy (w trybie komparatora). Opisana zasada działania została przedstawiona na rysunku 6. Wartości progu temperatury i histerezy są konfigurowane za pośrednictwem rejestrów.

Rysunek 5. Moduł PmodTMP3

Rysunek 6. Generacja przerwania na pinie AL

Połączenie z zestawem KAmeleon

Moduł PmodTMP3 posiada 8-pinowe złącze Pmod I2C. W przykładzie zostało ono podłączone do złącza Kamod I2C Expander zgodnie z tabelą 2 i fotografią 7. Pin AL znajdujący się na złączu J2 podłączono do pinu D14 (PF15) na złączu ARDUINO CONNECTOR zestawu KAmeleon. Adres I2C modułu w przykładzie został ustawiony na 0x48, dlatego wszystkie zworki odpowiedzialne za jego konfigurację (JP1, JP2, JP3) powinny zostać zwarte do masy.

Tabela 2. Sygnały PmodTMP3 oraz odpowiadające im piny złącz ARDUINO, I2C Expander oraz wyprowadzenia mikrokontrolera

Sygnał Numer pinu PmodTMP3 Pin ARDUINO CONNECTOR KAmod I2C Expander Pin mikrokontrolera
SCL 1 (J1) 2 PF1
SDA 2 (J1) 3 PF0
GND 3 (J1) 4
3V3 4 (J1) 1
AL 1 (J2) D14 PF15

Fotografia 7. Moduł PmodTMP3 podłączony do zestawu KAmeleon

Kod przykładu

Obsługa modułu PmodTMP3, zaimplementowana w plikach PmodTMP3.c i PmodTMP3.h, sprowadza się do konfiguracji układu oraz odczytu zmierzonych wartości temperatury. Funkcja konfiguracyjna – PmodTMP3_Config, przedstawiona na listingu 3, konfiguruje interfejs I2C2 oraz pin PF15 w trybie przerwania wyzwalanego dowolnym zboczem. Tak jak w poprzednich przykładach, tutaj także piny należące do magistrali I2C są konfigurowane wewnątrz funkcji HAL_I2C_MspInit wywoływanej przez bibliotekę STM32Cube.

Na zakończenie konfiguracji zapisywane są dwa rejestry układu TCN75A: TEMPERATURE LIMIT-SET REGISTER (0x03) oraz TEMPERATURE HYSTERESIS REGISTER (0x02). Ustawiają one odpowiednio wartości progu temperatury oraz histerezy zgodnie z argumentami przekazanymi do funkcji. Obsługiwane są wyłącznie wartości całkowite, dlatego drugi z zapisywanych do rejestrów bajtów, zawierający część ułamkową, jest wyzerowany. Rejestr konfiguracyjny SENSOR CONFIGURATION REGISTER (0x01) ma domyślną wartość 0x00, która ustawia rozdzielczość pomiaru na 0,5°C, a przerwanie w trybie komparatora.

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

Listing 3. Konfiguracja interfejsu SPI i przerwania dla modułu Pmod

void PmodTMP3_Config(int8_t alarm, int8_t hyst)
{
  __HAL_RCC_GPIOF_CLK_ENABLE();
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

  pmodTmp3I2c.Instance = I2C2;
  pmodTmp3I2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  pmodTmp3I2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  pmodTmp3I2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  pmodTmp3I2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  pmodTmp3I2c.Init.OwnAddress1 = 0x01;

  pmodTmp3I2c.Init.Timing = 0x10563046;

  HAL_I2C_Init(&pmodTmp3I2c);

  uint8_t tAlarm[2] = {alarm, 0};
  uint8_t tHyst[2] = {hyst, 0};

  HAL_I2C_Mem_Write(&pmodTmp3I2c, PMODTMP3_ADDRESS, 0x03, 1, tAlarm, 2, 100);
  HAL_I2C_Mem_Write(&pmodTmp3I2c, PMODTMP3_ADDRESS, 0x02, 1, tHyst, 2, 100);
}

Odczyt temperatury

Odczyt temperatury zaimplementowano w funkcji PmodTMP3_GetTemperature. Odczytuje ona dwa bajty z rejestru AMBIENT TEMPERATURE REGISTER (0x00), a następnie generuje zmienną typu int16_t przechowującą wartość temperatury. Program dodatkowo mnoży ją przez 10, aby zachować ustawioną rozdzielczość. Dzielenie przez 256 wynika z przesunięcia części całkowitej w rejestrach układu o 8 bitów. Funkcję PmodTMP3_GetTemperature przedstawiono na listingu 4.

Listing 4. Odczyt wartości temperatury z modułu PmodTMP3

int16_t PmodTMP3_GetTemperature()
{
  uint8_t data[2] = {0};
  HAL_I2C_Mem_Read(&pmodTmp3I2c, PMODTMP3_ADDRESS, 0x00, 1, data, 2, 100);

  int16_t temperature = (data[0] << 8) | data[1];

  temperature = (temperature * 10) >> 8;
  return temperature;
}

Główna funkcja programu znajdująca się w pliku main.c rozpoczyna się konfiguracją peryferiów mikrokontrolera oraz modułu PmodTMP3. Opisana wcześniej funkcja konfiguracyjna ustawia próg alarmowy na 28°C, natomiast histereza przyjmuje wartość 26°C. Następnie odczytywana jest temperatura i programowo sprawdzane jest przekroczenie progu, aby odpowiednio ustawić stan początkowy diody LED0 (PC6) informującej o alarmie. W pętli głównej, co 1000 ms odczytywana jest temperatura, a jej wartość wysyłana jest za pośrednictwem portu szeregowego LPUART1. Opisaną procedurę przedstawiono na listingu 5.

Listing 5. Konfiguracja modułu PmodTMP3 i odczyt temperatury

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  Serial_Config();
  Led_Config();

  int16_t alarm = 28;
  int16_t hyst = 26;

  PmodTMP3_Config(alarm, hyst);

  int16_t temperature = PmodTMP3_GetTemperature();
  if (temperature > alarm * 10)
    Led_TurnOn(LED0);

  char textBuffer[128];   // Text buffer for serial writing.

  while(1) {
    HAL_Delay(1000);

    temperature = PmodTMP3_GetTemperature();

    sprintf(textBuffer, "Temperature: %d\n", temperature);
    Serial_Write(textBuffer, strlen(textBuffer));
  }
}

W funkcji obsługi przerwania na linii AL zmieniany jest stan diody LED0 po każdorazowej sygnalizacji przekroczenia progu lub powrotu do dopuszczalnej wartości.

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