Коновалов Дмитрий Александрович

Автономный регистратор температуры на базе отладочной платы STM32VL-Discovery

Предназначен для регистрации температуры во времени, с последующей обработкой полученной информации на персональном компьютере.

· Диапазон измеряемой температуры – от -55 до +125 °С

· Период опроса – от 1 сек. до 24 час.

Измерение температуры осуществляется с помощью датчика DS18B20. Измеренная температура вместе с информацией о дате и времени периодически записывается в текстовый табличный файл на SD карту. Начальная установка даты, времени и периода опроса, а также запуск записи осуществляются через терминал по последовательному интерфейсу.

Регистратор оснащён графическим дисплеем от сотового телефона Nokia 5510. В процессе работы на дисплее отображаются текущее время, текущая температура, информация о статусе SD карты и график зависимости температуры от времени.

Помимо решения задачи создания регистратора температуры данный проект имел учебный характер. В проекте вместо устаревшей библиотеки периферии SPL (Standard Peripheral Library) используется обновлённая библиотека HAL (Hardware Abstraction Layer). В ходе работы были освоены:

· среда программирования keil uVision v5;

· генератор исходного кода STM32CubeMX;

· последовательный интерфейс USART на базе HAL;

· работа с SPI на базе HAL;

· работа с SD картой по SPI;

· LCD Nokia 5510;

· работа с RTC (Real Time Counter) на базе HAL;

· температурный датчик DS18B20 на базе HAL;

· FATFS;

· FREERTOS;

· ввод/вывод с использованием стандартных функций scanf и printf.


Источник питания подключается к выводу VBAT платы STM32VL-Discovery. Перемычку JP1 необходимо разомкнуть. При этом питание подаётся только на микроконтроллер, а на модуль ST-Link нет. Для нормального запуска микроконтроллера нужно отсоединить вывод RESET от модуля ST-Link, отпаяв перемычку SB11 (на нижней стороне платы).

Файлы проекта прошивки регистратора в формате keil uVision v5

Для работы с температурным датчиком DS18B20 используется программный интерфейс 1-Wire. За основу взят код с сайта My Controller. Прямые обращения к порту заменены на функции HAL, ликвидированы за ненадобностью функции ds_write_bit и ds_read_bit, оптимизирована функция ds_read_temp.

Библиотека для работы с LCD Nokia 5510 взята на форуме Обитель RC-инженера. Для работы с SPI использованы функции HAL, слегка подкорректирована функция lcd8544_putchar, добавлена функция Clear_LCD_buffer. Вывод текстовой и числовой информации на LCD осуществляется с помощью стандартной функции printf. Для этого определена пользовательская функция fputc, в которой реализована обработка кодов перевода строки и возврата каретки. Контроль выхода за пределы экрана не реализован.

Управление регистратором осуществляется через терминал по последовательному интерфейсу USART с помощью простого интерпретатора команд. Для вывода используется функция HAL_UART_Transmit. Ввод строчной и цифровой информации осуществляется с помощью стандартной функции scanf. Для этого определена пользовательская функция fgetc.

Низкоуровневые функции для работы с SD картой базируются на AVR MMC module (C)ChaN, 2007. Базовая функция stm32_spi_rw реализована с помощью всего одной стандартной функции HAL_SPI_TransmitReceive. Вызов служебной функции disk_timerproc осуществляется внутри системной процедуры HAL_IncTick.

Регистратор работает под управлением FreeRTOS с поддержкой FATFS. Использование RTOS позволяет максимально упростить основной программный код и работать с SPI и USART без использования прерываний. Все файлы и библиотеки, необходимые для работы FreeRTOS и FATFS, автоматически подключаются к проекту генератором исходного кода STM32CubeMX.

FreeRTOS обслуживает всего две статические задачи – defaultTask и USART. Первая задача отвечает за измерение температуры, запись на SD карту и отображение информации на LCD. Её работа управляется флагом state_disk, который может принимать три основных значения – STOP, START, LOGGING, а также четыре промежуточных – CREATE_OK, CREATE_ERR, SAVED_OK, SAVED_ERR.

Вторая задача обслуживает простой интерпретатор команд. В бесконечном цикле она ожидает, с помощью стандартной процедуры scanf, ввода одной из шести команд – HELP, START, STOP, DATE, TIME, PERIOD и в зависимости от команды и её параметров изменяет состояние флага state_disk или значение соответствующей системной переменной.

Тактирование осуществляется от кварцевого резонатора HSE 8МГц. Для уменьшения потребляемого тока тактовая частота понижена до 2 МГц. В период бездействия между тиками системного таймера FreeRTOS микроконтроллер переводится в состояние пониженного энергопотребления. Для этого задано макроопределение configUSE_IDLE_HOOK равным 1 и определена функция vApplicationIdleHook, переводящая микроконтроллер в SLEEP Mode WFI.

После включения регистратор находится в состоянии STOP. Системное время – 00:00:00. Системная дата – 01.01.2000. Период опроса – 10 сек.

    <= строка статуса





    <= системное время и текущая температура


Для запуска регистратора необходимо подключиться к нему по последовательному порту с параметрами 9600/8-N-1. На экране терминала появится приглашение «>», в ответ на которое можно ввести команду. Символом завершения ввода и разделителем параметров является пробел. По команде HELP выводится список допустимых команд и их параметров:


Команды DATE и TIME устанавливают системную дату и время.

По команде START происходит инициализация FATFS и на SD карте создаётся табличный текстовый файл с именем xxxxxxxx.LOG (где xxxxxxxx значение RTC счётчика в шестнадцатиричном виде), в который с периодом, заданным командой PERIOD, заносятся значения температуры. Регистратор переходит в состояние LOGGING. В случае возникновения ошибки при обращении к SD карте регистратор переходит в состояние STOP.

Формат файла xxxxxxxx.LOG:

DD.MM.YY hh:mm:ss      t°C
                          
18.07.16 10:57:48      27
18.07.16 10:57:58      30 
18.07.16 10:58:08      31 
18.07.16 10:58:18      31 
       .....              

Разделителем столбцов является символ табуляции.

После запуска регистратор отключают от компьютера и размещают в том месте, где нужно осуществлять мониторинг.

В состоянии регистратора LOGGING на экране LCD в строке статуса отображается время последнего сохранения и строится график зависимости температуры от времени:


Каждой точке по горизонтали соответствует одно сохранённое значение. Поэтому масштаб горизонтальной шкалы зависит от значения, заданного командой PERIOD. Вертикальная шкала не масштабируется и задана жёстко. Данный регистратор создавался для мониторинга температуры в теплице. Диапазон температурной шкалы выбран в пределах от -10 до +50 °С. Контроль выхода температуры за пределы указанного диапазона при отображении отсутствует.

Устройство потребляет от источника питания средний ток 2.3 мА. При использовании аккумулятора ёмкостью 850 мАч продолжительность автономной регистрации составляет 15 суток.


Возврат к списку