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

-NMi-
Offline
Зарегистрирован: 20.08.2018

daniilguz пишет:

Дешевое устройство плавного пуска.

Можно подобрать мегу с таймером с тремя счётчиками в одном и возможно даже с дедтаймом.

Меги не дорогие, думаю.

-NMi-
Offline
Зарегистрирован: 20.08.2018

nik182 пишет:
1.8 доллара блюпилл. Из коробки с одним первым таймером шестифазный генератор с дедтаймами и простой удобной регулировкой.

Да, забыл про STM32.   Вот ЭТО по моему мнению будет самим простым и удобным устройством. На STM таймеры гоОораздо "интереснее" таймеров на авр.

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

DetSimen пишет:

Если ты новичок, какого ж хрена сразу за частотник схватился? 

дык все на поверхности - ТС считал, что все вокруг дураки, покупают частотники по 50-100 баксов, вот он и решил собрать "тоже самое" на ардуине за 10 и завоевать рынок :)))

daniilguz
Offline
Зарегистрирован: 13.01.2020

только для себя, делаю, не для продажи :)

daniilguz
Offline
Зарегистрирован: 13.01.2020

DetSimen пишет:

daniilguz пишет:

я новичок, суть я понял а как сделать не знаю.

Если ты новичок, какого ж хрена сразу за частотник схватился? 

а это не первый проект, просто я понимаю, что мне еще учиться и учиться.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

daniilguz пишет:

я новичок, суть я понял а как сделать не знаю.

Если ты новичок, какого ж хрена сразу за частотник схватился? 

актуально жеж

-NMi-
Offline
Зарегистрирован: 20.08.2018

daniilguz пишет:

только для себя, делаю, не для продажи :)

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

А вдрук ТС изобретёт частотник за 15 баксов? Чо тогда вы ему ответите?

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

-NMi- пишет:

А вдрук ТС изобретёт частотник за 15 баксов? Чо тогда вы ему ответите?

да нет никакой проблемы собрать для себя частотник за 15 баксов. Даже дешевле можно. СТМ32 и блок ключей :) Схемы и код выложены в инете в десятках вариантов...

Только что это будет за частотник и кто им захочет пользоваться. кроме автора? :)

Готовый на 1.5 КВт, трехфазный, с настройками , в корпусе с дисплеем - на Али от 50 баксов...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Тыркнул в поиск, оказывается есть калькулятор )))
 

128,191,238,255,238,191,128,64, 17,0,17,64,128,

 

daniilguz
Offline
Зарегистрирован: 13.01.2020

Спасибо всем кто отозвался!!!

Вот конечный код на котором остановился.

Представлен вариант управления трехфазным асинхронным двигателем мощностью от 150 до 750 Ватт с помощью частотного регулятора на базе игбт модуля и ардуино нано v3.

переменным резистором на 10 кОм подавать сигнал на аналоговый вход A0 сигнал от 0 до 5 вольт, можно с внешнего источника.

частота меняется от 5 до 200 герц.

Код исправил внес большинство поправок. работает у меня на ардуино нано v3 (168)

В строке 60 число 13 можно изменить от этого меняется максимальная частота. при 5 выдает синус 400 герц.

скриншот с осцилографа по ссылке: https://photos.app.goo.gl/pqhVaEL3okTX9cGq6

плавный пуск собран по схеме на irams1010up60b https://power-e.ru/wp-content/uploads/29_pic6.jpg

частота ШИМ 5,7 кГц.

нога EN подтянута к +5в резистором 1 кОм к +

Ошибки от модуля не подключены.

Температурная защита не подключена.

В ближайшее время нарисую плату вложу сюда.

видео работы https://www.youtube.com/watch?v=He5ISCiuVcw.

Внимание: дабы не наполить модулей прошу учесть что ардуино нано в момент старта подает на все ключи сигнал, что может закончиться смертью модуля от сквозных токов, поэтому решайте задачу подключением нога EN к земле пока микроконтроллер не загрузиться, после загрузки можно отключать подтяжку.

#include <avr/io.h>
#include <avr/interrupt.h>

byte prog_pwm=0;
byte num=1;
byte impuls=0;
byte k=0;
int border;


byte sin_1_h[36]={0  , 12, 22, 32, 41, 49, 55, 60, 62, 63, 62, 60, 55, 49, 41, 32, 22, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
byte sin_2_h[36]={ 55, 49, 41, 32, 22, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 22, 32, 41, 49, 55, 60, 62, 63, 62, 60,};
byte sin_3_h[36]={0  ,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 22, 32, 41, 49, 55, 60, 62, 63, 62, 60, 55, 49, 41, 32, 22, 12,  0,  0,  0,  0,  0,  0};
byte sin_1_l[36]={0  ,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 22, 32, 41, 49, 55, 60, 62, 63, 62, 60, 55, 49, 41, 32, 22, 12};
byte sin_2_l[36]={0  ,  0,  0,  0,  0,  0,  0, 12, 22, 32, 41, 49, 55, 60, 62, 63, 62, 60, 55, 49, 41, 32, 22, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
byte sin_3_l[36]={ 55, 60, 62, 63, 62, 60, 55, 49, 41, 32, 22, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 22, 32, 41, 49};

int sensorValue ;
int flag_led_1=0;
int readsens=0;
int pinIn    = A0; // Пин аналогового входа

ISR (TIMER1_COMPA_vect  )
{
  prog_pwm=prog_pwm+2;
  if (prog_pwm>=64){prog_pwm=0;}
}

// the setup routine runs once when you press reset:
void setup() {
  pinMode(pinIn, INPUT);
    ADCSRA |=   (1 << ADPS1);                     //Биту ADPS2 присваиваем единицу - коэффициент деления 16
    ADCSRA &= ~ ((1 << ADPS2) | (1 << ADPS0));  //Битам ADPS1 и ADPS0 присваиваем нули
   pinMode(2, OUTPUT);  
   pinMode(3, OUTPUT); 
   pinMode(4, OUTPUT); 
   pinMode(5, OUTPUT);  
   pinMode(6, OUTPUT); 
   pinMode(7, OUTPUT); 
 
 cli(); // отключить глобальные прерывания
    TCCR1A = 0x00;
    TCCR1B = (0 << CS12)| (1 << CS11)|(0 << CS10)|(1 << WGM12); //предделитель clk/0, режим таймера СТС
    TCNT1 = 0x00;
    OCR1A =10; // максимальный предел счета
    TIMSK1 |= (1 << OCIE1A); // разрешение прерывания по совпадению
   sei();

}

void loop() {
border=prog_pwm+k;
 if (sin_1_h[num]> border){PORTD |= 1<<2;}else{PORTD &= ~(1<<2);}
 if (sin_2_h[num]> border){PORTD |= 1<<3;}else{PORTD &= ~(1<<3);}
 if (sin_3_h[num]> border){PORTD |= 1<<4;}else{PORTD &= ~(1<<4);}
 if (sin_1_l[num]> border){PORTD |= 1<<5;}else{PORTD &= ~(1<<5);}
 if (sin_2_l[num]> border){PORTD |= 1<<6;}else{PORTD &= ~(1<<6);}
 if (sin_3_l[num]> border){PORTD |= 1<<7;}else{PORTD &= ~(1<<7);}
 impuls++;
  if (impuls>=(13+sensorValue>>3)){ impuls=0;num++;
  if (num>=36){num=0;sensorValue=analogRead(pinIn);
  if (sensorValue>=500){k=sensorValue/16;}else{k=0;}
  }
  }
}

 

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

daniilguz пишет:

плавный пуск собран по схеме на irams1010up60b https://power-e.ru/wp-content/uploads/29_pic6.jpg

а ссылку на обсуждение схемы на power-e.ru можете дать, не одна же только картинка там выложена?

"Конденсаторы фильтра высокого напряжения" на схеме - ставили?

daniilguz
Offline
Зарегистрирован: 13.01.2020

b707 пишет:

daniilguz пишет:

плавный пуск собран по схеме на irams1010up60b https://power-e.ru/wp-content/uploads/29_pic6.jpg

а ссылку на обсуждение схемы на power-e.ru можете дать, не одна же только картинка там выложена?

"Конденсаторы фильтра высокого напряжения" на схеме - ставили?

конечно

конденсаторы 2*200 микрофарад высоковольтные а надо 800 мкФ.

бутстеп надо побольше поставить тк у меня 2,2 мкФ а по мануалу 4.

Фильтр из керамики 0,1 и электролит 10 мкФ стоят по 15 вольтам.

Заходит блок 12 вольт, от него повышается dc-dc до 15 вольт и отдельной dc dc понижается до 5 вольт для наны на vin.

 

daniilguz
Offline
Зарегистрирован: 13.01.2020

Сырой, недоделанный но рабочий код для частотного регулятора на  ардуино мега 2560.

#include <avr/io.h>
#include <avr/interrupt.h>

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
void fCOM3B1 (uint8_t val) {DDRE |= B00010000; if (val == 0x00) {cbi(TCCR3A, COM3B1); PORTE &= ~B00010000;} else
if (val == 0xFF) {cbi(TCCR3A, COM3B1); PORTE |= B00010000;} else {sbi(TCCR3A, COM3B1); OCR3B = val;}}//D2
void fCOM3C1 (uint8_t val) {DDRE |= B00100000; if (val == 0x00) {cbi(TCCR3A, COM3C1); PORTE &= ~B00100000;} else 
if (val == 0xFF) {cbi(TCCR3A, COM3C1); PORTE |= B00100000;} else {sbi(TCCR3A, COM3C1); OCR3C = val;}}//D3
void fCOM3A1 (uint8_t val) {DDRE |= B00001000; if (val == 0x00) {cbi(TCCR3A, COM3A1); PORTE &= ~B00001000;} else 
if (val == 0xFF) {cbi(TCCR3A, COM3A1); PORTE |= B00001000;} else {sbi(TCCR3A, COM3A1); OCR3A = val;}}//D5
void fCOM4A1 (uint8_t val) {DDRH |= B00001000; if (val == 0x00) {cbi(TCCR4A, COM4A1); PORTH &= ~B00001000;} else 
if (val == 0xFF) {cbi(TCCR4A, COM4A1); PORTH |= B00001000;} else {sbi(TCCR4A, COM4A1); OCR4A = val;}}//D6
void fCOM4B1 (uint8_t val) {DDRH |= B00010000; if (val == 0x00) {cbi(TCCR4A, COM4B1); PORTH &= ~B00010000;} else 
if (val == 0xFF) {cbi(TCCR4A, COM4B1); PORTH |= B00010000;} else {sbi(TCCR4A, COM4B1); OCR4B = val;}}//D7
void fCOM4C1 (uint8_t val) {DDRH |= B00100000; if (val == 0x00) {cbi(TCCR4A, COM4C1); PORTH &= ~B00100000;} else
if (val == 0xFF) {cbi(TCCR4A, COM4C1); PORTH |= B00100000;} else {sbi(TCCR4A, COM4C1); OCR4C = val;}}//D8
void (*analogFastWrite[])(uint8_t) = {&fCOM3B1,&fCOM3C1,&fCOM3A1,&fCOM4A1,&fCOM4B1,&fCOM4C1};


int num=1;
byte sin_1_h[36]={0,45,88,128,164,196,221,240,252,255,252,240,221,196,164,128,88,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte sin_2_h[36]={221,196,164,128,88,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,88,128,164,196,221,240,252,255,252,240};
byte sin_3_h[36]={0,0,0,0,0,0,0,0,0,0,0,0,0,45,88,128,164,196,221,240,252,255,252,240,221,196,164,128,88,45,0,0,0,0,0,0};
byte sin_1_l[36]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,88,128,164,196,221,240,252,255,252,240,221,196,164,128,88,45};
byte sin_2_l[36]={0,0,0,0,0,0,0,45,88,128,164,196,221,240,252,255,252,240,221,196,164,128,88,45,0,0,0,0,0,0,0,0,0,0,0,0};
byte sin_3_l[36]={221,240,252,255,252,240,221,196,164,128,88,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,88,128,164,196};
int sensorValue ;
float sensorValue1;
int flag_led_1=0;
int led = 9;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int brightness2 = 0; 
int readsens=0;

ISR (TIMER1_COMPA_vect )
{
  flag_led_1++;
//  num++;
//  if (num==0){num=1;}else {num=0;}  
}

// the setup routine runs once when you press reset:
void setup() {
  pinMode(6, OUTPUT);  
               cli(); // отключить глобальные прерывания
             // ШИМ 8 разрядов, 62,5 кГц
              TCCR3A = TCCR3A & 0xe0 | 1;
              TCCR3B = TCCR3B & 0xe0 | 0x0a; 
              TCCR4A = TCCR4A & 0xe0 | 1;
              TCCR4B = TCCR4B & 0xe0 | 0x0a; 
              TCCR1A  = 0  ; // установить регистры в 0
              TCCR1B  = 0  ; 
              TCCR1B |= (1 << WGM12); // включение в CTC режим
              OCR1A   =200;
              TCCR1B |= (1 << CS10);
              TIMSK1 |= (1 << OCIE1A);  // включение прерываний по совпадению
         sei();
   pinMode(led, OUTPUT);
   Serial.begin(115200);
}
void loop() {
  if (flag_led_1>=sensorValue+10)
  {
  flag_led_1=0;
  num++;
  }
  if (num>=36){num=0;
  sensorValue  = analogRead(A7)*0.2;
  sensorValue1  = (204-sensorValue)*0.007;
  if (sensorValue1>=1 ){sensorValue1=1;}
  }
analogFastWrite[0](sin_1_h[num]*sensorValue1);
analogFastWrite[1](sin_2_h[num]*sensorValue1);
analogFastWrite[2](sin_3_h[num]*sensorValue1);
analogFastWrite[3](sin_1_l[num]*sensorValue1);
analogFastWrite[4](sin_2_l[num]*sensorValue1);
analogFastWrite[5](sin_3_l[num]*sensorValue1);
 }

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

daniilguz пишет:

бутстеп надо побольше поставить тк у меня 2,2 мкФ а по мануалу 4.

бывают BOOTSRAP  конденсаторы, то есть предзагрузочные.

бывает молодёжная танцевальная музыка дабстеп.

Про бутстеп - пока ничего не слыхал.... может ирундиции не хватает? ;))

daniilguz
Offline
Зарегистрирован: 13.01.2020

wdrakula пишет:

daniilguz пишет:

бутстеп надо побольше поставить тк у меня 2,2 мкФ а по мануалу 4.

бывают BOOTSRAP  конденсаторы, то есть предзагрузочные.

бывает молодёжная танцевальная музыка дабстеп.

Про бутстеп - пока ничего не слыхал.... может ирундиции не хватает? ;))

 

точно натупил :) главное что я  емкость подобрал из таблици верно  :) скетч на меге на 16 мГц шим работает.

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

daniilguz пишет:

 отдельной dc dc понижается до 5 вольт для наны на vin.

ошибка? Или правда 5в на VIN подаете?

Сссылку на тему на том форуме таки не прислали

daniilguz
Offline
Зарегистрирован: 13.01.2020

я из гугла фотку взял.

да подал на vin +5 вольт что бы наверняка не спалить.

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

daniilguz пишет:

да подал на vin +5 вольт что бы наверняка не спалить.

на VIN надо подавать не менее 7в. Либо dc-dc понижайкой делайте более 7в и подавайте на VIN, либо если работаете с  5в - тогда и подавайте их на пин 5в.

А подавать 5в на VIN - это чревато нестабильной работой и разнообразными глюками...

Да, с такими знаниями рано вам с китайцами конкурировать. насос угробите или дом сожжете, купите готовый частотник - в итоге дешевле обойдется :)

daniilguz
Offline
Зарегистрирован: 13.01.2020

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

это-ж макет, это не готовое устройство.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

daniilguz пишет:

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

это-ж макет, это не готовое устройство.

модуль можешь мне прислать, я на форуме уже три года )))

daniilguz
Offline
Зарегистрирован: 13.01.2020

ua6em пишет:

daniilguz пишет:

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

это-ж макет, это не готовое устройство.

модуль можешь мне прислать, я на форуме уже три года )))

:) я их 2 заказал, по 4 доллара.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

daniilguz пишет:

ua6em пишет:

daniilguz пишет:

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

это-ж макет, это не готовое устройство.

модуль можешь мне прислать, я на форуме уже три года )))

:) я их 2 заказал, по 4 доллара.

ссылкой кинь, а то, что-то по 4 доллара не глянулись, по 10 вроде ничего

asam
asam аватар
Онлайн
Зарегистрирован: 12.12.2018

daniilguz пишет:

Вот конечный код на котором остановился.

Если сделать вот так

void loop() {
  uint8_t PORT_D = 0;
  border = prog_pwm + k;
  if (sin_1_h[num] > border) PORT_D  = 1 << 2;
  if (sin_2_h[num] > border) PORT_D |= 1 << 3;
  if (sin_3_h[num] > border) PORT_D |= 1 << 4;
  if (sin_1_l[num] > border) PORT_D |= 1 << 5;
  if (sin_2_l[num] > border) PORT_D |= 1 << 6;
  if (sin_3_l[num] > border) PORT_D |= 1 << 7;
  PORTD=PORT_D;
  impuls++;
.....

То будет примерно на 20% быстрее.

daniilguz
Offline
Зарегистрирован: 13.01.2020

ua6em]</p> <p>[quote=daniilguz пишет:

ua6em пишет:

daniilguz пишет:

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

это-ж макет, это не готовое устройство.

модуль можешь мне прислать, я на форуме уже три года )))

:) я их 2 заказал, по 4 доллара.

ссылкой кинь, а то, что-то по 4 доллара не глянулись, по 10 вроде ничего

 

https://aliexpress.ru/item/32992613924.html?spm=a2g0o.productlist.0.0.255c70a5XihcJk&algo_pvid=8233afd3-78fb-423f-accd-72130081baf3&algo_expid=8233afd3-78fb-423f-accd-72130081baf3-0&btsid=9d06a795-37f4-4588-880c-a6b8bc6fdef0&ws_ab_test=searchweb0_0,searchweb201602_8,searchweb201603_53

 

daniilguz
Offline
Зарегистрирован: 13.01.2020

asam пишет:

daniilguz пишет:

Вот конечный код на котором остановился.

То будет примерно на 20% быстрее.

Проверил, действительно быстрее. Спасибо огромное.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

daniilguz пишет:

asam пишет:

daniilguz пишет:

Вот конечный код на котором остановился.

То будет примерно на 20% быстрее.

Проверил, действительно быстрее. Спасибо огромное.

Данька, вот, хоть и покидали в тебя местные корифеи тапками, но принять приняли, уважуха стало быть )))

ЗЫ а вот вызов никто не принял, сделать аппаратно, тем более на "голубенькой"

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

ua6em пишет:

ЗЫ а вот вызов никто не принял, сделать аппаратно, тем более на "голубенькой"

IGBT модуль по наводке ТС заказал, может и соберу, если руки дойдут.

daniilguz
Offline
Зарегистрирован: 13.01.2020

ua6em пишет:

daniilguz пишет:

asam пишет:

daniilguz пишет:

Вот конечный код на котором остановился.

То будет примерно на 20% быстрее.

Проверил, действительно быстрее. Спасибо огромное.

Данька, вот, хоть и покидали в тебя местные корифеи тапками, но принять приняли, уважуха стало быть )))

ЗЫ а вот вызов никто не принял, сделать аппаратно, тем более на "голубенькой"


Вообще думаю взять два асинхронных мотора по 3 кВт. Сдать на перемотку на 24 вольта. Две Меги будут ими управлять игбт транзисторами, не модулями, с контролем по току ( векторным управлением) и поставить на электромобиль самодельный. Проблем с кузовом не будет, проблем с АКБ нет. Боюсь хватит ли момента асинхронникам. Вот собственно с этой целью и разбираюсь понемногу в управлении асинхронника.
Все говорите тапками покидали, а среди тапков очень много помощи, за что я очень благодарен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

daniilguz пишет:
ua6em пишет:

daniilguz пишет:

asam пишет:

daniilguz пишет:

Вот конечный код на котором остановился.

То будет примерно на 20% быстрее.

Проверил, действительно быстрее. Спасибо огромное.

Данька, вот, хоть и покидали в тебя местные корифеи тапками, но принять приняли, уважуха стало быть )))

ЗЫ а вот вызов никто не принял, сделать аппаратно, тем более на "голубенькой"

Вообще думаю взять два асинхронных мотора по 3 кВт. Сдать на перемотку на 24 вольта. Две Меги будут ими управлять игбт транзисторами, не модулями, с контролем по току ( векторным управлением) и поставить на электромобиль самодельный. Проблем с кузовом не будет, проблем с АКБ нет. Боюсь хватит ли момента асинхронникам. Вот собственно с этой целью и разбираюсь понемногу в управлении асинхронника. Все говорите тапками покидали, а среди тапков очень много помощи, за что я очень благодарен.

Это Славянку Дуюнова тогда мотать

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

ЗЫ а вот вызов никто не принял, сделать аппаратно, тем более на "голубенькой"

IGBT модуль по наводке ТС заказал, может и соберу, если руки дойдут.

ты не одинок, я парочку )))

daniilguz
Offline
Зарегистрирован: 13.01.2020

[/quote]

Это Славянку Дуюнова тогда мотать

[/quote]

я думаю типа такой мотать на 3:40 хорошо видно количество обмоток.

https://www.youtube.com/watch?v=6JWaEcQzJnU