Arduino и RS422 энкодер

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8888
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2784
Откуда: Тюмень
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Сергей Саныч »

Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
N1X
Мастер
Сообщения: 3557
Зарегистрирован: 16 фев 2015, 21:19
Репутация: 1619
Настоящее имя: Владимир
Откуда: Беларусь, Гомель
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение N1X »

Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?
Аватара пользователя
Serg
Мастер
Сообщения: 20994
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4979
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Serg »

N1X писал(а):Так а чем аппаратный SPI не угодил?
Редкий аппаратный SPI разумеет более 8 или 16 бит...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

Сергей Саныч писал(а):Нет необходимости считывать DATA по прерыванию. Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если ардуинка больше ничем не будет занята, то и такой вариант пойдет.
Спасибо.
Наверное так попробую. Одна Ардуинка будет формировать CLOCK.
А вторая будет искать нужную длину импульсов, например тот самый tm(или tp) и считывать DATA и выводить на жк индикатор через SPI(такой есть в наличии).
N1X писал(а):Так а чем аппаратный SPI не угодил? Не подходит, или не смотрели?
Не смотрел и не понимаю пока ничего.
Вообще мне местный кудесник, сказал следующее. Найди стандартные библиотеки RS422 или RS485 конвертируй и работай с ними, а я велик изобретаю :wik:
Сергей Саныч писал(а): Бит данных можно считать в той же программе перед формированием очередного импульса CLOCK.
Если я правильно понимаю то DATA же должна считываться параллельно CLOCK в определённое время именно в (1,2) отрезок по картинке UAVpilot , или по моей картинке в момент t2.
И именно поэтому раз программа делая CLOCK , должна отвлекаться на DATA тем самым будет вынужденна удлинять CLOCK, то бишь возникают противоречия.
И нельзя сформировать программке CLOCKа потом программке заниматься DATA, так как сигнал DATA уже прошёл.
Или я не прав :wik: :thinking:
И только поэтому развязать две ардуинки и они будут делать параллельно и не зависимо друг от друга свои задачи.
Да и цены на них не великие, можно ещё одну воткнуть :lol: , хотя понятно что лучше сэкономить.
Что я сейчас и пытаюсь сделать, не купив готовый счётчик SSI сигнала по конской цене(причём каждый раз, в случае повторения конструкции).
Такие мыслишки.
Поправьте меня плииз, где я ошибаюсь :roll:
Аватара пользователя
N1X
Мастер
Сообщения: 3557
Зарегистрирован: 16 фев 2015, 21:19
Репутация: 1619
Настоящее имя: Владимир
Откуда: Беларусь, Гомель
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение N1X »

А какая разрядность DATA? Сколько бит?
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

24 бит
если быть точне-12бит на оборот+12бит на количество оборотов
Аватара пользователя
N1X
Мастер
Сообщения: 3557
Зарегистрирован: 16 фев 2015, 21:19
Репутация: 1619
Настоящее имя: Владимир
Откуда: Беларусь, Гомель
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение N1X »

Можно попробовать отработать и аппаратным SPI по прерыванию. Но тут нужен логический анализатор, чтобы смотреть, что в шине происходит. Если успевать забирать данные вовремя, то вполне возможно принять 3 байта подряд без пидимых пауз. Но это документацию на МК нужно читать :)
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8888
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2784
Откуда: Тюмень
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Сергей Саныч »

Кулибин1437 писал(а):И нельзя сформировать программке CLOCKа потом программке заниматься DATA,
Можно. Чтение DATA не займет много времени, если непосредственно опрашивать регистры. И это время можно учесть при формировании CLOCK.
Кулибин1437 писал(а): так как сигнал DATA уже прошёл.
Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).
Кулибин1437 писал(а):Найди стандартные библиотеки RS422 или RS485
Это, мягко говоря, не так. От RS422 здесь только физический интерфейс, логика же совершенно другая.
Чудес не бывает. Бывают фокусы.
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

спасибо.
Сергей Саныч писал(а):Он не прошел, а пришел. И будет в нужном состоянии, пока не придет следующий CLOCK, либо не истечет тайм-аут (t3).
По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?

Пардон. Написал бред похоже. :lol: это же не паралельная , а последовательная выдача информации :) .
Последний раз редактировалось Кулибин1437 17 янв 2019, 11:14, всего редактировалось 1 раз.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8888
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2784
Откуда: Тюмень
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Сергей Саныч »

Кулибин1437 писал(а):По сути, этот самый t3 по всей вероятности можно сколь угодно сделать, достаточное для считывания, допустим 0,3-0,5сек. То есть сигнал DATA висит активный. пока не придёт следующая пачка CLOCK?
Стоп. Тебе же надо каждый бит данных отдельно принять, после каждого импульса CLOCK. И "вручную" сложить из них 24-битное слово. А t3 - это интервал после всего слова данных. Он может быть сколь угодно длинным, а вот остальные интервалы ограничены по времени.
Чудес не бывает. Бывают фокусы.
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

ага, я это и пытался сказать в сообщении выше(корректировал его).
Слушайте а в мобильной версии сайта, я чёто не неайду как входить, всё через ВК,Фейсбуки...а прямого входа не нашёл
nevkon
Почётный участник
Почётный участник
Сообщения: 1899
Зарегистрирован: 17 июл 2015, 10:25
Репутация: 231
Настоящее имя: Константин
Откуда: Балаково (Саратовская обл.)
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение nevkon »

Проще всего сделать так:
1. В loop делаем анализ некоей переменной ready (boolean) - если она тру, то читаем бит данных, взводим clock и запускаем таймер прерывания, делаем ready=false. Добавляем бит в переменную (читать битовые операции).
2. В прерывании отключаем clock, отключаем таймер прерывания, ставим готовность данных (ready=true). В очередном loop данные считаются.
Есть прерывания срабатывающие по таймеру - его настроить на 1-5.5мкс.
зы. Могу дать логику, команды не подскажу - лень изучать.
Аватара пользователя
Serg
Мастер
Сообщения: 20994
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4979
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Serg »

Или почти полностью аппаратный вариант:
Первый таймер настраивается на частоту CLOCK, в его прерывании читается состояние ноги DATA и кладётся в переменную на место соотв. порядкового бита, счётчик бит увеличивается. Как только положили в переменную последний бит, обнуляем счетчик бит, содержимое переменной переносим в результирующую, перезапускаем второй таймер.
Второй таймер настраивается на частоту опроса энкодера - по сигналу этого таймера запускается первый таймер.
В итоге в результирующей переменной всегда имеем актуальное значение, которое само обновляется. Программная часть получается минимальная: прочитать порт, записать результат.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

N1X писал(а):нужен логический анализатор, чтобы смотреть, что в шине происходит
такое слово :wtf: заказал :roll: .
Жду.
Поиграю им.
Потом с CLOCKом, и отпишусь, может даже похвастаюсь :hehehe: .
Пока отодвинул это дело.
До конца недели должен прийти. :cheesy:
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

Привет всем.
И снова я))).
Пришёл ко мне цифровой анализатор через USB. И заодно получил Arduino DUE с 84мГц частотой.
С этими дорогими чудесными поделками китайцев стало совершенно другое дело.
Вчера занимался до 2х ночи, как в былые времена (когда паял всякие схемы)).
Теперь я могу увидеть творение программ.
Arduino DUE-шустрый зверюга, теперь можно программировать без прямого обращения к пинам.
По крайней мере пока нету индикатора, дальше видно будет.
Загрузил готовый скетч, найденный в просторах инета, уже не помню, откуда простите.
Вроде даже что-то менял, ещё до этого, особо не вникал пока.
Теперь тайминг “CLOCK” близкий к требованиям, по крайней мере, думаю достаточен.
И Вы не представляете, энкодер стал выдавать долгожданный “DATA”.
Только “DATA” почему то, в некоторых промежутках между пачками “CLOCK” остаётся в нулевом состоянии до прихода следующей серии “CLOCK”, стабильность не смог проследить.
Не понятненько.
Вот картинки с анализатора.
Сперва куча пачек импульсов растянуто до 0,3сек, как раз видно что “DATA” остался в нуле между 14 и 15 пачкой импульсов.
0,3сек.png (995 просмотров) <a class='original' href='./download/file.php?id=155523&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (107.46 КБ)</a>
теперь первая пачка импульсов поближе.
Кстати, только в начале этой пачки какие то отличающиеся длительности от других пачек. Сперва коротенький, а потом длинный.
1 пачка.png (995 просмотров) <a class='original' href='./download/file.php?id=155524&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (111.3 КБ)</a>

вторая пачка импульсов
2.png (995 просмотров) <a class='original' href='./download/file.php?id=155526&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (107.29 КБ)</a>

третья пачка
3.png (995 просмотров) <a class='original' href='./download/file.php?id=155528&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (112.13 КБ)</a>

14-ая, уходящая в ноль “DATA”
14 пачка.png (995 просмотров) <a class='original' href='./download/file.php?id=155530&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (109 КБ)</a>

15-я пачка, приходящая с нуля
15 пачки из нуля.png (995 просмотров) <a class='original' href='./download/file.php?id=155531&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (111.06 КБ)</a>


Забыл, ещё пришлось согласовывать уровни 3,3в и 5в.
Теперь если всё правильно, то придётся по вашим рекомендациям лезть в биты.
Что может где-то не правильно делаю, рад вашей помощи.
Спасибо.
Аватара пользователя
N1X
Мастер
Сообщения: 3557
Зарегистрирован: 16 фев 2015, 21:19
Репутация: 1619
Настоящее имя: Владимир
Откуда: Беларусь, Гомель
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение N1X »

Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...
Аватара пользователя
Serg
Мастер
Сообщения: 20994
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 4979
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Serg »

N1X писал(а):Дата не исключено, что остается в том положении, в котором он был при передаче последнего бита...
Нет, в протоколе явное требование: data=1 в режиме ожидания.
Можно попробовать паузу между пакетами увеличить...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

UAVpilot писал(а): Нет, в протоколе явное требование: data=1 в режиме ожидания.
Можно попробовать паузу между пакетами увеличить...
2 дня мучал, мучал, но пока результата с data=1 пока не особо получается.
И увеличивал и уменьшал, результат не стабилен.
То в 1 переходит, то в "0" остаётся
Что-то энкодеру не нравиться по всей вероятности, наверняка CLOCK.
Я правда параллельно пытаюсь считывать эту самую data.
И сейчас мучаю другой скетч, где есть считывание бит, то есть старый скетч пока отложил.
Может быть как вариант, что как то влияют сопли, собрано то всё на макетке Arduino, а не пайкой.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 8888
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2784
Откуда: Тюмень
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Сергей Саныч »

А почему в пачках по 25 импульсов CLOCK (считая по положительному фронту), а не по 24?
PS: Понял, n+1-й CLOCK как раз и завершает обмен.
Ssisingletransmission.jpg (931 просмотр) <a class='original' href='./download/file.php?id=155691&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (64.19 КБ)</a>
Но на времянке от энкодера - n импульсов.
Энкодер САХ60 тайминг.jpg (931 просмотр) <a class='original' href='./download/file.php?id=155692&sid=d16f229700af60b7df986e6fb9e089ec&mode=view' target=_blank>Загрузить оригинал (40.91 КБ)</a>
Чудес не бывает. Бывают фокусы.
Кулибин1437
Новичок
Сообщения: 35
Зарегистрирован: 11 янв 2019, 07:51
Репутация: 0
Настоящее имя: Эдуард
Откуда: г.Уфа
Контактная информация:

Re: Arduino и RS422 энкодер

Сообщение Кулибин1437 »

а вообще я правильно сформировал количество импульсов, вдруг какая нить банальная засада?
Ато у меня уже глаз замыливаеться :wik:
Ответить

Вернуться в «Электроника»