roboforum.ru

Технический форум по робототехнике.

Оптический энкодер.

Оптический энкодер.

dabo » 06 апр 2010, 13:58

Люди местные, Здравствуйте.
Есть у меня вот такой вот датчик. (см фото) (контроллер Mega32)
Работает сейчас это так:
Выставляю датчик в положение 1. Нажимаю кнопку запоминаю позицию 1. Выставляю датчик во второе положение (строго по часовой стрелке). Нажимаю кнопку запоминаю позицию 2. Нажимаю кнопку старт, двигатель начинает крутить датчик против часовой стрелки доходит до позиции 1 и движется к позиции 2, и так от одной точки к другой.

Помогите разобраться с ним более доскональна...
Есть несколько вопросов:
Нужно разобраться с кодом с датчика. Возможно ли такое что последовательности кода нет?
Сейчас все 15 выходов привязаны к портам С и А
Как мне вывести все данные с датчика (чтоб посмотреть последовательность) не потеряв какое нибудь из них и последовательность?
Датчик много оборотный.В датчике два диска.Даже если учесть что с первого диск 10 бит а со второго диска 5. Минимальный угол получается 360/1024=0,35 градуса.
Просто есть мысли что так неправильно получится ptintf("A0=%d A1=%d .....",PINA.0,PINA.1......); К тому же если я чуть двину вал датчика в обратную сторону то опять же косяк.

Сразу ещё вопрос, возможно ли измерять скорость?
Вложения
16032010016.jpg
Датчик и двигатель
16032010012.jpg
Датчик

Re: Оптический энкодер.

zubr » 06 апр 2010, 14:33

почитай про код грея http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%93%D1%80%D0%B5%D1%8F

если есть таймер в контроллере - можно мерить скорость

Re: Оптический энкодер.

dabo » 06 апр 2010, 17:16

Про вариант того что на выходе может быть код Грея знаю
Даже пробовал переводить, Но опять же ерунда какая то получилась
Вопрос в том может не все получается увидеть? что то пропускается

Re: Оптический энкодер.

D1mcon » 06 апр 2010, 17:47

ИМХО, тема не соответствует разделу. :)

Re: Оптический энкодер.

dabo » 06 апр 2010, 18:30

Это я тоже думал, что не соответствует. Извините
А как перекинуть и куда?

Re: Оптический энкодер.

zubr » 06 апр 2010, 19:54

Проверить код грея просто - в переходах меняется только один бит.
Крути энкодер и смотри битики.

А ерунда может быть на выходе потому что, например, если энкодер сломан :)))

Re: Оптический энкодер.

dabo » 06 апр 2010, 20:27

Энкодеров у меня несколько)))

Так вопрос в том, как правильно посмотреть битики?

То что по порядку они выстроены я проверял.

Re: Оптический энкодер.

zubr » 06 апр 2010, 22:42

короче далай так:
читай первый бит. если не знаешь кто из них первый - возми первый попавшийся и назови его первым :)
если он высокого уровня, печатай в последовательный порт "1"
если он низкого уровня, печатай в последовательный порт "0"

теперь возми второй бит. ....

так пока все биты не кончатся.
В конце передай в порт "\n"

И в любой терминалке красиво увидешь все свои битики :beer:

Re: Оптический энкодер.

vadinator » 06 апр 2010, 23:34

zubr+1...
dabo, если логического анализатора нет, то читай биты по прерыванию последовательного порта (с макс. скоростью) и передавай в комп... а энкодер крути очень медленно, возможно лучше моторчиком с регулятором скорости... :good:
Можно кстати и не битики передавать, а шестнадцатеричные представления, во многих программах для работы с последовательным портом, есть преобразование типов принятых данных...
Если есть LPT, то можно и с помощью него попробовать...правда там не больше 12 входов получается вроде...

Re: Оптический энкодер.

SMT » 07 апр 2010, 09:02

Smartcoder не подходит?

Re: Оптический энкодер.

dabo » 07 апр 2010, 09:33

zubr

Знаю я кто первый кто последний)
Не проще тогда так:
printf("C0=%d,C1=%d,C2=%d,C3=%d,C4=%d,C5=%d,C6=%d,C7=%d,A0=%d,A1=%d,A2=%d,A3=%d,A4=%d,A5=%d,A6=%d,A7=%d\n",PINC.0,PINC.1,PINC.2,PINC.3,PINC.4,PINC.5,PINC.6,PINC.7,PINA.0,PINA.1,PINA.2,PINA.3,PINA.4,PINA.5,PINA.6,PINA.7);


vadinator

А можно поподробнее про прерывания? Не разу не пользовался.


Какие есть предложения о том как угол мерить?

Добавлено спустя 1 минуту 41 секунду:
SMT писал(а):Smartcoder не подходит?



Что это?

Re: Оптический энкодер.

SMT » 07 апр 2010, 10:04

Smartcoder

http://tamagawa-seiki.com/english/products/sensor.html - в pdf-е упоминается такой
Advanced-rotary-sensors-extract.JPG

Re: Оптический энкодер.

vadinator » 07 апр 2010, 17:21

dabo писал(а):А можно поподробнее про прерывания? Не разу не пользовался.

В микроконтроллерах как правило существуют прерывания возникающие как при приёме байта из uart-а, так и при окончании передачи...в большинстве сред программирования, можно использовать мастер конфигуратор, который автоматически создаёт подпрограммы обработки этих прерываний...в них вы уже и добавляете собственный код, который будет например помещать следующее значение в регистр uart-а, и когда передача байта завершилась, автоматически вызывается эта процедура... нужно только на начальном этапе, при инициализации МК положить в регистр первое значение...а дальше всё будет происходить автоматом, так вы сможете обеспечить максимальную скорость передачи данных, при выбранной скорости последовательного порта. Последнее время мало занимаюсь МК, но в основном пользовался ICC... боюсь пример из одной среды, мало поможет пользователю другой. Попробуйте сами познакомиться поближе с системой прерываний для АВР...в выбранной вами среде. Очень пригодится в будущем...а так-же посмотрите на прерывания по таймеру счётчику, это позволит чётко формировать временные отрезки в ваших программах.

Re: Оптический энкодер.

dabo » 11 апр 2010, 22:57

SMT
так и не понял

vadinator
интересно

Народ почему не работает на Си в кодвизионе двойное условие?
если одно=порту1 и другое=порту2 то ...

Re: Оптический энкодер.

Angel71 » 11 апр 2010, 23:30

потому, что оно работает :) перефразирую. чтобы получить правильный ответ, нужно задать правильный вопрос. или так: чтобы программа работала так как надо, нужно правильно её написать. ещё перефразирую. потому, что у вас не выполняется одно из условий.
ПС :pardon: лирические вопросы:
- вы вообще в своём условии сравниваете или присваиваете?
- вы вообще уверены, что у вас в "порт1" или "порт2" именн то, что вы думаете?


Rambler\'s Top100 Mail.ru counter