Простое зарядное с десульфатацией на Ардуино.

Автор Skela, 10 Май 2023 в 13:53

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

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

neid

Цитата: AndyNigmatec от 30 Дек. 2023 в 11:29Доброго!
В целом вас понял, но до игрушек на СТМ пока не дорос )))
Вот немного инфы где почитать/посмотреть - кто уже прошел по этой дорожке.
Ссылка (там и мои мысли по INA226) и диссертация Чупина обязательна к прочтению, этот минимум - думаю поймете что реально измеряет, а что дает иллюзию.
Для вечернего просмотра
и
остально е у него найдете сами, там есть еще немного экспериментов.

Цитата: AndyNigmatec от 30 Дек. 2023 в 11:29Доброго!
В целом вас понял, но до игрушек на СТМ пока не дорос )))
Насчет выделенной мной цитаты: я же прикидывал время мзмерения с оверсэмп и без, у меня вышло: 110-120 мкс на одно измерение, округлим до 150 мкс, итого 300 мкс на оба измерения.
По указанному выше алгоритму расчета мне нужно сделать измерение непосредственно перед переключением и по истечении нужной задержки после, для реализации чего устанавливаю период меандра в 4 раза больше нужной задержки, разбиваю его на 40 частей (т.е. чтобы в мой период задержки укладывалось 10 тиков таймера) и в такой конфигурации получаю: что для задержки 5 мс частоту таймера мне нужно выставить 2 кГц, т.е. срабатывает он каждые 500 мкс - а оценка времени измерения даже с запасом - 300 мкс ... в принципе все укладывается)))
Вот с точностью 10-бит ацп - да, тут беда конечно
Изучайте работу таймеров, синхронизация таймеров и каскадный запуск таймеров - это даст вам полное понимание как ориентироваться во времени и от чего отталкиваться. 100Гц это период в 10миллисекунд(mS), при 108микросекунд(uS) на измерение(моя цифра) я могу измерить 92 раза. Теперь посмотрим на осциллограмму тока , в какой точке и сколько раз с такими измерениями(108uS) мы сможем измерить, битности ацп  в 10 бит нам хватит, а времени?

AndyNigmatec

За ссылки спасибо, почитаю на досуге (не все же время бухать :-D)

А по поводу вашего графика - а что там не так, все красиво, половина периода 5 мс, за это время вы успеваете замерить 46 раз.
В моем варианте столько замеров и не нужно, мне нужны два замера (ток и напруга) непосредственно перед отключением подачи тока + одно измерение напруги через время задержки после этого, поэтому реализовал сие у себя так:
- подача тока (наш меандр) идет с периодом в 4 раза бОльшим чем время задержки для измерения (т.е. для задержка 5 мс период сигнала 20 мс)
- скважность меандра сдвинута (Duty cycle - 0,7 - высокий уровень 14 мс, низкий 6 мс)
- сам этот сигнал генерируется в таймере с периодом в 10 раз меньшем чем время задержки и с расчетом чтобы в этот период (1/40 от периода меандра) ардуинко успевала сделать замер(ы) (т.е. для 5 мс задержки таймер тикает с периодом 0,5 мс)

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

Это при измерении "на заряде" т.е. при подаче на акум сигнала (тока), второй вариант полностью аналогичен с той лишь разницей что измерение ведется не на подаче тока, а на разряде на фиксированную нагрузку (некое сопротивление).

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

Кстати, смотрю на ваш график - красота, это у вас цифровой ослик имеется или другое что рисует?

neid

Цитата: AndyNigmatec от 30 Дек. 2023 в 13:01а что там не так, все красиво, половина периода 5 мс, за это время вы успеваете замерить 46 раз.
Ну эта картинка снята с шунта при нагрузке сопротивлением 10Ом и ШИМ сигнале в 1кГц 50% скважность. Я хотел сказать, что измерить у вас получится один раз на вершине пика тока, и то с горем по полам.

Цитата: AndyNigmatec от 30 Дек. 2023 в 13:01Кстати, смотрю на ваш график - красота, это у вас цифровой ослик имеется или другое что рисует?
Ослик, Disco 2, но он для диагностики авто заточен производителем и ПО, сигналы до 500кГц можно смотреть.

Цитата: AndyNigmatec от 30 Дек. 2023 в 13:01- подача тока (наш меандр) идет с периодом в 4 раза бОльшим чем время задержки для измерения (т.е. для задержка 5 мс период сигнала 20 мс)
- скважность меандра сдвинута (Duty cycle - 0,7 - высокий уровень 14 мс, низкий 6 мс)
- сам этот сигнал генерируется в таймере с периодом в 10 раз меньшем чем время задержки и с расчетом чтобы в этот период (1/40 от периода меандра) ардуинко успевала сделать замер(ы) (т.е. для 5 мс задержки таймер тикает с периодом 0,5 мс)
Не особо вник, хоть и пытался как реализуется у вас синхронизация, скажу только скважность должна быть 50%, и период у вас тогда получается 20mS - это 50Гц. Не пойму где все это пишется, в Arduino IDE, с применение analogRead()? Если так то все это выкидывайте, ставьте хотя бы CodeVisionAVR, даташит на Atmega328P в руки, читать и вникать как все работает АЦП и таймеры.

Цитата: AndyNigmatec от 30 Дек. 2023 в 13:01еденичный замер превращается в 16 следующих друг за другом, такой вариант не так однозначен конечно (зато прибирает случайный шум),
С таким методом вы копите ошибку, нужна сортировка макс и мин значений и не только... Если словил помеху и её измерили, то полетит все коту под хвост, поэтому и сортировка нужна, фильтрация значений, более долгие измерения для накопления данных с их последующей обработкой!
С наступающим Новым Годом! :drink:

edw123

Цитата: AndyNigmatec от 30 Дек. 2023 в 11:29В целом вас понял, но до игрушек на СТМ пока не дорос
А чем так отличается от Ардуино? :exactly: Прям в той же самой IDE можно писать.

neid

Цитата: edw123 от 30 Дек. 2023 в 18:56Прям в той же самой IDE можно писать.
через пень колоду, если светодиодиком поморгать - да, можно.

edw123

Цитата: neid_nnov от 30 Дек. 2023 в 19:00через пень колоду, если светодиодиком поморгать - да, можно.
Так любая "легкоосваиваемая система" не суперэффективна, но зависимость от мощности процессора вполне нормальная. Главное не надо ничего нового разучивать. И ассемблерные вставки можно делать запросто.

AndyNigmatec

Цитата: neid_nnov от 30 Дек. 2023 в 18:31Не пойму где все это пишется, в Arduino IDE, с применение analogRead()? Если так то все это выкидывайте, ставьте хотя бы CodeVisionAVR,

Да, в ней самой ... я ж не программист, так любительствую на досуге, если честно то боль-мене вникать стал тока с месяц назад )))

И да, почти analogRead(), вернее позаимствовал ускоренный ее вариант:

// ВНИМАНИЕ! Нужное опорное установлено DEFAULT, можно изменить на своё
unsigned int analogReadFast(byte pin)
{
  pin=(( pin<8 )? pin:pin-14); //analogReadFastdFast(2) = analogReadFastdFast(A2)
  ADMUX=(DEFAULT<<6) | pin;  //set analog MUX & reference
  bitSet(ADCSRA,ADSC);       //start
  while (ADCSRA&(1<<ADSC));  //wait
  return ADC;                //return result
}

neid

Цитата: AndyNigmatec от 30 Дек. 2023 в 21:47И да, почти analogRead(), вернее позаимствовал ускоренный ее вариант
А теперь сравним с кодом с код генератора CodeVisionAVR АЦП на прерываниях на два порта(канала):
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 1
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
}
Все ж лучше изучать AVR с азов и даташитов, никогда не разберешься в библиотеках Arduino, если не знаешь С++ и камень.

AndyNigmatec

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

AndyNigmatec

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

Cyberpapa

Цитата: AndyNigmatec от 25 Янв. 2024 в 22:57а вот измерять тогда можно будет сразу с пеньков аккума
Без усилителя измерять напряжение непосредственно с выводов АКБ не получается ?

AndyNigmatec

#173
Цитата: Cyberpapa от 26 Янв. 2024 в 01:42Без усилителя измерять напряжение непосредственно с выводов АКБ не получается ?

- нет, там конструкция зарядника такова что "-" на батарее не равно "земля" на схеме ... в итоге пока меряю от "земли" + вношу поправки с учетом тока, который в свою очередь не так чтоб очень точен (ASC712).

добавлено: весь смысл этой ad620 вижу именно в уходе от привязки к "земле" ... может туплю, но я любитель, не спец, практика покажет ))

Cyberpapa


usavich

Цитата: Cyberpapa от 26 Янв. 2024 в 01:42Без усилителя измерять напряжение непосредственно с выводов АКБ не получается ?
Намёк на четырехпроводное подключение?
ЕздюкЪ на батарейках! Без смс бмс и регистрации. Заряжаюсь от солнца.

AndyNigmatec

Ну да, отдельными ненагруженными проводками напряжение мерить )))

Накопал схему этого модуля, вроде как могу снимать напругу на S+ S-, на выходе же уже имею сигнал относительно "земли" (с которым ацп ардуинки и работает)

Cyberpapa

Цитата: usavich от 26 Янв. 2024 в 11:51Намёк на четырехпроводное подключение?
Не совсем четырехпроводное. Частенько провожу эксперименты с АКБ и с различными электронными приблудами, приходится согласовывать измерительные цепи, что занимает много времени. Когда приспичит провести какой-нибудь сложный эксперимент - думаю прикрутить 4-6 шт вольтметров с амперметрами, например INA 226 и на каждой микросе установить гальваническую развязку I2C. В таком варианте вообще не надо думать о согласовании. Цепляй вольтметры/амперметры в любые точки без всяких заморочек и получай результат.

AndyNigmatec

ммм ... INA226 вроде же только передает по I2C на МК, при этом никакой гальванической развязки не получается, да и напряжение она относительно "земли" меряет насколько помню.
Или вы там оптроны еще "по дороге" ставите?

Cyberpapa

#179
Цитата: AndyNigmatec от 26 Янв. 2024 в 22:53Или вы там оптроны еще "по дороге" ставите?
Почти так.
Есть специализированные микросы гальванической развязки шины I2C, делающие то же самое, что делают оптроны. Даже развязывают землю и питание. Т.е. получаем вольтметр/амперметр полностью гальванически изолированный от Ардуино.  Однако осуществляется обмен данными камня с вольтметром.

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