Помогите додумать алгоритм контроллера тока для электромопед

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Помогите додумать алгоритм контроллера тока для электромопед

Сообщение clawham »

Творю с нуля самостоятельно электромопед :)
Мощный двигатель на полтора киловатта (3 пиково)
аккумуляторы литиевые токоотдача 100 ампер (пиково 300)
напруга аккумов 24 вольта(6 банок лития последовательно)
соответственно контроллер двигателя(ибо двигатель безсенсорный бесколекторник)
на транзюках IRF3205

Немного предистории...
Механика от мопеда ямаха минт....самый экономичный редуктор цепной и простое центробежное сцепление на 3500 оборотов...
заменой пружинок можно добиться начала срабатывания на 500-800 оборотах....не в этом суть

Двигатель посажен на вал мотора который заменен самостоятельно выточенным и крутит напрямую сцепление через сальник.

Игрался я с этой механикой в гараже в тисках - получил такую информацию...
ток холостого хода(без масла) 20 ампер...на любых оборотах....как дань моде :)
под заторможенным колесом (канатик и кантер) ток вообще никак не меняется пока не начнет упираться сцепление....как только этот момент настал 1-3% резистора тяги(просто PWM модуляция) резко увеличивают ток до 100 ампер а тягу до 9-11 килограмм...

попробывал в таком режиме покататься - результат вот - http://clawham.hopto.org/DriveD/PubD/54/MVI_7651.avi 14 мегабайт

пришел к выводу что вообще нереально чтолибо делать если не контролировать ток контроллером и не ограничивать его...

промучавшись недели 2-3 родилась схема усилителя-выпрямителя-интегратора на простых операционниках с минимумом обвязки и обеспечивающая работу что с шунтом(фазный провод) что с токовым трансформатором(шунт просто больше по номиналу и полная развязка по мощному питанию...

Схема примерная вот - Изображение

контроллер мега8а
инструментальный усилитель техасский ina2126, далее lm358 как выпрямитель и повторитель выхода с выпрямителя...
игрался с шунтами и точностью ... добился устойчивого сигнала на ацп в 7 попугаев при изменении входа на 0.1 милливольт(точнее просто нет приборов под рукой)....

остановился на токовом трансформаторе(взял простой трансик от антенного усилителя со сгоревшей первочкой и пропустил вокруг центрального штыря один виток силового провода...12 вольтовую вторичку нагрузил 5 оммами....получился амперметр показывающий в милливольтах ток*10 ... немного усилив и выпрямив это напряжение получил 100 попугаев ацп на 1 ампер - это для экспериментов на столе достаточно(можно добиться и 1 миллиампера на 1 попугай ацп) ну да не в этом дело....осцилографом смотрел вход АЦП на 50 герцах и нагрузке - галогенке - при перепаде тока с 1.5 ампер до 4 на входе напруга увеличивается за 50-70 миллисекунд...довольно быстро...
естественно что на моторе будет до 1-2 килогерц но это я осцилографом не проверял...просто взял маленький моторчик и показания по АЦПшным попугаям сошлись с показаниями тока от батарейки(постоянка) - вывод вся аналоговая часть рабоатет...

Теперь самое главное....я все измерения и расчеты провожу в прерывании АЦП.....работает на 250 килогерцах...мега 8 от внутреннего гена 8 мегагерц....кроме АЦП у меги больше нет задач - она в основном цикле просто в уарт на 57600 килобитах гонит все данны расчетов

Проблема вот в чём....я второй день до 2 ночи не спал...играюсь с настройками и никак не могу получить удобоваримый результат! либо начинаются автоколебания(то полный газ и ток до 2 ампер то сбивает газ до нуля), либо слишком медленная реакция(мотор раскручивается поддерживая 200 амиллиампер но стоит его резко нагрузить - ток до 2 ампер и плавно понижается...)

Эти все эффекты как-бы недопустимы на большом моторе ибо приведут к тому что на видео...нагрузка то на мотор меняется достаточно резко хоть он и есть маховик...

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

прошивку конечно же предоставляю на общий суд! http://clawham.hopto.org/DriveD/PubD/54/31_moped.zip

по тексту там всё комментировано....разве что выход...нужно понимать что выход - PWM ориентированный...1 миллисекунда = 0 газа 2 миллисекунды = 100% газа... таймер настроен на PWM и клоцает каждую микросекунду - в него надо загружать значения 990 + (значение выхода 0...1000) ....

пытался сообразить PI регулятор, П и И отдельно....ничего не получается....моторчик от сидюка...поэтому с ним ничего не произойдет да и питание 8 вольт...но я не могу понять почему я никак не могу хотябы приблизиться к нужному результату.....в принципе был уже один раз случайно подобный требуемуму результат...когда я увеличивал в 14 раз ошибку(просто случайно ошибся) но получилось что ток стабилизируется в два раза меньший...

Код: Выделить всё

unsigned int adcdat=0;

unsigned char ind = 0;

unsigned int GasOut=0;
unsigned long int GasOutTemp=0;

unsigned int PWMout=0;
unsigned int PWMoutTemp=0;

unsigned int GasInput=0;
unsigned int GasTemp=0;

unsigned int GasDelta=0;

unsigned int IInput=0;
unsigned int ITemp=0;

unsigned int IsetInput=0;
unsigned int IsetTemp=0;

unsigned int GasMinInput=0;
unsigned int GasMinTemp=0;
unsigned int GasMaxInput=0;
unsigned int GasMaxTemp=0;

#define GasPresc 3
#define GasMinPresc 2
#define GasMaxPresc 2
#define IPresc 0
#define IsetPresc 2
#define GasOutPresc 2
#define PWMoutPresc 3

это обьявления переменных

Код: Выделить всё

// тут то вся наша обработка!
if(ind==1)
{
    // вход 1 (24 - PC1) это вход с потенциометра газа
    if(GasInput<adcdat)
    {
        // переменная газа не доганяет - инкрементируем
        if(GasTemp<65530)
            GasTemp+=adcdat-GasInput;
    }
    else
    {
        //переменная газа перелетела реальное значение - уменьшаем
        if(GasTemp>0)
            GasTemp-=GasInput-adcdat;
    }
    GasInput = GasTemp>>GasPresc;
    if(GasInput>GasMinInput)
        GasOutTemp=GasInput-GasMinInput;
    else
        GasOutTemp=0;
    GasOutTemp=(GasOutTemp*1000);
    GasOut=GasOutTemp/GasMaxInput;
}
else if(ind==4)
    {
        // это вход тока (27 нога )
        if(IInput<adcdat)
        {
            // переменная тока не доганяет - инкрементируем
            if(ITemp<65530)
                ITemp+=adcdat-IInput;
        }
        else
        {
            //переменная тока перелетела реальное значение - уменьшаем
            if(ITemp>0)
                ITemp-=IInput-adcdat;
        }
        IInput = ITemp>>IPresc;
        
        // тут считаем влияние тока на PWM
        if(GasOut>50)
        {   
            // если газ больше 50 то работаем
            if(IInput>IsetInput)
            {
                // перелетели заданный ток...превышение
                // будем уменьшать выход pwm пока не упремся в 50 - типа минимум
                if(PWMout>50)
                {
                    //PWMoutTemp-=(IInput-IsetInput)>>1;
                    GasDelta = IInput-IsetInput;
                    if(GasDelta<10)
                        PWMoutTemp-=GasDelta;
                    else if(GasDelta<30)
                        PWMoutTemp-=GasDelta>>1;
                    else if(GasDelta<50)
                        PWMoutTemp-=GasDelta>>2;
                    else if(GasDelta<100)
                        PWMoutTemp-=GasDelta>>3;
                    PWMoutTemp--;
                }                               
            }
            else
            {
                // недобор тока - увеличиваем pwm до значения входа газа
                if(PWMout<1024)
                    if(PWMout<GasOut)
                    {
                        GasDelta = GasOut-PWMout;
                        if(GasDelta>10)
                            PWMoutTemp+=2;
                        else if(GasDelta>30)
                            PWMoutTemp+=3;
                        else if(GasDelta>50)
                            PWMoutTemp+=4;
                        else if(GasDelta>100)
                            PWMoutTemp+=5;
                        else if(GasDelta>300)
                            PWMoutTemp+=6;
                            
                        //PWMoutTemp+=(GasOut-PWMout)<<2;
                        PWMoutTemp+=1;
                    }
                    else
                        PWMoutTemp-=PWMout-GasOut;
            }                                
        }
        else
        {
            // иначе на выход PWM бросаем ноль
            PWMoutTemp=0;
        }
        
        // считаем PWMout из сглаживающей переменной
        PWMout = PWMoutTemp>>PWMoutPresc;
                                         
        // проверяем и коректируем лимиты
        if(PWMout<40)
            PWMout=0;
        if(PWMout>1024)
            PWMout=1024;
            
        // выдаём заданный уровень выходного сигнала            
        OCR1A = 990+PWMout;                                  
        
}
else if(ind==2)
{
    // вход переменника установки нуля входа газа
    if(GasMinInput<adcdat)
    {
        // переменная газа не доганяет - инкрементируем
        if(GasMinTemp<65530)
            GasMinTemp++;
    }
    else
    {
        //переменная газа перелетела реальное значение - уменьшаем
        if(GasMinTemp>0)
            GasMinTemp--;
    }
    GasMinInput = GasMinTemp>>GasMinPresc;
}  
else if(ind==0)
{
    // вход переменника установки усиления входа газа
    if(GasMaxInput<adcdat)
    {
        // переменная газа не доганяет - инкрементируем
        if(GasMaxTemp<65530)
            GasMaxTemp++;
    }
    else
    {
        //переменная газа перелетела реальное значение - уменьшаем
        if(GasMaxTemp>0)
            GasMaxTemp--;
    }
    GasMaxInput = GasMaxTemp>>GasMaxPresc;
}    
else if(ind==5)
{
    // вход переменника установки ограничения тока
    if(IsetInput<adcdat)
    {
        // переменная тока задачи не доганяет - инкрементируем
        if(IsetInput<65530)
            IsetTemp++;
    }
    else
    {
        //переменная тока задачи перелетела реальное значение - уменьшаем
        if(IsetInput>0)
            IsetTemp--;
    }
    IsetInput = IsetTemp>>IsetPresc;
}      

это вся обработка данных из прерывания АЦП...я уже много всяких методов сглаживания перепробывал но так и не добился плавного выхода в задачу и резкой реакции на торможение мотора(резкое возмущение)

Очень прошу помочь в решении данной головоломки ...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

интуитивно понимаю что проблема в этом кусочке

Код: Выделить всё

if(GasOut>50)
        {   
            // если газ больше 50 то работаем
            if(IInput>IsetInput)
            {
                // перелетели заданный ток...превышение
                // будем уменьшать выход pwm пока не упремся в 50 - типа минимум
                if(PWMout>50)
                {
                    //PWMoutTemp-=(IInput-IsetInput)>>1;
                    GasDelta = IInput-IsetInput;
                    if(GasDelta<10)
                        PWMoutTemp-=GasDelta;
                    else if(GasDelta<30)
                        PWMoutTemp-=GasDelta>>1;
                    else if(GasDelta<50)
                        PWMoutTemp-=GasDelta>>2;
                    else if(GasDelta<100)
                        PWMoutTemp-=GasDelta>>3;
                    PWMoutTemp--;
                }                               
            }
            else
            {
                // недобор тока - увеличиваем pwm до значения входа газа
                if(PWMout<1024)
                    if(PWMout<GasOut)
                    {
                        GasDelta = GasOut-PWMout;
                        if(GasDelta>10)
                            PWMoutTemp+=2;
                        else if(GasDelta>30)
                            PWMoutTemp+=3;
                        else if(GasDelta>50)
                            PWMoutTemp+=4;
                        else if(GasDelta>100)
                            PWMoutTemp+=5;
                        else if(GasDelta>300)
                            PWMoutTemp+=6;
                            
                        //PWMoutTemp+=(GasOut-PWMout)<<2;
                        PWMoutTemp+=1;
                    }
                    else
                        PWMoutTemp-=PWMout-GasOut;
            }                                
        }
        else
        {
            // иначе на выход PWM бросаем ноль
            PWMoutTemp=0;
        }
в прикрепленном файле лог работы с ком порта - мотор без нагрузки, резко до упору газ крутнул..по идее он должен был держать 250 миллиампер...а мотор как-бы плавно разганяться должен был....
если уменьшить #define PWMoutPresc 3 до 0 или 1 то набирает он обороты быстро но начинаются автоколебания...тоесть как-бы перерегуляция насколько я понимаю...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

ЗАменил я обработку поддержания тока на новую...по сути - пид регулятор

Код: Выделить всё

// тут считаем влияние тока на PWM
        if(GasOut>50)
        {     
                        
                    // если ток первысил - поддерживаем заданный ток
                    // иначе поддерживаем заданный газ
                    
                    //if(IInput>IsetInput)
                    //{    
                        error       = IsetInput-IInput;
                        if(error>1024)
                            error=1024;
                        if(error<-1024)
                            error=-1024;
                            
                        if(error>0)
                        {
                            error=error/4;
                            if(error<1)
                                error=1;
                        }
                        
                        if(error<0)
                        {
                            error=error/4;
                            if(error>-1)
                                error=-12;
                        }
                        
                        
                        
                            
                        if(SumError>(maxerror))
                            SumError=(maxerror);
                        
                        if(SumError<(0-(maxerror)))
                            SumError=0-(maxerror);
                           
                        SumError      += error;
                        //SumError    = temp;   
                        
                        i_term      = I_Factor * SumError;
                        
                        //i_term=i_term>>4;
                                     
                        p_term = P_Factor * error;
                        
                        // Calculate Dterm
                        temp=0;
                        for(i=0;i<=16;i++)
                        {
                            temp+=lastProcessValue[i];
                        }
                        temp=temp>>4;
                        d_term      = D_Factor * (temp - IInput);
                                                            
                        if(currlast++>16)
                            currlast=0;
                            
                        lastProcessValue[currlast] = IInput;

                        //PWMoutTemp  = (p_term + i_term + d_term);
                        temp=(long int)(p_term) + (long int)(i_term) + (long int)(d_term);
                        
                        if(temp>(maxerror))
                            temp=(maxerror);
                        if(temp<0)
                            temp=0;
                                             
                        //if(PWMoutTemp>0)
                            PWMoutTemp=temp;
                        //else
                        //    PWMoutTemp=0;
                    //}
                    //else
                    /*
                        if(GasOut>PWMout)
                            PWMoutTemp+=1;
                        if(GasOut<PWMout)
                            PWMoutTemp-=1;
                        */
        
                                          
        }
        else
        {
            // иначе на выход PWM бросаем ноль
            PWMoutTemp=0;
            SumError=0;
            lastProcessValue[0]=0;
            i_term=0;
            p_term=0;
            d_term=0;

        }
        
        // считаем PWMout из сглаживающей переменной
        PWMout = PWMoutTemp>>PWMoutPresc;

при этом переменные используются вот такие

Код: Выделить всё


// будем почаще оцифровывать канал газа и тока и пореже - входы установочных резисторов
#define ChainNum 20
flash unsigned char ChannelChain[ChainNum]={0,5,2,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4}; 

unsigned char ind = 0;

unsigned int GasOut=0;
unsigned long int GasOutTemp=0;

int PWMout=0;
unsigned int PWMoutTemp=0;

unsigned int GasInput=0;
unsigned int GasTemp=0;

int IInput=0;
unsigned int ITemp=0;

int IsetInput=0;
unsigned int IsetTemp=0;

unsigned int GasMinInput=0;
unsigned int GasMinTemp=0;
unsigned int GasMaxInput=0;
unsigned int GasMaxTemp=0;

#define GasPresc 3
#define GasMinPresc 2
#define GasMaxPresc 2
#define IPresc 0
#define IsetPresc 2
#define GasOutPresc 2

#define PWMoutPresc 4

// переменные пида

#define P_Factor     200

#define I_Factor     1

#define D_Factor     500

signed int error      =0;
signed int SumError   =0;

long int temp       =0;
char i;

// дифференциальный вход - будем сглаживать усредняя
int lastProcessValue[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char currlast=0;

int p_term     =0;
int i_term     =0;
int d_term     =0;

long int maxerror = (int)(1024)<<PWMoutPresc;

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

табличку работы можно увидеть тут http://clawham.hopto.org/DriveD/PubD/54/3/9.txt
здесь нагрузка на мотор - вентилятор...
как-то оно некрасиво работает....дергается...на малых скоростях....
ну и насущный вопрос...ток то оно поддерживает....а как выход ограничить что бне больше задачи входа газа был? просто условие поставить? пид процесс будет сходить с ума....насыщаться....

Прошу хоть какой-то помощи или идей....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

а кондёры вешать на ацп не учили??? или всёж схема далека от реальной? незабывай про пульсации при работе с катушками ,а 3кв ето огромная катушка ,попробуй перед стартом куллера впаяй кондёр в ацп и на всякий к куллеру ,должно немного успокоить
более реальную схему лучше брось ,там прекинем)))
Реклама
Эиком - электронные компоненты и радиодетали
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

и ещё ,как часто делаеш замер ??? можно было бы задержку на сек сделать , так как нагрузка изменяется (в момент разгона) напряжение тоже просядет
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

схема более чем реальная :) номиналы только не сходятся...
на входе ацп резюки 10 килоом и кандеры на аналоговую землю 0.1 мкф
что на резюках-подстроечниках, что на токовом сенсе...
просто ацп-то работает очень быстро...15 килогерц...а уарт только 115200....подели эти 115200 на кол-во пересылаемых букафф и получится что он очень редко "выборки" делает из значений переменных...но впринципе этого достаточно...

меня индуктивность -то совсем не колышить..этим занимается выходное исполнительное устройство - трифазный контрллер/преобразователь....он следит за мотором и выдаёт PWM заполнение на нижние транзисторы 3-фазного моста в соответствии с входом(1000 нс импульс(1мс) - 0% заполнения, 2000нс импульс (2мс)- 100% заполнения)

сейчас нагрузка этого монстропреобразователя - двигатель от Сдрома крутящий диск, на вал его насажен пропеллерчик небольшой(но бОльший чем может потянуть мотор на 8 вольтах питания)
картина управляющих импульсов и тока фазы на полном газу
http://clawham.hopto.org/DriveD/PubD/54 ... %20ток.gif

неполный газ - момент старта
http://clawham.hopto.org/DriveD/PubD/54 ... иант_1.png

Фото двигателя/контроллера/мотора
http://clawham.hopto.org/DriveD/PubD/47/

Фото после реанимации
http://clawham.hopto.org/DriveD/PubD/56/

видео перегруза в первом посте....увы...

Если что ещё нужно показать померять расчитать рассказать - пожалуйста...проект открытый и его результатами делюсь с общественностью полностью...

на сколько я понимаю проблема моя заключается в этом что после выдачи газа 100% ток доходит с запозданием в 30-100 миллисекунд....потому что контроллер газа тоже не суперсверхсветовая микросхема а такая же мега 8 которая и обрабатывает-то входной сигнал не чаще 50 раз с векунду....в его логику работы я вмешаться не могу...
вот п составляющая и сходит с ума ведь целых 100 мс идёт недобор тока....естественно она наращивает выход вплоть до насыщения а потом доганяется ток уже перелетом...потому что мало того что надо расчехлиться контроллеру силовому....надо ж ещё и накопить на интеграторе/фильтре значение(кандер на АЦП) по идее уменьшить кондер и все дела...ан нет...на низких скоростях частота на фазе 20-40 герц.....на максимальных - 8-16 килогерц... маленький моторчик и 8 вольт питания сильно отличаются от большого монстромотора и 26 вольт питания...бам всё гараздо резче и частоты в начале от 10 герц.....естественно крякозябрину тока такой формы на ацп подавать нельзя ибо будут то перелеты тока то ноль....потому и эмпирически установлено что этот кандер даёт +-10% килебания на 100 герцах...это допустимо...ну а если поставить меньше то резко возрастают колебания....или может нужно какой-то умный фильтр сделать перед ацп?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

аккумулятор термоядерный....выгорают провода как волоски толщиной в 3 миллиметра медные....мотор такой же - тройным таким проводом 6 витков....это не индуктивность...и сопротивления там нет.....при работе на вариатор когда колесо застопорено изменение на 5% PWM выхода приводит к увеличению тока с 20 ампер до 80 тут же...ну на слух мгновенно...там никто никуда не проседает и никаких паразитных выбросов нет....мотор с постоянными магнитами очень мощными(отвертку если попала - не оторвать руками)...если сидюковый позволяет дать полный газ и он разгонется до максимума то этот в мопеде выгорит да так што мало не покажется
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

так ето самое ,у тебя контроллер типа 1n1p? тоесть 1 мега толкает двигло , 2 следит?
у 1n1p ppm сигналом регулируются обороты в пределах 500/21000 и разброс по длительности велик и токи там до 40А так вот интересно ,ты свой на 50% гонял?
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

не совсем понял что за 1n1p

но в принципе да
одна мега 8 с закрытым кодом и защитой выставленной на отдельной платке со своим питанием преобразователями и т.д. крутит мотор....выдавая на выход 3-фазного Нмоста нужные управления....а она сама управляется ППМ сигналом 1-2 миллисекунды 1 - минимум газа - тоесть ноль....2 миллисекунды - максимум газа тоесть нет заполнения....

а другой контроллер(тот который сделал я [img]http://clawham.hopto.org/DriveD/Photo/Электромопед/2011-03-26/[/img]) уже решает сколько газу надо для того чтоб ток не вылез за предел но и не упал в ноль
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

так ты смог прогнать его на 50% хотяб ??
чёт напрягает 1мик 0% 2м 100% хотяб 1-5 тогда плавность будет приемлемая
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

не совсем понимаю...1 миллисекунда это ноль и я этот контроллер не делал это был готовый на 30 ампер я просто выход усилил....не понимаю в чём удивление? транзюки irf3205
мотор когда выходит на обороты заданные напряжением потребляет минимум
я его и до 7000 раскручивал(26 вольт) не понимаю в чём проблема?
моя лично проблема в алгоритме управления чтоб он сам сбрасывал газ если ток превысил 90 ампер и добирал вверх газ если ток меньше 80 ампер и процент газа меньше заданного с ручки газа...
контроллер нормальный с драйверами и потому транзюки любые
программу контроллера никто не зашивал - с рождения была и работала нормально очень много настроек тайминго тормоза и т.д.
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

ну про контроллеры без К я знаю ,только там pwm контролирует обороты засчёт обратной связи 1n1p тоже без исходников , только для тупой зашивки
так там идёт слежение за оборотами движка соответственно и ток меняется у тебя получается что цель контроллера только 3 фазы давать ,а должен регулировать сам
так как ты объясняеш у тебя 1мсек =0 : 2м = 1 и тебе надо ими ещё шим строить ,а должен 1 контроллер сам держать обороты чёткие , а 2 контроллер быть на ручке газа и давать ppm и чем то ещё рулить
я читал про контроллеры кучу информации и сейчас велики со стиральным двиглом ездит на 96V и 3 фазники без К в колесе монтируют так у них пиковый разгоночный ток велик ,далее по приказу ррм
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

А мы ведь не обсуждаем какой контроллер силовой части использовать!!!!
я их перепробывал штук 8 разных китайских и только этот смог нормально и эффективно крутить этот монстродвигатель!!!
вопрос в том что оно или возбуждается или вяло нарастает....я вот думаю может заюзать резистор/шунт на общей минусовой шине...правда прийдётся все кандеры между + и землей силовой перенести ДО шунта...думаю это не проблема будет...зато трифазный ток будет как бы сглаженным и его можно будет без интегратора прямо на ацп подавать...это должно увеличить скорость реакции обратной связи...

те контроллеры для сенсорников - это просто набор логики там очень всё просто + там громаднейший запас по перегрузочной способности + токи очень скромные....изза напряжения сумашедшего....а у меня совсем дургое дело!!!

ну нет обратной связи у силового контроллера....импульсы1-2 мс генерятся очень просто - таймер в режиме фаст пвм 1000 килогерц ставится и ограничивается предел не ffff а 26ff
результат - имеем 1024 ступеньки от нуля до максимума - довольно много!
осталось нормальную обратную связь сделать....и нормальный ПИД алгоритм удержания тока
все проекты контроллеров блдц с ограничением тока - полная лажа у меня так не работает я так сразу сделал - при перелете тока начинаем увеличивать переменную которую от взода ручки газ амы отнимаем....результат оно или нарастает секунд 20(а помоему это неприкольно получить реакцию на подачу газа через 10 секунд стоя на светофоре), или начинает возбуждаться
попробую обойтись шунтом....правда хочу просто мерять падение на куске провода....провод очень крутой толстый и супермногожильный(1850 жилок).....пока его нет....был кусочек кончился...новые 4 метра ещё не доехали.....сейчас попробую на стендике 0.1 резюк поставить на сурсы нижних полевиков....посмотрим чем обернется...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

clawham писал(а): вопрос в том что оно или возбуждается или вяло нарастает.......
вот именно что у тебя неправильно работает контроллер !!!!
я конечно понимаю что зверь машинка ,то что он крутится это вообще чудо)
но контроллер должен чётко знать каково состояние ротора , у тебя же контроллер от авио модели с улучшеным вых каскадом а в орегинальном варианте без обратной связи нельзя с ним нормально работать! там спец делитель должен быть на 3 фазы и на ацп вход
в твоём варианте проще прикрепить латор из трамвая чем заставлять плавно крутится движку от твоего сигнала .
без обид но ето маразм!!! программа амперметра везде есть твоя схема впринципе работоспособная ,только что ето изменит??? опять же будет всё гореть если не исправить регулятор шим заполнение необходимо отладить!
CS16AMX
Нашел транзистор. Понюхал.
Сообщения: 195
Зарегистрирован: Вт ноя 30, 2010 00:50:40

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение CS16AMX »

почему медленно? ты не используй лишние выходы с него типа юарта просто поставь замер ацп и подстановка его в формуле расчёта ррм и выводи должно перестраивать мощу со скоростью хотяб 1/4сек
а то пид в схеме где уже есть 2 шипа выйдет уже 3 шима)
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

мы друг друга не понимаем...и говорим на разных языках...

есть ДВА контроллера....один источник ППМ сигнала
Второй следит за положением ротора и комутирует обмотки+выдаёт PWM на нижние транзисторы один-в-один как задано с ппм канала...больше он ничего не делает!!!

мой контроллер имеет вход ручки газа и тока
вход с ручки газа он должен выдавать ровно как есть на выход...но если при этом действе ток зашкалит за установленный предел он должен начать поддерживать этот ток меняя значение ППМ канала!!!

мотор очень четко привязывается к заполнению pwm выхода силового и например на 50% ппм входа будет крутить ровно 3200 оборотов...при попытке его притормозить он ответит реактивным возрастанием тока и крутящего момента...можно считать что контроллер имеет вход оборотов...но это изза очень жесткой характеристики мотора!

вот и получается что только интегральной составляющей(которая и используется во всех самопальных регулях силовых и встроена сразу) для ограничения тока просто очень медленно реагирует на перепады этого тока.....но маленькие моторы этого прощают ибо не такие жесткие не так сильно привязана частота вращения к задаче pwm.... вот у всех и работает....а у меня или возбуждается или например вышел я на 20 ампер....притормозил(на камушек наехал) а ток подскочил до 100 ампер а потом плавно упал вниз на положенные 30...это недопустимо!!!для вертолётов есть подобные пид регуляторы с точно таким же принципом работы только у них вход - скорость вращения...и она примерно одинакова....следовательно все коэфициенты под неё и подгоняются чтоб ровно и четко держать 3200 оборотов на роторе а ppm выход такой же самый для такого же самого регулятора силовой части....только мотор дургой на 26000 оборотов
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

на сколько я могу видеть - просто я никак не могу компенсировать задержку управления да и шумы измерения тока тоже мешают...поэтому
1) я наверное буду мерять шунтом сурсы нижних транзисторов
2) Перенесу процедуру пид регулятора в обработку переполнения Таймера формирующего выходные 1-2 миллисекунды и буду отрабатывать пид процедуру гораздо реже
3) все время между обработками ПИДа я буду фильтровать и усреднять замеры АЦП
4) уменьшу время нулевой паузы в выходном сигнаде до самого стабильного возможного минимума....чтоб увеличить скорость отработки нового значения газа контроллером

мерять шунт будет проще - он всегда будет одним концом на земле....сделаю его из куска мощного провода медного..мне не нужна точность +- 5-10 ампер допустимая погрешность

раз на то пошло - взведу компаратор чтоб "выстреливал" в полный останов если хоть на короткий момент ток перевалит за удвоенный заданый....будет защита двойная....лучше пусть заглохнет чем взорвется :)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: Помогите додумать алгоритм контроллера тока для электром

Сообщение clawham »

Ну воть....перепаял транзюки на подопытном стендие и вкорячил 0.1 омм между - силовым и сурсами транзисторов....
перенес процедуру ПИДрегулятора в прерывание таймера ( после каждого опускания выходного сигнала - 100 герц)
поковырял коэфициенты...так и не добился того чего хотел...да оно впринципе регулирует...да оно не насыщается когда ручкой газа ограничиваеш выход...но...стоило применить не 8 вольт питания а 12 как все коэфициенты похерились...видимо поменялась скорость реакции газ-контроллер-мотор-ток-ацп сенса тока....и он опять начинает колебаться...нужно затуплять интегрирующую составляющую...но тогда возникают перелеты при торможении...например выставил 200 ма....он плавно разгоняется в максимум а потом я его рукой бац и сбил до 50% скорости или ещё ниже...ток при этом кратковременно перелетает двукратное значение...
по идее дифференциальной составляющей нужно играться...но...ну просто труба блин....только чють что в ней тронуть как автоколебания....вроде переменные не переполняются...всё вроде нормально...может на флоат перейти....ато чтото как-то блин фигнёво...
Вложения
moped.rar
исходничег
(4.28 КБ) 160 скачиваний
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»