Уровни на пинах при подаче питания

Тема в разделе "Arduino & Shields", создана пользователем darkavenger, 16 июл 2016.

  1. darkavenger

    darkavenger Гик

    При подаче питания на Arduino Mega на пинах в первые примерно 0,5 секунд наблюдаю произвольные уровни. Робот с этой платой на борту при подаче питания кратковременно дергается.
    В void setup() устанавливаю необходимые начальные уровни, но видимо до тех пор пока не отработают эти команды на пинах возникают некие уровни "по умолчанию". Можно ли этого избежать?
     
  2. yul-i-an

    yul-i-an Гик

    Питание силовой части робота (привода и т.п.) запитать через транзистор, а его открывать в конце setup(). Т.е. подавать питание силовой части после инициализации выходов.
    [​IMG]
    Нужно собрать все GND (минусы) нагрузок и коммутировать их транзистором, который нужно выбрать по нагрузке.
    [​IMG]
     
  3. darkavenger

    darkavenger Гик

    Приводы робота управляются у меня MOSFET-транзисторами.
    Если речь о том, чтобы добавить еще один контур управления, то я не совсем понимаю, чем состояние неинициализированного пина для этого контура будет отличаться от пинов, управляющих MOSFETами.
     
  4. yul-i-an

    yul-i-an Гик

    можно через RC цепь задержки транзистор открывать.
     
  5. 9xA59kK

    9xA59kK Гик

    А где ваша схема???И скетч?? Мы мысли читать не умеем.
     
  6. yul-i-an

    yul-i-an Гик

    можно попробовать подтянуть уровни к GND или VCC смотря схема какая
     
  7. Onkel

    Onkel Гуру

    0,5 с - это перебор. МК должен заводиться в считанные микросекунды. И состояния пинов должны быть не произвольными, а теми, которые выставлены в setup() или нулями.
     
  8. DIYMan

    DIYMan Guest

    Нам бы схемку, аль чертёж - мы б устроили вертёж!

    В том смысле, что проблема, возможно, легко решается банальными подтяжками.
     
  9. darkavenger

    darkavenger Гик

    Вот такой вот драйвер двигателя с мосфетами[​IMG]

    К Arduino Mega он подключен по пинам 4-7.
    Часть скетча, инициализирующая пины для управления двигателями такова

    int LeftMotorDirection = 6;
    int RightMotorDirection = 4;
    int LeftMotorPWM = 7;
    int RightMotorPWM = 5;

    void setup() {

    pinMode(LeftMotorDirection, OUTPUT);
    pinMode(RightMotorDirection, OUTPUT);
    pinMode(LeftMotorPWM, OUTPUT);
    pinMode(RightMotorPWM, OUTPUT);
    digitalWrite(LeftMotorPWM, LOW);
    digitalWrite(RightMotorPWM, LOW);
    digitalWrite(LeftMotorDirection, LOW);
    digitalWrite(LeftMotorDirection, LOW);

    }

    void loop() {

    }

    После подачи питания робот движется примерно 0,5 сек. С чем это может быть связано?
     
  10. ostrov

    ostrov Гуру

    Попробуйте так, это тоже самое что у вас, только быстрее в сотни раз. Если все равно будет реагировать не сразу, значит причина в долгой паузе перед запуском.
    Код (C++):
    DDRD = 0b11110000;
    PORTD = 0x00;
     
  11. ANV

    ANV Гуру

    Эта задержка - отработка загрузчика Ардуино, который ждет новую прошивку после сброса. Не дождавшись начинает выполнение setup (). Без изменения загрузчика программно исправить нельзя.
    Решение - это подтяжка силовых транзисторов в закрытое состояние, т.к. сразу после включения все выходы настроены как входы, т.е. болтаются в воздухе.