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

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

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

  1. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Один из покупателей пишет, что снаббер состоит из: варистор 470В, резистор 1Вт 220Ом и конденсатор 100nF 630В.

    Стоит брать или может взять и что-то заменить самому чтобы получить нормальный модуль?
     
  2. =AK=

    =AK= Гуру

    Сообщения:
    1.194
    Симпатии:
    100
    Попробуйте так как есть. Другие номиналы я приводил ранее.
     
  3. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Подскажите правильно ли я изобразил подключение? Выходы снаббера к стоку и истоку симистора?
    [​IMG]
     
  4. =AK=

    =AK= Гуру

    Сообщения:
    1.194
    Симпатии:
    100
    У симистора нет стока и истока. Нужные для подключения электроды симистора выведены на терминалы. Надо только отследить по дорожкам на печатной плате на какие.

    triac_snubber.png
     
  5. nikolz

    nikolz Гуру

    Сообщения:
    3.971
    Симпатии:
    426
    проще написать - выведены на разъем( контакты)
    [​IMG]
     
  6. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Подскажите, правильно ли я изобразил подключение? Я перевернул диммер и посмотрел к каким разъемам идут дорожки.
    [​IMG]
     
  7. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.127
    Симпатии:
    226
    @Geremy правильно. В любом случае ничего страшного не случится. Включайте - проверяйте.
     
  8. nikolz

    nikolz Гуру

    Сообщения:
    3.971
    Симпатии:
    426
    если посмотреть схему
    https://robotdyn.com/pub/media/0G-0.../Schematic==0G-00005677==Mod-Dimmer-5A-1L.pdf
    https://robotdyn.com/pub/media/0G-0...OCS/PINOUT==0G-00005677==Mod-Dimmer-5A-1L.pdf
    и сравнить ее со схемой выше
    то легко определить, что RC (39 ом и 0.01 uF) цепочку надо включить D G Q1. Это контакты 1 разъема J1(AC-N) - подключены резисторы R1|| R3
    и контакт 2 разъема J2(Load) .
    Верно.
     
  9. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Пишу продолжение...
    Получил я снуббер, подключил и вот что получил.

    При включении ESP при подачи 220В на плату диммера, ESPшка не может подключится к MQTT и выводит бесконечно:
    Код (Text):
    1. Connecting to myWiFi
    2. ..
    3. WiFi connected
    4. IP address:
    5. 192.168.1.55
    6.  
    7. Booting Sketch...
    8.  
    9. Exception (0):
    10. epc1=0x40202a34 epc2=0x00000000 epc3=0x40201248 excvaddr=0x00000000 depc=0x00000000
    11.  
    12. ctx: cont
    13. sp: 3ffffb40 end: 3fffffd0 offset: 01a0
    14.  
    15. >>>stack>>>
    16. 3ffffce0:  4022b9da 3fff03fc 3fff03fc 40214fa9
    17. 3ffffcf0:  3fff0020 00000000 3ffeffdc 40217f00
    18. 3ffffd00:  3ffefa04 3ffefa39 3ffe9213 3ffe920d
    19. 3ffffd10:  00000001 4022aa93 3fff03fc 3ffefe44
    20. 3ffffd20:  00000000 4021e8eb 3ffed9ec 3ffefa04
    21. 3ffffd30:  4010668a 0104a8c0 3ffefa04 402180e6
    22. 3ffffd40:  c0037035 00000001 00000006 3ffee13c
    23. 3ffffd50:  3ffe91bc 3ffe91bc 3ffefa04 00000022
    24. 3ffffd60:  3fffc200 40106650 3fffc258 4000050c
    25. 3ffffd70:  400043e6 00000030 00000016 ffffffff
    26. 3ffffd80:  400044ab 3fffc718 3ffffe70 08000000
    27. 3ffffd90:  60000200 08000000 08000000 00000000
    28. 3ffffda0:  0000ffff 00042035 00002035 003fe000
    29. 3ffffdb0:  40240da0 0000049c 003fe000 00000030
    30. 3ffffdc0:  4022422f 00000001 00000010 00000003
    31. 3ffffdd0:  00000003 00000001 402242bf 3fff00e2
    32. 3ffffde0:  00000000 00000000 00000000 4021f7a8
    33. 3ffffdf0:  3fff00dc 4021f78a 3fff00dc 401068b0
    34. 3ffffe00:  4021df68 0104a8c0 3ffee880 4022d1e1
    35. 3ffffe10:  3ffffe60 00000010 4021f9d1 3fff0034
    36. 3ffffe20:  3fff0d64 dfffffff c0fe010b 3fff03cc
    37. 3ffffe30:  3fff0034 3fff0034 3fff0d64 3ffedc5c
    38. 3ffffe40:  3ffffe60 4022d92f 3ffed9ec 3fff0d64
    39. 3ffffe50:  00000000 4000444e 3ffee0a8 00000000
    40. 3ffffe60:  00000002 401054b3 00000001 60000200
    41. 3ffffe70:  00000002 4000410f 00001001 00000205
    42. 3ffffe80:  3fffc718 40004a3c 000003fe 40240da0
    43. 3ffffe90:  3fffc718 40105744 000003fe 401068e4
    44. 3ffffea0:  4023380c 000003fe 00000000 402337f5
    45. 3ffffeb0:  3fff100c 402338df 3fff08c4 0000049c
    46. 3ffffec0:  000003fd 3ffe84f7 3fff08c4 402338c2
    47. 3ffffed0:  ffffff01 55aa55aa 00000001 00000020
    48. 3ffffee0:  ffffffff 00000050 ffffffff aa55aa55
    49. 3ffffef0:  000003ff 402336ec 00000003 00000003
    50. 3fffff00:  00000001 00000003 00000003 40233663
    51. 3fffff10:  3ffe84e8 00000001 00000001 3fff08c4
    52. 3fffff20:  40233772 00000003 00000003 00000001
    53. 3fffff30:  40203420 3ffef31c 3ffef3b8 40209664
    54. 3fffff40:  3701a8c0 00ffffff 3ffef3b8 3ffeeec0
    55. 3fffff50:  3ffe84e8 3ffef31c 3ffef3b8 4020304d
    56. 3fffff60:  40202d34 3701a8c0 4020ae6c 4020ae54
    57. 3fffff70:  feefeffe feefeffe feefeffe feefeffe
    58. 3fffff80:  feefeffe feefeffe feefeffe feefeffe
    59. 3fffff90:  00000003 feefeffe feefeffe feefeffe
    60. 3fffffa0:  feefeffe feefeffe feefeffe 3ffef478
    61. 3fffffb0:  3fffdad0 00000000 3ffef471 4020aafc
    62. 3fffffc0:  feefeffe feefeffe 3ffe85f8 40100739
    63. <<<stack<<<
    64. H!⸮⸮1⸮D⸮
    65.  
    Причем если включить ESPшку без 220В, то все подключается нормально и обороты регулируются.
     
  10. 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. }
    Подозреваю что проблема в скетче, но понять не могу как наличие 220В на диммере мешает подключиться к MQTT и вводит в бесконечную перезагрузку.
     
  11. nikolz

    nikolz Гуру

    Сообщения:
    3.971
    Симпатии:
    426
    На основе чего такой вывод?
    подключили кондер с резистором , а виновата программа?
    Смотрите что конкретно изменилось.
    Предположу что потребление либо помехи .
    Если RC отключаете то нормально а включаете то глюки. Верно?
    тогда ищите там где подключаете.
     
  12. CodeNameHawk

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

    Сообщения:
    1.446
    Симпатии:
    173
    И в чем здесь смысл ?
     
  13. Geremy

    Geremy Новичок

    Сообщения:
    18
    Симпатии:
    0
    Ошибка, поправил , убрал
    • WiFi.mode(WIFI_STA);
    • WiFi.begin(ssid, password);

    Но все рано не могу понять. Беру пример для диммера из Examples ардуины:
    Код (Text):
    1. #include <RBDdimmerESP8266.h>//
    2.  
    3. #define outPin  16 // pin for dimming don't use pins A0, D3(GPIO00), D4(GPIO2)
    4. #define ZCPin   14 // Zero-Cross don't use pins A0, D0(GPIO16), D3(GPIO00), D4(GPIO2)
    5.  
    6. dimmerLampESP8266 dimmer(outPin, ZCPin); //initialase port for dimmer
    7.  
    8. int outVal = 0;
    9.  
    10. void setup() {
    11.   Serial.begin(9600);
    12.   dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
    13.   Serial.println("Dimmer Program is starting...");
    14.   Serial.println("Set value");
    15. }
    16.  
    17. void printSpace(int val)
    18. {
    19.   if ((val / 100) == 0) Serial.print(" ");
    20.   if ((val / 10) == 0) Serial.print(" ");
    21. }
    22.  
    23. void loop() {
    24.   int preVal = outVal;
    25.  
    26.   if (Serial.available())
    27.   {
    28.     int buf = Serial.parseInt();
    29.     if (buf != 0) outVal = buf;
    30.     delay(200);
    31.   }
    32.   dimmer.setPower(outVal); // setPower(0-100%);
    33.  
    34.   if (preVal != outVal)
    35.   {
    36.     Serial.print("% lampValue -> ");
    37.     printSpace(dimmer.getPower());
    38.     Serial.print(dimmer.getPower());
    39.  
    40.   }
    41.   delay(50);
    42.  
    43. }
    1. При значении 100(%), напряжение на колодке load 0.9В, поставил значение 65(%), напряжение поднялось до 202В (тут видимо косяк самого примера для диммера)
    2. На снаббере напряжение 320В
    3. При этом вентилятор крутится еле-еле.
     
  14. =AK=

    =AK= Гуру

    Сообщения:
    1.194
    Симпатии:
    100
    Если 100% дает 0 на выходе, значит, 65% откроет симистор за 3.5 мс до зеро-кроссинга, sin(0.35*п) = 0.891. При амплитуде сетевого 310 В, в момент открытия симистора напряжение равно 276 В. Ну а поскольку ваш мультиметр показывает не действующее напряжение, а пиковое, да еще и врет при этом, вы видите на нем 202 В.

    В посте #25 я ванговал, что после 6 мс мотор вряд ли сможет стартовать. А вы его включаете при 6.5 мс, и он еще крутится, радоваться надо.
     
  15. nikolz

    nikolz Гуру

    Сообщения:
    3.971
    Симпатии:
    426
    для справки.
    вот несколько ответов разработчиков на вопросы пользователей:
    1)Почему наблюдается короткий импульс, когда запускается PWM (ШИМ)?
    --------------------
    Имейте в виду, что PWM генерируется программно, и малый выброс может быть вызван в результате измерения разрешающей способности, которой может достичь PWM. В режиме высокой точности (high accuracy) разрешающая способность может быть до 22222 отсчетов. Однако скважность никогда не может достичь 100%.
    -----------------------------------------
    2) Почему медленно меняется скважность импульсов PWM?
    ------------------
    Если Вы используете программное API, как в примере из SDK demo (light_set_aim и light_set_aim_r), то эти API оптимизированы для приложений освещения, и поэтому в них реализованы плавные переходы скважности.
    Для применения в других приложениях, где требуется быстрое регулирование PWM, используйте pwm_set_duty для установки скважности, и
    вызовите pwm_start, чтобы немедленно применить новую скважность цикла PWM.
    --------------------------
     

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