LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

Motylowy termometr

 

Jest to prosty projekt ilustrujący pomiar temperatury za pomocą czujnika wbudowanego w strukturę mikrokontrolera STM32F107 (zamontowanego na płytce STM32Butterfly) i wyświetlenie jej dziesiętnej wartości na graficznym wyświetlaczu LCD z telefonu Nokia 3310 (zamontowanego na płytce modułu KAmodLCD1) – fot. 1. Projekt programu przygotowano za pomocą pakietu TrueStudio firmy Atollic, który jest wyposażony w kompilator ARM-GCC.

 

 

Fot. 1. Wynik przykładowego 
pomiaru

Fot. 1. Wynik przykładowego pomiaru

Połączenie pomiędzy płytką zestawu STM32Butterfly a płytką wyświetlacza wykonano za pomocą 10–żyłowej taśmy, która jest dostarczana wraz z modułem wyświetlacza. Schemat elektryczny połączeń pokazano na rys. 2.

 

 

 

 

Rys. 2. Schemat elektryczny 
połączeń pomiędzy mikrokontrolerem i wyświetlaczem z Nokii 3310

Rys. 2. Schemat elektryczny połączeń pomiędzy mikrokontrolerem i wyświetlaczem z Nokii 3310

 

Komunikacja pomiędzy mikrokontrolerem i sterownikiem LCD odbywa się poprzez programowy interfejs SPI, którego realizację przedstawiono w artykule „Obsługa graficznego wyświetlacza z telefonu Nokia 3310 za pomocą mikrokontrolerów STM32” Tomasza Jabłońskiego (dział Porady). Zmieniono jedynie definicje linii wyprowadzeń mikrokontrolera, tak, aby były dopasowane do złącza z liniami portu PC mikrokontrolera. Wystarczy połączyć przez to złącze taśmą wyświetlacz, zwracając jedynie uwagę na właściwą pozycję gniazd taśmy (fot. 3). Pozostałe zadania realizuje przygotowane oprogramowanie.

 

 

 Fot. 3. Płytkę STM32Butterfly 
z modułem KAmodLCD1 najwygodniej jest połączyć za pomocą 10-żyłowego kabla IDC

Fot. 3. Płytkę STM32Butterfly z modułem KAmodLCD1 najwygodniej jest połączyć za pomocą 10-żyłowego kabla IDC

 

Prezentowana aplikacja angażuje cztery elementy: czujnik temperatury, przetwornik A/C, kontroler DMA (wszystkie wbudowane w mikrokontroler) oraz wyświetlacz LCD (moduł zewnętrzny). Pokrótce przedstawiono obsługę wszystkich elementów zaangażowanych do realizacji funkcji termometru, następnie jak zostały one połączone w działającą aplikację.

 

Przetwornik A/C

Mikrokontrolery STM32F107 mają wbudowane dwa 12–bitowe przetworniki A/C. W aplikacji wykorzystano przetwornik ADC1. Na list. 1 przedstawiono kod, który konfiguruje przetwornik do pracy. Przetwarzany będzie jeden kanał w trybie ciągłym. Wewnętrzny czujnik temperatury jest podłączony do kanału 16, stąd też napięcie będzie mierzone na tym właśnie kanale. Po wykonaniu inicjalizacji przetwornik jest kalibrowany i włączany.

List. 1. Konfiguracja, kalibracja i uruchomienie przetwornika A/C

 

// Konfiguracja ADC
// Jeden przetwornik, pracujacy niezaleznie
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
// Pomiar jednego kanalu, wylacz opcje skanowania
ADC_InitStruct.ADC_ScanConvMode = DISABLE;
// Wlacz pomiar w trybie ciaglym
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
// Nie bedzie wyzwalania zewnetrznego
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
// Dane wyrownane do prawej - znaczacych bedzie 12 mlodszych bitow
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
// Jedne kanal
ADC_InitStruct.ADC_NbrOfChannel = 1;
// Inicjuj przetwornik
ADC_Init(ADC1, &ADC_InitStruct);

ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);

// Wlaczenie czujnika temperatury
ADC_TempSensorVrefintCmd(ENABLE);
// Wlaczenie DMA
ADC_DMACmd(ADC1, ENABLE);
// Wlacz ADC1
ADC_Cmd(ADC1, ENABLE);

// Resetuj rejestry kalibracyjne
ADC_ResetCalibration(ADC1);
// Czekaj, az skonczy resetowac
while(ADC_GetResetCalibrationStatus(ADC1));

// Start kalibracji ADC1
ADC_StartCalibration(ADC1);
// Czekaj na zakonczenie kalibracji ADC1
while(ADC_GetCalibrationStatus(ADC1));

// Start przetwarzania
ADC_SoftwareStartConvCmd(ADC1, ENABLE);