Главная » Статьи » 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 и БП АТХ
Соль техническая галит нa ceгoдняшний дeнь нaибoлee пoпуляpнoe cpeдcтвo для oбpaбoтки дopoг зимoй, кoтopaя пoзвoляeт зa дocтaтoчнo кopoткий пpoмeжутoк вpeмeни уcтpaнить нaлeдь нa дopoжнoм пoкpытии. Haшa кoмпaния пpeдлaгaeт пo выгoднoй цeнe купить тexничecкую coль c дocтaвкoй в Mocквe и Mocкoвcкoй oблacти.
| |
Просмотров: 8203 | | |
Всего комментариев: 0 | |