управление трехфазным асинхронным двигателем

in37usd
Offline
Зарегистрирован: 17.12.2015

существует ли ардуино для управления трехфазным асинхронным двигателем?

шесть ШИМ ,работающих синхронно, от одной функции или одной группы регистров???

switch
Offline
Зарегистрирован: 07.12.2015

Для этого придуманы частотные приводы. Но это дорого. 

У самого кстати вопрос стоит: нужно регулировать скорость вентиляторов. Пока взял на 12 вольт...

in37usd
Offline
Зарегистрирован: 17.12.2015

мне требуется создать задающий генератор для инвертора 6 каналов

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Вам к dimax  на поклон надо идти....

Только он на таймерах чудеса воплощать  в  жизнь умеет 
Например : http://arduino.ru/forum/programmirovanie/pwm-v-arduino#comment-129212

Даже на ATTINY13 сможет , если ног хватит ;)
Почитайте, по моему это ваш случай:

https://www.google.ru/search?q=d+class+amplifier&newwindow=1&biw=1920&bi...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

in37usd, не существует.  Нужны синхронные таймеры. Копайте в сторону специализированных МК типа AT90PWM, или покупайте готовый контроллер.

switch
Offline
Зарегистрирован: 07.12.2015

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

switch
Offline
Зарегистрирован: 07.12.2015

dimax дал дельный совет. Вот есть такая плата http://www.atmel.com/Images/doc7638.pdf

стоит правда бессовестных денег. Но к ней есть схемы и прошивки.

in37usd
Offline
Зарегистрирован: 17.12.2015

А какие средства отладки для AT90PWM существуют - можно ли хоть один кронтроллер из этой группы отладить через USB ??

я сейчас выбираю на чем остановиться, чтобы обойтись без покупки отладчика

программатор в лаборатории есть

in37usd
Offline
Зарегистрирован: 17.12.2015

до этого программировал PIC контроллеры- там для отладки dsPIC30F2010 требуется покупать отладчик

in37usd
Offline
Зарегистрирован: 17.12.2015

у меня вся силовая часть уже есть - от фирмы SIEMENS - надо только задающий контроллер

in37usd
Offline
Зарегистрирован: 17.12.2015

ШИМ - 6 каналов синхронных должен работать на частоте примерно 3300ГЦ

in37usd
Offline
Зарегистрирован: 17.12.2015

ШИМ - 6 каналов синхронных должен работать на частоте примерно 3300ГЦ

для dsPIC30F2010 - через отладчик ICD3 видны все регистры и память контроллера

стоимость от 60S

in37usd
Offline
Зарегистрирован: 17.12.2015

отладчика стоимость

а какие цены у ATMEL???

switch
Offline
Зарегистрирован: 07.12.2015

Ну тогда контроллер что в той плате и исходники от него - и в перед!

Только без JTAG отладка на меге разве что через последовательный порт...

in37usd
Offline
Зарегистрирован: 17.12.2015

"Только без JTAG отладка на меге "- что Вы имеете в виду?

in37usd
Offline
Зарегистрирован: 17.12.2015

а если я спаяю кабель JTAG(вроде даже когда-то паял для ALTERA-  не помню где он сейчас) то можно отлаживать через JTAG????

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

JTAGи бывают разные...

in37usd
Offline
Зарегистрирован: 17.12.2015

я смотрю сейчас в интернете

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Купите недорогой BLDC-контроллер для трехфазника - ESC BLDC. Я себе для модели брал, держит 60А постоянно, 320 в пике, стоит 1500р. Управляется как снова - ШИМ 50Гц от 0.5мс до 2мс вроде. Если интересной на алиэкспресс HobbyPower SL V2. Это аналог HobbyWing EZRUN

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Упс...а вам не это надо...прошу прощения

a5021
Offline
Зарегистрирован: 07.07.2013

dimax пишет:
in37usd, не существует.  Нужны синхронные таймеры. Копайте в сторону специализированных МК типа AT90PWM, или покупайте готовый контроллер.

Что такое "синхронные таймеры" ? Это таймеры, которые умеют стартовать одновременно или синхронизировать события друг у друга? Такое есть у stm8/stm32. У STM-ов даже библиотека есть для управления трехфазными двигателями. Я правда только краем глаза туда заглядывал, т.к. мне ни к чему.

StrangerM
Offline
Зарегистрирован: 02.11.2013

У TI Piccolo LaunchPad(F28027)= 17+7 баксов поглядите. А я здесь помещал уж трехфазный синусоидальный задающий ШИМ генератор на 50 Гц и несущей частотой ШИМ вроде 10 кГц на Меге.    Алгоритм такой - при пуске формируем таблицу синуса для трех фаз, а потом ей управляем тремя таймерами в цикле. Поищите - код здесь был.

StrangerM
Offline
Зарегистрирован: 02.11.2013

Вот для меги - разберетесь. На комменты не смотрите

// #include <util/delay.h> 


int ku=0 ;
float F1=0 ;
float F2=0 ;
float F3=0 ;
float ifl=0;
float A=1.0 ; 

int FI1[260] ;
int FI2[260] ;
int FI3[260] ;
int i=0 ;
int iT= 256 ;


//******************************************************************** 
void setup()     
{   
  
  pinMode(8, OUTPUT);
   digitalWrite(8, LOW); 
  Serial.begin(9600) ;
  while (i<iT) {
    ifl=float(i)/iT ;
    F1=sin(6.28*ifl) ;
    FI1[i]=int(256*(F1+1)/2.0) ;
    F2=sin(6.28*ifl+(6.26/3.0)) ;
    FI2[i]=int(256*(F2+1)/2.0) ;
    F3=sin(6.28*ifl -(6.26/3.0)) ;
    FI3[i]=int(256*(F3+1)/2.0) ;
   //  Serial.print("FI1=") ;Serial.print(FI1[i]) ; 
   //  Serial.print("FI2=") ;Serial.print(FI2[i]) ; 
   //   Serial.print("FI3=") ;Serial.println(FI3[i]) ;
    i=i+1 ;
  }
       
         TCCR3B = TCCR3B & 0b11111000 | 1 ;//частота ШИМ ~30 кГц 
      TCCR1B = TCCR1B & 0b11111000 | 1;//частота ШИМ ~30 кГц 
     TCCR2B = TCCR2B & 0b11111000 | 1;//частота ШИМ ~30 кГц 
   
   pinMode(12, OUTPUT);//выход ШИМ для тестирования частотомера 
     analogWrite(12, 128);  //Запустить ШИМ 
      pinMode(10, OUTPUT);//выход ШИМ для тестирования частотомера 
     analogWrite(10, 128);  //Запустить ШИМ 
        pinMode(5, OUTPUT);//выход ШИМ для тестирования частотомера 
     analogWrite(5, 128);  //Запустить ШИМ 
    
 
 digitalWrite(8, HIGH);
}   
//******************************************************************** 
void loop()     
{ 
  if (ku>255) ku=0 ;
 
   analogWrite(12, FI1[ku]*A);  //Запустить ШИМ 
       analogWrite(10, FI2[ku]*A);  //Запустить ШИМ 
           analogWrite(5,FI3[ku]*A);  //Запустить ШИМ 
    
 ku=ku+1 ;
 delayMicroseconds(10000/256); //без задержки 10 мс
       
}    

 

Aleksahek
Offline
Зарегистрирован: 22.12.2015

А я вот так пытался сделать.

может и не будет работать...

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

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

 

void setup() {
#define t2 1000 // задержка постоянная в mks
#define f1 3
#define f2 5
#define f3 6
#define f4 9
#define f5 10
#define f6 11
  /*
  pinMode(f1, OUTPUT);
  pinMode(f2, OUTPUT);
  pinMode(f3, OUTPUT);
  pinMode(f4, OUTPUT);
  pinMode(f5, OUTPUT);
  pinMode(f6, OUTPUT);
  */
  DDRD = B01101000;
  DDRB = B00001110;
}
void loop() {
int t = micros();
int val = analogRead(A0); //потенциометр, регулировка оборотов и напряжения
//int val = 0;
//int n=255;
  int n = map(val, 0, 1024, 255, 165); //конвертер диапозона потенциометра в диапозон напряжения 220-310 В
  int t1 = map(val, 0, 1024, 6667, 20000) - map(val, 0, 1024, 6667, 20000) % 3; //регулировка частоты от 50 Gz до 150 Gz, кратное 3
  if (t2 < (micros() - t))                //проверка правильности задержки перед включением фазы f1
  {
    delayMicroseconds(t2 - (micros() - t));
    analogWrite(f1, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f3, 0);
    delayMicroseconds(t2);
    analogWrite(f6, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f5, 0);
    delayMicroseconds(t2);
    analogWrite(f2, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f1, 0);
    delayMicroseconds(t2);
    analogWrite(f4, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f6, 0);
    delayMicroseconds(t2);
    analogWrite(f3, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f2, 0);
    delayMicroseconds(t2);
    analogWrite(f5, n);
    delayMicroseconds(t1 / 3 - t2);
    analogWrite(f4, 0);
  }
}

 

pdjboy
pdjboy аватар
Offline
Зарегистрирован: 22.01.2017

 

Вроди как работает.
Что то протеус ругается на ацп.  Надо поискать где собака зарыта. Скетч имеет право на жизнь. Работать будет, но некторые доработки все таки требуются. https://www.youtube.com/watch?v=ShjD9wJ_d9Y Нужно или увеличить частоту PWM (путем переключения предделителя таймеров соответствующих) или давать тупо прямоугольные импульсы. Но улчше pwm т.к.  транзистору будет открытся легче, хотя это и не тиристор  и т.д.

 

mag155
Offline
Зарегистрирован: 21.12.2017

 

Интиресная очень тема . Как вы частоту от напряжения разделяете можете прокоментировать ?

mag155
Offline
Зарегистрирован: 21.12.2017

Всем привет !!! Подскажите идею как дергать ногой к примеру 250 раз потом эта нога LOW. СЛЕДУЮЩАЯ 250 раз . И так по кругу.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

mag155 пишет:
Всем привет !!! Подскажите идею как дергать ногой к примеру 250 раз потом эта нога LOW. СЛЕДУЮЩАЯ 250 раз . И так по кругу.

Для изменения состояния портов есть функция digitalWrite(), для циклических процессов - for или while. А для Вас - ардуино для начинающих.

mag155
Offline
Зарегистрирован: 21.12.2017

Это понятно. Как вывести значение переменной из for. В общий цикл . ?

mag155
Offline
Зарегистрирован: 21.12.2017

На при мер for(int n=0; n <250; n++)как вывести значение n . В loop .?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

mag155 пишет:
На при мер for(int n=0; n <250; n++)как вывести значение n . В loop .?

А зачем куда-то выводить? Прямо в цикле все и делайте:

for (int port=2; port<13; port++){

for(int n=0; n <250; n++){

 // тут мы мигаем портом port

}

}

 

mag155
Offline
Зарегистрирован: 21.12.2017

Как вариант. Попробую.

mag155
Offline
Зарегистрирован: 21.12.2017

Но теоретически возможно вывести переменную из цикла ?

Гриша
Offline
Зарегистрирован: 27.04.2014

mag155 пишет:
Но теоретически возможно вывести переменную из цикла ?

не только можно, но и очень часто именно так поступают. читать все, потом вопросы задавать 

ссылка 1

ссылка 2

ссылка 3 

mag155
Offline
Зарегистрирован: 21.12.2017

Спасибо !!! Еще раз прочитал что такое глобальные переменные и понял что то новое.

mag155
Offline
Зарегистрирован: 21.12.2017
int t ; int t1;
void setup() {
  Serial.begin(9600);
}

void loop() {
 
 
while( t <50){
t++;
t1 = 0;
Serial.println(t);
}

Вот так t видна в цыкле . Но вопрос почему если вынести Serial.println(t); За цыкл то видим не счет от одного до 50 а сразу просто 50 ???

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

Вот так t видна в цыкле . Но вопрос почему если вынести Serial.println(t); За цыкл то видим не счет от одного до 50 а сразу просто 50 ???

потому что в этом случае оператор Serial.println(t);выполняется ПОСЛЕ ОКОНЧАНИЯ цикла, когда t равно 50

МАГ155 - читаю вас и каждый раз узнаю что-то новое. Задавать ТАКИЕ вопросы после года занятий ардуино, после претензий. что команды Ардуино ДУЕ "слишком медленные"... Нет предела человеческой тупости...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

mag155 пишет:

Вот так t видна в цыкле . Но вопрос почему если вынести Serial.println(t); За цыкл то видим не счет от одного до 50 а сразу просто 50 ???

чота ржу.

b707
Offline
Зарегистрирован: 26.05.2017

тут в пору плакать...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

да блин, то самое чуство, када у обычного мотора мозгов больше, чем у ТС.  И кто кем управлять взялся? 

mag155
Offline
Зарегистрирован: 21.12.2017

Народ вы все такие умные. Я что должен вообще все знать?? Не сталкивался с этим за год не разу. Да и это понятно что выполняется после окончания цикла. Просто хотел уточнить . А вы сразу.....

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

Да и это понятно что выполняется после окончания цикла. Просто хотел уточнить . А вы сразу.....

Если вам понятно, что оно выполняется ПОСЛЕ ЦИКЛА - как Serial может показывать изменение значений t ?????

mag155
Offline
Зарегистрирован: 21.12.2017

Ну малоли мож чего то не правильно понимаю .Для того и спрашивал.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А тут весело :)

bwn
Offline
Зарегистрирован: 25.08.2014

mag155 пишет:

int t ; int t1;
void setup() {
  Serial.begin(9600);
}

void loop() {
 
 
while( t <50){
t++;
t1 = 0;
Serial.println(t);
}

Вот так t видна в цыкле . Но вопрос почему если вынести Serial.println(t); За цыкл то видим не счет от одного до 50 а сразу просто 50 ???

Та плюньте вы на них, противных. Вы ведь  изобрели аналог циклу For.
Теперь стоит напрячься и изобрести аналог циклу loop.

Гриша
Offline
Зарегистрирован: 27.04.2014

mag155 пишет:

Ну малоли мож чего то не правильно понимаю .Для того и спрашивал.

это тот случай, когда теория не подкреплена практикой. читайте, пишите код, ищите ошибки.

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

тут недавно (в каком-то топике) посоветовали человеку "логику" подтянуть, так он сразу быка врубил...  Если кто-то пишет, чего-то грубого, то обычно автор заслужил. Я на работе частенько на своих срываюсь - такое чуство, что мозг не берегут на работу, дома оставляют, чтоб не перетрудился.

mag155
Offline
Зарегистрирован: 21.12.2017

Я вам так скажу. Если бы они мозг с собой на работу брали ,мы бы с вами были не нужны.

mag155
Offline
Зарегистрирован: 21.12.2017

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

mag155
Offline
Зарегистрирован: 21.12.2017

К примеру есть 20 импульсов. Начиная с первого по 10 скважность уменьшается с каждым импульсом а с 10 по 20 увеличивается. Я так понимаю этого можно достичь только "самодельным шимом "?

ekimmu
Offline
Зарегистрирован: 05.04.2017
svm
Offline
Зарегистрирован: 06.11.2016

switch пишет:

Для этого придуманы частотные приводы. Но это дорого. 

У самого кстати вопрос стоит: нужно регулировать скорость вентиляторов. Пока взял на 12 вольт...

Я как-то делал 2 источника чистого синуса 220 В для аварийного питания импортного газового котла на таких модулях https://ru.aliexpress.com/item/32580730860.html и остатков УПС. Мощность нужна была около 100 Вт. Вот уже года два работают, заказчик доволен. У этих модулей есть режим управления частотой, для изменения скорости двигателей (в каких пределах не помню уже). Но в инете можно найти. Еще один модуль остался, правда применять некуда, да и делать не хочется. Больше частотники нравятся, цены на них стали божескими, от 3 тыр.