Регулятор оборотов двигателя с обратной связью

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

sany_sch, да, правильно понимате.  tic - 32 битная переменная, содержащае число тактов процессора, которое насчитал таймер за 1 период входящего сигнала. При периоде 1секунда значение tic будет 16 000 000 ,  1ms -16 000

0,0625 -это длительность одного такта МК в микросекундах.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

sany_sch пишет:
Проблема не в полевике, а в том, что пальцем тормозил.  Предохранитель 5 А по входу решит роблему сгораний 10 А полевика на хорошем радиаторе.  И защитит 2А двигатель. На моей аналоговой плате предохранитель 6А в период исытаний и отладки горел не однократно.
Если открыть время-токовую характеристику предохранителя (http://ok-t.ru/studopediasu/baza2/451256767638.files/image001.png), то можно обнаружить, что кратковременно он выдерживает токи в разы превышающие его номинал, выдержит ли их полевик - это вопрос.

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

В нашем случае роль максимальной токовой защиты выполняет предохранитель - защищает от КЗ. Это аварийная ситуация.

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

 

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Andy пишет:

Если открыть время-токовую характеристику предохранителя (http://ok-t.ru/studopediasu/baza2/451256767638.files/image001.png), то можно обнаружить, что кратковременно он выдерживает токи в разы превышающие его номинал, выдержит ли их полевик - это вопрос.

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

В нашем случае роль максимальной токовой защиты выполняет предохранитель - защищает от КЗ. Это аварийная ситуация.

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

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

У меня к вам вопрос. По каким параметрам, кроме вольтажа и ампер, подбирать правильно полевик. Чтобы было с запасом.

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

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

Пользоваться в прерывании выводом в сериал - ещё как-то можно понять.....

Но выводить данные в сериал  из  вашей  достаточно  "быстродействующей" программы на 9600  ?????????????????????????????

115200- есть такая скорость  и  лично я о других забыл навсегда.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Немного отчитаюсь.

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

1void impuls(){
2  len =micros()-start_time;
3  if ( len>400 ){length =len ;
4  start_time = micros();
5  }
6else {}
7}

Добавление проверки времени дало хороший результат.

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

sany_sch, У вас осциллографа нет?  Вчера писал про виртуальные приборы. Звуковая карта в компе надеюсь есть? )

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

dimax пишет:

sany_sch, У вас осциллографа нет?  Вчера писал про виртуальные приборы. Звуковая карта в компе надеюсь есть? )

Спасибо большое. Но я забыл упомянуть, что у меня не только нет осцилографа, но я и не умею им пользоваться.  Просто никогда не приходилось после училища. там был и я делал лабораторные. И сейчас у меня в мастерской есть прибор ЕЛ-1 (ёлка). Но назвать его осцилографом язык не поворачивается.

Пошел курить матчасть....

З.Ы. звуковая у меня интегрированная. Когда-то использовал для определения количества "пыхов" за один кадр встроенной фотовспышки цифрового фотоаппарата. Так же использовал для определения оборотов двигателя.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Не замучил я вас своими вопросами?

Тогда следующий. Мосфет, тот что я подобрал 10nk60zfp  пробивает по неизвестным причинам. Может из за конденсатора после диодного моста 330микрофарад 400вольт, незнаю. Но 2 шт которые у меня были, блгополучно вышли из строя. причём на ровном месте. Без нагрузки на валу двигателя и на минимальных оборотах.

Какой мосфет использовать?

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

01#include <LiquidCrystal.h>      // библиотека экрана
02 
03LiquidCrystal lcd(3, 4, 5, 6, 7, 8);   // пины экрана
04 
05volatile unsigned long len = 0;        //переменная для проверки ложных срабатываний.
06volatile unsigned long length = 0;      //Время срабатывания датчика
07volatile unsigned long start_time = 0;        //Предыдущее время
08 
09int rehPin = 0;           // пин регулятора
10 
11int rimPin = 9;           // пин выхода ШИМ
12 
13int obMax = 6000;         //ввести максимальные обороты
14 
15int obMin = 60;          //ввести минимальные обороты
16 
17float kImp = 8;          //ввести кол-во импульсов на 1 оборот
18 
19float kPp = 1;          //ввести коэфициент плавного пуска
20 
21int pRim = 0;           //переменная ШИМ
22 
23float tMax = 0;     //время между началами импульсов на максимальных оборотах
24 
25float tMin = 0;       //время между началами импульсов на минимальных оборотах
26 
27unsigned long currentTime;
28unsigned long loopTime;
29 
30void setup(){
31  attachInterrupt(0,  impuls, RISING);   //Прерывание по нарастающему фронту на D2
32   pinMode(rimPin, OUTPUT);
33  analogReference(DEFAULT);
34  currentTime = millis();       // считываем время, прошедшее с момента запуска программы
35  loopTime = currentTime;       //тайминг для вывода данных на экран
36  lcd.begin(16, 2);
37  lcd.setCursor(0,0);
38 
39lcd.write("speed u:");  //в верхней строке будем выводить требуемые обороты
40 
41lcd.setCursor(0,1); 
42 
43lcd.write("speed f:");  // В нижней выводим фактичесские обороты
44}
45 
46void loop(){
47  float tMax = (60000000/obMax/kImp); //Вычисляем время импульса при макс. оборотах в микросекундах
48  float tMin = (60000000/obMin/kImp); //Вычисляем время импульса при мин. оборотах в микросекундах
49  int val = analogRead(A0);
50   
51   
52  if (val > 0){
53   long pR =map(val, 0, 1024, tMin, tMax);
54       
55     int pRim = ((pR -length)*kPp+ pRim) ;
56    
57      pRim = constrain(pRim,0,254) ;
58      analogWrite(rimPin, pRim);
59     
60    }
61    else {
62      int pRim = 0;
63    analogWrite(rimPin, pRim);
64      
65      }
66   currentTime = millis();                           // считываем время, прошедшее с момента запуска программы
67  if(currentTime >= (loopTime + 1000)){              // сравниваем текущий таймер с переменной loopTime + 1 секунда
68   
69  long pR =map(val, 0, 1024, tMin, tMax);
70  lcd.setCursor(9,0);
71  lcd.print(60000000/(pR*kImp));
72lcd.print("       ");     // выводим значения на экран.
73    
74 
75    lcd.setCursor(9,1);
76     
77lcd.print(60000000/(length*kImp));// выводим значения на экран.
78lcd.print("       ");
79    loopTime = currentTime;                         // в loopTime записываем новое значение
80  }
81   
82   
83}
84 
85//                      Подпрограмма прерывания   
86void impuls(){
87  len =micros()-start_time;
88  if ( len>400 ){length =len ;
89  start_time = micros();
90  }
91else {}
92}

Теперь вопрос по скетчу.

Вот в этой строчке  long pR =map(val, 0, 1024, tMin, tMax);    я приравниваю значения потенциометра от 0 до 1024 ко времени одного импульса то  минимальных  до максимальных оборотов  от 60об\мин до 6000об\мин.    Так вот приравнивание происходит как-то не линейно.  Выводил значения на экран. С минимальным всё верно, показывает 60. Нарастает очень медленно На полоборота около 200  в конце с 1000 до 5000 прыгает моментально. А на максимуме до 6000 не доходит, 5400 и всё. Сначала подумал на потенциометр, но при смене +и- на крайних контактах картина та-же.

nevkon
Offline
Зарегистрирован: 20.01.2015

Защитный диод стоит у двигателя, какой? Сколько потребляет двигатель?

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

диод стоит кд213г 

двигатель на переменке 180Ватт. на постоянке немного больше. со всеми допусками никак  не больше 2 А. тем более без нагрузки был.

Нужен мосфет чтоб свободно выдерживал двигатель от стиральной машинки автомат. Там максимум 500 Ватт при переменном токе. На постоянке будет больше.

nevkon
Offline
Зарегистрирован: 20.01.2015

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

180 вольт или ватт? Если ватт, то можно попробовать irf640n. Он до 200В напряжения и 13А тока. Для его открытия нужен будет драйвер - полное открытие у него достигается при 10В.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

nevkon пишет:

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

180 вольт или ватт? Если ватт, то можно попробовать irf640n. Он до 200В напряжения и 13А тока. Для его открытия нужен будет драйвер - полное открытие у него достигается при 10В.

Более подходящее(диод) -это какой?

180 Ватт, 200вольт это мало. И желательно без драйвера. Мой 600 Вольт 10А и его пробивает.

Необходимо сделать как можно проще в плане пайки.

Joiner
Offline
Зарегистрирован: 04.09.2014

Тему внимательно не читал, может ляпну что-то не то.... Но где-то встречал, что параллельно эл.двигателю нужно обязательно подключить конденсатор, вроде как с самоиндукцией бороться.

nevkon
Offline
Зарегистрирован: 20.01.2015

Диод например от FR204 до FR207 или подобные. Лучше FR207 - он до 1000В, но я ставил вообще толи 202 толи 203 и работает, но у меня всего 48В на двигатель идет.

А полевик пробьет и на 1000В и на 1500В обраткой. Выбирать нужно по рабочему напряжению (у меня IRF540N справляется и не греется вообще, хотя токи могут доходить до 8А). Высоковольтные полевики редко на большие токи рассчитаны.

Конденсатор для гашения теоретически можно, но лучше диод. Конденсатор можно в парралель поставить для сглаживания пульсаций.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

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

01#include <LiquidCrystal.h>      // библиотека экрана
02 
03LiquidCrystal lcd(3, 4, 5, 6, 7, 8);   // пины экрана
04 
05volatile unsigned long len = 0;
06volatile unsigned long length = 0;      //Время срабатывания датчика
07volatile unsigned long start_time = 0;        //Предыдущее время
08 
09int rehPin = 0;           // пин регулятора
10 
11int rimPin = 9;           // пин выхода ШИМ
12 
13int obMax = 6000;         //ввести максимальные обороты
14 
15int obMin = 60;          //ввести минимальные обороты
16 
17float kImp = 8;          //ввести кол-во импульсов на 1 оборот
18 
19float kPp = 1;          //ввести коэфициент плавного пуска
20 
21int pRim = 0;           //переменная ШИМ
22 
23 
24 
25unsigned long currentTime;
26unsigned long loopTime;
27 
28void setup(){
29  attachInterrupt(0,  impuls, RISING);   //Прерывание по нарастающему фронту на D2
30   pinMode(rimPin, OUTPUT);
31  analogReference(DEFAULT);
32  currentTime = millis();       // считываем время, прошедшее с момента запуска программы
33  loopTime = currentTime;
34  lcd.begin(16, 2);
35  lcd.setCursor(0,0);
36 
37lcd.write("speed u:");  //в верхней строке будем выводить требуемые обороты
38 
39lcd.setCursor(0,1); 
40 
41lcd.write("speed f:");  // В нижней выводим фактичесские обороты
42}
43 
44void loop(){
45 
46  int val = analogRead(A0);
47  int pR =map(val, 0, 1023, obMin, obMax); //Приводим показания регулятора к минимальным и максимальным оборотам
48   
49  if (val > 0){                  //   если регулятор больше 0
50    
51       
52     int pRim = ((60000000/pR/kImp -length)*kPp+ pRim) ;   //то к значению ШИМ добавляем разницу между необходимым
53     //временем импульса и реальным временем импульса умноженным на коэфициент плавного пуска.
54    
55      pRim = constrain(pRim,0,254) ; //  Следим чтоб ШИМ был не меньше 0 и не больше 254
56      analogWrite(rimPin, pRim);   //Выводим значение ШИМ на двигатель
57     
58    }
59    else {
60      int pRim = 0;      //Если регулятор на 0 то значение ШИМ =0
61    analogWrite(rimPin, pRim);  // Выводим значение ШИМ на двигатель
62      
63      }
64   currentTime = millis();                           // считываем время, прошедшее с момента запуска программы
65  if(currentTime >= (loopTime + 1000)){              // сравниваем текущий таймер с переменной loopTime + 1 секунда
66   
67  lcd.setCursor(9,0);
68  lcd.print(pR);
69lcd.print("       ");     // выводим нужные обороты на экран.
70    
71 
72    lcd.setCursor(9,1);
73     
74lcd.print(60000000/(length*kImp));      // выводим реальные обороты на экран.
75lcd.print("       ");
76    loopTime = currentTime;                         // в loopTime записываем новое значение
77  }
78   
79   
80}
81 
82//                      Подпрограмма прерывания   
83void impuls(){
84  len =micros()-start_time;
85  if ( len>400 ){length =len ;
86  start_time = micros();
87  }
88else {}
89}

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

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

Приветствую всех! Я заминаюсь гончарным делом. Хороший гончарный круг стоит около 100 тыс. Поэтому приходится изготавливать его самому. Посмотрев ролик на ютубе https://www.youtube.com/watch?v=wFKM7z4com4, я решил сделать круг из стиральной машинки. Только управление коллекторным двигателем сделал не на контроллере TDA1085, а на ардуинке. Мне это показалось проще, я взял силовую часть от стиралки, и управлял ею ардуинкой. Не надо ни травить плату, ни нужно покупать деталей, а программу можно писать под свои нужды, что-то не нравится в работе – подключил комп. исправил сточку в коде и работай дальше, в общем одни плюсы. Но через время круг стал дурить, обороты двигателя могли внезапно возрасти, что сделало работу на круге невозможным. Я подумал, что проблема в ардуино, и в течении недели переделал схему управления на TDA1085, сейчас я работаю на ней. Тем не менее иногода двигатель дёргается и бывает, что набирает обороты, тогда, когда от него этого не требуется. Это бывает редко, и думаю, что это зависит от сети. Но все прелести программируемого управления не дают мне покоя. Я делаю второй круг, у меня есть намерение сделать его опять на ардуино, но управлять двигателем не через семистр, а транзистором шим регулированием, чтобы уйти от зависимости искажений в сети синусоиды, а так же, чтобы не ловить ноль.  И здесь у меня к Александру вопросы. Первое, у вас двигатель как я понял на 220 вольт, чтобы им управлять транзистором надо напряжение выпрямлять, правильно я понял? Второе, коллекторный двигатель от стиралки может работать от постоянного тока? Я подключал свой к выпрямленному сетевому напряжению, через блок питания от компьютера, после диодного моста в высоковольтной части платы, двигатель приятно работал, видимо ему это понравилось. Но когда я его подключил к высокочастотной части схемы, сразу после полевого транзистора, он не подал признаков жизни. Я так понял, что 60 кГц для него много слишком высокое индукционное сопротивление.  А было бы неплохо – ведь там (в блоке питания компьютера) стоит шим регулятор, который можно без труда перестроить на регулятор оборотов с обратной связью. Прошу извинения если не по теме!

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Я так понял, что вопрос ко мне.

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

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

Я запитываю движок постоянкой и регулирую мосфетом. Но, как мне здесь подсказали, диод не тот. буду менять и пробовать дальше. Насчёт 60кГц не знаю, но ардуинка его регулирует.

У меня к вам теперь вопросы. Как реализовали управление симистором? и вообще по подробней про ваш первый регулятор. Желательно с программой и подробными коментариями. А то я в этом новичёк.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

https://www.youtube.com/watch?v=XdCvJ1wZ0bA Вот что-то вроде этого, только с коллекторным двигателем. Надо досмотреть до конца.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Говорила мне мама в детстве - "учи английский"

не слушался...

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

Говорила мне мама в детстве - "учи английский"

не слушался...

там по картинкам всё понятно.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

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

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

sany_sch пишет:

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

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

sany_sch пишет:

Я запитываю движок постоянкой и регулирую мосфетом. Но, как мне здесь подсказали, диод не тот. буду менять и пробовать дальше. Насчёт 60кГц не знаю, но ардуинка его регулирует.

У нас в армии была частота сети 400 герц и бытовые приборы (телевизор) работали. Видимо 60 кГц это перебор. Хотя скажите как специалист? Тогда блок питания может стать регулятором двигателя, а ардуинка им управлять, там стоит uc3843b шим контроллер. Вроде его можно настроить и на меньшую частоту.

sany_sch пишет:

У меня к вам теперь вопросы. Как реализовали управление симистором? и вообще по подробней про ваш первый регулятор. Желательно с программой и подробными коментариями. А то я в этом новичёк.

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

Код я скидывать сюда не стану, по причине, что мне за него просто стыдно. Очень корявый. Могу скинуть в личку. Правда у меня столько много вариантов его. Скину последний.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

не найду, где здесь можно скинуть в личку?

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Вот так  sanysch670@gmail.com

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

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

400Гц !?!   впервые слышу.   Знаю что бывает 60Гц в сети. Знаю что бывают двигателя на200Гц и на  400Гц и запускаются через преобразователи. Но что бы в сети 400Гц.  Думаю, трансформаторы не выдержали бы.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

Выслал.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

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

Две ардуино это перебор.

sany_sch пишет:

400Гц !?!   впервые слышу.   Знаю что бывает 60Гц в сети. Знаю что бывают двигателя на200Гц и на  400Гц и запускаются через преобразователи. Но что бы в сети 400Гц.  Думаю, трансформаторы не выдержали бы.

У нас в машинах было 400 герц. бытовые приборы работали, а вот если наоброт, допустим, трансформатор на 400 герц влючить в сеть с 50 герцами он начинает дымится. И эти приборы на 400 герц для своей мощности по сравнению с 50 герцовыми были существенно меньше.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Будимир пишет:

Две ардуино это перебор.

Понимаю.  поэтому решил пробовать с транзистором. Те регуляторы что встречал для симистора были выполнены с функцией delay. и могли загрузить процессор полностью. а другого решения я не знаю.

То,что "герцовые" имеют меньше габариты это понятно. и соответственно на 50Гц дымят. Это видел и пробовал. А вот наоборот не доводилось. думал, что и здесь реакция та-же. Буду знать.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

sany_sch пишет:

400Гц !?!   впервые слышу.   Знаю что бывает 60Гц в сети. Знаю что бывают двигателя на200Гц и на  400Гц и запускаются через преобразователи. Но что бы в сети 400Гц.  Думаю, трансформаторы не выдержали бы.

быт - 50 Гц , наземная военТехника - 400 Гц , ВМФ и подлодки - 800 Гц , самолётики - 1200 Гц
...щас может быть и по другому :)
разница в габаритах трансов и дросселей , и др.
транс на 200 W :
- быт - 10 х 10 х 10 см
- НВТ - 7 х 7 х 7 см
- ВМФ - 5 х 5 х 5 см
- авиация - 3 х 3 х 3 см
....размеры - с потолка , но отражают зависимость массогабарита от частоты питающей сети :)

паяльнику или чайнику , например , пофиг - 220 50 Гц или 220 400 Гц , остальным - смерть :(

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

SU-27-16 пишет:

паяльнику или чайнику , например , пофиг - 220 50 Гц или 220 400 Гц , остальным - смерть :(

Не думаю.Индуктивное сопротивление катушки Низко частотные трансформаторы на высокой частоте будут иметь высокое сопративление и не будут работать, но не умрут. При 400 гц. индукционное сопротивление, видимо, ещё не слишком высоко, чтобы не работали приборы. Хотя кпд падает существенно. Шим регулятор выдаёт пилу на управление двигателем, это своего рода переменка, и двигатели постоянного тока прекрасно работают (разумеется до определённой частоты шим). Отсюда идея, - упралвять оборотами - не шим, а частотой. Что скажите?

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

Понимаю.  поэтому решил пробовать с транзистором. Те регуляторы что встречал для симистора были выполнены с функцией delay. и могли загрузить процессор полностью. а другого решения я не знаю.

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

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

диод кд213г заменил на FR607  проблема осталась. Мосфет пробивает при первом включении. Паралельно двигателю поставил конденсатор не полярный 0,33микрофарада. И убрал конденсатор после диодного моста. В чём может быть проблема? Первый мосфет продержался несколько включений и регулировок двигателя и лампочки. второй и третий пробило сразу.

Хорошая новость. Неизвестный датчик Холла заменён на цифровой SS441A. поставлен резистор 10кОм между выходом и +. наводки прекратились.

Вопрос. Что не так с транзистором?

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

Мосфет пробивает при первом включении.

Я бы для экстерементов последовательно двигателю включил бы лампочку. По крайней мере по лампочке можно посчитать какой ток идёт через нагрузку. Ток думаю пиковый, без осцилографа не обойтись. А потом защиту по току - шунт 0,25 - 0,5 ома последовательно с двигателем, с него снимать напряжение и при привешении номинального напряжения сигнал на ардуино. Это в теории.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

Плавный пуск тоже не помешал бы.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Будимир пишет:

Плавный пуск тоже не помешал бы.

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

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

Значит лампочка. Если не хватает у транзистора ампеража то можно их натыкать сколько угодно параллельно включить, например как здесь:tl494s4.jpg

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Ампеража хватает. 10nk60zfp  расчитан на 10А   двигатель стоит 180Ватт. Тоесть не больше 2А в холостую ещё меньше. Причина в чём -то другом. Советовали заменить диод заменил. Поставить конденсатор - поставил.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

sany_sch пишет:
Ампеража хватает. 10nk60zfp  расчитан на 10А   двигатель стоит 180Ватт. Тоесть не больше 2А в холостую ещё меньше. Причина в чём -то другом. Советовали заменить диод заменил. Поставить конденсатор - поставил.
У "взрослых" двигателей пусковые токи превышают номинал в 3-6 раз (в зависимости от возбуждения: параллельное или последовательное).

Есть еще одна фишка при пробое транзисторов: скорость нарастания тока. Реально кристал имеет некую площадь и открывается не весь сразу, а постепенно, начиная с самого тонкого участка. Если ток возрастает очень быстро, в кристале прожигается точка.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

А можете ток замерить подключив двигатель напрямую без транзистора? Может на постоянке у него ток потребления другой. Ну а потом ток запуска. Если остались транзисторы, то можно на лампочке без двигателя эксперементировать, или на маломощном двигателе. А уже потом сделать защиту по току.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

Схема защиты по току. Можно легко организовать на ардуино.

ris4.gif

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Будимир пишет:

Если остались транзисторы, то можно на лампочке без двигателя эксперементировать

Транзистор остался один. Как на лампочке обратную связь? датчик освещения? Это совсем не то.

Двигатель через амперметр запускал, около 1А. Но я не могу же засечь самый первый пусковой импульс. Мотро слабее брать не имеет смысла. Так как и так взят в 2 раза  слабее того, который нужен.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

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

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Итак, последний мосфет пошёл на эксперименты. При плавном добавлении оборотов всё нормально работает. а вот при резком включении транзистор пробивает. Нужно решать проблему. Либо аппаратно, либо ставить датчик тока и програмно. Как это делается?

Во время испытаний был проверен этот скетч:

01#include <LiquidCrystal.h>      // библиотека экрана
02 
03LiquidCrystal lcd(3, 4, 5, 6, 7, 8);   // пины экрана
04 
05volatile unsigned long len = 0;
06volatile unsigned long length = 999999999;      //Время срабатывания датчика
07volatile unsigned long start_time = 0;        //Предыдущее время
08 
09int rehPin = 0;           // пин регулятора
10 
11int rimPin = 9;           // пин выхода ШИМ
12 
13int obMax = 1000;         //ввести максимальные обороты
14 
15int obMin = 60;          //ввести минимальные обороты
16 
17float kImp = 8;          //ввести кол-во импульсов на 1 оборот
18 
19float kPp = 1;          //ввести коэфициент плавного пуска
20 
21volatile int pRim = 0;           //переменная ШИМ
22 
23 
24 
25unsigned long currentTime;
26unsigned long loopTime;
27 
28void setup(){
29  attachInterrupt(0,  impuls, RISING);   //Прерывание по нарастающему фронту на D2
30   pinMode(rimPin, OUTPUT);
31  analogReference(DEFAULT);
32  currentTime = millis();       // считываем время, прошедшее с момента запуска программы
33  loopTime = currentTime;
34  lcd.begin(16, 2);
35  lcd.setCursor(0,0);
36 
37lcd.write("speed u:");  //в верхней строке будем выводить требуемые обороты
38 
39lcd.setCursor(0,1); 
40 
41lcd.write("speed f:");  // В нижней выводим фактичесские обороты
42}
43 
44void loop(){
45 
46  int val = analogRead(A0);
47  int pR =map(val, 0, 1023, obMin, obMax); //Приводим показания регулятора к минимальным и максимальным оборотам
48   
49  if (val > 0){                  //   если регулятор больше 0
50    
51      if ((60000000/pR/kImp)>length){  //если нужное время импульса больше реального
52     pRim = pRim-1 ;   //то от значения ШИМ отнимаем 1
53     
54     pRim = constrain(pRim,0,254) ; //  Следим чтоб ШИМ был не меньше 0 и не больше 254
55      analogWrite(rimPin, pRim);   //Выводим значение ШИМ на двигатель
56      delay(10);          //для плавности регулирования вводим временую задержку
57      }
58    else {
59     pRim = pRim+1 ;   //то к значению ШИМ + 1
60     pRim = constrain(pRim,0,254) ; //  Следим чтоб ШИМ был не меньше 0 и не больше 254
61      analogWrite(rimPin, pRim);   //Выводим значение ШИМ на двигатель
62      delay(kPp*10+10);          //для плавности регулирования вводим временую задержку минимальная 30+нужный коэфициент*10
63      }
64    }
65    else {
66     pRim = 0;      //Если регулятор на 0 то значение ШИМ =0
67    analogWrite(rimPin, pRim);  // Выводим значение ШИМ на двигатель
68      
69      }
70   currentTime = millis();                           // считываем время, прошедшее с момента запуска программы
71  if(currentTime >= (loopTime + 1000)){              // сравниваем текущий таймер с переменной loopTime + 1 секунда
72   
73  lcd.setCursor(9,0);
74  lcd.print(pR);
75lcd.print("       ");     // выводим нужные обороты на экран.
76    
77 
78    lcd.setCursor(9,1);
79     
80lcd.print(60000000/(length*kImp));      // выводим реальные обороты на экран.
81lcd.print("       ");
82    loopTime = currentTime;                         // в loopTime записываем новое значение
83  }
84   
85   
86}
87 
88//                      Подпрограмма прерывания   
89void impuls(){
90  len =micros()-start_time;
91  if ( len>400 ){length =len ;
92  start_time = micros();
93  }
94else {}
95}

Работает более менее сносно.

Вопрос. как избавится от "delay" в плавном разгоне?   в случае сброса оборотов, думаю, его можно просто убрать. А вот на разгоне нужно что-то делать.

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

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

Итак, последний мосфет пошёл на эксперименты.

Вот какая мысль пришла. А что если транзистор пробивается не по току, а по напряжению? По паспорту у него 600 вольт. Двигатель имеет индукцию и работает как дроссель, параллельно включён конденсатор, в самом мосфете стоит диод, схема похожа на повышающий преобразователь. Двигатель и конденсатор представляют собой коллебательный контур, который вовышает напряжение (выше 600 вольт) резонансом на задающую частоту. Более того допускаю, что если катушки статера и ротера подключены последовательно, то возможна смещение в них фаз (сдвиг прямоугольного импульса), вселдствии чего резкое повышение тока.

Что бы я сделал бы для начала.

1. Замерил бы напряжение на выходе.

2. Убрал бы конденсатор поставленый в параллель двигателю.

3. Понизил бы несущию частоту. Можно бы и повысить, ради экстеримента.

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

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Будимир пишет:

Что бы я сделал бы для начала.

1. Замерил бы напряжение на выходе.

2. Убрал бы конденсатор поставленый в параллель двигателю.

3. Понизил бы несущию частоту. Можно бы и повысить, ради экстеримента.

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

1 напряжение не мерял. ( замерю).

2 конденсатора небыло. На последнем транзисторе убрал.

3 Как повышать или понижать частоту ШИМ пока не знаю.  А эксперименты не дёшевы (к сожалению).

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Будимир пишет:
Двигатель имеет индукцию и работает как дроссель, параллельно включён конденсатор,
Мало того, что остановленный двигатель представляет из себя КЗ по постоянному току, так еще разряженный конденсатор добавляет КЗ по переменке. Что вы хотите от транзистора? Чтобы он работал на КЗ в нагрузке и не сдох? От ЭДС самоиндукции движка параллельно ему ставят диод. И парралельно транзистору тоже, нельзя полагаться на тот, что у него внутри. От аппаратной защиты транзистора по току вы никуда не денетесь, программно вы защитите только двигатель.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Andy пишет:

Мало того, что остановленный двигатель представляет из себя КЗ по постоянному току, так еще разряженный конденсатор добавляет КЗ по переменке. Что вы хотите от транзистора? Чтобы он работал на КЗ в нагрузке и не сдох? От ЭДС самоиндукции движка параллельно ему ставят диод. И парралельно транзистору тоже, нельзя полагаться на тот, что у него внутри. От аппаратной защиты транзистора по току вы никуда не денетесь, программно вы защитите только двигатель.

Конденсатора небыло.

Какой диод и как поставить на транзистор?

Как организовать аппаратную  защиту мосфета?

Почему нельзя програмно? если поставить датчик тока, и показания равны 0, тоесть двигатель стоит, то ШИМ не более 5 или 10. (найти эксперементально) . и дальше добавдляем по 1. Тогда будут исключены резкие запуски двигателя.

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

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

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

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

sany_sch пишет:

Как организовать аппаратную  защиту мосфета?

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

Будимир
Будимир аватар
Offline
Зарегистрирован: 04.02.2016

на tda 1085 http://www.chipmaker.ru/uploads/monthly_07_2014/post/image/post-60830-089793900%201404570276.pngзащита так и устроена. Шунты R31 R33, Ток регулируется подстроечником R21, напряжения с шунта поступает на ножку 3. В общем эту часть можно взять и перенести на ардуино, подстроечника не надо, можно програмно настроить на нужное напряжение.

sany_sch
sany_sch аватар
Offline
Зарегистрирован: 19.01.2016

Будимир пишет:

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

Даже управляя раздельно, якорь будет брать на себя всю нагрузку. Тоесть по факту двигатель будет в 1,5-2 раза слабее. Нет, не знаю как правильнее сказать. Запаса мощности не будет, греться будет быстрее, В общем игра не стоит свеч.