Здравствуйте,разбираюсь как работает ТС в XMega,в связи с этим вопрос общего плана:
Мне нужно подключить энкодеры к этому МК,линейки у меня 12 битные,нужно ли в моем случае устанавливать прерывание переполнения,ведь насколько я вычитал,ТС в XMega 16 битные,и вроде бы я могу использовать линейки до 16 бит без установки прерывания переполнения,считывание в обе стороны можно установить
соответствующим битом,и при использовании 16 битной линейки,если я правильно понимаю,на выходе ТС значение
должно меняться от 0 до 65535.
Скажите пожалуйста,все правильно,или я где то затупил?
XMega TC
Сообщений 1 страница 9 из 9
Поделиться12017-09-16 13:05:00
Поделиться22017-09-16 14:51:02
atXmega - Quadrature Decoder Channels
Можете посмотреть на эту конструкцию STM32F030F4P6 - Encoder и I2C Slave
К STM32F030F4P6 (у которого 32-ух битный таймер) подключаете энкодер, а к нему AVR по I2C.
Поделиться32017-09-16 17:56:09
Спасибо за ценную информацию,но часть проекта уже написал,и при наличии у XMega трех аппаратных входов
для энкодеров не хотелось бы добавлять еще STM.
Поделиться42017-09-16 19:37:47
В теме, ссылка на которую выше, есть код работающий с оптическими линейками. atXmega - Quadrature Decoder Channels
Видео работы atXmega - Quadrature Decoder Channels
Поделиться52017-09-16 21:53:49
Спасибо,с этой темой я ознакомился ранее,дело в том,что я пишу проект в С++,пробовал в BASCOM,не получилось,
были трудности с реализацией USB интерфейса,входящего в состав проекта.Поэтому мой вопрос носит общий
характер.
Тема созданная Ev3658 наиболее полно освещает вопросы которые меня интересуют,но меня в настоящий момент
интересуют не коды,а нужно или нет устанавливать прерывание переполнения в моем случае.
Поделиться62017-12-14 19:32:14
alex 54, ну как у вас успехи? Пробовали 32 бит реализовывать?
Поделиться72017-12-29 17:34:43
Без аппаратной реализации никак, движение с программными импульсами очень тормозное, особенно с алгоритмом Брезенхема.
Пришлось отказаться от перемещения сразу по двум осям, возможно оставлю возможность но в основном сделал аппаратное 32 битное перемещение.
Драйвер двигателя перемещает оси по 1 импульсу на 1 микрон, то-есть редукция моторов возложена на внешние устройства (драйвера двигателей).
Чтоб переместится на 0.001мм (1 микрон) на нормальной скорости, нужны импульсы до 200кГц, вот по этому Xmega программно не успевает следить за всем этим, но по таймерам всё супер.
Один таймер как задатчик сокрости.
Второй таймер выводит импульсы через CompareX (два такта съедает)
А другие два таймера делают счёт, вот только не совсем 32 битный, разложить DWord переменную на два таймера не дало результатов, проще было одним таймеров подсчитывать 10000 импульсов, а другим нужную позицию.
грубо говоря вот так:
В итоге всё работает как часы и микроконтроллер просто отдыхает в момент выполнения перемещения.
Ещё одной из проблемы является выход в ноль, тут нужна стабильная точность, да-бы не перестраивать станок в начале каждого дня.
Ещё нужно сделать возможность перемещения по энкодеру шпинделя, само собой шпиндель может работать быстро и тут опять-же без аппаратной части не обойтись, так уж одной Xmega256A3 хватит на управление двумя двигателями и шпинделем по ModBus.
Поделиться82017-12-30 12:33:49
Проблема с обратным аппаратным счетом решилась?
Поделиться92018-01-26 16:46:06
Проблема с обратным аппаратным счетом решилась?
Вроде как да, дали одно решение на www.mcselec.com
Вот:
Config Tcc1 = Normal , Prescale = E0 , Event_source = E0 , Event_action = Qdec '------ 0-16 bit (UP/DOWN) tcc1_cca = 0 'We need a compare-Register for direction -> event system Config Event_system = Dummy , Mux1 = Tcc1_ovf 'Overflow-Event Config Event_system = Dummy , Mux2 = Tcc1_cca 'in next Channel the "compare-event" Config Tce1 = Normal , Prescale = E1 , Event_source = E1, Event_action = UPDOWN , Event_delay = Enabled
Ещё не пробовал, но как-то странно всё это.
Судя по документации, в Xmega счётчики аппаратно могут захватывать бит+1 над сигнальным битом.
То-есть квадратурному событию обычно указывается 1 PIN и оно сразу берёт PIN+1 как второй сигнал, так-же и таймеры походу берут второе событие по соседству для определения двунаправленного счёта.