Крайне неудачный открытый проект зарядка для электромобиля нисан лиф и др тип 1 j1772
- Войдите на сайт для отправки комментариев
Всем любителям дешевизны посвящается
В данной теме пытаюсь собрать зарядку для электромобиля со свободным ПО и регулируемым током из доступных деталей. Буду благодарен за помощь в разработке.
на основе материалов изложеных по следующей ссылке:
https://www.instructables.com/id/Arduino-EV-J1772-Charging-Station/
Защита Узо отдельным блоком, реле отдельным модулем, светодиод отдельным модулем,включать заряд реле 30 А или пускатель можете выбрать самостоятельно.
Еще нужно добавить несколько терморезисторов для измерения температуры пистолета самого блока и вилки где он подключается в розетку (пока в разработке.)
Перечень материалов:
Коробка пластиковая 200*100*70
Ардуино уно
набор радиокомпонентов на 5 долларов.
двухполярная dc-dc повышайка для ОУ
модуль дисплея, модуль реле, модуль светодиод , уно прото шилд.
Красивая кнопка герметичная лифтовая, можно с подсветкой :)
Действия
На прото шилде собираем схему измерения тока и схему подачи шим на базе ОУ.
фото схему и фото добавлю чуть позже.
оцилографом проверяем корректность работы шим.
Up to 51A Amps = Duty cycle x 0.6 Duty cycle = Amps / 0.6
10% 6A
20% 12A
30% 18A
код программы буду благодарен за помощь.
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,20,4); // адрес дисплея бывает 0x3F int prevbutt =0; // переменная для кнопки int regim=6; // переменная режим зарядки int sostoyanie=1; //(состояние подключения от 1 до 5) int higeside=0; //переменная пик вольтажа int lowside=0; //минимум вольтажа int tiks1,tiks2,tiks3,tiks4,tiks5; //переменные уменьшающие количество ошибок int tikdisp=0; //переменная обновления дисплея int sensorValue; // переменная в которую читаем показания вольтажа const int analogInPin = A1; //на каком порту мерять напряжение float count = 0; //будет счетчик киловатт const int buttonPin = 14; // на каком порту кнопка const int grePin = 11; // на каком порту зеленый светодиод const int redPin = 13; // на каком порту красный светодиод const int bluPin = 12; // на каком порту голубой светодиод const int pwmout = 10; // на каком порту шим выход на ОУ int buttonState = 0; // переменная для кнопки int outputValue = 0; // исходящее значение PWM шим на ОУ void setup() { // Serial.begin(9600); // раскоментировать для отстройки напряжений с аналогового порта lcd.init(); // инициализация дисплея lcd.backlight(); // включить подсветку pinMode(grePin, OUTPUT); //назначение выходов pinMode(bluPin, OUTPUT); //назначение выходов pinMode(redPin, OUTPUT); //назначение выходов pinMode(14, INPUT_PULLUP); //назначение выходов TCCR1A = TCCR1A & 0xe0 | 1; ///установка режима шим на 10 выход 978 герц TCCR1B = TCCR1B & 0xe0 | 0x0b; ///установка режима шим на 10 выход 978 герц } void loop() { buttonState = digitalRead(buttonPin); // читаем состояние кнопки if (buttonState == HIGH) { // если нажата if (prevbutt==0){ // если предидущее отпущено prevbutt=1; delay (50); // антидребезг if (sostoyanie ==1){regim++;regim++;tikdisp=500; if (regim>=18){regim=6;} lcd.clear();} // при нажатии меняем режим зарядки только при статусе неподключено }} else {prevbutt=0;} // кнопка отпущена if (regim==6) { analogWrite(10, 24);}// выбор заполнения шим при выборе тока заряда 0,6*процент заполнения но минимум 10% if (regim==8) { analogWrite(10, 31);}// выбор заполнения шим при выборе тока заряда if (regim==10){ analogWrite(10, 39);}// выбор заполнения шим при выборе тока заряда if (regim==12){ analogWrite(10, 46);}// выбор заполнения шим при выборе тока заряда if (regim==14){ analogWrite(10, 53);}// выбор заполнения шим при выборе тока заряда if (regim==16){ analogWrite(10, 61);}// выбор заполнения шим при выборе тока заряда tikdisp++; if(tikdisp>500){ /////////////////////////выводим на дисплей lcd.setCursor(1,0); lcd.print("UA OPEN CHARGE"); if (sostoyanie ==1){lcd.setCursor(0,1); lcd.print("UAOC Not Connected ");} if (sostoyanie ==2){lcd.setCursor(0,1); lcd.print("UAOC Connected ");} if (sostoyanie ==3){lcd.setCursor(0,1); lcd.print("UAOC Charging ");} if (sostoyanie ==4){lcd.setCursor(0,1); lcd.print("UAOC Ventilation Req. ");} if (sostoyanie ==5){lcd.setCursor(0,1); lcd.print("UAOC diod test failed ");} lcd.setCursor(0,2); lcd.print("charg current:"); lcd.setCursor(14,2); lcd.print(regim);lcd.setCursor(17,2); lcd.print("A"); lcd.setCursor(0,3); lcd.print("count:");lcd.setCursor(7,3); lcd.print(count,1);lcd.setCursor(12,3); lcd.print("kWh"); //////////// моргаем светодиодом digitalWrite(grePin, LOW);digitalWrite(bluPin, LOW);digitalWrite(redPin, LOW); if (sostoyanie ==1){ digitalWrite(grePin, HIGH);} if (sostoyanie ==2){ digitalWrite(grePin, HIGH);digitalWrite(redPin, HIGH);} if (sostoyanie ==3){ digitalWrite(bluPin, HIGH);} if (sostoyanie ==4){ digitalWrite(redPin, HIGH);} if (sostoyanie ==5){ digitalWrite(redPin, HIGH);digitalWrite(bluPin, HIGH);} tikdisp=0;} sensorValue = analogRead(analogInPin); // читаем показания аналогового порта для выбора режима работы // Serial.print("sensor = "); Serial.println (sensorValue); // раскоментировать для отстройки напряжений if (sensorValue>500){higeside=sensorValue;} // если показания больше 500 это пик if (sensorValue<500){lowside=sensorValue; } // если показания меньше 500 это низ /////////////////выбор состояния подключения в зависимости от состояния на аналоговом порту защита от быстрой перемены режимов if (higeside<900 ) {tiks5++;if (tiks5>=50){tiks5=50; }} else { tiks5 --;if (tiks5<=0){tiks5=0;};} if (higeside>900&& lowside>420 ) {tiks4++;if (tiks4>=50){tiks4=50; }} else { tiks4 --;if (tiks4<=0){tiks4=0;};} if (higeside>900&& lowside>340 && lowside<420 ) {tiks3++;if (tiks3>=50){tiks3=50; }} else { tiks3 --;if (tiks3<=0){tiks3=0;};} if (higeside>900&& lowside>250 && lowside<340 ) {tiks2++;if (tiks2>=50){tiks2=50; }} else { tiks2 --;if (tiks2<=0){tiks2=0;};} if (higeside>900&& lowside<250 ) {tiks1++;if (tiks1>=50){tiks1=50; }} else { tiks1 --;if (tiks1<=0){tiks1=0;};} if (tiks5>=30){sostoyanie = 5;tikdisp=500;} if (tiks4>=30){sostoyanie = 4;tikdisp=500;} if (tiks1>=30){sostoyanie = 1;tikdisp=500;} if (tiks2>=30){sostoyanie = 2;tikdisp=500;} if (tiks3>=30){sostoyanie = 3;tikdisp=500;} }
добавки к проекту схемы распайки модулей.
если вы покупаете модули то первые две схемы Вам не нужны. Только последняя для подачи шим на вывод авто.
код программы буду благодарен за помощь.
пока не понятно, какая помощь требуется
Нет
помогите пож. сделать несущую частоту ШИМ в пределах стандарта 980-1020 гц.
Проверю спасибо, пока только меньше 980 получалось.
помогите пож. сделать несущую частоту ШИМ в пределах стандарта 980-1020 гц.
Вот здесь есть пример как делать ШИМ произвольной частоты.
эта ветка для оконченных проектов.
Сгорела машина.
Да уж
"окончательный код" ? - кровь из глаз... Может вы хотели сказать "черновик" ?
Вместо пяти -шести одинаковых условий используйте switch - case. ... А на месте быстрого накручивания переменных tiks3 и подобное... может просто два раза прочитать порт с небольшой задержкой?
В строке 96 грубая ошибка, время так считать нельзя
Пожалуй черновик.
Все поправлю.
Только в строка 96 не понял почему нельзя?
читайте
http://arduino.ru/forum/programmirovanie/velikoe-perepolnenie-millis
Все поправлю.
Только в строка 96 не понял почему нельзя?
Подскажите что в итоге с ваше зарядкой для leaf?
Тоже интересна тема. Что в итоге получилось? Можно повторять?
Вангую, ТС, с его познаниями, сгорел в аццком пламени взорвавшихся литиевых батарей.
не стоит, код полный....
Судя по коду, автору лет тринадцать...
ну по крайней мере старался разобраться.
Хочется повторения но без выбора тока, с отображением потребленной энергии. Китайцы вовсю уже шлепают но ценник конский. Пистолет есть а вот остальное предстоит собрать. Смотрю варианты.....
Смотрю варианты.....
если вы программист - не надо "смотреть варианты", пишите сами. А если нет - ей богу, лучше переплатите китайцам, потому как невежественные автокулибины немного надоели тут...
Машина сгорела.
поправил код:
поправил код:
код все такой же кривой, как и раньше
Мужики, простой вопрос: что эта тема делает в "проектах"?
Сгорела машина
Есть варианты удалить все свои темы с форума?
Есть варианты удалить все свои темы с форума?
Прошу не повторять моих ошибок, машина сгорела. Закройте ветку пока другие люди не повредили свое имущество. Никому не рекомендую повторять.
Прошу удалить тему или закрыть пожалуйста.
Абсолютно не удивлен. О том, что с твоими навыками не стоит лезть в автоэлектрику - тебя предупреждали еще в начале темы.
Зря потер свою сообщения, где ты доказывал. что "код и такой сойдет, лишь бы дешево....". С ними картинка была бы полнее.
Модераторы, предлагю оставить эту тему как назидание другим безголовым автокулибиным. Закройте редактирование, скройте код, но не удаляйте сообщения.
Да согласен.
фоточки будут?
это не оно?