|
|
|
|
Так я же говорю, у меня не все так просто. У меня сопротивление нагрузки (аккумулятора) может лежать в широких пределах, ток тоже может меняться от 80 мА до 1,62А - в зависимости от выбранного режима (у меня стабилизатор ТОКА а не напряжения), выходное напряжение может быть от 0,8 до 1,5 В. |
|
|
Леха: Щас сделано что-то типа пропорционального регулятора, но он не устойчив. Пожалуй Вам хватит ПИ регулятора. Предсказывать будущее при зарядке аккумулятора - дело не благодарное. |
|
|
Кароче, посмотрел зависимость тока от значения регистра OCR и вот что получилось:
Красный график - это ток. Если OCR=50, 1 единица ШИМа соответствует изменению тока примерно на 5 мА. При OCR=50 ток около 280 мА, дальше наклон прямой резко изменяется и точность уже составляет 80 мА на 1 единицу ШИМа. А точность измерения тока у меня 3 мА. Выходит, я никогда не смогу получить такую точность на больших токах и стабилизатор всегда будет "дергаться" с амплитудой как минимум 80 мА. |
|
|
Леха: Выходит, я никогда не смогу получить такую точность на больших токах и стабилизатор всегда будет "дергаться" с амплитудой как минимум 80 мА. Ну и пусть дёргается, усредняйте величину зарядного тока да и всё... Какая разница... аккумулятору всё равно будет ток чисто постоянным или будет дёргаться на 80мА. Есть вариант перейти на 10разрядный ШИМ но тогда у вас частота упадёт... |
|
|
10-разрядный ШИМ не выдет - у меня 4 канала, а там некоторые таймеры урезанные и не позволяют делать произвольную разрядность ШИМа, да и частоту меньше 30 кГц опускать нельзя - дроссели звенеть начнут и все такое... Щас у меня 31,25 кГц. Кароче, щас сделал так: dI=(charge_current[N_canal-4]-Current_ADC); //Вычисляем ошибку if(charge_current[N_canal-4]>CURRENT_mA(220)) PWM=PWM+(dI>>5); else PWM=PWM+(dI>>2); Это типа учитывается перегиб на графике, чтобы на малых токах точность не терять. Пойду прошивать... |
|
|
Леха: Щас у меня 31,25 кГц. А какая величина индуктивности дросселя? |
|
|
90 мкГн |
|
|
Леха: 90 мкГн Вот от индуктивности и надо плясать. По тому , что сам шим является по сути источником тока , а не напряжения, при условии , что на массу от дросселя стоит диод. Ведь дроссель , на частоте преобразования имеет довольно большое индуктивное сопротивление . |
|
|
По поводу ПИД регулятора. Если не брать простую форму (удобную для вычисления но неудобную для подбора коэффициентов АБС и не удобную для понимания. Для более подробной информации обратитесь к аппноуту AVR221: Discrete PID controller от Атмела, там есть формула ПИД регулятора: u(n)=Кп*е(n)+Ки*S([k= 0 до n] от e(k)) + Kд*(y(n)-y(n-1)) Также можно почитать микрочиповский аппноут AN964. В этой формуле u(n) - выход регулятора на n-ом шаге, е(n) - ошибка на n-ом шаге? y(n) - значение регулируемой величины на n-ом шаге. Кп, Ки, Кд - соответственно коэффициенты пропорциональной, интегральной и дифференциальной частей. То что Вы говорите (насчёт ненулевого нулевого выхода ШИМ) будет обеспечичиваться интегральной частью. Её ещё часто называют смещением (bias), обязательно ограничивают сверху и снизу обычно на уровне диаппазона регулирования или чуть больше. Есть ещё одна формула, о которой я говорил в начале: ControlOutput = ControlOutput + ControlDifference[0] x PIDCoefficients[0] + ControlDifference[1] x PIDCoefficients[1] + ControlDifference[2] x PIDCoefficients[2] Где ControlDifference[n] - разница между уставкой и текущим значением параметра, т.е. ошибка регулирования (dX) на шаге n, где n=0 принимается за текущий щаг. Коэффициенты рассчитываются так: Modified PID coefficients from regular PID form to filter-like PID implementation: PIDCoefficients[0] = Kp + Ki + Kd PIDCoefficients[1] = -Kp - 2Kd PIDCoefficients[2] = Kd Эта формула более удобна для расчётов, но менее удобна для контроля и понимания, т.к. в ней связаны уже все каналы воедино. Формула очень удобна на MACах. Желательно чтобы период ПИД регулятора был на порядок меньше самого быстрого звена в контуре регулирования, точнее самой быстрой постоянной времени. В крайнем случае быстрее этой величины. По поводу того, что не хватает битов ШИМа, можно сделать так, добавив ещё пару бит ШИМ: Допустим выход регулятора Y,Возможное ближайщее значение ШИМ y, разница между возможным ближайшим значением ШИМ и Y обозначим как DY. DY может принимать значения от -2 до +2. Разобьём период между двумя выборками АЦП на 4 цикла 0 1 2 3 DY 0 1 2 3 -2 y-1 y y-1 y -1 y y-1 y y 0 y y y y +1 y y+1 y y +2 y+1 y y+1 y В зависимости от знака и значения дифференциальной составляющей можно перемещать слоты (y+-1) левее или правее в средних строчках. Если же период АЦП и период ШИМ совпадают, то особого смысла заморачиваться нет - регулятор сам всё отрегулирует. если правильно настроен. По данной аналогии можно увеличить количество циклов разбиения и добиться ещё большей точности. |
|
|
Но стабилизатор все равно дергаться будет. Залил я прошивку, явного возбуждения вроде нет, но за счет интегральной составляющей, которая накапливает ошибку за достаточно длительное время, стабилизатор дергается +/- на 1 шаг ШИМа, который, как оказалось, чуть ли не 150...200 мА (!). Это хорошо видно при включении заряда, когда ток плавно растет в течение первых минут. И видимо, от этого никуда не уйти... Правда была такая мысль: сделать так, чтобы он дергался с такой скоростью, что за счет индуктивности и емкости ток не успевал бы изменяться и эти неровности сглаживались бы, но пока не вышло... Кстати АЦП у меня работает на минимальной скорости, чтобы была максимальная точность при измерении напряжений на аккумуляторах. |
|
|
|
|