Все опять энкодер - Страница 2 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Все опять энкодер (Помогите перевести)
Все опять энкодер
LeXaCH Дата: Ср, 23.01.2013, 18:33  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 33
Репутация: 0   ±
Замечания:   ±
На сайте с 05.01.2010

Статус: Offline

ivan_fd, Спасибо все заработало
ЯНДЕКС Дата: 23.01.2013
dimitriy-bc Дата: Пт, 01.03.2013, 16:59  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 194
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток. В одном изделии я поставил самодельный энкодер, который выдавал просто 60 импульсов за оборот. Сейчас у меня появилась необходимость определять направления движения. Переделал энкодер, поставив заводское колесо на 30 импульсов и два фотоприемника. Чтоб не переделывать всю схему, поставил в энкодер пик16ф628а. Его задача: по одному проводу передавать направление движения, а по второму 60 импульсов за оборот. За основу для пик16ф628а, взял программу предложенную ivan_fd. В переделанной программе чтоб убрать дребезг, вложил участок

If  DIRECTION.2 != PORTB.2 Then
    DIRECTION.2 = PORTB.2
    Enc_Data = 0
ElseIf Enc_Data > 1 Then     'после именения направления движения, только со второго перепада
    PORTB.3 = EncData.0   'изменяем состояние счетного выхода.
EndIf

Но у него при смене направления движения теряется первый импульс. Для его восстановления, в приемнике добавил

If PORTD.7 = 1 Then        'определение направления движения
    If PORTD.6 = 1 Then   '
        DIRECTION.2 = 1
    Else
        If DIRECTION.2 = 1 Then
            DIRECTION.2 = 0
                If DIRECTION.0 = 0 Then  Inc EncData    ' компенсация проущенного импуласа пик 16ф628а
            DIRECTION.0 = 1
            Inc EncData
        EndIf
    EndIf
Else
    If PORTD.6 = 1 Then
        DIRECTION.2 = 1
    Else
        If DIRECTION.2 = 1 Then
            DIRECTION.2 = 0
                If DIRECTION.0 = 1 Then  Dec EncData     ' компенсация проущенного импуласа пик 16ф628а
            DIRECTION.0 = 0
            Dec EncData
        EndIf
    EndIf
EndIf

При проверке в железе, небольшая ошибка есть.
Подскажите, что у меня не так. Заранее благодарен.
Прикрепления: ENKODER-874A.rar(119Kb)

Сообщение отредактировал dimitriy-bc - Пт, 01.03.2013, 17:08
dimitriy-bc Дата: Сб, 02.03.2013, 13:32  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 194
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Сделал еще один вариант. На мое видение, ошибка счета исключена. Единственное, что проигрыш дискретности в два раза. На железе смогу проверить только в понедельник.
Может будут замечания или предложения? cry
Прикрепления: ENKODER-874A_N.rar(94Kb)

Сообщение отредактировал dimitriy-bc - Сб, 02.03.2013, 13:40
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Все опять энкодер (Помогите перевести)
Страница 2 из 2«12
Поиск: