реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PIC18 и ручной энкодер
dimka333
сообщение Jan 28 2011, 12:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 21-11-10
Пользователь №: 61 056



Подключил энкодер ( 20 импульсов на оборот)
Два канала Аи Б энкодера дают меандр, смещенный на 90 град
Делаю прерывание по спаду в А канале - запускаю опрос Б канала., если Б=0 то -1 в лево, если 1 то +1 в право.
все работает хорошо., только при вращении в лево пропускает счет - на 50 щелчков энкодера дает значение 42-44.
В право без пропусков.
Менял программу - давал при вращении в право вычитание - то же самое, ошибка не зависит от направления вращения
Делал задержку перед опросом Б ( в прерывании) не помогло.
В канале Б точно 0 - это и в описании энкодера и осц. кажет
Как побороть?
Go to the top of the page
 
+Quote Post
skripach
сообщение Jan 29 2011, 02:01
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Софт коряво написан. Можно поискать готовую реализацию. Много уже обсуждалось.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
dimka333
сообщение Jan 29 2011, 14:13
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 174
Регистрация: 21-11-10
Пользователь №: 61 056



Может дадите ссылочки - в нете не нашел
Go to the top of the page
 
+Quote Post
skripach
сообщение Jan 29 2011, 16:16
Сообщение #4


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
в нете не нашел

Не верю. (с) Станиславский
К примеру: http://www.chipenable.ru/index.php/how-con...n/9-encoder-avr


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Feb 1 2011, 07:09
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(dimka333 @ Jan 28 2011, 15:53) *
Делаю прерывание по спаду в А канале - запускаю опрос Б канала., если Б=0 то -1 в лево, если 1 то +1 в право.
0 - это и в описании энкодера и осц. кажет
Как побороть?


Прерывание должно быть по обоим каналам, т.е. вам еще добавить канал Б и обработку канала А в немwink.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 1 2011, 08:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Надо ещё на дребезг посмотреть.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 1 2011, 09:01
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Feb 1 2011, 10:58) *
Надо ещё на дребезг посмотреть.

Вот именно.
Go to the top of the page
 
+Quote Post
Marser
сообщение Mar 1 2011, 10:10
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 162
Регистрация: 12-09-08
Из: Казань
Пользователь №: 40 143



Если проблема всплывает при вычитании, попробуйте постоянно его(вычитание) не использовать.
Например так: прерывание по фронту канала А, подпрограмма обработки прерывания:

N++;
if(Channel_b=1) R++; //при вращении вправо R++, при вращении влево L++; N - количество прерываний.
else L++;
if(N==50) ///Когда прошло 50 импульсов, вычисляем на сколько изменилось расстояние, используя вычитание.
{
Length=Length+R-L;

N=0; //обнуляем счётчики.
R=0;
L=0;
}
Go to the top of the page
 
+Quote Post
Kolia
сообщение Mar 2 2011, 08:37
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Marser @ Mar 1 2011, 13:10) *


А лучше всего вообще убрать вычитание из прерывания smile3046.gif
Go to the top of the page
 
+Quote Post
VVD_2
сообщение May 15 2011, 13:02
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 5-08-10
Из: Украина
Пользователь №: 58 765



Цитата(dimka333 @ Jan 28 2011, 15:53) *
Подключил энкодер ( 20 импульсов на оборот)
Два канала Аи Б энкодера дают меандр, смещенный на 90 град
Делаю прерывание по спаду в А канале - запускаю опрос Б канала., если Б=0 то -1 в лево, если 1 то +1 в право.
все работает хорошо., только при вращении в лево пропускает счет - на 50 щелчков энкодера дает значение 42-44.
В право без пропусков.
Менял программу - давал при вращении в право вычитание - то же самое, ошибка не зависит от направления вращения
Делал задержку перед опросом Б ( в прерывании) не помогло.
В канале Б точно 0 - это и в описании энкодера и осц. кажет
Как побороть?


Нужно одновременно читать сигналы А и Б. На отрезке "Делаю прерывание по спаду в А канале - запускаю опрос Б канала" у Вас А и Б считываются в разное время (хотя и короткое).
Я делаю два подряд считывания порта в разные регистры, а затем анализирую изменение битов в этих регистрах для определения направления.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 18:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016