- Войдите или зарегистрируйтесь, чтобы оставлять комментарии
STM32F4VE LCD ili9341 16bit Keil INA219
Всем привет!!
В этой статье хочу рассказать как можно использовать плату Ina219 в своих проектах на микроконтроллерах 4 серии STM32F4xx. Если ваше устройство имеет резервное питание или контролирует потребление мощности то микросхема Ina219 установленная в плату - идеально подходит подходит для этих целей. Минимум элементов быстрый и универсальный протокол обмена информацией. Конечно можно все организовать без использования Ina 219 - поставить шунт подключить аналоговый вход и получать нужную информацию. Возможно.. но отдельное устройство иногда удобнее и безопаснее (для микроконтроллера). Припаял INA 219 с шунтом на другой стороне платы подальше от основной схемы соединил двумя дорожками и забыл о ней - только периодически читай из нее нужную информацию .. мне так нравиться больше. Для того чтобы наглядно отобразить подключение INA 219 возьмем отладочную плату STM32F4VE с LCD ILI9341. Эта плата удобная для отладки своих проектов. Начальную часть кода STM32F4VE с LCD ILI9341 с запуском и выводом информации на экран в ранее написанной статье STM32F4VE LCD ili9341 16bit Keil . В этой же статье мы продолжим то что начали в предыдущей статье - осваивать STM32F4VE и подключим к программе - библиотеки для работы с INA 219.
Итак приступим ..
В статье STM32F4VE LCD ili9341 16bit Keil мы остановились на том, что вывели информацию на экран
наш файл main.c был наполнен информацией следующего содержания
#include "main.h"
#include <stdio.h>
#include <string.h>
#include "ili9341.h"
char str1[60];
char str2[60];
int main(void)
{
SysTick_Config(SystemCoreClock / 1000);
// Настраиваем порты
GPIO_init();
// Настраиваем кнопки установленные на плате
button_ini();
//
LCD_Configuration();
// Настраиваем связь
USART2_Configuration();
//
lcdInit();
//
lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
lcdFillRGB(COLOR_WHITE);
LCD_SetBackLight(50); //Включаем подсветку на нужную яркость. 0 -max 100- min
// Пишем текст сверху экрана
lcdSetTextFont(&Font24);
lcdSetTextColor(COLOR_BLACK, COLOR_WHITE);
lcdSetCursor(40, 5); // xy
lcdPrintf("www.stm32res.ru");
lcdSetTextColor(COLOR_BLUE , COLOR_WHITE);
lcdSetCursor(80, 65);
lcdPrintf("STM32F4VE");
lcdSetTextColor(COLOR_MAROON , COLOR_WHITE);
lcdSetCursor(20, 100);
lcdPrintf("LCD ili9341 16bit");
lcdSetTextColor(COLOR_RED , COLOR_WHITE);
lcdSetCursor(110, 140);
lcdPrintf("No Hal");
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //Подаем «0» на PA
delay_ms(450);
GPIO_SetBits(GPIOA, GPIO_Pin_7); //Подаем «1» на PA
delay_ms(450);
}
}
*******************************************************************************************************
Что мы сделали ?
1. SysTick_Config(SystemCoreClock / 1000); - запустили аппаратный таймер для формирования нужных временных задержек.
2. Как видно из комментариев настроили порты для кнопок и светодиодов, настроили конфигурацию LCD
// Настраиваем порты
GPIO_init();
// Настраиваем кнопки установленные на плате
button_ini();
//
LCD_Configuration();
// Настраиваем связь
USART2_Configuration();
//
lcdInit();
//
Я специально разделил названия GPIO_init(); и LCD_Configuration(); т.к. в одном случае это настройка портов в другом случае это конфигурация LCD. Для упрощения кода - можно все объединить. Можете это у себя сделать если необходимо.
Продолжим программу созданную в другой статье и подключим к ней библиотеки для работы с INA219. Для этого - скачиваем файл с архивом библиотеки ссылка. Распаковываем архив в -> папка проекта - > LIB. В папке LIB уже находиться папке с названием ILI9341. В моем случае будет следующее
Все делаем по аналогии со статьей STM32F4VE LCD ili9341 16bit Keil где мы подключали библиотеки для работы с LCD. Это важный момент т.к. больше всего ошибок связано именно с подключением библиотек!!. Лучше остановиться на нем еще раз.
После того как папка добавлена - подключим эту папку с библиотеками к проекту.
Сначала пропишем к ней путь. Для этого перейдем в настройки проекта.
Добавим путь к созданной папке
Нажимаем OK два раза и выходим в основное окно Keil.
Теперь добавим папку в проект. Для этого сделаем следующее
Называем как удобно ..
После того как папка внутри проекта создана (не путать с папкой на диске!!)
необходимо в в эту пакту добавить файлы.
Тыкаем мышкой два раза по папке (в проекте keil та что на фото выше) INA219 и в открывшемся окне переходим в папку которая на диске в директории проекта и добавляем два файла
Должно получиться
После того как файлы добавлены папка проекта будет иметь вид
Далее...
В связи с тем, что INA 219 подключается по I2С необходимо добавить стандартную библиотеку для работы с этим протоколом.
Для этого в основном окне Keil
В открывшемся окне
В User1 как на фото выше нажимаем Add Files и добавляем два файла из директории
\Work\407\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_i2c.h
\Work\407\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.с
Получаем в итоге
Нажимаем Ok и выходим
В основном окне Keil открываем main.c и изменяем его дополняя содержимым. В результате получаем.
#include "main.h"
#include <stdio.h>
#include <string.h>
#include "ili9341.h"
#include "ina219.h"
char str1[60];
char str2[60];
float mm, mm1, mm2;
int main(void)
{
SysTick_Config(SystemCoreClock / 1000);
// Настраиваем порты
GPIO_init();
// Настраиваем кнопки установленные на плате
button_ini();
//
// Настраиваем связь
LCD_Configuration();
USART2_Configuration();
//
lcdInit();
ina219_init();
lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
lcdFillRGB(COLOR_WHITE);
LCD_SetBackLight(50); //Включаем подсветку на нужную яркость. 0 -max 100- min
// Пишем текст сверху экрана
lcdSetTextFont(&Font24);
lcdSetTextColor(COLOR_BLACK, COLOR_WHITE);
lcdSetCursor(40, 5); // xy
lcdPrintf("www.stm32res.ru");
lcdSetTextColor(COLOR_BLUE , COLOR_WHITE);
lcdSetCursor(80, 45);
lcdPrintf("STM32F4VE");
lcdSetTextColor(COLOR_MAROON , COLOR_WHITE);
lcdSetCursor(20, 80);
lcdPrintf("LCD ili9341 16bit");
lcdSetTextColor(COLOR_BLACK, COLOR_WHITE);
lcdSetCursor(100, 110); // xy
lcdPrintf("INA 219");
while (1)
{
mm = ina219_getBusVoltage_V();
delay_ms(50);
mm2 = ina219_getCurrent_mA();
sprintf(str1,"BusVoltage - %.2f V",mm);
lcdSetTextFont(&Font20);
lcdSetTextColor(COLOR_BLACK , COLOR_WHITE);
lcdSetCursor(10, 150);
lcdPrintf(str1);
sprintf(str2,"Current - %.1f mA",mm2);
lcdSetTextColor(COLOR_BLACK , COLOR_WHITE);
lcdSetCursor(10, 180);
lcdPrintf(str2);
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //Подаем «0» на PA
delay_ms(450);
GPIO_SetBits(GPIOA, GPIO_Pin_7); //Подаем «1» на PA
delay_ms(450);
}
}
Из того что добавлено из предыдущей статьи
1. ina219_init(); - инициализация INA 219
2. mm = ina219_getBusVoltage_V(); - Получение значения напряжения
3. mm2 = ina219_getCurrent_mA(); - получение значения тока
Собираем проект
Error быть не должно Warning будут - есть желание разберитесь почему!
Пока с программой мы закончили и перейдем к подключению INA219 к отладочной плате STM32F4VE
INA219 будем подключать к I2C2
На самой INA219 читать слева на право
V+ GND SCL SDA VIN-VIN+
Подключаем
INA 219 STM32F4VE
V+ (+ 3.3V) -> + 3.3V
GNG -> GND
SCL -> PB10
SDA -> PB11
Адресация
Я использовал уже ранее подключенную INA219 и у меня в ней стояли перемычки. Я их снимать не стал.
Если вы будете использовать новую плату перемычки ставить не надо!! Главное правильно прописать адрес!! Все работает и так!!
Подключение проводов на STM32F4VE
Сначала чтобы убедиться, что все работает правильно, подключим INA219 и проведем измерение напряжения.
Для этого подключим +3.3V с платы STM32F4VE на вход VIN+ INA 219
Подключаем отладочную плату STM32F4VE к программатору и записываем программу в микроконтроллер.
Если вы все делали по пунктам и ошибок не было то на экране должно отобразиться как на фото ниже
ОТКЛЮЧИМ ранее подсоединенный провод к 3.3V STM32F4VE !!!
СОЕДИНИМ INA219 VIN- и GND STM32F4VE !!!
Теперь перейдем к измерению значения тока.
Микросхема позволяет измерять ток (эта плата) до 3.2 А . Для этого должен быть хороший источник тока.
Я в качестве эксперимента к блоку питания подключу переменное сопротивление в виде нагрузки.
Вращая ручку буду изменять значение тока.
Подключаем следующим образом:
К клемам
или штырям подключаем
по простой схеме
"+" источника питания подключаем на клему VIN+
с клеммы VIN- проводом соединяем с первым входом измерительного прибора (будем измерять ТОК!!)
Второй вход измерительного прибора подсоединяем на вход переменного резистора
Выход с переменного резистора подключаем к GND источника питания.
В моем случае переменное сопротивление примерно на 33 Om (было в году 1975).
Собираем схему и получится так
И видео.
Ура у нас все получилось!!!!
Если есть вопросы или необходим исходник проекта из статьи - пишите по адресу stm32@stm32res.ru или Website feedback