Поточний час: 28 бер 2024, 12:14

Часовий пояс: UTC + 2 години



Почати нову тему Відповісти на тему  [ Повідомлень: 10 ] 
Автор Повідомлення
#2010Повідомлення 11 квіт 2014, 20:02 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Для будущего проекта разработал устройство управления вентилятором обдува щёточного узла коллекторного двигателя.
Оно измеряет температуру в двигателе цифровым датчиком, а так же следит за током и напряжением на двигателе.
    Логика работы такова:
  • При температуре ниже 10оС вентилятор вообще не включается.
  • Если выше 70оС вентилятор включен на полную мощность в любом случае.
  • При превышении 100оС дополнительно загорается красный светодиод.
  • При превышении тока или напряжения выше номинального (48А, 75В) вентилятор включен на полную мощность. После перегрузки вентилятор продолжает работать на полную мощность ещё 5 секунд (я назвал это "выбег после перегрузки").
  • Во всех других случаях при мощности тягового двигателя более 30% обороты вентилятора плавно растут и достигают максимума при 100% мощности
  • А так же обороты вентилятора включаются на 30% при достижении температуры 40оС и достигают максимума при температуре 70оС

Устройство не проверен в железе. Я буду проверять его при постройке своего электромобиля. Но я с удовольствием помогу довести его до ума тому, кто захочет повторить его прямо сейчас.
Часть подключения датчиков тока и напряжения я не продумывал, т.к. у каждого они будут свои. Если вам нужно - пишите, вместе придумаем.

Заводские фьюы при прошивке не трогать.
Если тронули, то настройте под 1МГц без кварца.


Додаткові файли:
Схема вентилятора.GIF
Схема вентилятора.GIF [ 38.63 КБ | Переглядів: 4272 ]
Коментарій до файлу: Прошивка
Вентилятор.rar [3.26 КБ]
Завантажень: 427
Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2012Повідомлення 11 квіт 2014, 21:13 
Творець електромобіля, керівник відділення клубу
Аватара користувача
Не в мережі

Звідки: Харьков
Дякував (ла) 32 Подякували 233
Мій електротранспорт: Славута
1. 18B20 заменить на терморезистор сразу. Цена отличается на порядок, а точность в этом деле не существенна.
2. Заменить ULN2004 на mosfet
3. Зашунтировать двигатель диодом.
4. VD1 не нужен
5. конденсаторы до и после КРЕНки нужны

_________________
Дорога покорится идущему


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2021Повідомлення 12 квіт 2014, 10:19 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Спасибо за советы.
18B20 поставил, чтоб не возится с юстировкой датчика температуры. Стоит она 15грн. Такую цену вытерплю. В ULN2004 уже стоит шунтирующий диод. Выбрал эту микросхему, т.к. уже с ней успешно работал. Пока не знаю мощность вентилятора. Если будет тянуть больше 2 ампер, конечно поставлю МОСФет с диодом.
VD1 я раньше никогда не ставил. Через него разряжается конденсатор С5 при пропадании питания. Говорят, очень полезно при неустойчивом питании, что очень актуально для электромобиля. В своих устройствах до этого я вообще РЕЗЕТ просто в воздухе бросал. Но туту хотелось бы
Про конденсаторы вокруг КРЕНки совсем забыл. Спасибо!

Вообще, самая большая проблема - это снятия сигнала тока. Не могу придумать, как гальванически развязать схему, если на шунте развивается всего 100мВ? Уже даже подумываю, может эту информацию у контроллера выспрашивать через CAN или ещё какой интерфейс?

Проект изначально задумывался как открытый. Так что держите исходник прошивки! Самое интересное там в секции "глобальные константы настройки".
Исходник прошивки регулятора вентилятора
Код:
/*****************************************************
Project    : Регулятор вентилятора для сериесного двигателя электромобиля
Version    : 0,7
Date start : 2014-04-11
Date finish:
Author     : Stalker_W
Company    : Визг&Вопли
Comments   :

Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 1,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256


Фьюзы PonyProg2000 галочки:  1МГц БЕЗ кварца

*****************************************************/

//============ влаживаем полезные библиотеки ===============
#include <mega8.h>
#include <delay.h>
// 1 Wire Bus interface functions
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds18B20.h>


// ============ глобальные константы настройки =============

const unsigned char T_holodno=10; //min.температура вкл. вентилятора
const unsigned char T_teplo=40; /*min.температура вкл. вентилятора
                                  и при номинальной мощности*/
const unsigned char T_jara=70;  //температура сильного нагрева
const unsigned char T_dym=100;  //температура аварийного перегрева
const unsigned int U_nomin=75; //перегрузочное напряжение двигателя, В
const unsigned int I_nomin=48; //перегрузочный ток двигателя, А
const unsigned int U_max=110;   /*макс. напряжение двигателя, В.
                                при напряжении датчика 2,56В */
const unsigned int I_max=600;  /*макс. ток двигателя, А
                                при напряжении датчика 2,56В */
const unsigned char time_vkl=5; /*время выбега вентилятора после
                                перегрузки двигателя, сек. */
const unsigned char PWM_min=40; //мин.мощность вентилятора в процентах

// ============= глобальные переменные ========================

unsigned char num_dat=0; //обслуживание датчика температуры
unsigned char rom_codes[2][9];
unsigned int tajmer0=0; //таймер вентилятора
unsigned char tajmer1=0; //таймер считывания температуры
unsigned char PWM_vent=0; //текущая мощность вентилятора
unsigned char PWM_temp;
unsigned int U=0;
unsigned int I=0;
float temper=22;
unsigned int P_nomin; //номинальная мощность двигателя
unsigned int P;
unsigned int P_start;

//============= процедуры прерываний ==========================

// Timer 0 overflow interrupt service routine
                    //отсчёты времени
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
tajmer1++;
if (tajmer1==4) //прошла секунда (не очень точно)
  {
  tajmer1=0;
  if (tajmer0) {tajmer0--;}; //снимаем секунду с вентилятора
               //начинаем мерять температуру
  temper=ds18b20_temperature(&rom_codes[0][0]);
  if (temper<-900) //ошибка датчика
   {
   PORTD.3=1;
   temper=T_jara; //на всякий случай инициализируем перегрев
   }
    else
    {
    PORTD.3=0;
    };
  if (temper>=T_dym)   //сигнализация перегрева
   {
   PORTD.4=1;
   }
    else
    {
    PORTD.4=0;
    };
  };

}

//==================== процедуры ==============================

#define ADC_VREF_TYPE 0xE0

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{             //считывание напряжения с датчиков
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

//================= тело программы ============================
void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=0 State3=0 State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x18;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0,977 kHz
TCCR0=0x05;
TCNT0=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Phase correct PWM top=0xFF
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x61;
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// ADC initialization
// ADC Clock frequency: 7,813 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;

//=============== понеслась сама прграмма ===================
#asm("sei") //разрешаем прерывания

num_dat=w1_search(0xf0,rom_codes);
ds18b20_init( &rom_codes[0][0], 0, 0, DS18B20_9BIT_RES ); //инициализация датчика

P_nomin=U_nomin*I_nomin; //номинальная мощность электродвигателя
P_start=P_nomin*0.3;

PORTD.3=0; //на всякий пожарный выключаем аварийную сигнализацию
PORTD.4=0;

while (1)
{
// ========= постоянно считываем ток и напряжение =========
// === раз в секунду по прерыванию меряем температуру =======

U=read_adc(0)*U_max/2.56;
I=read_adc(1)*I_max/2.56;

if ((U>U_nomin)||(I>I_nomin)) {tajmer0=time_vkl*20;};


P=U*I;
if (P<P_start) {PWM_vent=0;};
if ((P>=P_start) | (P<=P_nomin))  //поддуваем вентилятором при
                              //чуть ниже номинала мощности
 {
 PWM_vent=((P-P_start)/(P_nomin-P_start))*(100-PWM_min)+PWM_min;
 };

if ((temper>=T_teplo) | (temper<T_jara)) //поддуваем вентилятором если
                              //потеплело
 {
 PWM_temp=((temper-T_teplo)/(T_jara-T_teplo))*(100-PWM_min)+PWM_min;
 };

if (PWM_temp>PWM_vent) {PWM_vent=PWM_temp;};


if (tajmer0) {PWM_vent=100;}; //перегрузка по току или напряжению
                                //или выбег после неё
if (temper<=T_holodno) {PWM_vent=0;}; //холод собачий
if (temper>=T_jara) {PWM_vent=100;};  //почти дымимся

if (PWM_vent>100) {PWM_vent=100;}; //проблемы округления

PWM_vent=PWM_vent*2.55;

OCR2=PWM_vent; //запускаем ШИМ на нужный процент

delay_ms(1); //минимальная пауза

}
}


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2056Повідомлення 13 квіт 2014, 17:11 
Творець електромобіля, засновник клубу
Аватара користувача
Не в мережі

Звідки: Украина. Киев.
Дякував (ла) 872 Подякували 1387
Мій електротранспорт: "Электра 2"
Хочу електротранспорт: "Электра 3" вдвое легче, но с втрое бОльшим солнцеобеспечением
По моему, не только для сериесника.
.....Ведь крыльчатка любого эл.двигателя, при 2000-3000 об.мин, потребляет ватт ~пятьдесят ! Даже в мороз ! а зачем? Вот они где лишние то, ватт, часы, на км.
.....С другой стороны, когда Вы едете на затяжной подьём, на малых оборотах, практически без обдува, и перегреваетесь, Вам бы , принудительный обдув оччень не помешал бы.
Сам то до ЭТОГО ещё не дошёл, но .....планирую . Правда, не понимаю, зачем, для этого сложные цифровые системы ? Почему не обыкновенный автомобильный датчик температуры радиатора , завинченный в дюралевую крышку корпуса.? ? ?


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2061Повідомлення 13 квіт 2014, 21:57 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Можно и автомобильный датчик. Просто я могу себе сделать и такой наворот, с упреждающим обдувом и экономией энергии на обдув.


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2066Повідомлення 14 квіт 2014, 12:00 
Творець електромобіля, засновник клубу
Аватара користувача
Не в мережі

Звідки: Украина. Киев.
Дякував (ла) 872 Подякували 1387
Мій електротранспорт: "Электра 2"
Хочу електротранспорт: "Электра 3" вдвое легче, но с втрое бОльшим солнцеобеспечением
А вообще, намереваясь не уступать " свою жёлтую майку Лидера по экономичности ( 60 ватт.час км) и желая улучшать этот показатель,
уже пробовал для принуд.обдува бытовой пылесос. От 60вольт постоянки, коллекторный ~220 вольтовый- работает, но ........уж очень шумно !
Может , кто предложит другие варианты? Я знаю, были пробы и на Волге 21 и на "Голубой мечте" Вячеслава М.


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2197Повідомлення 18 квіт 2014, 11:13 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Михалыч, могу допрограммировать сюда контроллер под любой двигатель. Это не сложно, т.к. не нужна рекуперация, да и без датчика оборотов можно обойтись.


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2344Повідомлення 25 квіт 2014, 15:31 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Кстати, схема работает и без подключения датчиков тока и напряжения. В этом случае она регулирует обороты вентилятора в зависимости от температуры.

А на столь сложный наворот с контролем мощности тягового двигателя меня натолкнул алгоритм регулировки оборотов вентилятора в моём компьютере. В нём обороты регулируются в зависимости от температуры и загрузки процессора. Очень эффективная вещь. Я просто повторил его.


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2352Повідомлення 25 квіт 2014, 20:52 
Власник електромобіля, член клубу
Аватара користувача
Не в мережі

Звідки: Киев, Украина
Дякував (ла) 880 Подякували 179
Мій електротранспорт: Porsche 924 Молния, Nissan Leaf, Trabant EV, Citroen Saxo
Хочу електротранспорт: Прототип Народного ЭМ
Вадим а какая цена будет такого устройства? есть вентилятор купленный у Гришы.. думаю что с ним делать =)

_________________
http://elmob.co


Повернутися до початку
 Профіль  
Відповісти цитуючи  
#2356Повідомлення 26 квіт 2014, 11:11 
Голова клубу
Аватара користувача
Не в мережі

Звідки: Україна, Донецьк => Ірпінь
Дякував (ла) 6733 Подякували 2480
Мій електротранспорт: Tesla S
Хочу електротранспорт: е-панцирник
Не считал, т.к. проект не коммерческий.
МК - 15грн
Датчик температуры - 15грн
ULN - 5грн

В общем, по запчастям без корпуса, если подключать только датчик температуры, то выйдет гривен 40-50.


Повернутися до початку
 Профіль  
Відповісти цитуючи  
Показати повідомлення за:  Поле сортування  
Почати нову тему Відповісти на тему  [ Повідомлень: 10 ]             

Часовий пояс: UTC + 2 години


Хто зараз на конференції

Зараз цей форум переглядають: немає зареєстрованих користувачів і гості: 1


Ви не можете створювати нові теми
Ви не можете відповідати на повідомлення
Ви не можете редагувати свої повідомлення
Ви не можете видаляти свої повідомлення
Ви не можете додавати додаткові файли

Найти:
Створено на основі phpBB® Forum Software © phpBB Group