Перейти к содержанию

suhib

Members
  • Постов

    10
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Тбилиси

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    микроконтроллеры
  • Оборудование
    Осциллограф, авометр

Достижения suhib

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Блок питания от компьютера. 10 ампер. От другого те же эффекты. Проверял уже. Без нагрузки двигателем все наводки в пределах терпимого. Именно самвозбуждается по аналоговой цепи.
  2. Ваш метод интересен и буду его иметь в виду, но, в моём случае, как я понял, происходит такая странная вещь, как самовозбуждение Ардуино. Я применяю достаточно мощный двигатель (потребляет до двух ампер) и как я его подключаю, по всем цепям начинает твориться чёрт знает что. Уже перепробовал множество фильтров по цепям питания. Помогают, но не радикально. Достаточно эффективным оказалось питать Ардуино и драйвер (L298) от разных источников, но такой возможности у меня как раз нет. Сейчас вожусь с оптической развязкой. Тоже оказались свои заморочки при больших токах потребления. Как удастся добить, оповещу всех о результатах.
  3. То den422 Поставил проволочный, типа ПП3-12 12ком. Ничего не изменилось. Раньше я уже пробовал менять резисторы, но на углеродные же. To kotosob Выглядит всё так Вы знаете, господа. Согласно рекомендации serg123 потыкался осцилографом. Так вот, когда начинает дрожать мотор, то на входе АЦП появляется генерация порядка 50 гЦ, (20 мс) амплитудой около 20 Мв. Похоже на автогенерацию. Попробую исследовать
  4. Попробовал запитать потенциометр от батарейки 5в. Стало ещё хуже. То в некоторых случаях подрагивал, а так стал постоянно вибрировать. У меня, кстати, по питанию АЦП стоял конденсатор 4700 мкф, думал, что уж он все помехи должен срезать. Не шибко помогало. Похоже, что внутри микроконтроллера что то происходит. Хотя приближение руки он тоже чувствует. Попробую усреднять отсчёты.
  5. Спасибо. Ради такого дела можно попробовать и от внешней батарейки запитать. От неё шума точно не должно быть.
  6. Почему глупый? Напряжение для АЦП (питание потенциометров) беру непосредственно с колодки "Power" на плате Ардуино. С пина "5v". В моей модели на этом пине 3,3 вольта
  7. Эх! Сам знаю. Извините за задержку. Причёсывал комментарии. И ещё раз прошу великодушно извинить, что загрузил Вас копанием в чужой программе. /* */ boolean A[]={1,1,0,0,0,0,0,1}; //Управление фазами двигателя в полушаговом режиме boolean B[]={0,0,0,1,1,1,0,0}; boolean C[]={0,1,1,1,0,0,0,0}; boolean D[]={0,0,0,0,0,1,1,1}; long previousMillis = 0; // храним время последнего переключения светодиода long interval = 5000; //Время сянятия сигнала "Enable" если ничего не меняется int Raznost=0; // Разность между текущим полпжением потенциометра и предыдущим int Index=0; //Текущее положение привода int IndexTek=0; //Текущее положение счётчика управления мотором int Speed=0; //Скорость двигателя (время задержки для delay) int Pozicia=0; //Положение движка потенциометра (с АЦП) int OldPozicia=0; //Запоминаем положение покоя void setup() { pinMode(2, OUTPUT); //Сигнал "Enable" для двигателя pinMode(4, OUTPUT); //4 Выхода управления двигателем pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); Serial.begin(9600); } void loop() { Pozicia = analogRead(A5); //Читаем потенциометр положения Pozicia=Pozicia>>2; //Откидываем два младших разряда Pozicia=Pozicia*2; //Восстанавливаем масштаб Raznost=Index-OldPozicia; //Разность между новым и старым положением потенциометра //Serial.println(Raznost); if(Index>Pozicia) { Speed = analogRead(A0); //Читаем значение скрости двигателя Speed=map(Speed,0,1023,0,255); //Уменьшили диапазон Index=Index-1; //Делаем шаг назад digitalWrite(2,HIGH); //Разрешаем движение IndexTek=IndexTek-1; //Задаём код для управления двигателем if (IndexTek>7){IndexTek=0;}; //Контроль диапазона для изменения кода, подающегося на двигатель if (IndexTek<0){IndexTek=7;}; digitalWrite(4, A[indexTek]); //Подаём код на двигатель digitalWrite(5, B[indexTek]); digitalWrite(6, C[indexTek]); digitalWrite(7, D[indexTek]); delay(Speed); //Задержка (скорость) для двигателя } else if (Index<Pozicia) { Speed = analogRead(A0); //Читаем значение скрости двигателя Speed=map(Speed,0,1023,0,255); //Уменьшили диапазон digitalWrite(2,HIGH); //Разрешаем движение Index=Index+1; //Делаем шаг вперёд IndexTek=IndexTek+1; //Задаём код для управления двигателем if (IndexTek>7){IndexTek=0;} //Контроль диапазона для изменения кода, подающегося на двигатель if (IndexTek<0){IndexTek=7;} digitalWrite(4, A[indexTek]); //Подаём код на двигатель digitalWrite(5, B[indexTek]); digitalWrite(6, C[indexTek]); digitalWrite(7, D[indexTek]); delay(Speed); } else { Index=Pozicia; //Запоминаем положение покоя unsigned long currentMillis = millis(); // Показания таймера if(currentMillis - previousMillis > interval) // Время покоя больше interval ? { previousMillis = currentMillis; //Запоминаем время изменения digitalWrite(2,LOW); //Снимаем Enable со схемы управления двигателем } } }
  8. Откуда же пляска в младших разрядах? Алгоритм банальный. Сравниваю код после преобразования на АЦП и предыдущий код. Если появилась разница- вышагиваю её.
  9. Управляю шаговым двигателем от аналогового входа Arduino Uno (пропорциональное управление). В состоянии покоя двигатель время от времени подрагивает. Предпринимал: переменный резистор подпаян непосредственно к входу Arduino, срезал два младших разряда преобразованного аналогового входа, ставил на вход RC-цепочку, прятал Arduino в экранированную коробку. Помогает, но не радикально. Думаю, у многих была эта проблема. Что скажете?
×
×
  • Создать...