PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Питание (http://pccar.ru/forumdisplay.php?f=173)
-   -   Блок питания NEXUS7-2012,2013 (или любого другого планшета) (http://pccar.ru/showthread.php?t=23236)

oleg707 24.09.2015 00:45

покритикуйте новый скетч, еще не заливал в машину. :read2:
Тут СПОЙЛЕРЫ есть на форуме?!:no2:

// ver23.09.2249
//D8 pin - (PLANSHpin pin)(выход 5в логический) (выключает питание планшета!(R13-R14))
//D7 pin - самозапитка (AKB pin) (выход 5в логический)


/*ноги ардуины*/
int PLANSHpin = 8; //управление на выключатель питания БАТАРЕИ планшета через управляющую ногу ss\sd1
//0 = нет питания; 1 = есть питание ( БАТАРЕИ планшета)
int AKBpin = 7; //управление транзюком самозапитки блока питания VT2
//1 = есть самозапитка; 0 = нет самозапитки
int OTGpin = 10; //управление транзюком OTG VT3
//1 = есть масса на OTG; 0 = нет массы на OTG
int SLEEPpin = 11; //управление транзюком сна VT4 (на датчик холла))
//1 = потух экран(есть масса на пине сна); 0 = штатная работа планшета (нет массы на пине сна)
int POGOpin = 9; //управление транзюком питания +5V (VT5) на пого пин, чтоб планшет думал, что идет зарядка
//1 = нет 5V на POGO; 0 = есть 5V на POGO
int REMpin = 12; // //управление транзюком VT7 и через него VT6 = выход сигнала REM (+12v) НЕ АКТИВИРОВАЛ В СКЕТЧЕ, на плате распаяно.
//0 = нет 12В на выходе REM; 1 = есть 12В на выходе REM

/*логические переменные, используемые в коде*/
int flagACC = 0; //признак включенного зажигания
int flagAKB = 0; // признак заряженной батареи
int flagHALL = 0; //флаг отработки морга экрана при холодном старте( flagHALL = 1 экран можно включать и выключать, датчик холла на планшете инициализировался)
/*счётчики времени*/
unsigned long eventTime = 0;
unsigned long pauseTimeACC = 0;
unsigned long pauseTimeAKB = 0;
unsigned long pauseTimeHALL = 120000; // время паузы перед морганием экрана (для датчика холла)(равен времени загрузки планшета плюс секунд 10-20)= 2мин

void setup()
{
// put your setup code here, to run once:
pinMode(PLANSHpin, OUTPUT);
pinMode(AKBpin, OUTPUT);
pinMode(OTGpin, OUTPUT);
pinMode(SLEEPpin, OUTPUT);
pinMode(POGOpin, OUTPUT);
pinMode(13, OUTPUT); //светодиодик на плате ардуины
analogReference(INTERNAL); //перевод напряжения делителя на внутреннее значение 1,1В ( для повышения точности замера Uacc и Uakb)
// Serial.begin(1200);
}


void loop()
{
int Uacc = analogRead (A7); //Читаем напругу с делителя R10-R11
int Uakb = analogRead (A6); //Читаем напругу с делителя R2-R3
float U_acc_real = Uacc * (1.1 / 1023.0*17.2); //Вычисляем реальное напряжение +ACC на входе делителя (A7) 17.2=поправка на погрешность делителя. обкатывать только на реальном питании от 12В! при питании от ЮСБ 5,0В плавают
float U_akb_real = Uakb * (1.1 / 1023.0*17.1); //Вычисляем реальное напряжение +30 на входе делителя (A6)
//Serial.print("U_akb_real = ");Serial.println(U_akb_real);
//Serial.print("U_acc_real = ");Serial.println(U_acc_real);

// кусок кода ниже нужен для того, чтобы при включении и сразу выключении ACC при полностью выключенном планшете(холодный старт) экран мог тухнуть по сигналу датчика холла.
if (millis()>pauseTimeHALL && flagHALL == 0) //проверка отсчета при холодном старте
{flagHALL = 1;}
// if (flagHALL == 0 && flagACC == 1){flagHALL = 1;} // надо ли этот кусок кода тут?! Я ХЗ, пусть будет. но скорее не надо.




// блок ACC
if (U_acc_real>= 12 && flagACC == 0 && flagAKB == 1) //проверка напруги АСС и АКБ при флаге ACC = 0
{

flagACC = 1; //ВКлючили зажигание
pauseTimeACC = millis();
//сразу после включения зажигания даём минус на Y-OTG и плюс +5V на POGO или USB.
digitalWrite(OTGpin, 1); //включаем минус на Y-OTG (8 pin PW1) (включается хаб? и звуковая карта)
digitalWrite(POGOpin, 0); //включаем +5V (3 pin PW1 = POGO) нужно для распознавания планшетом признака зарядки. ( можно подавать на +5В USB кабеля (для тимуровской прошивки или если не используется датчик холла)

}
if (millis()-pauseTimeACC>=2000 && flagACC == 1) // пауза 2c после включения ACC и потом делать следующ(пока включено ACC):
{
digitalWrite(SLEEPpin, 0); //вЫключаем минус на упр SLEEP (7 pin PW1) = включаем экран
// REM УПРАВЛЕНИЕ РАСКОММЕНТИТЬ и протестировать
//digitalWrite(REMpin, 1); // даем + на управление VT7, тот дает минус на управление VT6, а VT6 выдаёт +12V на выход (PW1 - 13 pin))

pauseTimeACC = 0;
}

if (U_acc_real< 12 && flagACC == 1)
{
flagACC = 0; //Выключили зажигание
pauseTimeACC = millis();
pauseTimeAKB = millis(); // сброс времени для отсчета отключения самозапитки



// REM УПРАВЛЕНИЕ РАСКОММЕНТИТЬ и протестировать
//digitalWrite(REMpin, 0); // даем - на управление VT7, тот убирает за счет подтяжки R24 минус на управление VT6, а VT6 убирает +12V на выход (PW1 - 13 pin))
}

if (millis()-pauseTimeACC>=4000 && flagACC == 0) //пауза 4c после вЫключения ACC и потом делать следующ:
{

digitalWrite(OTGpin, 0); //вЫключаем минус на Y-OTG (8 pin PW1)
digitalWrite(POGOpin, 1); //вЫключаем +5V (3 pin PW1 = POGO)
pauseTimeACC = 0;
if (flagHALL==1){digitalWrite(SLEEPpin, 1);} else {digitalWrite(SLEEPpin, 0);} //включаем минус на SLEEP (7 pin PW1)при этом тухнет экран (если прошло 2 минуты с момента включения ардуины)
}




// .. блок АКБ
if (U_akb_real>=12 && flagAKB == 0) //проверка +30 и флага акб
{
digitalWrite(AKBpin, 1); // включаем самозапитку

digitalWrite(PLANSHpin, 1); //включаем питание на батарею планшета (ss\sd1)
flagAKB = 1;
}
if (U_akb_real<12 && flagAKB == 1) // ситуация, когда сел при работе ардуины аккумулятор
{
flagAKB = 0;

}

if (millis()-pauseTimeAKB>=6000 && flagAKB == 0) // если севший аакумулятор
{ // пауза 6c
digitalWrite(PLANSHpin, 0); //вЫключаем питание на батарею планшета (ss\sd1)
digitalWrite(AKBpin, 0); //выключаем AKBpin, при этом пропадает питание через полевик на KIW, система ПОЛНОСТЬЮ обесточивается
delay (3000); // задержка для аппаратного выключения
}

if (flagAKB == 1 && flagACC == 0) //ситуация, когда норм акб и давно выключили зажигание (ACC)
{
if (millis()-pauseTimeAKB>=10800000 && flagAKB == 1) // если давно выключили ACC
{ // пауза (3600000 - 60мин) (60000 - 1 мин)(10800000=3ч)
digitalWrite(AKBpin, 0); //выключаем AKBpin, при этом пропадает питание через полевик на KIW, система ПОЛНОСТЬЮ обесточивается
digitalWrite(PLANSHpin, 0); //вЫключаем питание на батарею планшета (ss\sd1)
delay (3000); // задержка для аппаратного выключения
}
}

if (flagAKB ==0 ){digitalWrite(13, 0);} else {digitalWrite(13, 1);}; // индикация напруги батареи на ардуинине.

}

oleg707 24.09.2015 16:41

Вложений: 2
залил этот скетч, понравилось. Стало стабильнее отрабатывать тушение экрана по датчику холла, если вставить и сразу вынять ключ.
УТОЧНЕНИЕ 20,10,2015

Наигрался я с ардуиной, и решил попробовать залить HEX напрямую. Сразу скажу - не стало загрузчика, пропала

задержка 1,5 сек перед включением проца. Мне понравилось, плата блока питания отзывается сразу, как пришла

напруга, практически мгновенно.
Пишу тут, чтоб самому не забыть ))
для начала превращаем свободную ардуину ( у меня MEGA 2560) в программатор.

Для этого запускаем среду разработки ардуины, в меню ФАЙЛ -> образцы-> ArduinoISP. ИНСТРУМЕНТЫ-

>программатор->AVRISP mkII. Выбрать порт, плату и процессор ( у меня MEGA 2560).
Заливаем скетч в мегу. Теперь она будет у нас ISP программатором.
Отключаем MEGу. В настройках выбираем порт, плату и процессор нашего блока питания ( NANO. 328). Открываем

наш скетч от блока питания (NANO_23.09_serial_control.ino).

Железо подключается так: В юсб компа втыкаем нашу мегу (которая щас isp-программатор). К меге подключаем НАНУ

(по схеме в скетче AVRISP mkII). Если всё правильно, на нане включится светодиод питания и станет исполнятся

залитая программа.
В среде разработке ардуины ФАЙЛ -> загрузить с помощью прграмматора.


дальше - больше. Наигрался я с ардуиной, и решил попробовать залить HEX напрямую. Сразу скажу - не стало загрузчика, пропала задержка 1,5 сек перед включением проца. Мне понравилось, плата блока питания отзывается сразу, как пришла напруга, практически мгновенно.
Пишу тут, чтоб самому не забыть ))
для начала превращаем свободную ардуину ( у меня MEGA 2560) в программатор.

Для этого запускаем среду разработки ардуины, в меню ФАЙЛ -> образцы-> ArduinoISP. ИНСТРУМЕНТЫ->программатор->AVRISP mkII. Выбрать порт, плату и процессор ( у меня MEGA 2560).
Заливаем скетч в мегу. Теперь она будет у нас ISP программатором.
Отключаем MEGу. В настройках выбираем порт, плату и процессор нашего блока питания ( NANO. 328). Открываем наш скетч от блока питания (NANO_23.09_serial_control.ino). Заливаем в НАНу. (саму нану можно не подключать, но желательно проверить работоспособность БП на машине). (В настройках среды ардуины поставить ВСЕ галки, кроме внешнего редактора).
внизу пошла техническая инфа. нас интересует последняя белая строчка
D:\777\soft\arduino\hardware\tools\avr/bin/avrdude -CD:\777\soft\arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v2 -Pusb -Uflash:w:c:\Temp\build4913313151507408812.tmp/NANO_23.09_serial_control.cpp.hex:i

Открываем папку \Temp\build4913313151507408812.tmp (поиском можно) и видим там КУЧУ файлов. Я все утянул на всякий, но нам нужен NANO_23.09_serial_control.cpp.hex
Итак, мы заимели HEX файл прошивки. Теперь задача запихнуть его в процессор (мегу 328p) без загрузчика.
Стандартной средой ардуины у меня не получилось ( или плохо старался), эта кака пыталась прошить мегу. Поэтому была использована программка SinaProg версии 2,1. (программер AVRISP, порт, 19200) devise ATmega328P.

Железо подключается так: В юсб компа втыкаем нашу мегу (которая щас isp-программатор). К меге подключаем НАНУ (по схеме в скетче AVRISP mkII). Если всё правильно, на нане включится светодиод питания и станет исполнятся залитая программа.
Открываем вверху HEX файл, указываем путь к тому, который мы добыли (NANO_23.09_serial_control.cpp.hex). И во вкладке Flash жамкаем Progam. ждём пока зальётся, и жмём verify. Отключаем.


Остается проверить результат на машине.

Arduino Uno (программатор)
5V → Vcc
GND → GND
D11 → MOSI
D12 → MISO
D13 → SCK
D10 → Reset

Arduino Nano (ICSP разъём)
Pin1 (MISO) ← D12 Pin2 (Vcc) ← 5V
Pin3 (SCK) ← D13 Pin4 (MOSI) ← D11
Pin5 (Reset) ← D10 Pin6 (GND) ← GND

laytya 26.09.2015 17:33

ну ты блин даешь, целую ардуину на это извел... а есть ведь просто кристалы типа аттини... на худой конец, ардуино про мини...

Denkos 26.09.2015 17:41

Цитата:

Сообщение от laytya (Сообщение 339048)
ну ты блин даешь, целую ардуину на это извел... а есть ведь просто кристалы типа аттини... на худой конец, ардуино про мини...

Тоже читаю эту эпопею и задаюсь вопросом, зачем!

oleg707 26.09.2015 18:12

Цитата:

Сообщение от Denkos (Сообщение 339049)
Тоже читаю эту эпопею и задаюсь вопросом, зачем!

1 лёгкость вхождения в процессоры. ( а я их уже основательно забыл)
2 повторяемость - легко повторить проект
3 лёгкость перепрограммирования -всунул юсб, поменял значения, тайминги, залил. Настроить поведение можно ЛЮБОЕ.
4 цена - стоимость ардуины на Китае 1,5 бакса за НАНУ (а это разъём мини юсб, усб-уарт, кварц, атмега328p + плата). Стоимость той же атмеги 8 почти бакс. Андуина тупо дешевле.
5 расширяемость- у меня ещё куча ног прикрутить дополнительный функционал. (Типа измерения питания 5 в на планшет)

6 уже почти подошёл к 4 версии блока питания на спец- драйверах с контролем тока, температуры и прочими плюшками. Там уже и буду лепить на чистой атмеге. :secret:

laytya 26.09.2015 20:01

только нафига оно нада? контроль с планшета и прочее? снимать ставить...

возможно только из-за самообразования, реально нада так - настроил 1 раз, поставил - все пашет, и не лезешь туда больше.

для задач БП достаточно тиньки 45ой =)

oleg707 26.09.2015 21:53

просто мысли вслух и самоанализ
 
Цитата:

Сообщение от laytya (Сообщение 339058)
только нафига оно нада? контроль с планшета и прочее? снимать ставить...

возможно только из-за самообразования, реально нада так - настроил 1 раз, поставил - все пашет, и не лезешь туда больше.

для задач БП достаточно тиньки 45ой =)

мне мало 45 тиньки ) как вариант ATtiny2313.
На момент начала проекта я не видел ни одного проекта без рэле ( у нас какой век на дворе?)
самообразование однозначно никто не отменял, а то так у меня блок питания прекрасно и долго работал и без ардуины-проца(аппаратно), а вся эта конструкция пришла на замену обычного зарядного 5в-2А в прикуриватель на ПОГО пины.

реально так - я сел в машину, вставил ключ - система запустилась из сна (либо загрузилась). Заглушил - система пошла спать( около часа сейчас). Через час самоотрубилась. Если батарея ниже 12 вольт - самоотрубилась.

Если не лезть в дебри и не искать идеала - оно просто работает.Уже дооолго работает. :blush:

ANRU вон вообще хочет, чтоб БП запускался при снятии машины с сигналки ( и это уже возможно у меня, только у провод от центрального замка протянуть). Каждому своё.
Вот тут и нужна ардуина - не каждый потянет атмел студио сходу. Как мне править логику работы под себя прикажете? А если только HEX файл выложен?
Ардуину воткнул в усб, поравил тайминги под себя (или вообще программу переписал), кнопку нажал - скетч залил -> пользуйся.

Проект задумывался как альтернатива блокам на рэле. ( а рэле на проц напрямую цеплять нельзя, там токи попалить его могут, не говоря про обратное напряжение ( скачёк до 140 вольт запросто, надо ставить диод параллельно обмотке). Поэтому надо ставить транзистор и диод для рэле, или просто диод для слаботочного. Тогда смысл в рэле, если мы всё равно пихаем транзистор?
Я не увидел ни одного(!) грамотного решения блока питания. Начиная от схемы и заканчивая компоновкой деталей. Да что говорить, даже защиты от короткого замыкания или перенапряжения я не видел. На робкое упоминание, что так нельзя - авторитетно заявляется, что у всех так работает. Это в машине то :shok:.
Я понимаю, что для многих это игрушка в машине, но она никак не должна мешать машине работать.

Мой БП далёк от идеала, многие идеи я взял с этого форума, многие идеи по практическому построению нагло спёр из автомобильного хэндсфрии ( прямо с деталями и взял:smile1:), многое - авторские наработки.

Сначала даже писать не хотел, а потом... решил поделиться с форумом, который мне много дал. Хотя сейчас энтузиазм тратить время на форум упал почти полностью.

oledv 27.09.2015 13:27

Цитата:

Сообщение от oleg707 (Сообщение 339065)
На момент начала проекта я не видел ни одного проекта без рэле ( у нас какой век на дворе?)

Плохо ищите, приведу в пример ancc, если поищите его проекты будите приятно удивлены).

oleg707 27.09.2015 16:23

Цитата:

Сообщение от oledv (Сообщение 339091)
Плохо ищите, приведу в пример ancc, если поищите его проекты будите приятно удивлены).

Опять поискал, видимо плохо, хотя ancc и молоток, схемы блока питания на планшет-андроид у него я не нашел.:dntknw: Может подскажете?

vladj 03.10.2015 17:59

Цитата:

Сообщение от oleg707 (Сообщение 339065)
Заглушил - система пошла спать

А если заглушил и ушел в магазин посмотреть железки, а жена в это время смотрит видеоклипы...
ну что-бы не скучала меня дожидаясь ?


Часовой пояс GMT +4, время: 11:58.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot