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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> Энкодер и дребезг, нужна помощь
Dog Pawlowa
сообщение Apr 12 2007, 16:51
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(BigCoster @ Apr 12 2007, 16:13) *
Чтобы проехать заданное расстояние

Я реализую такую функцию с помощью второго датчика привязки к абсолютному положению, что позволяет избежать накопления ошибки.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Stas633
сообщение Apr 12 2007, 17:03
Сообщение #32


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

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Цитата(BigCoster @ Apr 12 2007, 17:13) *
Алгоритм такой:
НАСТРОЙКА
-нажимаем кнопку-едем едем сколько надо
-нажимаем кнопку-сохраняем
и так необходимое кол-во раз
РАБОТА
-едим, сколько сохранили
-проехали, остановились, постояли некоторое время
и так столько, сколько раз сохраняли потом тоже самое в обратную сторону


То есть, фактически Вы реализуете шаговый двигатель, где величина шага (минимального) равна угловому перемещению вала двигателя между соседними "прорезями" крыльчатки.

Если это так, то Вам необходимо в начале добиться работы программы - "сделать шаг".

Я бы делал это через работу прерывания INT (оно "есть" и в 51х и в AVR).
Алгоритм программы шага такой (!!!в одну сторону):
Код
1. Пуск двигателя.
2. Ожидание прерывания INT
3. При "наступлении" INT:
    a)STOP двигатель
    b)увеличение (уменьшение) счетчика "положения"
4.конец


При движении в обе стороны данного алгоритма не достаточно. Так как, при смене направления движения будет возникать ошибка углового перемещения, равная толщине прорези в крылчатке. Правда эту ошибку легко компенсировать. Или алгоритмически (переключая режим срабатывания INT по фронту или по спаду), или используя попровочный коэффициент, пропорциональный толщине прорези.

Если частота работы МП достаточна, то можно "заменить" прерывание опросом вывода МП.

Сообщение отредактировал Stas633 - Apr 12 2007, 17:05
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 12 2007, 17:13
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(BigCoster @ Apr 12 2007, 21:13) *
РАБОТА
-едим, сколько сохранили
-проехали, остановились, постояли некоторое время
и так столько, сколько раз сохраняли потом тоже самое в обратную сторону

Чтоб энкодер был реверсивный, нужно два датчика, смещенные на полшага. Иначе ошибка на смене направления обеспечена, да и с двумя датчиками можно считать туда-сюда, определяя направление вращения. Так устроены фирменные энкодеры.
Go to the top of the page
 
+Quote Post
Stas633
сообщение Apr 12 2007, 18:14
Сообщение #34


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

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Цитата(Visor @ Apr 12 2007, 18:13) *
Чтоб энкодер был реверсивный, нужно два датчика, смещенные на полшага. Иначе ошибка на смене направления обеспечена, да и с двумя датчиками можно считать туда-сюда, определяя направление вращения. Так устроены фирменные энкодеры.


Внимание OFFTOP!
Не согласен. Для обеспечения "правильного" (без ошибок) счета достаточно одного датчика. Возникающая ошибка исправляется программно.
Но вот направление вращения с одним дадчиком определить НЕ ВОЗМОЖНО! Согласен абсолютно!
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 12 2007, 19:08
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(Stas633 @ Apr 12 2007, 23:14) *
Внимание OFFTOP!
Не согласен. Для обеспечения "правильного" (без ошибок) счета достаточно одного датчика. Возникающая ошибка исправляется программно.

Был неправ, вспылил smile.gif, на самом деле минимальная ошибка энкодера и есть ширина зуба, и никак её не скомпенсируешь. А вообще я имел ввиду энкодер, как аппаратное устройство дающее полностью достоверные показания. Именно такие используют в промышленности. Кстати, с двумя датчиками можно увеличить кратность счёта в 2 либо 4 раза, считая фронты, ну или уменьшить соответственно число зубьев диска.

Сообщение отредактировал Visor - Apr 12 2007, 19:45
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 12 2007, 19:20
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Stas633 @ Apr 12 2007, 18:14) *
[b]...Не согласен. Для обеспечения "правильного" (без ошибок) счета достаточно одного датчика. Возникающая ошибка исправляется программно...

Если можно, более подробно.
Какая ошибка исправляется программно?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Apr 12 2007, 23:03
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
Вот осцилограмма работы датчика
........
Из нее видно, что частота около 70Гц,


Цитата
В прерывании по таймеру обрабатывается вся индикация, а не по одному знаку в каждом прерывании.
Видим, что частота 40Гц


Конечно импульсы будут пропускаться. Чтобы не пропускались надо частоту прерываний по таймеру увеличить как минимум до 2*70Гц, а более правильно до 2*макс.частота_срабатывания_оптрона.


Цитата
Убрал ёмкость
......
Ошибка увеличилась почти на целый оборот вала двигателя

Можете пояснить каким образом вы считаете импульсы? По переднему, по заднему, по обоим фронтам или просто по уровню?
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 13 2007, 10:23
Сообщение #38


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Цитата(_Sam_ @ Apr 12 2007, 23:03) *
Конечно импульсы будут пропускаться. Чтобы не пропускались надо частоту прерываний по таймеру увеличить как минимум до 2*70Гц, а более правильно до 2*макс.частота_срабатывания_оптрона.
Можете пояснить каким образом вы считаете импульсы? По переднему, по заднему, по обоим фронтам или просто по уровню?

Дело в том что импульсы от датчика считает счётчик Т1,
я спрашиваю: "можно ли избавится от дребезга при таком включении ?"
Прерывание INT1 занято датчиком конечной точки перемещения, INT0 датчиком тока

Вот кусок программы настройки таймеров, прерывания пока выключены, счётчик и таймер
включается позже:
Код
    mov ie,#0              ;выключить все прерывания
    mov tmod,#01010000b    ;задать тип счётчиков
            ;||||||||
               ;||||||++-Перевести таймер T0 в 13-разрядный режим
               ;|||||+---Синхронизироваться от внутреннего генератора
               ;||||+----Запретить управление таймером от ножки INT0
               ;||||
               ;||||
              ;||++-----Перевести таймер T1 в 16-разрядный режим
               ;|+-------Синхронизироваться от внешних сигналов
               ;+--------Запретить управление таймером от ножки INT1



    clr et0       ;Прерывание от таймера T0 (1-разрешено, 0-запрещено)
    clr et1        ;Прерывание от счетчика T1 (1-разрешено, 0-запрещено)

    clr ex0  ;Прерывание от INT0 (1-разрешено, 0-запрещено)
    clr ex1  ;Прерывание от INT1 (1-разрешено, 0-запрещено)

    clr pt0        ;Бит приоритета таймера T0 (0-низкий, 1-высокий)
    setb pt1  ;Бит приоритета счетчика T1 (0-низкий, 1-высокий)

      clr tr0        ;stop таймера T0
    clr tr1        ;stop счетчика T1
    
        clr ea         ;=1, все прерывания разрешены
        setb ea        ;разрешить прерывания от всех источников




Можно ли управлять срабатыванием счётчика по срезу или по уровню?

это из какой то книжки:

В режиме счетчика содержимое соответствующего таймера/счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала. (т.е. по спаду ?)

На распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. (уменя резонатор 6МГц значит max частота подсчёта 250кГц )

На длительность периода входных сигналов ограничений сверху нет.
Go to the top of the page
 
+Quote Post
Stas633
сообщение Apr 13 2007, 10:36
Сообщение #39


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

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Цитата(Visor @ Apr 12 2007, 20:08) *
....на самом деле минимальная ошибка энкодера и есть ширина зуба, и никак её не скомпенсируешь. А вообще я имел ввиду энкодер, как аппаратное устройство дающее полностью достоверные показания. Именно такие используют в промышленности...


В соответствии с заданной автором темой (вопросом) необходимо помочь найти ошибку в работе устройства.

Устройство состоит из датчика углового перемещения, на основе ОДНОЙ оптопары. При этом система не "следящая" и алгоритм работы такой: задал координату -> включил двигатель -> при достижении коорд., останов. (ветвление алгоритма на определение направления вращения двигателя не привожу сознательно)... Это, так сказать "условие задачи", которую нужно решить.

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

Судя по вопросам-ответам автора точность устройства с одним датчиком его устраивает. Если "обращаться" к промышленным изделиям, то это например датчик углового перемещения для станков с ЧПУ (по-моему ВМ175 он "называется") обеспечивает от 2500 до 10000 импульсов на оборот, состоит из 15 (по-моему) оптопар, требует внешних импульсов синхронизации, да и "крыльчатка" там выполнена в виде прозрачного диска с нанесенными рисками (если я ошибся -поправьте). Я считаю, что применение энкодера ТАКОГО (или подобного) уровня должно быть чем-то обосновано.

Не согласен с Вами в том, что минимальная ошибка энкодера - это ширина зуба. На мой взгляд, минимальная ошибка обусловлена скоростью "реакции" системы на возниктовение события "фронт/спад". А ширина зуба может быть "компесирована" (исправлена ) программно (алгоритмически).

Цитата
Dog Pawlowa:
Если можно, более подробно.
Какая ошибка исправляется программно?


В связи с тем, что задание направления вращени является первоочередным (см.посты автора темы о алгоритме работы ус-ва) компенсировать ошибку "зуба" возможно переключением работы INT с "по фронту" (при вращении в "прямом" направлении) на "по спаду" (при вращении в "обратном" направлении.

Что меня огорчает больше всего, это то, что все написанное выше в этом посте НИ КАКОЙ полезной информации для автора темы не несет. А со сути является "флудом" и "засоряет" тему.
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Apr 13 2007, 11:32
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
Дело в том что импульсы от датчика считает счётчик Т1,
я спрашиваю: "можно ли избавится от дребезга при таком включении ?"
Прерывание INT1 занято датчиком конечной точки перемещения, INT0 датчиком тока


Полностью избавиться при таком включении нельзя, но по идее таких больших насчётов быть не должно.

Нашёл у вас грубую ошибку: в прерывании t0_overflow вы оперируете со значение счётчика t1, не запрещая прерывания.

Допустим выполнилась команда mov a,th1, а в это время пришло пришло прерывание, по которому надо инкрементировать счётчик, тогда mov a,tl1 перешлёт в аккум. младший байт нового значения счётчика. В итоге будем работать с неправильным счётчиком.
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 13 2007, 15:44
Сообщение #41


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Цитата(_Sam_ @ Apr 13 2007, 11:32) *
Полностью избавиться при таком включении нельзя, но по идее таких больших насчётов быть не должно.

У меня на один оборот 40 импульсов от датчика, сбится можно на один
чтобы достигнуть достаточную точность позиционирования

Цитата(_Sam_ @ Apr 13 2007, 11:32) *
Нашёл у вас грубую ошибку: в прерывании t0_overflow вы оперируете со значение счётчика t1, не запрещая прерывания.

Допустим выполнилась команда mov a,th1, а в это время пришло пришло прерывание, по которому надо инкрементировать счётчик, тогда mov a,tl1 перешлёт в аккум. младший байт нового значения счётчика. В итоге будем работать с неправильным счётчиком.

таймер для индикации и не обязательно отображать совершенно точные показания энкодера
поправте, если не правильно Вас понял
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 13 2007, 17:30
Сообщение #42


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



ещё допишу...
отображать совсем точно значения не надо, это по поводу замечания со значениями T1 во
время прерываний.

И про достаточную точность позиционирования (можно сбится на один импульс от датчика) - я имел
ввиду свой случай при реверсе
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Apr 13 2007, 18:27
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Наверное я не так понял программу.
А что вы делаете в прерывании t1? Можно код посмотреть?
type_count определяет в минус или в плюс считать импульсы в зависимости от задания на двигатель?
Если t1 полностью независимый зачем тогда анализирутеся type_count в прерывании t0?
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 13 2007, 19:14
Сообщение #44


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Цитата(_Sam_ @ Apr 13 2007, 18:27) *
Наверное я не так понял программу.
А что вы делаете в прерывании t1? Можно код посмотреть?
type_count определяет в минус или в плюс считать импульсы в зависимости от задания на двигатель?
Если t1 полностью независимый зачем тогда анализирутеся type_count в прерывании t0?

В прерывании от t1 делаю паузу перед началом следующего вращения двигателя
не знаю как ещё можна реализовать паузу. unsure.gif
Если по флагу, в основной программе, то какая разница занята программа этой паузой или она
обрабатывается прямо в прерывании.
За call не ругайте, мне кажется что так приятнее выглядит программа
Вот код:
Код
;-------------------------------------------------
;Обслуживание прерывания при переполнении счётчика|
;-------------------------------------------------
t1_overflow:
    clr tr0    ;запретить счёт таймеру
    clr tr1    ;запретить счёт счётчику
    mov p0,#0
    call stop
    setb yet
    setb tr0      ;разрешить счёт таймеру
    setb tr1      ;разрешить счёт счётчику
    reti
;FUNCTIONS t1_overflow
;---------------------------
;Паузa следующим движением|
;---------------------------
stop:
    call on_all
    call pause
    clr yet
    ret
;sub FUNCTIONS stop
;------------------
;Изменяющаяся пауза|
;------------------
pause:
    push 7
    push 5
    mov r0,pauses
    mov a,@r0
    mov r3,a
    inc r3
t55:    mov r4,#05h
t66:    mov r5,#0a0h
t77:    mov r7,#0ffh
    djnz r7,$
    djnz r5,t77
    djnz r4,t66
    djnz r3,t55
    pop 5
    pop 7
    ret

t0 - индикация значений счётчика
type_count - инкрементирующий или декрементирующий счёт на индикаторе

Сообщение отредактировал BigCoster - Apr 13 2007, 19:16
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 13 2007, 19:38
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



Цитата(Stas633 @ Apr 13 2007, 15:36) *
Если "обращаться" к промышленным изделиям, то это например датчик углового перемещения для станков с ЧПУ (по-моему ВМ175 он "называется") обеспечивает от 2500 до 10000 импульсов на оборот, состоит из 15 (по-моему) оптопар, требует внешних импульсов синхронизации, да и "крыльчатка" там выполнена в виде прозрачного диска с нанесенными рисками (если я ошибся -поправьте). Я считаю, что применение энкодера ТАКОГО (или подобного) уровня должно быть чем-то обосновано.

Нет, я говорил несколько о других, их сейчас везде применяют где нужно измерение скорости либо позиционирование. Их великое множество типов и номиналов, от различных производителей, самый простой это инкрементальный энкодер, где на измерение угла стоит именно две оптопары и имеется всего 4 сигнальных линии: А, не А и В, не В, если трасса небольшая используется только две, А и В.
Цитата(Stas633 @ Apr 13 2007, 15:36) *
Не согласен с Вами в том, что минимальная ошибка энкодера - это ширина зуба.

Ваше право, но энкодер "не видит" угла между пульсами, и именно по количеству импульсов на оборот выбирается энкодер, чтобы обеспечить требуемую точность.
Цитата(Stas633 @ Apr 13 2007, 15:36) *
Что меня огорчает больше всего, это то, что все написанное выше в этом посте НИ КАКОЙ полезной информации для автора темы не несет. А со сути является "флудом" и "засоряет" тему.

Информация не бывает бесполезной!

Сообщение отредактировал Visor - Apr 13 2007, 19:40
Go to the top of the page
 
+Quote Post

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

 


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


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