Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



XMega TC

Сообщений 1 страница 8 из 8

1

Здравствуйте,разбираюсь как работает ТС в XMega,в связи с этим вопрос общего плана:
Мне нужно подключить энкодеры к  этому МК,линейки у меня 12 битные,нужно ли в моем случае устанавливать прерывание переполнения,ведь насколько я вычитал,ТС в XMega 16 битные,и вроде бы я могу использовать линейки до 16 бит без установки прерывания переполнения,считывание в обе стороны можно установить
соответствующим битом,и при использовании 16 битной линейки,если я правильно понимаю,на выходе ТС значение
должно меняться от 0 до 65535.
Скажите пожалуйста,все правильно,или я где то затупил?

0

2

atXmega - Quadrature Decoder Channels

Можете посмотреть на эту конструкцию STM32F030F4P6 - Encoder и I2C Slave
К STM32F030F4P6 (у которого 32-ух битный таймер) подключаете энкодер, а к нему AVR по I2C.

0

3

Спасибо за ценную информацию,но часть проекта уже написал,и при наличии у XMega трех аппаратных входов
для энкодеров не хотелось бы добавлять еще STM.

0

4

В теме, ссылка на которую выше, есть код работающий с оптическими линейками. atXmega - Quadrature Decoder Channels
Видео работы atXmega - Quadrature Decoder Channels

0

5

Спасибо,с этой темой я ознакомился ранее,дело в том,что я пишу проект в С++,пробовал в BASCOM,не получилось,
были трудности с реализацией USB интерфейса,входящего в состав проекта.Поэтому мой вопрос носит общий
характер.
Тема созданная Ev3658 наиболее полно освещает вопросы которые меня интересуют,но меня в настоящий момент
интересуют не коды,а нужно или нет устанавливать прерывание переполнения в моем случае.

0

6

alex 54, ну как у вас успехи? Пробовали 32 бит реализовывать?

0

7

Без аппаратной реализации никак, движение с программными импульсами очень тормозное, особенно с алгоритмом Брезенхема.
Пришлось отказаться от перемещения сразу по двум осям, возможно оставлю возможность но в основном сделал аппаратное 32 битное перемещение.
Драйвер двигателя перемещает оси по 1 импульсу на 1 микрон, то-есть редукция моторов возложена на внешние устройства (драйвера двигателей).
Чтоб переместится на 0.001мм (1 микрон) на нормальной скорости, нужны импульсы до 200кГц, вот по этому Xmega программно не успевает следить за всем этим, но по таймерам всё супер.

Один таймер как задатчик сокрости.
Второй таймер выводит импульсы через CompareX (два такта съедает)
А другие два таймера делают счёт, вот только не совсем 32 битный, разложить DWord переменную на два таймера не дало результатов, проще было одним таймеров подсчитывать 10000 импульсов, а другим нужную позицию.
грубо говоря вот так:
http://sh.uploads.ru/t/2QlDR.jpg

В итоге всё работает как часы и микроконтроллер просто отдыхает в момент выполнения перемещения.

Ещё одной из проблемы является выход в ноль, тут нужна стабильная точность, да-бы не перестраивать станок в начале каждого дня.

Ещё нужно сделать возможность перемещения по энкодеру шпинделя, само собой шпиндель может работать быстро и тут опять-же без аппаратной части не обойтись, так уж одной Xmega256A3 хватит на управление двумя двигателями и шпинделем по ModBus.

0

8

Проблема с обратным аппаратным счетом решилась?

0