[частично решено] Проблема с экспериментом 9 (миксер) в Матрёшка Z. Помехи от мотора.

Тема в разделе "Arduino & Shields", создана пользователем altex, 22 июл 2014.

  1. Думаю вам тестер мало что покажет, лучше осциллографом посмотреть.
    конечно дроссель хорошее решение, попробуйте повесить конденсатор на 1000 мкФ по питанию в дополнение к керамике. Если не получится, запитывайте двигатель внешним источником напряжения.
    Интересно какой потребляемый ток у движка?
     
  2. altex

    altex Гик

    Подключил к кроне, померил ток, получилось 52 мА
     
  3. acos

    acos Официальный гик Администратор

    А напряжение при этом на кроне какое?
     
  4. acos

    acos Официальный гик Администратор

    Повторили ваш эксперимент. Проблема проявляется и у нас. Осциллографом померили - от моторчика нормальный такой шум иголками. Собственно шум этот есть на всех кнопках сразу, просто на кнопке отключающей мотор сам алгоритм останавливается, т.к. при остановке мотора иголки пропадают. Если добавлять вывод дебага, то в алгоритм добавляется задержка на время отправки сообщений, которая значительно уменьшает вероятность попадания опроса кнопки на иголку (особанность реализации Serial в Arduino - пока сообщения не отправятся, алгоритм дальше не пойдёт).
    Я имею ввиду такой вывод дебага:

    Код (Text):
    #define MOTOR_PIN        9
    #define FIRST_BUTTON_PIN 5
    #define BUTTON_COUNT    3
    // имена можно давать не только числам, но и целым выражениям.
    // Мы определяем с каким шагом (англ. step) нужно менять
    // скорость (англ. speed) мотора при нажатии очередной кнопки
    #define SPEED_STEP  (255 / (BUTTON_COUNT - 1))

    void setup()
    {
      pinMode(MOTOR_PIN, OUTPUT);
      // на самом деле, в каждом пине уже есть подтягивающий
      // резистор. Для его включения необходимо явно настроить пин
      // как вход с подтяжкой (англ. input with pull up)
      for (int i = 0; i < BUTTON_COUNT; ++i)
        pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP);
       
      Serial.begin(9600);
    }

    void loop()
    {
      for (int i = 0; i < BUTTON_COUNT; ++i) {
        // если кнопка отпущена, нам она не интересна. Пропускаем
        // оставшуюся часть цикла for, продолжая (англ. continue)
        // его дальше, для следующего значения i

        Serial.print(i);
        Serial.print(" - ");
        Serial.println(digitalRead(i + FIRST_BUTTON_PIN));
       
        if (digitalRead(i + FIRST_BUTTON_PIN))
          continue;

        // кнопка нажата — выставляем соответствующую ей скорость
        // мотора. Нулевая кнопка остановит вращение, первая
        // заставит крутиться в полсилы, вторая — на полную
        int speed = i * SPEED_STEP;

        // подача ШИМ-сигнала на мотор заставит его крутиться с
        // указанной скоростью: 0 — стоп машина, 127 — полсилы,
        // 255 — полный вперёд!
        analogWrite(MOTOR_PIN, speed);
      }
    }
    Если вывод дебага убрать, то вероятность попадания на иголку примерно 1, т.к. 16 МГц у нас)
    Проблему можно исправить несколькими способами -
    1. Пока временно пофиксили поставив керамический конденсатор на 100 нФ прямо на щётки моторчика. Можно парочку таких в параллель - но как можно ближе к мотору (электрически ближе). Так себе решение - думаем дальше.
    2. Можно делать опрос кнопок и усреднение результата - если из 4-х опросов большинство будут 1, то там 1 и есть.
    3. Сейчас ищем решение получше в рамках возможностей набора.

    Причина: эксперименты изначально тестировались с другими моторами. После смены поставщика моторы не тестировались, а зря. Приносим свои извинения, ищем выход из ситуации.
     
    vasdor и altex нравится это.
  5. Unixon

    Unixon Оракул Модератор

    Какой ширины и амплитуды иголки?
     
  6. acos

    acos Официальный гик Администратор

    точную цифру не смотрел, @ALev подскажет точнее.
     
  7. ALev

    ALev Гик

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

    Иными словами, полностью избавиться от помех не меняя мотор невозможно.
     
  8. Unixon

    Unixon Оракул Модератор

    Это именно от мотора? Как-то сильно он шумит для такой мелочи. А если его вместе с проводами наглухо замотать в экран?
     
  9. lerik2703

    lerik2703 Гик

    я в какой то китайкой игрушке я видел оригинальное решение ,от каждого вывода на корпус мотора были припаяны конденсаторы :D
     
    Последнее редактирование: 29 июл 2014
  10. ALev

    ALev Гик

    Да, шумит именно мотор. Заматывать в экран пока не пробовали :) Что ты хочешь увидеть в этом эксперименте?
     
  11. ALev

    ALev Гик

    Конденсаторы помогают, но не от ЭМ помех. Они и помехи заметно снижают, но стоит нагрузить вал мотора, как помехи увеличиваются в разы и даже конденсаторы уже не справляются.
     
  12. altex

    altex Гик

    Мне вот интересно, а что если читать с аналогового входа, а не с цифрового.
    Может быть можно как-то сгладить именно входные сигналы, либо программно либо аппаратно (там ещё триггеры Шмита в комплекте есть), и работать с аналоговым уровнем сигнала?
    Просто предложение из разряда мозгового штурма.
     
  13. Unixon

    Unixon Оракул Модератор

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

    ALev Гик

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

    В отношении наших наборов «Матрёшка» пока видимо будет принято решение использовать конденсатор.
     
  15. Unixon

    Unixon Оракул Модератор

    http://forum.cxem.net/index.php?showtopic=87365
    Либо навешать на мотор LC фильтр и закрыть всё вместе экранирующим кожухом, питать мотор через коаксиальный кабель заземленный на кожух. Помехи в эфир не пускать, ползущие по проводу давить дополнительными каскадами фильтров в замкнутом пространстве. Соединяться исключительно через BNC, по сигнальным линиям опторазвязки, и т.д. В общем, возвести вокруг несчастной ардуины фортификационные сооружения неприступных децибел :D
     
    Ice9 нравится это.
  16. ets

    ets Нерд

    Я так понял, вопрос до сих пор не решён?

    Строчка "delay(100);" после цикла помогла, может, стоит добавить на страницу эксперимента, как временное решение. Так хотя бы схема работает, как должна, и не надо искать эту тему.

    А если вариант с конденсатором приемлем, то объясните, где его (конденсатор) разместить.
     
    Последнее редактирование: 21 сен 2014