Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь Управление оборотами вытяжного вентиялтора

Тема в разделе "Железные вопросы по esp8266", создана пользователем Geremy, 22 фев 2019.

  1. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Добрый день. Пытаюсь реализовать регулировку скорости вытяжного вентилятора, для этого использую:
    1. Вентилятор ВЕНТС 100 Квайт
    2. Диммер переменного тока
    3. NodeMcu v3

    Делаю как в этом видео (), но только подключаю вентилятор. Использую вот этот скетч:
    Код (Text):
    1. #include "hw_timer.h"        
    2. const byte zcPin = 12;
    3. const byte pwmPin = 13;
    4.  
    5. byte fade = 1;
    6. byte state = 1;
    7. byte tarBrightness = 255;
    8. byte curBrightness = 0;
    9. byte zcState = 0; // 0 = ready; 1 = processing;
    10. void setup() {
    11.   Serial.begin(115200);  
    12.   pinMode(zcPin, INPUT_PULLUP);
    13.   pinMode(pwmPin, OUTPUT);
    14.   attachInterrupt(zcPin, zcDetectISR, RISING);    // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
    15.   hw_timer_init(NMI_SOURCE, 0);
    16.   hw_timer_set_func(dimTimerISR);
    17. }
    18.  
    19. void loop() {
    20.   // put your main code here, to run repeatedly:
    21.     if (Serial.available()){
    22.         int val = Serial.parseInt();
    23.         if (val>0){
    24.           tarBrightness =val;
    25.           Serial.println(tarBrightness);
    26.         }
    27.        
    28.     }
    29. }
    30.  
    31.  
    32. void dimTimerISR() {
    33.     if (fade == 1) {
    34.       if (curBrightness > tarBrightness || (state == 0 && curBrightness > 0)) {
    35.         --curBrightness;
    36.       }
    37.       else if (curBrightness < tarBrightness && state == 1 && curBrightness < 255) {
    38.         ++curBrightness;
    39.       }
    40.     }
    41.     else {
    42.       if (state == 1) {
    43.         curBrightness = tarBrightness;
    44.       }
    45.       else {
    46.         curBrightness = 0;
    47.       }
    48.     }
    49.    
    50.     if (curBrightness == 0) {
    51.       state = 0;
    52.       digitalWrite(pwmPin, 0);
    53.     }
    54.     else if (curBrightness == 255) {
    55.       state = 1;
    56.       digitalWrite(pwmPin, 1);
    57.     }
    58.     else {
    59.       digitalWrite(pwmPin, 1);
    60.     }
    61.    
    62.     zcState = 0;
    63. }
    64.  
    65. void zcDetectISR() {
    66.   if (zcState == 0) {
    67.     zcState = 1;
    68.  
    69.     if (curBrightness < 255 && curBrightness > 0) {
    70.       digitalWrite(pwmPin, 0);
    71.      
    72.       int dimDelay = 30 * (255 - curBrightness) + 400;//400
    73.       hw_timer_arm(dimDelay);
    74.     }
    75.   }
    76. }
    Проблема в том, когда я понижаю напряжение на 50% , то вентилятор снижает обороты, но потом начинает непрерывно поднимать и снижать обороты. При этом я пару раз мерил напряжение на клеммах, оно доходило до 390В.

    Подскажите как правильно настроить систему, чтобы вентилятор держал обороты?
     
  2. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    526
    Симпатии:
    50
    вместо

    Код (Text):
    1. byte curBrightness = 0;
    2. byte zcState = 0;
    надо

    Код (Text):
    1. volatile uint8_t curBrightness = 0;
    2. volatile uint8_t  zcState = 0;
     
  3. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    526
    Симпатии:
    50
    ну и в догонку правила для функций ISR

    - the ISR function must take no parameters & return nothing
    - delay() doesn't work during ISR & millis() doesn't increment
    - declare all global variables inside ISR as "volatile", it prevent
    compiler to make any optimization & unnecessary changes in the code
    with the variable

    функция, вызваемая прерыванием, функция должна быть без параметров и не возвращать значений. В англоязычной документации употребляется термин interrupt service routine для такой функции.
    Внутри функции обработки прерывания не работает delay(), значения возвращаемые millis() не изменяются. Возможна потеря данный передаваемых по последовательному соединению (Serial data) в момент выполнения функциии обработки прерывания. Переменные, изменяемые в функции, должным быть объявлены как volatile.
     
  4. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Сделал - эффект тот же, вентилятор набирает и сбрасывает обороты.

    Вот мой полный скетч:
    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <PubSubClient.h>
    3.  
    4. #include "Timer.h"  // Замена стандартному delay
    5.  
    6. // ~~~ Для обновления по воздуху - BEGIN ~~~
    7. #include <ESP8266WiFi.h>
    8. #include <WiFiClient.h>
    9. #include <ESP8266WebServer.h>
    10. #include <ESP8266mDNS.h>
    11. #include "hw_timer.h" //Либа для robodyn диммера
    12.  
    13. //Для robodyn диммера
    14. const byte zcPin = 12;  // Zero-cross pin
    15. const byte pwmPin = 13; // PWM pin
    16. byte fade = 1;
    17. byte state = 1;
    18. volatile uint8_t tarDimmerVal = 255;
    19. volatile uint8_t curDimmerVal = 0;
    20. volatile uint8_t zcState = 0; // 0 = ready; 1 = processing;
    21.  
    22. const char* host = "esp8266-webupdate";
    23.  
    24. ESP8266WebServer server(80);
    25.  
    26. const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>";
    27. // ~~~ Для обновления по воздуху - END ~~~
    28.  
    29. // ~~~ Чтобы избавиться от delay - BEGIN ~~~
    30. Timer t;
    31. // ~~~ Чтобы избавиться от delay - END ~~~
    32.  
    33. const char* ssid     = "ssid";
    34. const char* password = "password";
    35.  
    36. const char* mqtt_server = "192.168.1.160";
    37. const char* topicForSubscribe = "esp8266_wifi-dimmer-fan/cmnd/tarDimmerVal"; // Топик, который слушаем
    38. WiFiClient espClient;
    39. PubSubClient client(espClient);
    40.  
    41. char msgBufferPPM[10];          // буфер для отправки на MQTT сервет
    42. String msg; // Переменная для отправки по MQTT
    43.  
    44. void setup() {
    45.   Serial.println("Starting ...");
    46.   Serial.begin(9600);
    47.  
    48. // ~~~ Dimmer BEGIN ~~~
    49.   pinMode(zcPin, INPUT_PULLUP); //Инициализируем порт для zero-cross
    50.   pinMode(pwmPin, OUTPUT);  //Инициализируем PWM (ШИМ)
    51.   attachInterrupt(zcPin, zcDetectISR, RISING);    // Attach an Interupt to Pin 2 (interupt 0) for Zero Cross Detection
    52.   hw_timer_init(NMI_SOURCE, 0);
    53.   hw_timer_set_func(dimTimerISR);
    54. // ~~~ Dimmer END ~~~
    55.  
    56.   // We start by connecting to a WiFi network
    57.   wifi_station_set_hostname("WiFi_Dimmer_Fan"); // Задаем имя устройству
    58.   Serial.println();
    59.   Serial.println();
    60.   Serial.print("Connecting to ");
    61.   Serial.println(ssid);
    62.  
    63.   /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
    64.      would try to act as both a client and an access-point and could cause
    65.      network-issues with your other WiFi-devices on your WiFi-network. */
    66.   WiFi.mode(WIFI_STA);
    67.   WiFi.begin(ssid, password);
    68.  
    69.   while (WiFi.status() != WL_CONNECTED) {
    70.     delay(500);
    71.     Serial.print(".");
    72.   }
    73.  
    74.   Serial.println("");
    75.   Serial.println("WiFi connected");
    76.   Serial.println("IP address: ");
    77.   Serial.println(WiFi.localIP());
    78.  
    79.   // Инициализируем MQTT сервер
    80.     client.setServer(mqtt_server, 1883);
    81.     client.setCallback(callback);
    82.  
    83.   // ~~~ Настраиваем обновление по воздуху - BEGIN ~~~
    84.   Serial.println();
    85.   Serial.println("Booting Sketch...");
    86.   WiFi.mode(WIFI_AP_STA);
    87.   WiFi.begin(ssid, password);
    88.   if (WiFi.waitForConnectResult() == WL_CONNECTED) {
    89.     MDNS.begin(host);
    90.     server.on("/", HTTP_GET, []() {
    91.       server.sendHeader("Connection", "close");
    92.       server.send(200, "text/html", serverIndex);
    93.     });
    94.     server.on("/update", HTTP_POST, []() {
    95.       server.sendHeader("Connection", "close");
    96.       server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
    97.       ESP.restart();
    98.     }, []() {
    99.       HTTPUpload& upload = server.upload();
    100.       if (upload.status == UPLOAD_FILE_START) {
    101.         Serial.setDebugOutput(true);
    102.         WiFiUDP::stopAll();
    103.         Serial.printf("Update: %s\n", upload.filename.c_str());
    104.         uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
    105.         if (!Update.begin(maxSketchSpace)) { //start with max available size
    106.           Update.printError(Serial);
    107.         }
    108.       } else if (upload.status == UPLOAD_FILE_WRITE) {
    109.         if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
    110.           Update.printError(Serial);
    111.         }
    112.       } else if (upload.status == UPLOAD_FILE_END) {
    113.         if (Update.end(true)) { //true to set the size to the current progress
    114.           Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
    115.         } else {
    116.           Update.printError(Serial);
    117.         }
    118.         Serial.setDebugOutput(false);
    119.       }
    120.       yield();
    121.     });
    122.     server.begin();
    123.     MDNS.addService("http", "tcp", 80);
    124.  
    125.     Serial.printf("Ready! Open http://%s.local in your browser\n", host);
    126.     Serial.print("If doesn't work, for update firmware go to " + WiFi.localIP());
    127.    
    128.   } else {
    129.     Serial.println("WiFi Failed");
    130.   }
    131.   // ~~~ Настраиваем обновление по воздуху - END ~~~
    132.  
    133.   client.setCallback(callback);   // Для получения ответа по MQTT
    134.   pinMode(2, OUTPUT); // Инициируем внутренний светодиод
    135.   t.oscillate(2, 500, HIGH, 5); // Моргаем 5 раз встроенным светодиодом
    136. }
    137.  
    138. void loop() {
    139. if (!client.connected()) {
    140.      delay(1000);
    141.     reconnect();
    142.   }
    143.   client.loop();
    144.  
    145.   server.handleClient();  // Обрабатываем запрос с вебсерверу
    146.  
    147.   t.update();  // Необходимо для нормальной работы Timer
    148. }
    149.  
    150. // Функция отправки значений диммера
    151. void SendDimmerStatus(){
    152.   msg = String(tarDimmerVal);
    153.   msg.toCharArray(msgBufferPPM, msg.length()+1);
    154.   client.publish("esp8266_wifi-dimmer-fan/dimmer/tarDimmerVal", msgBufferPPM); // отправляем в топик целевое значение диммера
    155.   msg = String(curDimmerVal);
    156.   msg.toCharArray(msgBufferPPM, msg.length()+1);
    157.   client.publish("esp8266_wifi-dimmer-fan/dimmer/curDimmerVal", msgBufferPPM); // отправляем в топик текущее значение диммера
    158. }
    159.  
    160. void reconnect(){
    161.   // Loop until we're reconnected
    162.   while (!client.connected()) {
    163.     Serial.print("Attempting MQTT connection...");
    164.     // Create a random client ID
    165.     String clientId = "ESP8266Client-";
    166.     clientId += String(random(0xffff), HEX);
    167.     // Attempt to connect
    168.     if (client.connect(clientId.c_str())) {
    169.       Serial.println("connected");
    170.       // Once connected, publish an announcement...
    171.       // client.publish("outTopic", "hello world");
    172.       // ... and resubscribe
    173.       client.subscribe(topicForSubscribe);
    174.     } else {
    175.       Serial.print("failed, rc=");
    176.       Serial.print(client.state());
    177.       Serial.println(" try again in 5 seconds");
    178.       // Wait 5 seconds before retrying
    179.       delay(5000);
    180.     }
    181.   }
    182. }
    183.  
    184. // Метод для получения сообщения по MQTT в Nodemcu
    185. void callback(char *topic, byte *payload, unsigned int length) {  //payload - массиы byte (byte[])
    186.   Serial.print("Message arrived [");
    187.   Serial.print(topic);
    188.   Serial.print("] ");
    189.   for (int i = 0; i < length; i++) {
    190.     Serial.print((char)payload[i]);
    191.   }
    192.   Serial.println();
    193.  
    194.   String stringMsg; // Получаем сообщение в виде String
    195.   for (int i = 0; i < length; i++) {
    196.      stringMsg += (char)payload[i];
    197.   }
    198.  
    199.   tarDimmerVal = stringMsg.toInt();
    200.  
    201.   Serial.print("tarDimmerVal - ");
    202.   Serial.println(tarDimmerVal);
    203.  
    204.   stringMsg = "";
    205.  
    206.   if(sizeof(payload) > 1){  // Проверяем длину массива в байтах
    207.     t.oscillate(2, 500, HIGH, 2); // Моргаем 5 раз встроенным светодиодом
    208.     SendDimmerStatus(); // Отправляем данные
    209.   }
    210. }
    211.  
    212. // Метод для моргания
    213. void blinks() {
    214.   digitalWrite(2, HIGH);
    215.   delay(500);
    216.   digitalWrite(2, LOW);
    217.   delay(500);
    218. }
    219.  
    220. // Функция для WiFi диммера
    221. void dimTimerISR() {
    222.     if (fade == 1) {
    223.       if (curDimmerVal > tarDimmerVal || (state == 0 && curDimmerVal > 0)) {
    224.         --curDimmerVal;
    225.       }
    226.       else if (curDimmerVal < tarDimmerVal && state == 1 && curDimmerVal < 255) {
    227.         ++curDimmerVal;
    228.       }
    229.     }
    230.     else {
    231.       if (state == 1) {
    232.         curDimmerVal = tarDimmerVal;
    233.       }
    234.       else {
    235.         curDimmerVal = 0;
    236.       }
    237.     }
    238.    
    239.     if (curDimmerVal == 0) {
    240.       state = 0;
    241.       digitalWrite(pwmPin, 0);
    242.     }
    243.     else if (curDimmerVal == 255) {
    244.       state = 1;
    245.       digitalWrite(pwmPin, 1);
    246.     }
    247.     else {
    248.       digitalWrite(pwmPin, 1);
    249.     }
    250.    
    251.     zcState = 0;
    252. }
    253.  
    254. // Функция для WiFi диммера
    255. void zcDetectISR() {
    256.   if (zcState == 0) {
    257.     zcState = 1;
    258.  
    259.     if (curDimmerVal < 255 && curDimmerVal > 0) {
    260.       digitalWrite(pwmPin, 0);
    261.      
    262.       int dimDelay = 30 * (255 - curDimmerVal) + 400;//400
    263.       hw_timer_arm(dimDelay);
    264.     }
    265.   }
    266. }
     
  5. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
    выложите лишь
    1) функцию управления диммером с комментариями алгоритма
    2) то место, где вы обращаетесь к ней
    ---------------
    пока предположу что у вас задан режим изменение освещенности от мин до мах
    вот вы и получаете
     
  6. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    То, что вы делаете, хорошо работать не может в принципе. Потому что мотор - это не лампочка:
    1. Лампочка - это резистивная нагрузка, а мотор представляет собой в основном индуктивную нагрузку. В конце полупериода сети, когда напряжение падает до нуля, ток в резистивной нагрузке тоже падает до нуля и симистор выключается. А в индуктивной нагрузке при нулевом напряжении в сети ток продолжает течь и симистор не выключается. Поэтому регулировки не получается, работа нестабильная.
    2. Скорость вращения асинхронного двигателя переменного тока мало зависит от напряжения питания. Она определяется частотой питающего напряжения. Даже если бы вам удалось заставить диммер работать правильно (например, использовав вместо симистора IGBT или MOSFET и сделав диммер с падающим фронтом, Trailing-edge Dimmer), то диапазон регулировки оборотов получился бы небольшим.
    Стабильной работы обычного (т.е. нерегулируемого) асинхронного двигателя на меньших оборотах можно добиться если подавать на него питание с меньшей частотой, а не 50 Гц. В идеале - использовав инвертер, который будет синтезировать мотору синусоидальное напряжение питания заданной частоты и амплитуды.

    В самом простом случае можно подать на мотор полупериод сети, затем выдержать паузу в один период сети, затем подать полупериод другой полярности, опять паузу в полный период, и т.д. Это обеспечит на моторе частоту питающего напряжения в 3 раза меньше чем 50 Гц, мотор будет вращаться в три раза медленнее. Однако вращение будет не совсем равномерным, а пульсирующим; будет ощущаться заметная вибрация, поскольку форма питающего напряжения будет не очень-то синусоидальная.
     
  7. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
  8. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
  9. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    Файлопомойки для ликбеза малопригодны, они упускают из рассмотрения слишком многое. Еще раз, для тех, кому требуется ликбез: в общем виде, для неизвестно-какого-двигателя, управление скоростью путем регулировки напряжения не дает гарантированного хорошего результата. Оно дает более-менее удовлетворительный результат для двигателей с "мягкой" характеристикой, плохо годится для асинхронных двигателей с "жесткой" характеристикой, и совершенно непригодно для синхронных двигателей. Даже для двигателей с "мягкой" характеристикой, довольно трудно гарантировать старт при малом напряжении. Тогда как управление управление скоростью путем регулировки частоты питания годится для любого типа двигателя.
     
    Brand2 нравится это.
  10. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Добрый день.
    А можно ли как-то "допилить" заводские регуляторы скорости так чтобы они управлялись через NodeMcu?
    Нашел например такие:
    Регулятор скорости РС-1-300
    Регулятор скорости РС-1-400

    И еще вопрос - как узнать чем регулируется вентилятор напряжением или частотой?
     
  11. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Или может уже есть проверенные варианты вытяжного вентилятора + esp ?
     
  12. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.510
    Симпатии:
    176
    Примените другой алгоритм, нп. минута работает, девять "отдыхает".
     
  13. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
    Т е Вы согласились что напряжением можно управлять оборотами?
    Но вместо ответа на вопрос автора темы (почему не едет велосипед) Вы предлагаете ему купить мотоцикл.
    прикольно.
     
  14. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
    Отвечу на вопрос как отличить устройство управление частотное от управление напряжением.
    Все очень просто
    Если устройство в маленькой коробочке весит менее 500 г и стоит менее 500 руб то оно для управление оборотами с помощью изменения напряжения.
    Если устройство размером с планшет весит не менее кг стоит несколько тысяч рублей - то это частотник.
    --------------------
    Поэтому частотник имеет лучшие характеристики но для управления бытовыми системами вентиляции используют в основном управление оборотами путем изменения напряжения.
    -----------------
     
  15. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    Вы ломитесь лбом об стенку потому что или не читаете чужие сообщения, или не понимаете смысл написанного. Еще раз: если ТС повезет и мотор у него с мягкой характеристикой, то он сможет удовлетворительно управлять мотором при помощи диммера с падающим фронтом. О чем мною было сказано еще до того, как вы получили ликбкез в интернете и поделились ссылками на него.
     
  16. nikolz

    nikolz Гуру

    Сообщения:
    4.187
    Симпатии:
    432
    А вы очевидно вообще не читаете тему.
    Автор написал:
    Проблема в том, когда я понижаю напряжение на 50% , то вентилятор снижает обороты, но потом начинает непрерывно поднимать и снижать обороты. При этом я пару раз мерил напряжение на клеммах, оно доходило до 390В.
    т е ему уже повезло без ваших гаданий.
    Поэтому вас и спрашивали что не правильно в конкретном решении
    а не ваши известные из инета рассуждения
     
  17. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    Причины такого поведения вентилятора описаны в моем сообщении #6, п.1. Вы это сообщение или не читали, или не понимаете о чем там речь.
     
  18. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Есть небольшие новости. Я связался с производителем вентилятора и вот диалог 1 :
    Я: Подскажите, можно ли регулировать скорость вентилятора ВЕНТС 100 Квайт путем регулирования подачи напряжения? Или нужно использовать регуляторы типа РС-1-300 и РС-1-400?
    Производитель:
    Здравствуйте!

    Использовать РС-1-300.

    диалог 2:
    Я: Подскажите, можно ли регулировать скорость вентилятора ВЕНТС 100 Квайт путем регулирования подачи напряжения? Или нужно использовать регуляторы типа РС-1-300 и РС-1-400?
    Представитель производителя: Да можно, любым симистром в пределах силы тока.
    Я: Я использовал вот такой диммер (Диммер переменного тока AC 50/60Гц, 220B/110B, ШИМ (PWM), 1 канал, логика 3.3B/5B), но при понижении напряжения до 120В, вентилятор начинает работать на пониженных оборотных, но при этом он то набирает обороты, то их уменьшает, то есть нет работы на одних и тех же оборотах. Подскажите пожалуйста, можно ли использовать такой диммер?
    Представитель производителя:
    Ток у вентилятора 0,05А поэтому нужно максимально низкий ток.

    В продаже обычно бывают 1А. Это лучше, чем 5А.

    Возможно из-за этого и гуляют обороты.

    Я связался с производителем диммера и он мне ответил:

    Да, это вполне возможно. Вы можете увидеть пример здесь:
    Paul RobotDyn on Instagram: “Testing our AC Light Dimmer on an 500 watt AC Motor #AC Light Dimmer #RobotDyn #potentiometer #Mega2560”

    Что думаете есть шанс?
    Сейчас вижу несколько путей:
    1. Попытаться "дать ума" этому диммеру и заставить регулировать обороты
    2. Приобрести частотник (собрать самому) и прикрутить его к ESP
    3. Купить вытяжной вентилятор с регулировкой оборотов
    4. Приобрести РС-1-300 и прикрутить к нему ESP
     
  19. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    Ответ неверный. В конце моего сообщения №6 описано устройство частотного управления. Оно не универсально, зато его очень просто реализовать. В идеале для него лучше было бы использовать MOSFET или IGBT, однако и с симистором оно тоже вполне работоспособно. То есть, у ТС есть вс необходимое для реализации этого простейшего "частотника", который обеспечит или полную скорость, или 1/3 от полной скорости. Все сводится к написанию и отладке скетча. Советы ТС можно дать такие:
    - оптосимистор надо открыть примерно через 0.5...1 мс после перехода сетевого через ноль
    - оптосимистор надо держать открытым примерно 2...3 мс, после чего выключить
     
  20. =AK=

    =AK= Гуру

    Сообщения:
    1.196
    Симпатии:
    100
    Для проверки лампу накаливания включите параллельно вентилятору.
     

Поделиться этой страницей