STM Урок 65. Подключаем операционный усилитель TSZ124IPT. Часть 2

 

 

 

 

Урок 65

 

Часть 2

 

Подключаем операционный усилитель TSZ124IPT

 

 

В предыдущей части занятия мы познакомились с характеристиками нашего ОУ, также познакомились с оценочной платой и со схемами, собранными на ОУ TSZ124IPT, а также с некоторыми расчётами данных схем, позволяющими нам оценить измеренные показания.

 

Проект мы сделаем из проекта Humidity_HTS221 из урока 55 по датчику влажности и назовем его TSZ124.

Запустим наш проект в Cube MX.

Посмотрим в документации на отладочную плату, какие именно мы будем использовать каналы АЦП

 

Image17

 

Так как на плате существуют две схемы использования нашего усилителя, подключенные своим выходом к двум различным каналам АЦП, то включим соответствующие каналы

 

Image04

 

Добавим ещё кое-какие забытые настройки. Включим генератор тактирования

 

Image05

 

Также включим порт SWD

 

Image06

 

I2C отключим

 

Image07

 

В Clock Configuration переключим мультиплексор на резонатор и установим следующие настройки (нажмите на картинку для увеличения изображения)

 

Image08_0500

 

Перейдём в Configuration.

Настроим таймер следующим образом

 

Image09

 

Убедимся, что включены прерывания

 

Image10

 

В АЦП мы будем использовать инжекторные каналы, поэтому включим следующие настройки

 

Image11

 

Включим прерывания

 

Image12

 

Сгенерируем проект, откроем его в Keil, настроим там программатор на автоерезагрузку.

Файлы hts221.h и hts221.c переименуем соответственно в TSZ124.h и TSZ124.c.

В связи с этим также исправим и подключение файла в главном модуле main.c и в TSZ124.c, который мы также подключим в дерево проектов

 

#include "TSZ124.h"
 

 

В файле TSZ124.c удалим следующее объявление

 

extern I2C_HandleTypeDef hi2c1;
 

Функцию MovingAverageTemp исправим в MovingAverageI

 

Удалим функции Error, I2Cx_ReadData, I2Cx_WriteData, Humidity_IO_Read, Humidity_IO_Write, I2Cx_WriteData, Humidity_Get_Temp, Humidity_Get_Hum, Humidity_ReadID, HumidityInit и Humidity_Ini, а на какие из этих функций есть прототипы, то удалим и их. Функции инициализации мы удалили, так как операционным усилителям инициализация не нужна, так как это аналоговые микросхемы без всякого регистрового управления.

Функцию Humidity_Read переименуем в Data_Read, а весь код в ней пока закомментируем. Также добавим для неё прототип.

Также для эстетики исправим вот эту переменную

 

 volatile int8_t avg_cnt;
 volatile int8_t avg_cnt_i;
/* USER CODE END PV */

 

Также исправим данную переменную во всех местах её появления.

Теперь подчистим хедер-файл и он будет у нас следующего вида

 

#ifndef TSZ124_H_
#define TSZ124_H_

#include "stm32f4xx_hal.h"
#include <string.h>
//————————————————
void Data_Read(void);
//————————————————
#endif /* TSZ124_H_ */

 

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

 

  /* USER CODE BEGIN 2 */
 HAL_ADCEx_InjectedStart_IT(&hadc1);
 HAL_UART_Receive_IT(&huart2,(uint8_t*)str,8);
 HAL_TIM_Base_Start_IT(&htim1);

 Humidity_Ini();
 

Из бесконечного цикла уберём всё полностью.

изменим тип глобальной строковой переменной и добавим массив для хранения измеренных данных с двух каналов АЦП

 

/* USER CODE BEGIN PV */
/* Private variables ———————————————————*/
char str[20]={0};
volatile unsigned int i_cur[2];

/* USER CODE END PV */

 

В функции-обработчике прерываний от таймера исправим вызов функции Humidity_Read на Data_Read, но пока его закомментируем, так как мы сначала выведем наши показания в терминальную программу

 

  if(huart2.RxXferCount==0)
  {
//   Data_Read();

 

После данной функции добавим ещё обработчик прерывания АЦП

 

void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc1)
{
  i_cur[0]=HAL_ADCEx_InjectedGetValue(hadc1,ADC_INJECTED_RANK_1);
  i_cur[1]=HAL_ADCEx_InjectedGetValue(hadc1,ADC_INJECTED_RANK_2);
 HAL_ADCEx_InjectedStart_IT(hadc1);
}

/* USER CODE END 4 */

 

А в бесконечном цикле добавим вызов функции чтения показаний и задержку

 

  /* USER CODE BEGIN 3 */
  Data_Read();
  HAL_Delay(200);

}

 

 

Вернёмся в TSZ124.c и подключим там нашу глобальную переменную

 

extern UART_HandleTypeDef huart2;
extern volatile unsigned int i_cur[2];

 

Теперь начнём потихоньку писать нашу функцию обработки данных АЦП, чтобы мы видели показания в нужных нам единицах.

Код будем делать из закомментированного, постепенно убирая знаки комментирования.

Сначала добавим в функцию две локальные переменные

 

void Data_Read(void)
{
 float ins,i1;

 

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

Теперь попытаемся превратить сырое измеренное на АЦП на контакте A1 значение в величину разности потенциалов, используя наши формулы, приведённые выше. считать будем в миливольтах.

Так как максимальное значение — 4096 соответствует максимальному напряжениию 3,3 вольта или 3300 миливольт, то посчитаем форм-фактор (множитель) напряжения на выходе схемы

 

Image19

 

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

Далее посчитаем форм-фактор для вычисления разности потенциалов на входных контактах.

Сначала выразим её из формулы, зная что неизвестное у нас множитель

 

Image22

 

Ну и, соответственно теперь посчитаем общий форм-фактор. Сначала с применением резистора (при установленной перемычке JP2)

 

Image23

 

А сейчас посчитаем форм-фактор того же усилителя, но без перемычки JP2, в этом случае у нас коэффициент усиления будет равен 1, то есть первый множитель в делителе будет равен единицы, следственно, его мы можем убрать из формулы совсем

 

Image24

 

Ну и теперь посчитаем также форм-фактор для вычисления тока

 

Image20

 

В следующей части занятия мы продолжим писать исходный код по обработке и отображению данных от ОУ и посмотрим данные показания в терминальной программе.

 

Предыдущая часть Программирование МК STM32 Следующая часть

 

Техническая документация:

Техническая документация на операционный усилитель TSZ124IPT

User Manual к оценочной плате X-NUCLEO-IKA01A1

 

Программа визуализации (Только для 64-битных Windows)

 

 

Отладочную плату можно приобрести здесь Nucleo STM32F401RE

и здесь Nucleo STM32F401RE

Оценочную плату можно приобрести здесь STM32 X-NUCLEO-IKA01A1

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM Подключаем операционный усилитель TSZ124IPT

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*