avatar_Ghozt

BattMeter. Очередная попытка создать убийцу Cycle Analyst (уже в продаже)

Автор Ghozt, 14 Май 2017 в 21:38

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ghozt

Ну... раз конструктивной критики не поступило, оставлю термостат в таком виде.

Новогодние праздники прошли крайне продуктивно. Я наконец дописал целиком менюшку, остались только мелкие правки. Вот финальная иерархия настроек для младшей версии ваттметра:



Немного пояснений по некоторым настройкам. Решил сделать показометр в % оставшейся батареи, кто-то вроде просил. Для этого задаются параметры Battery Ah, Battery S и Chemistry, соответственно, Ач батареи, количество последовательных банок и химия батареи. Показометр сделан по-простому: по параметрам выше вычисляются энергия батареи в втч, в качестве напряжения используется средняя точка каждого типа химии. После чего потраченные втч делятся на этот показатель и переводятся в % оставшегося заряда. Никого внутреннего сопротивления в расчетах не используется, равно как и текущего напряжения в случае с ли-ионными батареями. И корректно показывать он будет только при условии полностью заряженной батареи и сброшенной дневной статистики, никаких подхватов емкости на лету по напряжению не будет.

Если показометр не нужен - просто оставить нули в Ah и/или S, рисоваться он тогда не будет. В будущем (читай в старшей версии) этот показатель можно будет использовать при учете залитой в батарею емкости во время зарядки.

Показометр будет чередоваться с часами. Поскольку при включенном термоконтроле часы уезжают наверх и становятся видны только при стоянке, показометр тоже будет виден только тогда, когда скорость будет нулевой. Я все также следую правилу, что ничего не должно чередоваться в движении, поэтому в движении будут видны только часы (при выключенном термоконтроле). Показометр - только на стоянках, не настолько он актуален, чтобы на него в движении смотреть.

Раз коснулись темы термоконтроля, покажу некоторые модификации главного экрана и экрана температур:



На главном экране можно теперь нарисовать температуры всех компонентов: 2 моторов, батареи и контроллера/ов. Чтобы не путаться, что есть что, при стоянке появляются лейблы Cn и Bt для батареи и контроллера соответственно. На ходу температура контроллера вместе с часами скрывается, а также скрывается лейбл батареи, чтобы разгрузить экран. И, разумеется, если термоконтроль соответствующих компонентов не активирован, их температура не отображается ни на главном дисплее, ни на дисплее температур. Собственно, сам дисплей температур выглядит так:



H - максимальные зафиксированные температуры компонентов, L - минимальные. Но минимальная температура есть только у батареи.

Также учтена хотелка с максимальной просадкой и внутренним сопротивлением батареи в Peak stats. Алгоритм таков: ваттметр отслеживает напряжение при токе < 1A. Если ток вырос больше этой величины, он регистрирует максимальную просадку (которая будет при максимальном токе, разумеется). При этом сопротивление батареи считается только по максимальной просадке. С течением разряда максимальная просадка растет, пересчитывается, вместе с этим пересчитывается и максимальное внутреннее сопротивление батареи. Просадка отображается с разрешением 0,1в, сопротивление батареи - целое число, пусть фотки не вводят в заблуждение, просто .0 не стирается, пока просадка еще не была зафиксирована. Отображаются так, чередуются:




Еще есть что сказать о корпусе. В связи с новой платой, ионистором и прочим была полностью переделана нижняя крышка. Добавлено много ребер жесткости, место под 1/4 гайку для фотокреплений (фотокрепление можно видеть привернутым на прототип), выемки под самые высокие элементы. Благодаря этому толщина корпуса останется той же, что и планировалось - 24мм.





Был полностью переделан узел ввода проводов. Теперь это отдельная деталь, которая вкладывается и вклеивается  внутрь нижней части. В самой детали сделаны конусообразные отверстия, и сделаны неспроста. Сначала провод вставляется снизу, а потом сверху заливается термосоплями. Причем не просто пистолетом, а феном, сопли расплавляются и охватывают провод целиком - очень прочно. В высоту узел фиксации минимален - всего 6мм. И он дает дополнительную жесткость нижней пластине, что немаловажно.

Помимо этого был проведен тест на максимальное напряжение при текущем аппаратном обеспечении. Подробности - в коротком видео:



Но кому лень смотреть, скажу, что максимальное входное напряжение для ваттметра - 250В. Более чем достаточно, даже для крупного электротранспорта в том числе.

Из функционала осталось написать только само управление выходом реле по температуре. Натянуть функционал на менюшку, так сказать. В остальном - тестить все функции и вылавливать глюки, вносить мелкие правки. Ничего глобального в прошивке уже не предвидится. В целом ваттметр уже вполне прилично все считает. Сегодня приехала партия плат с последними правками, соберу несколько прототипов и буду тестить с друзьями. Не буду ничего обещать, но даже самому мне бы хотелось к нынешнему сезону уже наконец завершить разработку вместе с тестами.




acyd


Ghozt

[user]acyd[/user], зависит от номинала дросселя в преобразователе. От 20-25В стартует исправно. Фишка в том, что ему для старта нужно напряжение чуть повыше (пусковой скачок на кондерах), а потом он может работать даже вольт от 16.

алабам

а какая то защита от броска тока при включении  имеется?
По поводу вывода показателя температуры на главный экран , он ведь на постоянку не нужен.
Пусть этот показатель выводится при достижении уставки, пищит зуммером и ( или )  мигает.
А еще не вижу настройки тревоги по минимальному напряжению и максимальному току.
Такие настройки есть ЦА, и они бывают нужны.
Если уж это заявлено как убийца ЦА , то функционал у него не должен уступать ЦА.
Киев, полный привод, Поларис 500вт +Кроха 3 кВт ,Хедвей 19s2p

tmiaer

[user]алабам[/user], кому-то нужен. Если ситуация с перегревом мотора на конфиге регулярная, то полезно знать не только факт наступления перегрева, но и темп роста температуры с самого начала.

Ghozt

#167
[user]алабам[/user],
Цитироватьа какая то защита от броска тока при включении  имеется?
токоограничивающий резистор на высоковольтной линии. Емкости там небольшие, искрит не сильно даже при 250В.

ЦитироватьПо поводу вывода показателя температуры на главный экран , он ведь на постоянку не нужен.
Пусть этот показатель выводится при достижении уставки, пищит зуммером и ( или )  мигает.
Здесь я соглашусь с [user]tmiaer[/user], лучше пусть рисуется постоянно, если подключен

ЦитироватьА еще не вижу настройки тревоги по минимальному напряжению и максимальному току.
Запрос не поступал, вот и не сделано. И есть проблема с тем, чтобы сделать, места в младшем микроконтроллере осталось 9%, не факт, что влезут доп.пункты меню и функционал. Разве что отказаться от чего-то некритичного, того же показометра. Думаю, установки по  напряжению и току сделать цельночисленными, десятые доли вольт/ампер с таким функционалом неактуальны. Да и места меньше займет

p.s. если функционал делать, как в СА, то он и стоить будет, как СА. Соглашусь, что индикацию зуммером можно и добавить. Но управление газом точно пролетает мимо младшей версии, во-первых место в процессоре, во-вторых еще огромная куча времени на разработку алгоритмов управления им

алабам

Цитата: Ghozt от 09 Янв. 2019 в 06:50установки по  напряжению и току сделать цельночисленными
сов. верно.

Цитата: Ghozt от 09 Янв. 2019 в 06:50Но управление газом точно пролетает мимо
Обратная связь через газ  , когда есть пищалка превышения тока , в общем то и не нужно.
Такая фича нужна если едешь далеко , и нужно экономить топливо, но в то же время не хочешь всю задачу экономии доверить автоматике.
( например - нужно резко газнуть что бы не упасть , но в варианте жесткого ограничения через газ - это не реально , или же быстро проехать опасный перекресток...)
Киев, полный привод, Поларис 500вт +Кроха 3 кВт ,Хедвей 19s2p

Ghozt

Новая партия плат получена, и хоть и она оказалась не без косяков (в 8, мать его, раз за все время разработки - ну не умею я рисовать все правильно), но первый нормальный прототип для полевых тестов таки собран и поставлен на фэтбайк друга.

Теперь чуть подробнее о результатах тестов. Сразу после установки батарея была заряжена до упора, а потом потрачено порядка 16,6Ач из 19. В процентном соотношении это порядка 86%. Поскольку эталонного прибора не было (но ваттметр был калиброван по источнику тока), сравнить было не с чем, кроме напряжения. Напряжение в начале разряда было 67,2, в конце порядка 56в. В процентах это 83%. В общем-то схождение результатов потраченной емкости по напряжению и емкости не самое плохое, 3% расхождения вполне приемлемы, не рассчитывал создать прецезионную железку.

В принципе, первые полевые тесты прошли относительно успешно, выявилась несколько глюков: почему-то пиковый ток очень сильно завышается в статистике, но расход считается верно. Скорее всего, какие-нибудь выбросы при начале движения, когда ток максимален. Второй глюк связан был со спидометром, нереальная максимальная скорость, но там банальный дребезг контактов. Иногда есть, иногда нет. Еще есть некоторые проблемы с определением сопротивления батареи, надо дорабатывать алгоритм. Будем ездить и править остатки.

Теперь хочу поговорить о дисплеях. Как писал ранее, я думал использовать сначала купленных про запас безродных китайцев с желто-зеленой подсветкой, а потом перейти на белые от buydisplay.com. Но перехода, скорее всего, не будет. Связано это с ценой, почти в 2 раза более высокой, чем у желто-зеленых. Поэтому желто-зеленые - наше все, дешево и сердито.

Чем хорош разрабатываемый ваттметр - это тем, что подойти может практически любой дисплей 2004. Но понимание дисплея у всех производителей разное, у всех есть некоторые отличия.

Есть ровно один относительно критичный момент в выборе дисплея: положение знака градуса (°) в таблице символов. Сам знак градуса выглядит в дисплее так:



В некоторых дисплеях на его месте сидит верхняя точка, которая, в принципе, канает в качестве знака градуса все равно:



Второй момент связан с корпусом: отверстия в дисплее должны быть 3+мм, поскольку корпус стягивается винтами М3. Довольно часто встречаются 2,5мм отверстия, и их пришлось бы рассверливать, а это лишняя возня.

В итоге наковырял вот такую таблицу:



Как видно, можно использовать довольно большое количество дисплеев, но удовлетворяющих всем требованиям полностью - единицы. Так что это еще одна причина, почему я хочу использовать китайцев, код писался под них, и они удовлетворяют всем требованиям, что безродные, что от buydisplay. А также китайцы банально самые дешевые, любой дисплей из таблицы с треском проиграет в цене китайчатам.

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



Когда смотришь вживую, довольно противоречивые чувства. С одной стороны "вау, огромные цифры", с другой пиксели слишком крупные. Ну и цена такого дисплея 1-2к рублей. Небюджетно. Но, возможно, найдет применение на крупном электротранспорте, автомобилях, например, в качестве замены приборной панели.

На фотке можно заметить не фигурировавший до этого дисплей с синей подсветкой. Я решил прошерстить вопрос в другом направлении: для всяких "дизайнерских проектов™" цвет подсветки может быть критичен. Потому я  начал искать других производителей дисплеев, предлагающих иные, кроме желто-зеленого и белого, варианты подсветки. И нашел у того же buydisplay самый богатый выбор цветов, чем у кого бы то ни было:



Первые 3 доступны к покупке, а все остальные на заказ. Написал, поинтересовался, могут от 1 дисплея делать. Нестандартные цвета ожидаемо подороже, но не сильно, 7 баксов за дисплей. Так что в случае чего на заказ можно будет реализовать всякое странное, вроде фиолетовой или красной подсветки.

И еще скажу пару слов о морозостойкости дисплеев. В платах, которые пришли, сделан выход для подогрева дисплея. Но пока я еще не рисовал саму плату подогрева. В принципе, довольно неплохо помогает уменьшение частоты обновления экрана до 1 раза в секунду (стандартно раз в 0,5с), тогда все данные более-менее успевают отрисовываться и на китайских дисплеях в -10, -15 градусов. А еще я тут на практике узнал, чем же отличаются "якобы" морозостойкие МЭЛТ с заявленной температурой от -30. Подробности в коротком видео:



По прошивке. Хотелки, которые запросил [user]алабам[/user], влезли. Свободного места порядка 6%, должно хватить на остаточные правки и функционал реле по температуре, есть возможности немного ужать код.

Да, кстати. Насчет 250в как максимального напряжения ваттметра мои предположения были неверны. Просто кое-где был указан не тот тип переменной, так что ваттметр может теперь все 400 вольт показать. Но там уже возникают вопросы с толщиной изоляции проводов и прочее. Тем не менее, сама возможность будет очень кстати. Сниму новое видео с питанием прямо от розетки, когда руки дойдут

Ghozt

Цитата: acyd от 25 Дек. 2018 в 19:19Один нюанс - нельзя общую землю. Датчик обязательно должен быть двумя отдельным проводами, иначе глюки. Аквариумному дисплейчику от фазных наводок вообще сносит башню - показывает что попало и даже зависает.
Так что хорошо бы проверить этот момент.

Этот момент был таки проверен на первом же веле, на который я установил прототип. С термометрами все прекрасно, показания не скачут, температуры измеряются правильно. Единственное, что было сделано, - это объединены земли холлов и ваттметра перед шунтом, чтобы лишнего падения напряжения не было. В итоге все хорошо работает даже без 2-проводной схемы.

Возвращаясь к функционалу и прошивке. Был полностью переписан код заглавного экрана, теперь там грамотные ветвления вместо нагромождения костылей. Быстрее код не стал, но места удалось сэкономить ажно 1,5кб. Хотя я, в общем-то, и не страдал от недостатка места. Часы теперь чередуются с показометром по алгоритму, описанному в посте 162, в самом верху этой страницы.

Реализовал термостат ровно по тому алгоритму, который описал выше.



Пару изменений ввел: дельты можно задавать от -40 до +50/+100 (для ON и OFF соответственно), это важно для возможности задания отрицательных температур. Например, при заданной минимальной температуре батареи в 0 градусов (отрицательных значений тут нет) включение термостата можно выставить -15 градусов, а отключение, допустим, -5. Несколько костыльно, но отчасти это вызвано тем, что поддерживаться должны шкалы  и °C, и °F. По Фаренгейту 0 градусов - это -40 по Цельсию. Можно было бы обойтись только положительными значениями дельт в случае F, а так приходится выкручиваться. Второе изменение: при Delta OFF = 0 греть/охлаждать будет только 1 минуту, а не 5. Все же лучше задавать эту дельту, чтобы были температурные рамки. Термостат уже полностью функционален и исправно работает.

При задании target = motor ваттметр отслеживает температуры на обоих моторах, и если хотя бы на одном температура выросла больше заданной - включает реле. При задании mode = heater целью сразу же становится батарея, поскольку только у нее есть параметр минимальной температуры

Для удобства задания дельт при изменении параметра слева рисуется температура, при которой реле будет включено/выключено:



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

Неожиданно сложно оказалось написать функционал зуммера. Казалось бы, дергай пищалку, когда что-то наступит, но сделать это без конфликтов оказалось задачей нетривиальной. Пока что борюсь с конфликтами. Работает хорошо при перегреве компонентов, по току и по напряжению, не работает сигнализация включения термостата. Вдобавок ввел мигание значением, которое вышло за рамки дозволенного, т.е. например ток ушел выше заданного - пищит зуммером и моргает амперами/ваттами на экране. Тот же принцип и для температур.

Поэкспериментировал с софтварной ШИМ, хотел сделать возможность изменять яркость экрана. К сожалению, мерцает слишком сильно, никакие сглаживающие конденсаторы не помогают. Поэтому идею пришлось выкинуть из головы.

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

Ghozt

Работы продожаются. Установил еще один прототип на байк. Я очень давно вынашивал идею о том, чтобы совместить хомуты ваттметра с дополнительной трубой для крепления светотехники, места на руле е-байкам вечно недостает. Итого получилось вот так:



К сожалению, при установке фары под мини-руль не хватило вылета вперед, чтобы достаточно ее наклонить, светила в небо. Потому была поставлена сверху:



Получилось довольно миленько и функционально, на мой вкус. Разумеется, длину мини-руля можно нарастить и нацепить туда целую люстру из фар. Труба - 22мм алюминий из леруа.

По прошивке. В Peak stats плохо работали все алгоритмы, как писал выше. Я ввел примитивное ограничение, чтобы максимальный ток снимался только при скорости больше нуля. С одной стороны костыли-костылики, а с другой все алгоритмы сразу стали считать как надо. Но при таком "фильтре" не получится зажать тормоз и посмотреть максимальный ток, надо будет проехаться. Как считаете, пойдет такой фильтр?

Скажу пару слов и о пиковой зафиксированной максимальной скорости. Да, там дребезг контактов, как я писал выше. И фильтр для нее мне видится вида "если скорость в течение 1с принадлежит интервалу "скорость-5"; "скорость+5", тогда фиксировать". И есть мысли использовать какой-то подобный фильтр и для peak stats. Вообще, вопрос по фильтрам открытый, если у кого есть иное мнение - буду рад его услышать.

Я начал оптимизацию кода, и выбил порядка 5кб места. Итого сейчас есть около 7-8кб свободного места, и я бы хотел их под что-нибудь еще использовать, но без вмешательства в аппаратную составляющую. Например, есть выход на светодиоды RGBW Neopixel, сделать световую индикацию для перегревов, температур, индикацию остатка заряда сделать по цвету. Как считаете, стоит таким заниматься? Предлагайте свои мнения по световой индикации чего-либо на е-байке

Ghozt

Идея с neopixel и световой сигнализацией не зашла, значит оставлю ее на потом. Тут от одного из тестировщиков поступил другой запрос: ему не нравится, что при сбросе дневной статистики параметр cycles (циклы батареи) постоянно увеличивается на 1. И он предложил автосброс, если напряжение стало выше определенного порога. Я попутно вспомнил давнее обсуждение в соседней ветке, там эта функция была предложена уже тогда. Потому предлагаю на общее обсуждение такую реализацию: в меню добавляется пункт "порог напряжения автосброса", выше которого ваттметр будет сбрасывать статистику автоматически и добавлять к циклам +1. Но ручной режим я тоже хочу оставить, поскольку не всем этот автосброс нужен. Если порог напряжения = 0, то работает только ручной сброс и циклы прибавляются именно при ручном сбросе. Если же порог напряжения задан, то ручной сброс работает, но циклы при нем не прибавляются, а прибавляются только при автосбросе по превышению порога напряжения. Что скажете насчет такого?

Скажу еще о завышенных значениях тока. Как выяснилось, это не ваттметр врал, это из-за ложных рейтов в XPD в колеса реально суммарно вваливалось 90А вместо 50. Не поставили бы на фэтбайк ваттметр - не узнали бы об этом.

tmiaer

Цитата: Ghozt от 22 Фев. 2019 в 22:12
Идея с neopixel и световой сигнализацией не зашла, значит оставлю ее на потом. Тут от одного из тестировщиков поступил другой запрос: ему не нравится, что при сбросе дневной статистики параметр cycles (циклы батареи) постоянно увеличивается на 1. И он предложил автосброс, если напряжение стало выше определенного порога. Я попутно вспомнил давнее обсуждение в соседней ветке, там эта функция была предложена уже тогда. Потому предлагаю на общее обсуждение такую реализацию: в меню добавляется пункт "порог напряжения автосброса", выше которого ваттметр будет сбрасывать статистику автоматически и добавлять к циклам +1. Но ручной режим я тоже хочу оставить, поскольку не всем этот автосброс нужен. Если порог напряжения = 0, то работает только ручной сброс и циклы прибавляются именно при ручном сбросе. Если же порог напряжения задан, то ручной сброс работает, но циклы при нем не прибавляются, а прибавляются только при автосбросе по превышению порога напряжения. Что скажете насчет такого?
Считать суммарный слитый заряд с батарейки, делить на номинальную (заданную пользователем) ёмкость.

Ghozt

[user]tmiaer[/user], Вариант, да. Но далеко не все катают 100-0%, и количество циклов при таком подходе не будет совпадать с фактическим.

HPend

Как успехи с ваттметром? Открыл сезон, надо уже что-то ставить на велик, одинокий вольтметр на ручке газа малоинформативен.

илс

[user]HPend[/user], я взял на тестирование один экземпляр.  :wow:
Уже подключил, но не ездил.
Т.к. есть проблемы с третьим, самым главным темп. датчиком.
Проблемы в моем МК, немного писал об этом в своей теме, надо все разбирать, перепротягивать провода.
А возможно и заменить сам датчик.  :bn:
Как сделаю, напишу подробный отчет. С фотками.  B-)
=====
У меня двухмоторный конфиг, мощности на пределе, ездить без контроля температуры - нереально, можно спалить дорогое МК.  :-(

tmiaer

[user]Ghozt[/user], а как быть, когда сегодня цикл 100% глубины, завтра 50%, а послезавтра 5%? Какую глубину считать за цикл, а какую нет? А реген? Вот оттормозился я и зарядил батарейку на 0.2% - это будет цикл или нет?

А если заряжал не через ваттметр?

Посему лучше считать эквивалентные полные по общему заряду, делённому на номинал. В худшем случае при 100% глубине циклирования будут реалистичные цифры, при неполной - более оптмистичные. Т.е. насчитало 300, но за счёт неполной глубины износ как от 200 полных, допустим.

Ну мне так кажется. Потому что в ЦА, например, циклом считается ручной сброс. Поэтому цифирки вообще бестолковые, я иногда два раза за поездку подзаряжаюсь на 10-20% и каждый раз сбрасываю стату, чтоб расход верный был. В итоге получаю три цикла на счётчике, а по факту там и полутора нет.

В этом плане в ЦА не очень удобно сделано - он любой отрицательный ток считает как реген и корректирует расход и процент регена. Хотелось бы иметь возможность вручную ввести ваттметр в режим зарядки, чтобы он сматывал в обратную сторону только заряд и больше никаких цифр не трогал.

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

илс

Кстати, есть короткий вопрос к уважаемому разработчику [user]Ghozt[/user],
На фотке ниже, справа, виден неподключенный датчик переднего колеса (-40)




Ниже, темп. батареи, 21 градус, а еще ниже через дробь две темп.
Я правильно понимаю, что это темп батареи и заднего колеса (в моем случае)?

Это сделано для того, чтобы эти ключевые температуры всегда были на виду, в т.ч. при движении?
Если так, то перекину темп. батарею на темп. одного из моторов....
====
По поводу 100% буду вникать....пока не понял, почему на 47В показание 100%  :bw:
Для справки, у меня 13S т.е. 54В =100%.
Или это потому, что я на 47В нажал reset?

Ghozt

#179
[user]tmiaer[/user], да, вопрос сложный. Возможно, я все же возьму вашу методику на вооружение, благо общие Ач он уже считает. Над режимом зарядки я пока что крепко думаю. Отличить реген от зарядки просто: скорость равна нулю при зарядке. Единственное ограничение: бмс должна быть симметричной

[user]илс[/user], все немного по-другому
cn - температура контроллера
bt - температура батареи
А через дробь температуры мотор-колес.

При начале движения температура контроллера и часы пропадают, также пропадает лейбл "bt" у температуры батареи. Итого в движении на экране остаются только температуры моторов и температура батареи.

Цитата: илс от 04 Апр. 2019 в 01:16Или это потому, что я на 47В нажал reset?
именно поэтому. Показометр несколько бесполезен, если не выкатывать в 0 каждый цикл. Надо вводить дополнительное ограничение, чтобы он сравнивал напряжение с батареей, и если разлет, допустим, больше 5 - руководствовался батареей в ненагруженном состоянии (чтобы цифры не скакали при езде)