Изменение оборотов вентилятора с помощью Arduino

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

YuraSh пишет:

С коллекторным да, все просто. Асинхроннику нужно 50Гц, (или меньше, для снижения мощности). Просто регулируя напряжение изменить частоту оборотов (мощность) асинхронника неполучится.

Частота оборотов и мощность РАЗНЫЕ вещи, ни коим образом не связанные! При снижении мощности ниже какого-то уровня обороты резко упадут, потому что ротор перестанет успевать за электрическим полем. При этом сразу падает кпд. Для управления асинхронниками (скоростью) используют "частотники", а это совсем другая история.

YuraSh
Offline
Зарегистрирован: 18.01.2013

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

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

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

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

Почему нельзя реализовать частотное преобразование как это делается в частотниках, монтировал такие там на выходе обычная пила только с разным потенциалом относительно нуля, выпрямить 220, собрать схему которая + - чередовало с определенной частотой, от 0-60ти герц так разве не получится? Тем более что одна фаза а не три, мощности ардуины слихвой хватит.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Можно. Но это уже достаточно сложный проект. А одной фазой все равно обойтись не получится - на асинхроннике однофазном стоит фазосдвигающий конденсатор, который расчитан исключительно на 50 Гц и сдвигает фазу для второй обмотки. Так что фаз придется делать минимум 2.

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

AlexFisher пишет:

Можно. Но это уже достаточно сложный проект. А одной фазой все равно обойтись не получится - на асинхроннике однофазном стоит фазосдвигающий конденсатор, который расчитан исключительно на 50 Гц и сдвигает фазу для второй обмотки. Так что фаз придется делать минимум 2.

ну так дуиной и двигать вторую, деталей по больше выйдет. Подобрать соответствующте силовые детали, опторазвязку, организовать пилу на двух ногах,  20 миллисекунд одна нога, потом low, 20 миллисекунд вторая,low и здвиг для второй пары.г

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

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

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Бродя по просторам инета наткнулся на это http://www.gaw.ru/html.cgi/txt/app/micros/avr/AVR494.htm, если уже было, звиняйте

ТРИ МИРА
ТРИ МИРА аватар
Offline
Зарегистрирован: 09.01.2012

AlexFisher пишет:

Рекомендую нижнюю схему из поста #84

 

А где можно по подробнее найти инструкцию по этой схеме и ее подключению, прошу отнестить с пониманием, просто немного не понятно как ее сдружить с arduino/

DimaP.
Offline
Зарегистрирован: 21.04.2013

Есть одна проблема 

ели применять  эту вот схему 

и симистор Т1 поставить например 2тс 161-200 у которого ток открывания составляет не менее 200 мА, возникает проблема. т.к. оптосимистор максимально может пропустить через себя(в частности MOC3021 50 mA) соответственно смистор не откроеся.

Подскажите как можо решить данную задачу?? 

 

 

axill
Offline
Зарегистрирован: 05.09.2011

DimaP. пишет:

Есть одна проблема 

ели применять  эту вот схему 

и симистор Т1 поставить например 2тс 161-200 у которого ток открывания составляет не менее 200 мА, возникает проблема. т.к. оптосимистор максимально может пропустить через себя(в частности MOC3021 50 mA) соответственно смистор не откроеся.

Подскажите как можо решить данную задачу?? 

 

 

под рукой даташит на 3020-3023 там указано - максимум 1А. Мне думается вы путаете ток через светодиод с током через симистор. Максимум через светодиод действительно на уровне 50ма( в моем даташите написано 60).

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

DimaP. пишет:

возникает проблема. т.к. оптосимистор максимально может пропустить через себя(в частности MOC3021 50 mA) соответственно смистор не откроеся.

Вы уже пробовали собирать схему? Не открылось?

По закону Ома, токоограничивающий резистор 1КОм, при напряжении 220 вольт, даст ток 220 миллиампер. Так что проблема не в оптосимисторе - он бы у Вас сгорел синим пламенем, если бы был рассчитан на 50 миллиампер.

axill
Offline
Зарегистрирован: 05.09.2011

Действующее напряжение на том резисторе намного меньше 220в

по даташиту там вообще ставят ом на 300 1вт всего

quz
Offline
Зарегистрирован: 22.06.2016

Ребят, а по схеме не могли бы подсказать R8 (Варистор) какой выбрать ( к схеме 84)? Можете марку подсказать?

Спасибо.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

quz пишет:

Ребят, а по схеме не могли бы подсказать R8 (Варистор) какой выбрать ( к схеме 84)? Можете марку подсказать?

Спасибо.


В моей теме http://arduino.ru/forum/apparatnye-voprosy/ustroistvo-fiu-na-simistore-d... есть схема диммера, там указан тип варистора, который я покупал в Чипе с Дипом. Схема рабочая, параметры корректные. Просто привести тип мне затруднительно, поскольку пишу из метро с телефона. :))

quz
Offline
Зарегистрирован: 22.06.2016

Duino A.R. пишет:
quz пишет:

Ребят, а по схеме не могли бы подсказать R8 (Варистор) какой выбрать ( к схеме 84)? Можете марку подсказать?

Спасибо.

В моей теме http://arduino.ru/forum/apparatnye-voprosy/ustroistvo-fiu-na-simistore-d... есть схема диммера, там указан тип варистора, который я покупал в Чипе с Дипом. Схема рабочая, параметры корректные. Просто привести тип мне затруднительно, поскольку пишу из метро с телефона. :))

 

Спасибо, JVR-05N431K

Jtest
Offline
Зарегистрирован: 02.06.2015

Добрый день.

Собрал вот эту схему:

Залил программу:

#define ControlSimistor 9 //выход на симистор
#define ControlZero 2 //вход контроля перехода через 0
#define steps 5 // количество шагов в 100%, разрядность, ступенчатость
volatile byte Power = 40; //начальное значение мощности в % (можно не задавать)

void setup()
{
  pinMode(ControlSimistor, OUTPUT);
  digitalWrite(ControlZero, 1);
  attachInterrupt(0, zero, FALLING); //внешнее прерывание контроля перехода через ноль
}

void zero() //если словили переход через 0
{
  static int count; 
  if(count < Power/(100/steps)) 
    digitalWrite(ControlSimistor, 1);
  else
    digitalWrite(ControlSimistor, 0);

  count++;
  if(count == steps) count = 0;
}

void loop()
{
        if (digitalRead(plus) == HIGH) {
        delay(3);//защита от дребезга
        Power = Power + 10;
        if (Power >= 110) {
          Power = 100;
        }
      }
      if (digitalRead(minus) == HIGH) {
        delay(3);//защита от дребезга
        Power = Power - 10;
        if (Power <= 0) {
          Power = 10;
        }
      }
     display.print(Power, 0);
}

Подключен дисплей 3310. Выводит цифру "2".

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

Подключил лампочку, она не горит.  Что не так?

Спасибо

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

AlexFisher пишет:

Можно. Но это уже достаточно сложный проект. А одной фазой все равно обойтись не получится - на асинхроннике однофазном стоит фазосдвигающий конденсатор, который расчитан исключительно на 50 Гц и сдвигает фазу для второй обмотки. Так что фаз придется делать минимум 2.

Бывают разные асинхронники, в некоторых фаза сдвигается короткозамкнутым витком

Алексей911
Offline
Зарегистрирован: 04.11.2016

Итог вашего дияния перегрев двигателя а следовотельно дым и тд проверено не используйте симистр с одной фазой для данных целей!

 

Алексей911
Offline
Зарегистрирован: 04.11.2016

В данном проекте рассмотрим изготовление генератора синусоидального сигнала при помощи метода прямого синтеза (DDS-метод). Для реализации этого проекта нам не потребуется какого-либо дополнительного оборудования кроме самого контроллера Arduino. Частотный диапазон генератора от 0 до 16 кГц, с точностью до 1 мкГц! Данное устройство может пригодится не только для генерирования звуковых сигналов, но в тестовом и измерительном оборудовании радиолюбителя. Например в телекоммуникационном оборудовании DDS генератор можно использовать для ЧМ и ФМ модуляции (FSK и PSK).

DDS-генератор на Arduino

DDS-метод

В программной части проекта, для реализации DDS метода, нам понадобится 4 вещи:

аккумулятор и tuning word, который в нашем случае состоит из двух long integer переменных;

таблица значений синусоидального сигнала (один период);

цифро-аналоговый преобразователь, который обеспечивается внутренним ШИМ Arduino (analogWrite);

генератор тактовых импульсов (используем внутренний hard-таймер от ATMega).

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

Программное обеспечение

Для работы данного скетча на Arduino Diecimila или Duemilenove подключите потенциометр к аналоговому выводу 0 и к GND и +5В. Выход генератора находится на выводе 11, куда вы можете подключить активные колонки, или ФНЧ фильтр описанный ниже.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
 *
 * DDS Sine Generator mit ATMEGS 168
 * Timer2 generates the  31250 KHz Clock Interrupt
 *
 * KHM 2009 /  Martin Nawrath
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne
 
 */
 
#include "avr/pgmspace.h"
 
// table of 256 sine values / one sine period / stored in flash memory
PROGMEM  prog_uchar sine256[]  = {
  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124
 
};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 
int ledPin = 13;                 // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;
 
double dfreq;
// const double refclk=31372.549;  // =16MHz / 510
const double refclk=31376.6;      // measured
 
// variables used inside interrupt service declared as voilatile
volatile byte icnt;              // var inside interrupt
volatile byte icnt1;             // var inside interrupt
volatile byte c4ms;              // counter incremented all 4ms
volatile unsigned long phaccu;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  Serial.begin(115200);        // connect to the serial port
  Serial.println("DDS Test");
 
  pinMode(6, OUTPUT);      // sets the digital pin as output
  pinMode(7, OUTPUT);      // sets the digital pin as output
  pinMode(11, OUTPUT);     // pin11= PWM  output / frequency output
 
  Setup_timer2();
 
  // disable interrupts to avoid timing distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
  dfreq=1000.0;                    // initial output frequency = 1000.o Hz
  tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word
 
}
void loop()
{
  while(1) {
     if (c4ms > 250) {                 // timer / wait fou a full second
      c4ms=0;
      dfreq=analogRead(0);             // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
 
      cbi (TIMSK2,TOIE2);              // disble Timer2 Interrupt
      tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word
      sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
      Serial.print(dfreq);
      Serial.print("  ");
      Serial.println(tword_m);
    }
 
   sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
   cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope
  }
 }
//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM,  16000000/510 = 31372.55 Hz clock
void Setup_timer2() {
 
// Timer2 Clock Prescaler to : 1
  sbi (TCCR2B, CS20);
  cbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);
 
  // Timer2 PWM Mode set to Phase Correct PWM
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);
 
  sbi (TCCR2A, WGM20);  // Mode 1  / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}
 
//******************************************************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {
 
  sbi(PORTD,7);          // Test / set PORTD,7 high to observe timing with a oscope
 
  phaccu=phaccu+tword_m; // soft DDS, phase accu with 32 bits
  icnt=phaccu >> 24;     // use upper 8 bits for phase accu as frequency information
                         // read value fron ROM sine table and send to PWM DAC
  OCR2A=pgm_read_byte_near(sine256 + icnt);   
 
  if(icnt1++ == 125) {  // increment variable c4ms all 4 milliseconds
    c4ms++;
    icnt1=0;
   }  
 
 cbi(PORTD,7);            // reset PORTD,7
}

Результат

Ниже представлена осциллограмма, на верхней части которой изображен ШИМ-сигнал на 11 выходе, а в нижней части этот же сигнал после фильтра низких частот (ФНЧ). Синусоида выглядит не очень чистой, но это в основном из-за ограниченной разрешающей способности цифрового осциллографа.

Осциллограмма DDS-генератора

Спектрограмма показала неожиданно хороший результат. Большой пик - это на частоте около 1000 Гц. Все нежелательные искажения находятся ниже 50 дБ, возникшие из-за того, что использовался 8 битный ЦАП (1/256 = 48 дБ).

Спектрограмма DDS-генератора

Выходной фильтр низких частот

Для начала, вы можете подсоединить 11 пин контроллера к активным колонкам. Но скорее всего, вам еще понадобится ФНЧ-фильтр, который также будет отфильтровывать частоту дискретизации 32 кГц. Ниже представлена схема такого фильтра с частотой среза 12 кГц.

Схема фильтра низких частот

Аппаратная реализация DDS

Данная программная реализация алгоритма DDS имеет некоторые недостатки, связанные с ограниченной скоростью алгоритма программы, а также возможностями микроконтроллера ATMega. Специализированные DDS-микросхемы лишены этих недостатков и покрывают диапазон от 0 до 100 МГц.

+post-121615-0-65643100-1368562359_thumb.

Slip
Offline
Зарегистрирован: 18.12.2017

Для тэна ведь такой метод тоже подойдет? Хочу для тэна ПИД регулятор сделать. Учитывая выпрямленное напряжение нужно ли как-то програмно ограничить ШИМ, чтобы на выходе не получилось 310В?