Это здОрово !
Только наверно есть смысл не пересылать сам, прошитый контроллер, а, по возможности совместно,
написать код прошивки, и прошивать уже на местах -- всё равно программатор будет нужен полюбому.
А алгоритм должен получиться -- проще некуда :
- инициализируем микроконтроллер, прописываем регистры и прочие подготовительные дела, объявляем переменные.
var OldCurrent = 7FH; // значение тока от предыдущего замера
var NewCurrent = 7FH; // значение тока от свежего замера
var SignStep = 1; // знак действия по изменению скважности ( 0 / 1 )
var SignCurrent = 1; // знак изменения тока после действия ( 0 / 1 )
// вроде для начала и хватит ))
- Устанавливаем ШИМ , например, 7F, (если он восьмибитный) или так же , половинку при другой битности.
- SignStep = SignStep ⊕ SignCurrent ; // (если такая запись позволительна)
if (SignStep == 0) {ШИМ = ШИМ - 1;}
else {ШИМ = ШИМ + 1}
или наверно изящнее так:
ШИМ = ШИМ + (SignStep * 2 - 1)
и наверно есть смысл сделать проверку, чтоб значение ШИМ не выскакивало за пределы 0 -- FF и не стало носиться по кругу в случае аппаратного сбоя.
- OldCurrent = NewCurrent //
выдерживаем паузу, чтоб успокоились переходные процессы
делаем замер тока, значение записываем в переменную NewCurrent
- if (NewCurrent > OldCurrent) { SignCurrent = 1; }
else { SignCurrent = 0; }
- goto метка 3; // если безусловный переход на метку допустим в языке программирования, в противном случае организовать рекурсивный вызов функции
Вот и всё.
Ток, истинное его значение, собственно и не нужно : достаточно просто получать значения из АЦП
и тупо сравнивать его с замеряным в предыдущем цикле и получить знак результата сравнения.
Могу попытаться написать более конкретно на javascript -- он по синтаксису и прочим заморочкам очень похож на C,
портировать с него на С не должно составить особого труда ( а то и вообще никакого ))).
Дальше можно развить тему, добавить индикацию, сбор статистики, слежение за режимом заряда аккумулятора,
связь с компом и т. д.