Двухканальный энкодер

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Mestniy, 12 янв 2016.

  1. Mestniy

    Mestniy Гуру

    Доброго времени суток. Хочу преобрести вот такой мотор-редуктор с энкодером на базе датчика холла(http://electroprivod.ru/ig-22gm.htm) меня смутило, то что он двух-канальный. Я так понял, что когда колесо движеться в одном направлении, то канал А первый первый выдает сигнал о положении колеса, а канал B в обратном направлении первым выдает сигнал о положении. И вот тут-то я и затупил.
    Информации о подключении двухканальных энкодеров к ардуино я так и не нашол.
    В принцыпе ,когда приобрету смогу поэксперементировать, но хотел-бы заранее знать, с чем мне придется столкнуться!
    Поэтому прошу помощи! Кто знает где достать информацию по считыванию двнных положения с этих датчиков. Мне нужна в принцыпе только одна функция: Что-бы этот мотор двигался туда-сюда и выдавал, колличество пройденных шагов на ардуино!
    Заранее спасибо!
     
    Последнее редактирование: 12 янв 2016
    Viquis нравится это.
  2. Onkel

    Onkel Гуру

    ссылка говорит not found, но в принципе ясно - если это электропривод, то скорее всего энкодер более -менее стандартный, т.е. имеет три вывода общий-A-В. Для вас проще сделать так- делаете прерывание по А (0->1), и если В==0 то к счетчику +1, если В==1 то к счетчику -1. Если делать прерывание по любому изменению сигнала А, можно сделать вдвое большее разрешение по углу. Но вы начните с предложенного.
     
    Mestniy нравится это.
  3. Mestniy

    Mestniy Гуру

    Спасибо, а чего мы этим добьемся? Просто чесно говоря я не до конца понял принцып данного расчета.
     
    Viquis нравится это.
  4. Onkel

    Onkel Гуру

    счетчик будет показывать к-во импульсов , т.е. пройденных шагов, если уж совсем точно - алгебраическую сумму , с учетом знака.
    Чтобы понять принцип, нарисуйте график замыкания / размыкания контактов и проверьте на графике предложенный выше алгоритм. У меня работает.
     
  5. Onkel

    Onkel Гуру

    пы сы посмотрите код из с (сode vision), в принципе нетрудно разобраться и перенести его в ардуину
    энкодер подключен на порты с.5 и d.3, соттв. надо их объявить входами с подтяжкой
    int CountB; // counter of steps

    в инициализации прерывание по порду d.3

    GICR|=0x80; // разрешаем прерывание по порту d.3
    MCUCR=0x08; //Down тут down, я выше написал Up, но это неважно, это лишь сместит фазу
    GIFR=0x80; // cбрасываем флаг прерывания по порту d3, чтобы при старте в прерывание не лез

    и собственно сама функция прерывания

    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    if(PINC.5)
    CountB--;
    else
    CountB++;
    }
     
    Mestniy нравится это.
  6. Mestniy

    Mestniy Гуру

    Спасибо. Буду разбираться.
     
    Viquis нравится это.
  7. Mestniy

    Mestniy Гуру

    Не хочу вас утруждать и нудить. Но не могли бы вы дать информацию по коду, который вы написали. Я в нем не разобрался.
     
    Viquis нравится это.
  8. Onkel

    Onkel Гуру

    попробуйте тогда, заюзав хелпы ардуинского ide
    1 разрешаем прерывание (есть такая фунция в ide) по порту portD.3
    2 прерывание разрешаем по изменению вход порта из 0 в 1
    3 в самой функции прерывания пишем

    {
    if(PINC.5)
    CountB--;
    else
    CountB++;
    }

    ну соотвественно надо посмотреть - pinc.5 это какой вход , или замените pinC.5 например на pinD.4, это будет digital input 4 в ардуине.