Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 00:09:25

Друзья, прошу помощи.
Делаю "показометр" Вольт-Амперметр для ЛБП. Вернее уже сделал. Но есть нюанс...
Суть - замер тока через INA219
Изначально программу писал под F103C8T6 (синяя таблетка), саму плату развёл и заказал отдельно чипы C6T6A с Али. Они самые дешёвые и по "начинке" мне максимально подходят.
Так вот, на С6Т6А нормально не обнуляются показания амперметра при отсутствии нагрузки, при напряжении на выходе ЛБП больше 10 Вольт (примерно) появляется 1, а дальше и 2-3 мА. Хотя на С8Т6 и даже на F401CCU6 - всё работает отлично!
Чипы 99.9% оригинальные. Распаял в две платы, думал брак в микросхеме INA219 - нет, "погрешность" всё равно вылезает.
Сам замер +/- точный. В холостую только проявляются симптомы.
Шунт 0,01 Ом.
Пробовал его замыкать, пробовал замыкать токоизмерительные ноги на микросхеме - не помогает, не обнуляется.
Так же, замечен "накопительный эффект": если подключить нагрузку на несколько минут, а потом снять её - "холостых" миллиамепр становится больше. 4-5-6 мА ...
Использую связку Куб_МХ 6.5.0 и Кеил 5.36
Неужели проблема именно в чипах СТМ?

PS. заливал проекты созданные кубом как для С6Т6А, так и для С8Е6 - эффекту ноль.
Основная программа и библиотеки - для всех чипов, что я пробовал - просто копировал, то есть они одинаковые и не в них проблема (скорее всего).

PS2. так же на шине I2C висит дисплей LCD1602 - работает корректно. Пробовал стандартную и "быструю" частоту шины - нет результата.

PS3. Работает от встроенного генератора частоты. При тестах других чипов - так же использовал встроенный генератор.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 00:32:59

совершенно непонятно, причём тут некорректная работа и2ц

Re: Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 09:39:14

Если есть сомнения в работе I2C, подключите логический анализатор и проверьте приходящие и отправляемые байты напрямую анализатором с шины. По этим результатам уже и будет видно, где искать дальше.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 12:57:40

MLX90640, огромное спасибо за наводку. Давно купил анализатор, даже из пакетика не вынимал))) Вот пригодился.
Итак, опыта в анализе данных анализатора у меня практически нет, есть только общие знания.
Что имеем. Начну с девайса, где стоит "адекватно себя ведущий F103C8T6":

Теперь F103C6T6A


Собственно, что разнится:
Изображение

Тот "пик", что я выделил знаком вопроса - всего 250 нс согласно анализатору.

В обоих устройствах стоят подтягивающие резисторы на шине - по 10кОм + по 10кОм в плате-переходнике на дисплей. Итого пусть 5к.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 22:42:33

DataLife, я бы мог долго и нудно объяснять, почему не стоит использовать F1 и ее аппаратный I2C, но вы всё это проигнорируете. Посему кратко - поставьте программный I2C (ногодрыг), можете на тех-же ногах.
В следующий раз лучше использовать процессоры, где эти проблемы уже исправлены. Недавно взял G030, пока только положительные впечатления, особенно понравилось потребление и бережное отношение к "ногам".

Re: Не корректная работа I2C на F103C6T6A (INA219)

Сб янв 14, 2023 22:54:39

почему не стоит использовать F1 и ее аппаратный I2C

И почему же? Вот честно!
Почему у меня работает? Может, потому что я внимательно прочитал мануал и эррату?

DataLife, код в строгом соответствии с алгоритмом из мануала? Нет проблем с другой периферией, описанных в эррате?
Вот, например, мой простенький i2cscan: сканирует шину и позволяет читать/писать. Только если будешь брать код, там у меня ошибка в I2Cscan: нельзя i2c_7bit_send(NULL, 0), это может привести к ошибке в устройстве (и оно "подвесит" шину). Правильней — как здесь: просто без адресации попытаться 1 байт считать.
Да, если в F103 сделать работу с I2C через DMA, должно быть меньше проблем, чем блокирующие вызовы использовать. Правда, всю преамбулу все равно придется ручками дергать (как у меня для G0).

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 00:10:12

u37, читал, что в серии F1 интерфейс I2C реализован криво, но я шёл по пути наименьшего потребления денег. Брал дешёвый МК. Попробую программный I2C, спасибо.
По поводу МК - G030 имеет всего один АЦП, мне нужно два. с ДМА я ещё не подружился, чтобы опрашивать каналы. И, например, этот G030 имеет другую распиновку (хоть и действительно лучшую, чем у других, всего один вход питания). У меня уже есть десяток плат с разводкой под типичный F103C8T6. На будущее - задумаюсь, спасибо.

Вероятно, я как начинающий в этом всём - писал на всем нелюбимом HAL... Именно для I2C использовал библиотеку Adafruit_INA219.

Eddy_Em, спасибо за ссылки на библиотеки и решения. Пока план действий на будущее накидал. Буду пробовать!

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 00:33:09

"один АЦП, мне нужно два"
Можно поинтересоваться, в чем выражается эта нужда?

И по INA219. Я использовал INA226. Диапазон и результирующий уровень шума соответствует документации. С ним появляется другая проблема - как найти адекватный шунт. ))

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 00:37:08

DataLife, вы хочите DMA? Их есть у меня!
А вот так в массиве из девяти последних значений берется медиана и выдается пользователю.
Но, конечно, F103 — самый убогий блин из арсенала STM32.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 00:46:30

Вся кривизна описана в еррата. Её и надо читать. Остальная кривизна - в голове и руках "писателей" и читателей. Все тупо копируют софтовый, потому что кто-то где-то когда-то не смог аппаратный запустить и расплакался об этом на весь интернет...

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 08:57:20

Имел дело плотно с ina226, но с AVR. По своему опыту выкини Адафрутовскую библиотеку, и напиши свою. Проблема мне кажется вся в этом, а не i2c мк stm32f103. Мог бы и портянку свою выложить, что там делаешь, не думаю что там такой уж серьезный проект, люди давно б уже сказали в чем ошибся.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 17:44:39

neid, я бы свалил всю вину на библиотеку или тот же HAL, но на F103C8T6 и F401CCU6 - работает. А именно на F103C6T6A - нет.
u37, как я говорил - я ещё очень на Вы с ДМА... Знаю, что штука нужная, полезная то сё, но пока и нужды в ней не было и времени осваивать. Всему своё время, наверное. У меня просто два места, где нужно замерять напряжение (непосредственно для "показометра" и температура радиатора), поэтому и два АЦП. На моём уровне знаний - мне так проще.

Сейчас жду новый паяльный фен, перепаяю из одной синей пилюли F103C8T6 и заменю на F103C6T6A - попробую записать от внешнего кварца с платы. Может что-то прояснится. Может у меня где-то косяк в разводке самого питания МК, хотя всё по ДатаШиту и по образу и подобию плат типа блуПил.

ЗЫ. попробовал уменьшить подтягивающие резисторы на SDA/SCL до 1к - не помогло.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 18:30:41

DataLife, возможна ситуация, что на восьмерке чудом обошлось, а на шестерке конкретный баг и выполз.
Первый шаг: выкинуть кал и пользоваться только заголовочными файлами от CMSIS. Второй шаг: либо тщательно проверить адафрутовскую библиотеку, либо тоже выкинуть. Я, кстати, было дело, находил в адафрутовских баги и просто мелкие косяки. А оно и понятно: любой продукт с претензией на универсальность априори будет тормозным и дырявым.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 18:38:43

И третий шаг - подцепить заведомо исправную еепромку и посмотреть обмен с ней.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 20:17:51

DataLife - У одного АЦП есть несколько (8-19) каналов. Не обязательно использовать отдельные АЦП. Однажды написал функцию опроса каналов с ДМА и долго пользовал пока Eddy_Em не подкинул медианный фильтр. Теперь все стало еще красивее. Иногда единица в младшем разряде появляется из-за прогрева. А так при комнатной температуре отстраиваю с точностью 0.1%. Для ЛБП вполне хватает.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс янв 15, 2023 21:01:48

Eddy_Em, прошерстил всю библиотеку Адафрута: лично у меня нет к ней претензий, всё реализовано очень понятно и просто. Через HAL_I2C_Mem_Write/Read. Тут реально какой-то внутренний косяк на шине.
Пока это писал, пришла в голову идея повесить на шину вообще другой дисплей (ну мало ли). Есть SSD1306 под рукой. Хотя снова... на C8T6 даже с LCD1602 нет проблем ... :evil:

Sergi, да, знаю. Но вот с ДМА нужно подружиться. Вижу, что неизбежно в обозримом будущем придётся... Спасибо.

PS. так как ооочень не хочется перепаивать МК в уже "работающей" плате, то ищу выходы. А что если таки реализовать обмен данными с INA219 через ДМА? Может уйдёт косяк (Eddy_Em, ещё раз спасибо за мысли). В еррате вроде пишут, что может помочь... И для меня некое обучение с прикладным моментом будет.

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

Но что-то не пойму... Мне нужно забирать данные из регистра, который имеет адрес... Кароче обычно идёт обращение к устройству Адрес устройства - Адрес памяти.... А в функции ДМА только адрес устройства:
Код:
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA (I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t* pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA (I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t* pData, uint16_t Size);
Или я что-то не так понимаю?

UPD: нашёл HAL_I2C_Mem_Read_DMA :hunger: ... но простая замена функции на *_DMA не помогла и вообще теперь на шине - тишина ...

Re: Не корректная работа I2C на F103C6T6A (INA219)

Пт фев 03, 2023 19:05:50

решилась проблема?
в сети полно жалоб на F103C6T6A с али, то одно не работает,то другое.
может все таки перемаркировка какого нибудь GD?

Re: Не корректная работа I2C на F103C6T6A (INA219)

Пт фев 03, 2023 19:35:08

А что, у GigaDevice то одно не работает, то другое? набрали отбраковки на помойке вот и вся проблема.

Re: Не корректная работа I2C на F103C6T6A (INA219)

Вс фев 25, 2024 16:36:13

DataLife писал(а):нормально не обнуляются показания амперметра при отсутствии нагрузки
Сейчас на руках 5 модулей INA226, 2 из одной партии, 3 из другой.
По классификации из "популярной" статьи "INA226 хорошие и плохие", то 2 "хорошие" и 3 "плохие"..
Таки вот:
"хорошие" модули: ампераж при отсутствии нагрузки не обнуляется, постоянно скачут цифры.
А "полохие" почти в нулях.
Ответить