Высокоточный энкодер

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

Метки:
  1. DrProg

    DrProg Вечный нерд

    2000 об/мин это 33.333.. оборота в секунду, то есть минимальное время одного оборота порядка 30мс - более чем достаточно чтобы его зафиксировать. Однако с точностью +- 1мс (то есть 3%), что даже близко не лежало с вашей заявленной в 0.02%. Для вычисления с точностью более 1мс стандартных функций не хватит, придется потанцевать с бубном прерываниями. Или снижайте планку.
     
  2. Onkel

    Onkel Гуру

    да я не спорю, я понял. Обычно меряют число импульсов, т.е. главное- куда что ушло, а точность скорости не нужна 0,02%, у вас ситуация обратная, ну как функция бывает обратная. Вы меряете время между импульсами и по этому времени вычисляете скорость.
    Но если 0,02 % актуальна , то ширина луча лазера должна быть 0,02%*2piR. Если R=10 см, то 0,24 мм, что имхо нереально без хорошей оптики.
     
  3. Onkel

    Onkel Гуру

    кто мешает фиксить с точностью 1 мкс? В атмеге324 даже ацп срабатывает за 0,07 мс, а вы про точность определения перехода пина? Прерывание по изменению состояния, включаем таймер, опять прерывание по изменению состояния - переписываем значение таймера и снова запускаем таймер. Туда- сюда в мкс запросто уложимся. Точность будет определяться механикой.
     
  4. Onkel

    Onkel Гуру

    прерывания в мк -не танец с бубками, а самая что ни есть рутина. Бывают программы, где вообще в main после инициализации один оператор if(1){}, а все делается в прерываниях. Почитайте у DiHalt на easyelectronics "операционка для тини".
     
  5. DrProg

    DrProg Вечный нерд

    Я не говорил, что это невозможно.
     
  6. MXXX

    MXXX Гик

    Что-то я не понял при чем здесь ширина лазера. Вы сейчас про схему с оптическим датчиком и лазером? Мне же главное импульс поймать. А он ко мне придет независимо от ширины луча лазера и уйдет независимо от ширины, когда его перекроет отверстие в диске. Итого мне главное чтобы ширина лазера была не более ширины диска, все остальное не важно.
     
  7. DrProg

    DrProg Вечный нерд

    Первое что сделал в свое время на прерываниях, это blink c пустым loop (main по вашему).
     
  8. Onkel

    Onkel Гуру

    ну я привык работать с энкодерами 300-1200 импульсов на оборот, так что это не баг, это фича ;<)
     
  9. Onkel

    Onkel Гуру

    разница есть. Если луч узкий, то получите прямоугольник и резкую сработку, если луч широкий - то трапеции, а на склоне поди знай где сработает. Но это уже будет, конечно, поменьше времени прохождения отверстия. Ну так включайте таймер по внешнему прерыванию, считайте и фиксите по следующему прерыванию. Я месяца 4 назад дешевыми корейскими энкодерами интересовался, мне как зануде, чтобы от меня отвязаться, предлагали корейский за 3 тыр, 300 импульсов/оборот, ясное дело двойной (A/B) инкрементный.
     
  10. MXXX

    MXXX Гик

    Конечно же импульсы нужно ловить прерываниями. Я по другому и не представляю, если нужна высокая точность. Да и никаких танцев с бубном здесь нет.
     
  11. Onkel

    Onkel Гуру

    нет, в main() еще включают инициализацию, то что по -вашему setup(), так что main() по-нашему это setup()+loop() по- вашему
     
  12. DrProg

    DrProg Вечный нерд

    loop() по нашему это while(1) {...} по вашему, ясен пень.
     
  13. MXXX

    MXXX Гик

    В общем если подвести итог то схема с датчиком холла будет оптимальной. Единственное я так полагаю у него как и у кнопки есть эффект "Дребезга", который мне еще нужно будет программно погасить. Или нет такой проблемы?
     
  14. Onkel

    Onkel Гуру

    нет, холл он же безконтактный.
    Над пнями надо вам еще поработать. while(1){} -обычный оператор,аргумент-булевский, их может быть хоть сто расставлено, а вот loop() {} - он единственный, и аргумент у него void.
     
  15. PushKeeN

    PushKeeN Нуб

    Я правиль понимаю, что топикстартеру упрщенно нужно измерять время между N импульсами на оборот?
    Я использовал в такой задаче индуктивный датчик и болт на диске, скорость вращения которого мне надо было измерять. Их множество моделей в доступе и относительно недорогих. Чем меньше расстояние срабатывания, тем больше частота с которой он может работать. Я использовал модель, у которой расстояние срабатывания 1.5 мм и при этом частот 1.5 кГц, чего, на мой взгляд достаточно топикстартеру.
    1.5 кГц = 1500 имп/сек
    2000 об/мин = 33,33 об / сек
    1500 / 33,33 = ~45 импульсов на оборот Вы можете получать, что, на мой взгляд, более чем.
    Но это теоретически)) Я использовал одну "метку" на шкиве. Но вдруг натолкнет на мысль какую)
     
  16. MXXX

    MXXX Гик

    Спасибо за оживление старой темы )) Я на самом деле уже так и сделал. Датчик холла установлен стационарно и на валу установлено 2 магнита. При прохождении магнита возле холла получаю импульс. 1 импульс = 0.5 оборота. Пока работает, но хочется порядка 100 импульсов на оборот. С холлом это проблематично, по этому жду, когда придет фотоэлектрический датчик Напечатаю пластину со 100 отверстиями и буду измерять с более высокой точностью.