Полезная информация


avatar_Adaptto E-Drives Lab.

Комплект электроники для E-вела на базе синусного контроллера (maxcontroller)

Автор Adaptto E-Drives Lab., 08 Март 2012 в 00:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

jeka

В стандартных моторах сначала будет очень долго, плавно, но верно падать общий КПД из-за омических потерь в обмотке.
Порог насыщения у фаз будет очень сильно размыт, делайте поправку на то что еще и постоянные магниты бегают, причем под разным углом у разных зубцов одной и той же обмотки.
Поэтому практического толку от этой схемы не будет, как ни крути.
Проще ограничивать фазный ток, он же фактически задает лимит тепловых потерь в моторе.
LiFe A123 40AH/78v, max-e, крошка 3 витка.
На форуме бываю нерегулярно, поэтому лучше звонить чем писать в личку. Телефон adaptto: +7 495 215 2878.

nikvic

Цитата: jeka от 15 Авг. 2012 в 00:26
Проще ограничивать фазный ток, он же фактически задает лимит тепловых потерь в моторе.
А помягче?  :-)
Уж лучше ограничивать по датчику Т - иногда требуется, кровь из носа, рвануть. Т.е. превысить долговременное ограничение фазного тока.

mevial

Цитата: nikvic от 15 Авг. 2012 в 00:24
Теперь организуем "пропуски" подачи напряжения. Оказывается, КПД не изменится.
Очевидно, что там, где мы не подаём U у нас не будет вращающего момента, и соответственно из-за падения оборотов у нас так же упадёт Е, поздравляю, вы придумали новую реализацию ручки газа. А ещё жужжать наверное будет громче меандра. Но мне-то нужно не убавлять момент, я может быть в горку еду, и хочу это делать как можно эффективней для данного мотора, колеса и напряжения. Так давайте обсуждать не "как снизить момент не уменьшив кпд", а как получить наибольший момент не уйдя в насыщение железа, ведь основной ограничивающий фактор - мотор.

jeka

Цитироватькак получить наибольший момент не уйдя в насыщение железа
Далеко не только в насыщении дело.
Ограничить фазный ток на приемлимом уровне КПД и теплового режима, не давать мотору перегреться. Чем горячее - тем хуже момент. И в основном не из-за насыщения, а из-за омических потерь и еще немного из-за свойств магнитопровода.
LiFe A123 40AH/78v, max-e, крошка 3 витка.
На форуме бываю нерегулярно, поэтому лучше звонить чем писать в личку. Телефон adaptto: +7 495 215 2878.

av-master

собственно. Китайцы молодцы ?

еще моментик. возможна намотка при которой противоэдс будет трапецией ? мне тут подсказывают что у настоящих PMSM для синуса. обратная ЭДС -- трапеция. а BLDC тем и отличается, что оптимизмрован под трапецию. я как-то несильно верю. но подсказывает чел с Двигательного факультета, сегодня они мой вопрос на кафедре обсуждали и пришли к такому мнению)

nikvic

Цитата: mevial от 15 Авг. 2012 в 00:39
Цитата: nikvic от 15 Авг. 2012 в 00:24
Теперь организуем "пропуски" подачи напряжения. Оказывается, КПД не изменится.
Очевидно, что там, где мы не подаём U у нас не будет вращающего момента, и соответственно из-за падения оборотов у нас так же упадёт Е, поздравляю, вы придумали новую реализацию ручки газа. А ещё жужжать наверное будет громче меандра.
Придётся повторить.
Напряжение подаётся всё время, и в точности на те пары фаз, что и для меандра. Только в случае меандра оно, это U, постоянно, а в моём - меняется. В начале и конце рабочего такта - 87% (косинус 30 градусов) от срединного максимума.

mevial

Цитата: nikvic от 15 Авг. 2012 в 10:03
Придётся повторить.
Напряжение подаётся всё время, и в точности на те пары фаз, что и для меандра. Только в случае меандра оно, это U, постоянно, а в моём - меняется. В начале и конце рабочего такта - 87% (косинус 30 градусов) от срединного максимума.
А вам не кажется, что бросок с 0 до 87% будет не сильно по звуку отличаться от броска 0 - 100%. Т.е. МК будет жужжать!

nikvic

Цитата: mevial от 15 Авг. 2012 в 12:10
Цитата: nikvic от 15 Авг. 2012 в 10:03
Придётся повторить.
Напряжение подаётся всё время, и в точности на те пары фаз, что и для меандра. Только в случае меандра оно, это U, постоянно, а в моём - меняется. В начале и конце рабочего такта - 87% (косинус 30 градусов) от срединного максимума.
А вам не кажется, что бросок с 0 до 87% будет не сильно по звуку отличаться от броска 0 - 100%. Т.е. МК будет жужжать!
Меньше, чем с трапецией. Переключения фаз те же самые, но -
Жужжит бросок тока (я моделировал переходные процессы для трапеции, и графики где-то здесь есть), и в моём варианте он заметно меньше.

mevial

Цитата: nikvic от 15 Авг. 2012 в 12:24
Меньше, чем с трапецией. Переключения фаз те же самые, но -
Жужжит бросок тока (я моделировал переходные процессы для трапеции, и графики где-то здесь есть), и в моём варианте он заметно меньше.
То, что меньше - понятно, а полный синус вообще не жужжит.

nikvic

Цитата: mevial от 15 Авг. 2012 в 12:35
Цитата: nikvic от 15 Авг. 2012 в 12:24
Меньше, чем с трапецией. Переключения фаз те же самые, но -
Жужжит бросок тока (я моделировал переходные процессы для трапеции, и графики где-то здесь есть), и в моём варианте он заметно меньше.
То, что меньше - понятно, а полный синус вообще не жужжит.
Я не рекламирую свой вариант. Он придуман  в ответ на замечание, что для полного синуса нужен дабл-ШИМ и это даёт дополнительные потери.

Если убрать второй, для промежуточной по потенциалу фазы, то потери в качестве естественны - но  не неизбежны: неизвестно, сколько теряется для управления "слабой" в эти промежутки фазы.

Мощность от этого упрощения падает незначительно, КПД не хуже, поведение вблизи ХХ аналогично поведению для полного синуса (у трапеции КПД рано падает при приближении к ХХ).

mevial

Цитата: nikvic от 15 Авг. 2012 в 13:53
Мощность от этого упрощения падает незначительно, КПД не хуже, поведение вблизи ХХ аналогично поведению для полного синуса (у трапеции КПД рано падает при приближении к ХХ).
Что значит вблизи ХХ? Это когда на меандре шим вообще курит в сторонке? И что значит падает мощность? Входная, выходная? И незначительно это на сколько процентов(относительно синуса)?

av-master

Тут кусок рабочей таблицы из проектра. если есть желание можете внести правку. проверим как нить.
Спойлер
// This sinewave lookup table has 171 entries.  (1024 points per
// electrical cycle -- 1024*(60/360) = 171)
// The table covers 60 degrees of the sine function.

const int sinetable[] =
{0,201,401,602,803,1003,1204,1404,1605,1805,
2005,2206,2406,2606,2806,3006,3205,3405,3605,3804,4003,4202,4401,4600,
4799,4997,5195,5393,5591,5789,5986,6183,6380,6577,6773,6970,7166,7361,
7557,7752,7947,8141,8335,8529,8723,8916,9109,9302,9494,9686,9877,10068,
10259,10449,10639,10829,11018,11207,11395,11583,11771,11958,12144,
12331,12516,12701,12886,13070,13254,13437,13620,13802,13984,14165,
14346,14526,14706,14885,15063,15241,15419,15595,15772,15947,16122,
16297,16470,16643,16816,16988,17159,17330,17500,17669,17838,18006,
18173,18340,18506,18671,18835,18999,19162,19325,19487,19647,19808,
19967,20126,20284,20441,20598,20753,20908,21062,21216,21368,21520,
21671,21821,21970,22119,22266,22413,22559,22704,22848,22992,23134,
23276,23417,23557,23696,23834,23971,24107,24243,24377,24511,24644,
24776,24906,25036,25165,25293,25420,25547,25672,25796,25919,26042,
26163,26283,26403,26521,26638,26755,26870,26984,27098,27210,27321,
27431,27541,27649,27756,27862,27967,28071,28174,28276,28377};

Ну на всякий случай продолжение.
Спойлер
//---------------------------------------------------------------------
// The function SVM() determines which sector the input angle is
// located in.  Then, the modulation angle is normalized to the current
// 60 degree sector.  Two angles are calculated from the normalized
// angle.  These two angles determine the times for the T1 and T2
// vectors.  The T1 and T2 vectors are then scaled by the modulation
// amplitude and the duty cycle range.  Finally, the T0 vector time
// is the time left over in the PWM counting period.
// The SVM() function then calculates three duty cycle values based
// on the T0, T1, and T2 times.  The duty cycle calculation depends
// on the
// appropriate duty cycle values depending on the type of SVM to be
// generated.
//---------------------------------------------------------------------

void SVM(int volts, unsigned int angle)
{
// These variables hold the normalized sector angles used to find
// t1, t2.
unsigned int angle1, angle2;

// These variables hold the space vector times.
unsigned int half_t0,t1,t2,tpwm;

// Calculate the total PWM count period, which is twice the value
// in the PTPER register.
tpwm = PTPER << 1;

// Limit volts input to avoid overmodulation.
if(volts > VOLTS_LIMIT) volts = VOLTS_LIMIT;

if(angle < VECTOR2)
    {
    angle2 = angle - VECTOR1;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2
   
    // Calculate duty cycles for Sector 1  (0 - 59 degrees)
    PDC1 = t1 + t2 + half_t0;
    PDC2 = t2 + half_t0;
    PDC3 = half_t0;
    }

else if(angle < VECTOR3)
    {
    angle2 = angle - VECTOR2;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2

    // Calculate duty cycles for Sector 2  (60 - 119 degrees)
    PDC1 = t1 + half_t0;
    PDC2 = t1 + t2 + half_t0;
    PDC3 = half_t0;
    }

else if(angle < VECTOR4)
    {
    angle2 = angle - VECTOR3;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2
   
    // Calculate duty cycles for Sector 3  (120 - 179 degrees)
    PDC1 = half_t0;
    PDC2 = t1 + t2 + half_t0;
    PDC3 = t2 + half_t0;
    }

else if(angle < VECTOR5)       
    {
    angle2 = angle - VECTOR4;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2

    // Calculate duty cycles for Sector 4  (180 - 239 degrees)
    PDC1 = half_t0;
    PDC2 = t1 + half_t0;
    PDC3 = t1 + t2 + half_t0;
    }

else if(angle < VECTOR6)
    {
    angle2 = angle - VECTOR5;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2

    // Calculate duty cycles for Sector 5  (240 - 299 degrees)
    PDC1 = t2 + half_t0;
    PDC2 = half_t0;
    PDC3 = t1 + t2 + half_t0;
    }

else
    {
    angle2 = angle - VECTOR6;       // Reference SVM angle to the current
                                    // sector
    angle1 = SIXTY_DEG - angle2;    // Calculate second angle referenced to
                                    // sector

    t1 = sinetable[(unsigned char)(angle1 >> 6)];   // Look up values from
                                                    // table.
    t2 = sinetable[(unsigned char)(angle2 >> 6)];

    // Scale t1 to by the volts variable.
    t1 = ((long)t1*(long)volts) >> 15;
    // Scale t1 for the duty cycle range.
    t1 = ((long)t1*(long)tpwm) >> 15;
    // Scale t2 time
    t2 = ((long)t2*(long)volts) >> 15;
    t2 = ((long)t2*(long)tpwm) >> 15;

    half_t0 = (tpwm - t1 - t2) >> 1;        // Calculate half_t0 null time from
                                            // period and t1,t2
   
    // Calculate duty cycles for Sector 6  ( 300 - 359 degrees )
    PDC1 = t1 + t2 + half_t0;
    PDC2 = half_t0;
    PDC3 = t1 + half_t0;
    }
}           // end SVM()

nikvic

Цитата: mevial от 15 Авг. 2012 в 15:08
Цитата: nikvic от 15 Авг. 2012 в 13:53
Мощность от этого упрощения падает незначительно, КПД не хуже, поведение вблизи ХХ аналогично поведению для полного синуса (у трапеции КПД рано падает при приближении к ХХ).
Что значит вблизи ХХ? Это когда на меандре шим вообще курит в сторонке? И что значит падает мощность? Входная, выходная? И незначительно это на сколько процентов(относительно синуса)?
Мне трудно отвечать - это уже было. И смотрите симулятор.
По сравнению с синусом синус-трапеция имеет мощность %% на 10 меньше (-3% крейсерской скорости) и, как и синус, предел КПД - 100% рядом с ХХ (без потерь на ШИМ). У трапеции КПД не может быть больше 92%...

nikvic

Попробую свести воедино свои "изыскания". Предполагается, что контроллер ничего не жрёт, сопротивление не меняется, магнитное насыщение отсутствует.

Интересуют две точки на графике моментов, начальный момент и ХХ. В моих предположениях график момента - отрезок прямой, а фактически (симулятор) у него есть небольшая выпуклость вниз.

Если ХХ - макс. скорость без нагрузки для синуса, то  у трапеции будет ХХ*0.95/0.91. У "полусинуса" та же ХХ.
На скоростях ХХ фазный ток у синуса и полусинуса равен нулю, у трапеции он знакопеременный.
При подходе к ХХ КПД синусов стремится к 100%, КПД трапеции падает до нуля.
Максимальная полезная мощность у синусов - при КПД 50% точно в середине диапазона, при скорости ХХ/2. У трапеции точка макс. мощности чуть сдвинута направо.

Теперь пусть М0 - средний момент для мааалой скорости у синуса.
У трапеции будет  М0*0.95.
У полусинуса - М0*0.91.

Эти 0.95 и 0.91 суть средние значения косинуса и его квадрата для диапазона -30... +30 градусов.

LWW

Люди! Вот в чём вопрос. Я на МК уже буду этой зимой ездить? И ли по прежнему на ржавой цепочке??  :neg:

jeka

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

А про КПД - потери на ШИМ надо в первую очередь учитывать. Они на малом фазном токе очень существенны.
LiFe A123 40AH/78v, max-e, крошка 3 витка.
На форуме бываю нерегулярно, поэтому лучше звонить чем писать в личку. Телефон adaptto: +7 495 215 2878.

Wector

Цитата: jeka от 30 Авг. 2012 в 23:26
А про КПД - потери на ШИМ надо в первую очередь учитывать. Они на малом фазном токе очень существенны.
А в каких режимах езды они проявляются (малые фазные токи)?
Сверхкомпактная зарядка https://electrotransport.ru/index.php?topic=43983.msg1021625#new
"Крутизна" на траекторию полета пули не влияет.

nikvic

Цитата: Wector от 31 Авг. 2012 в 11:00
Цитата: jeka от 30 Авг. 2012 в 23:26
А про КПД - потери на ШИМ надо в первую очередь учитывать. Они на малом фазном токе очень существенны.
А в каких режимах езды они проявляются (малые фазные токи)?
Во всех - чтобы выдерживать форму потенциала. При этом аж на двух фазах...