как строится регулятор, я, пожалуй, знаю лучше тебя (уж, извини за эти слова). с программным регулятором у меня всё получается, работает он в лучшем виде, как и должен работать. но проблема не в регуляторе, а проблема в высокой чувствительности мосфета по затвору малейшее изменение напряжения на затворе приводит к сильному изменению тока. я могу делать приращение, хоть по 1%, хоть по 0,1%, но тогда тебе придется очень долго ждать, когда регулятор, такими мелкими шажками, выйдет на заданный ток. ни меня, ни кого другого это не устраивает. вот именно это и является препятствием для применения программного регулятора. я сделал приращение по 5%, и этого оказалось слишком много, идут скачки ширины импульса туда-обратно. а мельче делать шаг я не стал по вышеуказанной причине. поэтому я прекращаю (вчера прекратил) заниматься программным регулятором. но зато полный ноль проблем со стабилизатором на внешнем ОУ. на плате у меня уже предусмотрена разводка второго ОУ для стабилизации тока. и тут в результате испытаний выяснилось, что ОУ в лм358 при 5-вольтовом питании не в состоянии дать на выходе 4 Вольта (для 5 Ампер). поэтому пришлось опять вводить изменения в схему и в прошивку. кстати, и у Павла в его схеме с усилителем (схема на 50 Ампер), 50 Ампер невозможно измерить никогда, так как ему нужно усилить вообще до 5 Вольт, а ОУ на своем выходе сможет давать только меньше 4 Вольт. так вот, пришлось мне снизить усиление с шунта до 4 (5 Ампер == 2 Вольта). но зато при непредвиденных скачках тока АЦП сможет корректно измерить ток.
возможно, на досуге, я еще поиграю с программным регулятором, и попробую сделать такой алгоритм, чтобы сначала подходить к заданию тока "крупными" шагами, а при приближении к заданию автоматически переходить на "мелкие" шаги.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, смею заметить "Мы в ответе за тех, кого приручили (C) Антуана де Сент-Экзюпери" Может, все же, следует сначала закончить с версией 10V-100V без стаб. тока разрядки и выложить ее, тем более что она как бы уже протестирована немного.
я могу делать приращение, хоть по 1%, хоть по 0,1%, но тогда тебе придется очень долго ждать
Долго это сколько? Неужели такая маленькая скорость работы программы? Я думал что хватит и 1 миллисекунды чтобы сделать приращение, да даже если 10 мс, то хватит с головой, от 0% до 100% дойдет менее чем за секунду, чего вполне достаточно, это же не лабораторный блок питания.
Также не совсем понятно
Starichok51 писал(а):
малейшее изменение напряжения на затворе приводит к сильному изменению тока
У нас же там ШИМ, а не аналоговое напряжение. Мосфет или полностью открыт или полностью закрыт, никаких промежуточных значений.
И наверное стоит задавить емкостями ОУ, чтобы динамика у него не была очень большая. А то при большой динамике(а тут вообще нет емкостей, она очень большая), когда у нас транзистор открыт, ток идет в импульсе очень большой, МК резко понижает заполнение(не знаю правда успевает ли он, зависит от частоты ШИМ), в результате происходят колебания. Может в этом проблема?
чтобы прибавить приращение, хватит несколько микросекунд. а на измерение тока требуется 1 секунда. и пока через 1 секунду программа не узнает новое значение тока, она не может принять решение, что с током делать...
у НАС ТАМ ФИЛЬТР, который из ШИМ делает "гладкий" аналоговый сигнал. ты попробуй представить себе, какой ток потечет через полностью открытый мосфет, когда нет в стоке никакого резистора.
я, как раз, закончил вносить изменения в программу, схему и плату. даю архив на версию 2_02, без стабилизации тока. в архиве также есть отдельный файл для EEPROM. после прошивки программы можно потом прошить ПЗУ.
плату я в этот раз выполнил отдельным модулем. шунта, мосфета и нагрузочного резистора на ней нет.
Теперь я понимаю в чем проблема и это действительно препятствие в программной регулировке тока. Нужно искать другое решение...
Starichok51 писал(а):
у НАС ТАМ ФИЛЬТР, который из ШИМ делает "гладкий" аналоговый сигнал.
В таком случае нужно ШИМ преобразованный в аналоговое напряжение брать в качестве опорного и сравнивать его с напряжением, которое мы получаем с преобразователя ток=>напряжение на ОУ. Сравнивать с помощью еще одного ОУ и с его выхода уже управлять мосфетом. Тогда не будет "на измерение тока требуется 1 секунда". По типу как сделано в лабораторных БП.
Только это дело нужно калибровать, чтобы программа знала, что заполнение 20% это ток 1 ампер, а 50% это "такой то ток".
Схема в архиве не старая? Не вижу отрицательного питания для операционника. Да и на плате тоже 4 вывод подключен к земле. И еще на плате земли разъеденины. Используется внутренняя перемычка в меге?
схема совершенно новая. и если сравнишь, то найдешь несколько отличий.
а я уже отказался от отрицательного питания. причину наличия "лишнего" напряжения я нашел уже давно. и оказалось до смешного просто. у меня "местное" освещение сделано на моем обратноходе без всяких фильтров и снабберов. была сильная наводка на схему усилителя. и даже с диодом на выходе ОУ было несколько десятков мВ. выключил освещение, и без наводки всё пришло в норму. потом убрал диод, и получил на выходе, как у Алексея, 1,8 мВ.
да, используется внутренняя перемычка. не зря в МК сделана вторая "земля" около аналоговых измерений (АЦП). как должно быть тебе известно, измерительные и силовые цепи должны идти раздельно. но возможно, что я поспешил убрать справа "землю" для подключения шунта и минуса батареи, так как теперь "силовой" ток затвора будет течь по измерительной земле через внутреннюю перемычку. а нагрузочную способность этой перемычки я не знаю. так что лучше пририсовать справа "землю" для подключения шунта и минуса батареи, чтобы затворный ток шел через нее.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
На схеме номиналы у R9 и у Bat1 только с толку сбивают. R9 - это Нагрузка. Вот, на скорую руку поправил для себя схему, так мне нагляднее. А на схеме с R14 пунктирные линии на входа 5 и 6 LM358 для чего, когда и как используются? И текстовку про меню в архив не положили, трудно в постах найти будет некоторым.
себе можешь поправлять и схему и плату, как тебе будет угодно и как тебе будет удобно.
"текстовку" по меню я давал в теме неоднократно. а найти - не трудно. достаточно почитать тему пришел на форум - нужно форум читать, а не "хавать" готовенькое " на блюдечке"...
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, ну это как бы правило "хорошего тона" выкладывать архив проекта полностью, схему, плату, прошивку, исходники и описание, хотя бы краткое, с изменениями по версиям. ИМХО.
З.Ы. а отследить по постам действительно трудно, так как в постах часто указано что ......бла .....бла файл удалил, так как косячный и к чему относится текст этого поста, х.з.
ладно, для особо "непонятливых" перерисовал схему, где в рамках выделил измерительную и силовую части. плату изменил, чтобы уж точно через внутреннюю перемычку МК между ножками "GND" не тек "большой" ток. в прошивку тоже внес небольшое изменение - 3 "бипа" теперь будут подаваться только когда есть пуск замера. а то при подключении аккумулятора раздавались ложные бипы окончания замера. написал текстовку по работе с кнопками. и дал исходник. кто сможет разобраться и ему будет польза - не жалко. а кто не сможет, тому исходник останется бесполезным...
Ассемблер! Бальзам на душу. Да еще и хорошо прокомментированный. Чуть больше писать, зато - всегда знаешь, что делает контроллер. Прошу прощения за оффтоп.
и следующий проект, со стабилизацией. и естественно, с режимом 10 Вольт. про 5 Вольт - забыли.
Vladlog писал(а):
зато - всегда знаешь, что делает контроллер
ты не правильно сказал. зато всегда знаешь, что ты когда-то сделал, а потом успел забыть подробности. и комментарии тебе помогут вспомнить, что ты там натворил...
Вложения:
Комментарий к файлу: со стабилизацией AccuTest2_1.rar [38.61 KiB]
Скачиваний: 442
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
комментарии тебе помогут вспомнить, что ты там натворил
Это - 100%, но я имел ввиду не комментарии, хотя сам всегда их тоже делаю СпойлерLIST p=12F675 #include <P12F675.INC> ;processor specific variable definitions __CONFIG(_PWRTE_ON & _WDT_OFF & _CPD_OFF & _CP_OFF & _BODEN_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF)
;---------- ; Определения #define BFOG GP2 #define LFOG GP0 #define BSTOP GP3 #define LSTOP GP5 #define SPK GP4 #define LREAR GP1 #define ttim .98 ; зависит от скорости тиков таймера, у нас тикает ~2000 раз в сек. ; при 98 получается обнуление счетчика на ttimer 20 раз в секунду. #define ttim2 .20 ; время удержания клавиши для регистрации долгого нажатия в 1/20 сек. #define BFOGP 0 ; флаг нажатой кнопки Фары #define KeyAct 1 ; флаг активности опроса клавиатуры #define BFOGL 2 ; флаг долгого нажатия кнопки Фары #define LFOGON 3 ; флаг включенных фар #define BeepEn 4 ; флаг разрешения пищалки #define BSTOPP 6 ; флаг нажатой кнопки Фары #define SigEn 7 ; флаг включения заднего хода #define LEDLL .20 ; младщий байт времени свечения фар или заднего хода до выключения (в 1/20 сек.) #define LEDLL2 .90 ; старший байт времени свечения фар или заднего хода до выключения (в 1/20 сек.) ; итоговое время в секундах = (LEDLL/20)*LEDLL2 #define KeyActiveC .100 ; время опроса клавиш с момента нажатия на любую (в 1/20 сек.) #define BeepP .10 ; Период пиков сигнала заднего хода в 1/20 сек. ;---------- ; Переменные CBLOCK 20h flags:1 ; флаги. bit0 - если 1, то нажата кнопка Фары ; bit1 - активность клавиатуры ; bit2 - если 1, то кнопка Фары долго удерживается ; bit3 - если 1, фары включены ; bit4 - если 1, то пишим ; bit5 - если 1, значит пауза между пиками ; bit6 - если 1, то нажата кнопка STOP ; bit7 - если 1, то влючен задний ход W_TEMP :1 ; временные, для сохранения регистров во время S_TEMP :1 ; выполнения прерывания timer:1 ; уменьшается каждые 0,5 секунд при работающем TMR0 ttimer:1 ; временная переменная ttimer2:1 ; временная переменная temp1:1 ; временная переменная LEDL:1 ; переменные для отсчета времени до ухода LEDL2:1 ; в режим энергосбережения KeyActive:1 ; для KeyActiveC flags2:1 ; вспомогательная для устранения дребезка контактов ENDC ;---------- bank0 MACRO bcf STATUS,RP0 ENDM bank1 MACRO bsf STATUS,RP0 ENDM ;---------- ; Макрос инвертирует вывод пищалки при разрешенном бите Beep MACRO LOCAL NoBeep, Exit ; объявление локальной метки, чтобы не возникло конфликтов в основной программе banksel GPIO btfss flags,BeepEn goto NoBeep btfsc GPIO,SPK goto NoBeep bsf GPIO,SPK goto Exit NoBeep: bcf GPIO,SPK Exit: ENDM ;---------- ; Макрос считает время до отключения всего и по окончании все тушит PwrSave MACRO LOCAL Exit movf flags,W ; проверяем наши флаги btfsc STATUS,2 ; все флаги сброшены? goto Exit decfsz LEDL ; считаем goto Exit movlw LEDLL movwf LEDL decfsz LEDL2 goto Exit banksel GPIO ; время истекло, тушим все bcf GPIO,LFOG ; выключаем все светодиоды bcf GPIO,LREAR ; чтобы экономить батарею при забытой игрушке bcf GPIO,LSTOP ; с включенными световыми приборами clrf flags ; и сбрасываем все флаги чтобы проц. уснул Exit: ENDM ;---------- ; Функция фиксации нажатий кнопок с защитой от дребезга ; На входе проверяемая кнопка, на выходе W=0 и флаг Z=1 кнопка не нажата, W=1 и ; флаг Z=0 - нажата GetKey MACRO KEYB LOCAL gkey1, gkey2, gkey3, gkey4, gkey5 gkey3: banksel GPIO btfss GPIO,KEYB ; кнопка нажата? goto gkey1 ; нет - проверяем на отжата btfsc flags2,KEYB ; в предыдущей проверке она была нажата? goto gkey2 ; Да - выходим с кодом 1 bsf flags2,KEYB ; Нет - запоминаем состояние goto gkey3 ; и проверяем все снова gkey2: movlw 1 xorlw 0 ; без этого не будет меняться флаг Z goto gkey4 gkey1: btfsc flags2,KEYB ; в предыдущей проверке она была отжата? goto gkey5 ; Нет - clrw ; Да - выходим с кодом 0 xorlw 0 ; без этого не будет меняться флаг Z goto gkey4 gkey5: bcf flags2,KEYB ; Нет - запоминаем состояние goto gkey3 ; и проверяем все снова пока не устаканится gkey4: ENDM ;---------- ; Точка входа org 0 ;адрес точки входа при старте и любом сбросе goto start ;---------- ; Обработчик прерываний org 4 ;адрес точки входа прерываний bcf INTCON,GIE ; запрещаем прерывания Push: ; сохраняем регистры перед обработкой прерыванияа ассемблер. В смысле, что написал, то и делает контроллер. Ну. Не буду оффтопить, с интересом читаю эту ветку.
конешно, комментарии помогают не только написавшему, но и другим людям, например, тебе, понимать, что делает программа. а если без комментариев, то не зря говорят, что легче самому написать заново, чем разбираться в чужом тексте...
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
ничего. у меня для этого еще не скоро время появится. начались садово-огородные работы. да и мы с Алексеем занялись см версии 2_1 (со стабилизацией). во-первых, Алексей попросил сделать сигнал для реле, которое будет переключать входной делитель 10/100 Вольт. во-вторых, появилась идея сделать несколько (например, 5 штук - 0,2; 0,5; 1,0; 2,0; 5,0 Ампер) предустановленных заданий тока, чтобы на каждый типоразмер аккумулятора не изменять каждый раз единственный параметр задания тока. и пока это писал, понял, что и для напряжения отсечки тоже не мешало бы иметь несколько предустановленных значений. например, 0,8; 1,0; 2,7; 3,0; 5,4 Вольта. последнее значение (5,4) для 6-вольтовых кислотных аккумуляторов. и это усовершенствование - для меня первоочередная работа. а измерение сопротивления - на последнем месте.
версию 2_02, без стабилизации, дальше развивать я не собираюсь, так как без стабилизации для меня уже бесперспективное направление.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения