STM32F4VE LCD ili9341 16bit Keil INA219

Опубликовано stm32 - Птн, 03/06/2020 - 10:14

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 мы остановились на том, что вывели информацию на экран 

bb3_3

наш файл 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. В моем случае будет следующее

c1_1

Все делаем по аналогии со статьей  STM32F4VE LCD ili9341 16bit Keil где мы подключали библиотеки для работы с LCD. Это важный момент т.к. больше всего ошибок связано именно с подключением библиотек!!. Лучше остановиться на нем еще раз.

После того как папка добавлена - подключим эту папку с библиотеками к проекту.

Сначала пропишем к ней путь. Для этого перейдем в настройки проекта.

с3_1

с4_1

  Добавим путь к созданной папке

с5_1

Нажимаем OK два раза и выходим в основное окно Keil.

Теперь добавим папку в проект. Для этого сделаем следующее

c6_1

с7_1

Называем как удобно ..

с8_1

После того как папка внутри проекта создана (не путать с папкой на диске!!)

необходимо в в эту пакту добавить файлы.

Тыкаем мышкой два раза по  папке (в проекте keil та что на фото выше) INA219 и в открывшемся окне переходим в папку которая на диске в директории проекта и добавляем два файла 

Должно получиться 

с9_0

После того как файлы добавлены папка проекта будет иметь вид

с10_0

Далее...

В связи с тем, что INA 219  подключается по I2С  необходимо добавить стандартную библиотеку для работы с этим протоколом.

Для этого в основном окне Keil

d45_1

В открывшемся окне 

c11

В User1 как на фото выше нажимаем Add Files и добавляем два файла из директории 

\Work\407\STM32F4xx_StdPeriph_Driver\inc\stm32f4xx_i2c.h

\Work\407\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.с

Получаем в итоге 

c14_0

Нажимаем 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();   - получение значения тока

Собираем проект 

с15_0

Error быть не должно Warning будут - есть желание разберитесь почему!

 

Пока с программой мы закончили и перейдем к подключению INA219 к отладочной плате STM32F4VE

INA219 будем подключать к I2C2

c17_1

На самой INA219 читать слева на право

          V+ GND SCL SDA VIN-VIN+

с18_0

Подключаем 

INA 219                    STM32F4VE

V+  (+ 3.3V)      ->        + 3.3V 

GNG                    ->           GND

SCL                     ->            PB10

SDA                    ->            PB11

Адресация 

с19_0 

Я использовал уже ранее подключенную INA219 и у меня в ней стояли перемычки. Я их снимать не стал.

Если вы будете использовать новую плату перемычки ставить не надо!! Главное правильно прописать адрес!! Все работает и так!!

Подключение проводов на STM32F4VE

с20

 

Сначала чтобы убедиться, что все работает правильно, подключим INA219 и проведем измерение напряжения.

Для этого подключим +3.3V с платы STM32F4VE на вход VIN+  INA 219

Подключаем отладочную плату STM32F4VE к программатору и записываем программу в микроконтроллер.

Если вы все делали по пунктам и ошибок не было то на экране должно отобразиться как на фото ниже 

c27

 

ОТКЛЮЧИМ  ранее подсоединенный провод к 3.3V STM32F4VE !!!

СОЕДИНИМ  INA219 VIN- и GND  STM32F4VE !!!

Теперь перейдем к измерению значения тока.

Микросхема позволяет измерять ток (эта плата) до 3.2 А . Для этого должен быть хороший источник тока.

Я в качестве эксперимента к блоку питания подключу переменное сопротивление в виде  нагрузки.

Вращая ручку буду изменять значение тока.

Подключаем следующим образом:

К клемам

 С22  или штырям с24подключаем 

по простой схеме

"+" источника питания подключаем на клему VIN+

с клеммы VIN-  проводом соединяем с первым входом измерительного прибора (будем измерять ТОК!!) 

Второй вход измерительного прибора подсоединяем на вход переменного резистора 

Выход с переменного резистора подключаем к GND источника питания.

В моем случае переменное сопротивление примерно на 33 Om (было в году 1975).

с26    с25_0

Собираем схему и получится так 

с28

 

И видео. 

  

Видео файл

 

 

Ура у нас все получилось!!!!

Если есть вопросы или необходим исходник проекта  из статьи - пишите по адресу stm32@stm32res.ru или Website feedback

 

Яндекс.Метрика