Показано с 1 по 13 из 13

Тема: "Умный" блок питания для планшетов и навигаторов

  1. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1

    "Умный" блок питания для планшетов и навигаторов

    Всем кто встраивает планшет или навигатор в Астру.
    Собрал себе такую схемку:
    Rev 1:

    Rev 2:

    Выглядит так:


    Размер платы 100х70мм.
    "Тянет" до 5А (до 25Вт), т.е. можно туда подключить планшет, регистратор, радар, да и телефон еще заряжать.

    Алгоритм такой:
    - первый старт - работает только МК и отслеживает зажигание;
    - появляется зажигание - подается питание на планшет и на периферию;
    - пропадает зажигание более чем на 10сек - эмулируется нажатие кнопки "Power", планшет засыпает, еще через 7сек снимается питание с периферии;
    - появляется зажигание - подается питание на периферию, через 7сек эмулируется нажатие кнопки "Power", планшет просыпается;
    - нет зажигания, через 30сек начинает контроллироваться аккум - менее 10.5В - обесточивается все (кроме МК);
    - нет зажигания более 14 часов - обесточивается все (кроме МК) - далее как будто первый старт;

    Питание 12В и АСС от авто подключается к разъему Х1.
    Питание планшета подключается к разъему Х3.
    Кнопка Power подключается к разъему Х2.
    Периферия подключается к разъемам Х5 и Х6.
    На разъем Х4 можно подключить, например, зарядку для телефона.

    Код для МК:
    Код:
    #include <tiny13a.h>
    #define F_CPU 1200000UL
    #include <delay.h>
    
    // Назначим константы
    int bat_volt_min = 535;
    
    // Глобальные переменные
    bit first_start=0;
    bit batt_bad=0;
    bit power_on=0;
    bit HUB_state=0;
    unsigned int timer0_sec=0;
    unsigned int timer0_count=0; 
    unsigned int batt_volt=0;
    
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
        timer0_count++;
         if (timer0_count==146)
         {
           timer0_sec+=1;
          timer0_count=0;
           }
    
    }
    
    // Bandgap Voltage Reference: Off
    #define ADC_VREF_TYPE ((0<<REFS0) | (0<<ADLAR))
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=(1<<ADSC);
    // Wait for the AD conversion to complete
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }
    
    // Выключение всего  
    void all_off ()
        {
           PORTB.4=1;
           HUB_state=0;
           PORTB.0=LCD_state;
           first_start=0;
           power_on=0;
        }        
    // Нажатие кнопки Power на планшете
    void power_on_off ()
        {
        PORTB.1=1;
        HUB_state=!LCD_state;
        PORTB.0=LCD_state;
        delay_ms (300);
        PORTB.1=0;
        power_on=!power_on;    
        }
        
    // Проверка батареи
    void check_bat ()
        { 
        batt_volt = read_adc (1); 
        if (batt_volt < bat_volt_min)
         {
         batt_bad=1;
         }
        else {
         batt_bad=0;
             };                        
        }
    
    // Первый старт
    void first_start_func ()
        {
          check_bat ();  
          if (batt_bad==1)
            {
             all_off ();
            } 
          if (PINB.3==1 && batt_volt>=bat_volt_min)
            {
            PORTB.4=0;
            HUB_state=1;
            PORTB.0=HUB_state;
            first_start=1;
            power_on=1;
            PORTB.1=1;
            delay_ms (1000);
            PORTB.1=0;        
            }  
          timer0_count=0;
          timer0_sec=0;     
        }
    
    void main(void)
    {
    // Declare your local variables here
    
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit5=In Bit4=Out Bit3=In Bit2=In Bit1=Out Bit0=Out 
    DDRB=(0<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit5=T Bit4=1 Bit3=T Bit2=T Bit1=0 Bit0=0 
    PINB=(0<<PINB5) | (1<<PINB4) | (0<<PINB3) | (0<<PINB2) | (0<<PINB1) | (0<<PINB0);
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 37,500 kHz
    // Mode: Normal top=0xFF
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    // Timer Period: 6,8267 ms
    TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
    TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;
    
    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
    
    // External Interrupt(s) initialization
    // INT0: Off
    // Interrupt on any change on pins PCINT0-5: Off
    GIMSK=(0<<INT0) | (0<<PCIE);
    MCUCR=(0<<ISC01) | (0<<ISC00);
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0);
    // Digital input buffer on AIN0: On
    // Digital input buffer on AIN1: On
    DIDR0=(0<<AIN0D) | (0<<AIN1D);
    
    // ADC initialization
    // ADC Clock frequency: 600,000 kHz
    // ADC Bandgap Voltage Reference: Off
    // ADC Auto Trigger Source: ADC Stopped
    // Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
    DIDR0|=(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
    ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    
    
    // Global enable interrupts
    #asm("sei")
    while (1)
          {
          if (first_start==0)
            {
             first_start_func ();
            }
           if (PINB.3==0 && timer0_sec>=10 && power_on==1)
            {
             power_on_off ();   
            }
           if (PINB.3==0  && timer0_sec>=30)
             {
             check_bat ();
             }  
          if (batt_bad==1)
            {
             all_off ();
            } 
          if (PINB.3==0 && timer0_sec>=50400) 
            {
             all_off ();   
            }  
          if (PINB.3==1 && power_on==0 && batt_bad==0 && first_start==1)
            {
             power_on_off ();
             timer0_sec=0;
            } 
          if (PINB.3==1 && power_on==1)
            {
            timer0_sec=0;    
            }
    
          }
    }
    Последний раз редактировалось nrgizer79; 03.02.2015 в 12:54.
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

  2. Местный Магистр АСТРАномии -Vic- Астранафт
    Регистрация
    16.05.2008
    Адрес
    С.-Петербург
    Сообщений
    3,809
    Спасибо
    15 / 0
    а сколько он потребляет в спящем режиме?
    Opel 320dX


  3. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1
    Цитата Сообщение от -Vic- Посмотреть сообщение
    а сколько он потребляет в спящем режиме?
    60-80мА
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

  4. Местный Магистр АСТРАномии -Vic- Астранафт
    Регистрация
    16.05.2008
    Адрес
    С.-Петербург
    Сообщений
    3,809
    Спасибо
    15 / 0
    это много
    Opel 320dX


  5. Монстр астраколхозинга Заслуженный флудер CoDeMasteR Астранафт Аватар для CoDeMasteR
    Регистрация
    17.01.2008
    Адрес
    Москва ЗАО
    Сообщений
    6,358
    Спасибо
    88 / 2
     0реlац т0й
    +1
    Не самая продвинутая сигналка с обратной связью "кушает" 30mA. Куда уходит 60-80mA ??

  6. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1
    Цитата Сообщение от -Vic- Посмотреть сообщение
    это много
    Это побочный эффект преобразователей с развязкой земли, никуда не денешься.
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

  7. Местный Магистр АСТРАномии -Vic- Астранафт
    Регистрация
    16.05.2008
    Адрес
    С.-Петербург
    Сообщений
    3,809
    Спасибо
    15 / 0
    Цитата Сообщение от nrgizer79 Посмотреть сообщение
    то побочный эффект преобразователей с развязкой земли, никуда не денешься.
    по даташиту он 20mA потребляет без нагрузки
    Opel 320dX


  8. Участник Начинающий Астравод SanchSanch на верном пути
    Регистрация
    17.04.2013
    Адрес
    Москва
    Сообщений
    49
    Спасибо
    2 / 2
    Я себе тоже делаю "умный БП" на подобном DC-DC конвертере и с управлением от Arduino.
    Встроенный "спящий" режим в DC-DC не использую.
    Сделал приблизительно так:
    Ардуина питается через своеобразное "ИЛИ" (2 встречно включенных диода) - либо от можного DC-DC (когда он включен), либо от LM7805.
    Вход DC-DC плодключен через реле на постоянный плюс. Реле управляется ардуиной.
    LM7805 запитывается от сигнала ACC. Так же ACC в виде логического сигнала заведено на один из выводов Ардуины для мониторинга.
    Таким образом:
    1. Исходное состояние - все выключено.
    2. Поворачиваем ключ, появляется ACC. Через LM7805 запитывается ардуина, стартует, замыкает реле - запитывается DC-DC и включается CarPC.
    3. При пропадании ACC ардуина остается запитанной от DC-DC, все продолжает работать.
    4. Если ACC пропало более, чем на 10 секунд, ардуина размыкает реле, таким образом обесточивая DC-DC и, соответсвенно, CarPC и саму себя.

    Таким образом, добился нулевого тока потребления в выключенном состоянии - DC-DC не потребляет, т.к. обесточен, Ардуина тоже выключена.
    Ток потребления в 10-ки мА в выключенном состоянии считаю неприемлимым - у меня и так сигналка с обратной связью выжирает аккум за 2 недели с небольшим.

    Подумываю над реализацией режима, в котором CarPC не обесточивается в течении одной ночи (как у автора темы) с мониторингом напряжения батаери. Чтобы не ждать, пока загрузится при ежедневных поездках.
    При этом все остальное ненужное (например, экран) отключалось бы сразу 9через 10 секунд после снятия ACC).

  9. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1
    Хмммм......
    Видимо не на одной волне были
    60-80мА - это ток потребления, когда DC-DC включен микроконтроллером, но при этом у него по выходу ничего не потребляется (все потребители отключены).
    В режиме выключенном я даже и не измерял.
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

  10. Местный Магистр АСТРАномии -Vic- Астранафт
    Регистрация
    16.05.2008
    Адрес
    С.-Петербург
    Сообщений
    3,809
    Спасибо
    15 / 0
    Цитата Сообщение от nrgizer79 Посмотреть сообщение
    60-80мА - это ток потребления, когда DC-DC включен микроконтроллером
    все равно дофига, в 4 раза больше чем в даташите заявлено, может конечно быть погрешность, но не такая
    Opel 320dX


  11. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1
    Цитата Сообщение от -Vic- Посмотреть сообщение
    все равно дофига, в 4 раза больше чем в даташите заявлено, может конечно быть погрешность, но не такая
    Заинтриговали вы меня тут
    Взял чистый DC-DC.
    Итого (измерял мультиметром с пределом до 200мА):
    11.5мА в состоянии OFF
    12.8мА в состоянии ON
    В потребление БП еще входит потребление МК.
    Плюс 60-80мА - это мне показывал мой лабораторный БП. Может и привирает.
    Надо на досуге будет мультиметром измерить.
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

  12. Местный Магистр АСТРАномии -Vic- Астранафт
    Регистрация
    16.05.2008
    Адрес
    С.-Петербург
    Сообщений
    3,809
    Спасибо
    15 / 0
    делитель на ADC входе поменяй на мегаомы, а то там тоже утечки много с такими номиналами
    Opel 320dX


  13. Участник Астравод nrgizer79 на верном пути Аватар для nrgizer79
    Регистрация
    05.07.2011
    Адрес
    Петербург
    Сообщений
    88
    Спасибо
    6 / 1
    Цитата Сообщение от -Vic- Посмотреть сообщение
    делитель на ADC входе поменяй на мегаомы, а то там тоже утечки много с такими номиналами
    80кОм на 12В = 0.15мА - можно пренебречь.

    Посмотрел выложенную схему - старенькая.
    У меня уже ревизия 2.
    Избавился от механического реле и просадок по питанию во время пуска стартера.
    Выложил.

    В ревизии 3 думаю поставить полевичок по входу, чтобы вообще через 14 часов не потреблять.
    Opel Astra H Wagon 2011 1.6MT Enjoy+Enjoy

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)