Главная » Статьи » Proton PICBasic |
ЗУ для 2 АКБ от фотоапарата
Принесли на ремонт ЗУ![]() Во время ремонта был получен отрицательный результат . ТО БП не запускался , то управление не работало . Было принято решение - сделать свое . После поисков в сети остановился на этом ![]() Повторив его , так и не понял логику его работы. Попробовал еще одну прошивку с сайта. Результат был такой же . Так как еще не работал с PIC12 , остановил свой взгляд на PIC16F676. Когда то купленым под другой проект С помощю Matrix252005 ( Николая ) PIC был сконфигурирован и я приступил к работе. Был выбран такой алгоритм работы: если поключен АКБ , напряжение двоих АКБ больше 1,2В и нажата кнопка Старт переходим в подпрограмму Разряда, а оттуда в зависимости от напряжения в подпрограмму Предзаряда или Заряда. При выбраном токе заряда время до окончания примерно 9 часов. В любом режиме контролируеться напряжение АКБ , если стало меньше 1,2В переход на Старт В результате была нарисована схема. Отличием от оригинальной схемы является только применение микроконтроллера. Изменить ток заряда можно, изменив номинал разистора R1 в ту или иную сторону . Обязательно также скорректировать и время заряда. На LM317T собран обычный стабилизатор тока. IRF540 ключ на разряд АКБ. Тоесть появилась 1 на затворе разряжаем АКБ. Реле добавлено для отключения АКБ при пропадании сети. Везде в программе, где указано напряжение имееться ввиду что это напряжение двоих аккамуляторов соедененных последовательно . Пользоваться ЗУ просто. Включили в сеть, подсоединили АКБ и нажали кнопку Старт. Если в любой момент вытащить АКБ, устройство вернется в начальное состояние. Схема: ![]() Код:
Код Device = 16F676 ' Config WDT_off, pwrte_on, mclre_off, intrc_osc_noclkout Xtal = 4 ' '-------------------------- Натройки АЦП ------------------------------------ Declare Adin_Res 10 ' Declare Adin_Tad FRC ' Declare Adin_Stime 50 ' '-------------------------- OPTION_REG ---------------------------------------- Symbol PS0 = OPTION_REG.0 ' Symbol PS1 = OPTION_REG.1 ' Symbol PS2 = OPTION_REG.2 ' Symbol PSA = OPTION_REG.3 ' Symbol T0SE = OPTION_REG.4 ' Symbol T0CS = OPTION_REG.5 ' Symbol INTEDG = OPTION_REG.6 ' Symbol NOT_RBPU = OPTION_REG.7 ' '-------------------------- INTCON -------------------------------------------- Symbol RBIF = INTCON.0 ' Symbol INTF = INTCON.1 ' Symbol T0IF = INTCON.2 ' Symbol RBIE = INTCON.3 ' Symbol INTE = INTCON.4 ' Symbol T0IE = INTCON.5 ' Symbol PEIE = INTCON.6 ' Symbol GIE = INTCON.7 ' ADCON0 = %10000000 ADCON1 = %00110000 ANSEL = %00000001 CMCON = %00000111 TRISA = %00000001 TRISC = %00000001 Dim BAT As Float ' значение АЦП Dim VA As Float ' напряжение АКБ Dim BIG As Dword ' Dim BIG1 As BIG.HighWord ' Dim Sec As Byte ' секунды Dim Minute As Byte ' минуты Dim Hour As Byte ' часы Symbol St = PORTC.0 ' Кнопка Старт Symbol CHARGE = PORTC.1 ' Заряд Symbol DISCHARGE = PORTC.2 ' Разряд Symbol SVEND = PORTC.3 ' Окончание Заряда '-------------------------- Настройка TMR0 -------------------- OPTION_REG = %10000111 TMR0 = $00 ' значение TMR0 T0IE = 1 ' разрешение прерывания 3906,250000 Гц GIE = 1 ' разрешение глобального прерівания On_Interrupt GoTo Int_Label 'Sec = 0 '--------------------------Страрт ------------------------- Start: BAT = ADIn 0 ' данные с 1 канала АЦП заносим в BAT VA = BAT / 204.8 ' получаем 5 В Sec = 0 ' останавливаем таймер If VA > 1.2 And St = 0 Then GoTo ROZRYAD : Else : GoTo Start ' подключили АКБ и нажали кнопку GoTo Start ' возврат End ' '-------------------------- Прерывания-------------------------- Int_Label: Context Save ' If T0IF = 1 Then BIG1 = BIG1 - 1 ' If BIG < 0 Then BIG = BIG + 1000000 : Inc Sec ' T0IF = 0 ' Context Restore ' End '-------------------------- Главная программа ------------------------- PREDZARYAD: ' предварительный заряд BAT = ADIn 0 ' данные с 1 канала АЦП заносим в BAT VA = BAT / 204.8 ' получаем 5 В If VA < 1.2 Then GoTo Start ' нету АКБ If VA < 2.0 Then High CHARGE : DelayMS 2000 : Low CHARGE : DelayMS 2000 ' заряжаем импульсами по 2 сек If VA > 2.0 Then GoTo ZARYAD ' достигли 2,0В , переход в Заряд GoTo PREDZARYAD ' возврат End ZARYAD: BAT = ADIn 0 ' данные с 1 канала АЦП заносим в BAT VA = BAT / 204.8 ' получаем 5 В If VA < 1.2 Then GoTo Start ' нету АКБ If VA < 2.0 Then GoTo PREDZARYAD ' меньше 2,0 , переход в Предзаряд If VA > 2.0 Then High CHARGE : Else : Low CHARGE ' включаем Заряд If VA > 3.0 Then Low CHARGE : GoTo Start ' вытащили АКБ , возврат в начало If Sec = 60 Then Sec = 0 : Inc Minute ' инкрементируем минуты If Minute = 60 Then Minute = 0 : Inc Hour ' инкрементируем часы If Hour = 9 Then GoTo CHARGEEND ' дотикал таймер , окончание заряда GoTo ZARYAD ' возврат End ' ROZRYAD: BAT = ADIn 0 ' данные с 1 канала АЦП заносим в BAT VA = BAT / 204.8 ' получаем 5 В If VA < 2.05 Then Low DISCHARGE : GoTo ZARYAD ' меньше 2,05 в Заряд If VA > 2.2 Then High DISCHARGE ' больше 2,2 в Розряд If VA < 1.2 Then GoTo Start ' нету АКБ GoTo ROZRYAD ' возврат End CHARGEEND: BAT = ADIn 0 ' данные с 1 канала АЦП заносим в BAT VA = BAT / 204.8 ' получаем 5 В If VA < 1.2 Then GoTo Start ' Low CHARGE ' выключаем Заряд Low DISCHARGE ' выключаем Разряд SVEND = 1 ' Окончание Заряда Sec = 0 ' скидываем в ноль Minute = 0 ' Hour = 0 ' GoTo CHARGEEND ' возврат End Начальные настройки были получены с помощю плагина Протон Хедер Мейкер Возможны невыявленые глюки и возможно будет доработка кода. Остальные данные и обсуждение в этой ветке. Успехов в повторении и всего лучшего. Приношу благодарность Matrix252005 ( Николаю ) за помощь в данном проекте . Зарядка собрана и уже два месяца работает у клиента. Похожие материалы: Зарядное устроиство на PIC16F873A и БП АТХ | |
Просмотров: 7328 | | |
Всего комментариев: 0 | |