Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 3«123
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Энкодер (программа для обслуживания енкодера)
Энкодер
dimitriy-bc Дата: Ср, 14.01.2015, 00:58  |                                                                                                                Сообщение # 31
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

terrarus, еще раз спасибо. Производства для которых вытворяю, это сплошной белый шум в сотни кВт. (тиристорные привода постоянного тока и парогенераторы на пускателях). На помехи сетовать не могу поскольку почти все моя работа. Частотники и энкодоры только осваиваю, соответственно проблем выше крыши.
Еще такой вопрос, не в эту тему, на восемнадцатые пики Вы пишите в Протоне или Рыба в приоритете? Спрашиваю поскольку Протон для восемнадцатых пиков меня замучил, вот и думаю, может переосилить лень и попробовать Рыбу.
И еще, для считывания с энкодеров я использую отдельный контролер но он работает не по прерываниям, а по варианту предложенному ivan_fd.

'
New = PORTB & %00110000

Select EncState

Case          %00100000

If New = %00110000 Then Inc REAL_WAY
If New = %00000000 Then Dec REAL_WAY
Break;

Case 0

If New = %00100000 Then Inc REAL_WAY
If New = %00010000 Then Dec REAL_WAY
Break;

Case %00010000

If New = %00000000 Then Inc REAL_WAY
If New = %00110000 Then Dec REAL_WAY
Break;

Case %00110000

If New = %00010000 Then Inc REAL_WAY
If New = %00100000 Then Dec REAL_WAY
Break;
EndSelect
'
EncState = New;

Чем этот метод  мне больше импонирует это отсутствие ошибки от возможного дребезга, включая помехи в момент переключения. Хотя Вы себя немного обезопасили используя H11L1, у них присутствует триггер шмитта (я эти оптроны использую в платах приводов). Для быстродействующих участков я чаще использую 6N137
А также плюс в том, что допустим при считывании по прерываниям с энкодера 250 импульсов на оборот мы получим 250 значений. При использовании такого считывания 1000.
Передачу и прием информации пришлось фантазировать самому.
передача:
'
'                                     
If BITS.0 = 1 Then             
    If COUNTER_2 > 1 Then
       COUNTER_2 = 1           
'
        If SCLK_ENC = 0 Then 
               SCLK_ENC = 1              
                Inc COUNTER_1  
'                              
            If COUNTER_1 < 17 Then
               D_OUT_ENC = REAL_WAY_OUT.0
               REAL_WAY_OUT = REAL_WAY_OUT >> 1    ' ПРОЙДЕННЫЙ ПУТЬ В ОДНУ ИЗ СТОРОН    
'                  
            ElseIf COUNTER_1 > 16 And COUNTER_1 < 33 Then   ' КОЛИЧЕСТВО ИМПУЛЬСОВ ЭНКОДЕРА КАРЕТКИ ЗА 1 ОБОРОТ БАРАБАНА                                     
               D_OUT_ENC = QUANTITY_ROTATION_OUT.0                        
               QUANTITY_ROTATION_OUT = QUANTITY_ROTATION_OUT >> 1       
'                  
            ElseIf COUNTER_1 > 32 Then        
               D_OUT_ENC = ROTATION_OUT.0        ' КОЛИЧЕСТВО ИМПУЛЬСОВ ОТ ЭНКОДЕРА БАРАБАНА
               ROTATION_OUT = ROTATION_OUT >> 1 
            End If             
        Else               
                SCLK_ENC = 0
        End If    
    Else
        Inc COUNTER_2
    End If
End If
'                                     

прием:
    
   '_________________СЧИЫВАНИЕ С ЭНКОДЕРОВ ДЛЯ ОБРАТНОЙ СВАЗИ ПО СКОРОСТИ ДВИЖЕНИЯ УКЛАДЧИКА______        
   '    
   ' 
feed_back_IN:              

                VEL_1_WAY_IN = 0             ' КОЛИЧЕСТВО ИМПУЛЬСОВ ЭНКОДЕРА КАРЕТКИ ЗА 1 ОБОРОТ БАРАБАНА
                REAL_WAY = 0                 ' ПРОЙДЕНЫЙ ПУТЬ В ОДНУ ИЗ СТОРОН
                ROTATION = 0                 ' КОЛИЧЕСТВО ИМПУЛЬСОВ ОТ ЭНКОДЕРА БАРАБАНА
                BITS = 0
'             
CYCLE_1:                                   
    If SCLK_ENC = 1 Then                    
        BITS.0 = 1: GoTo CYCLE_1 
    ElseIf SCLK_ENC = 0 And BITS.0 = 1 Then  
         BITS.0 = 0      
            Inc COUNTER_1
'                           
         If COUNTER_1 < 17 Then                  ' ПРОЙДЕНЫЙ ПУТЬ В ОДНУ ИЗ СТОРОН  
            REAL_WAY.15 = D_IN_ENC             
                If COUNTER_1 != 16 Then
                    REAL_WAY = REAL_WAY >> 1   
                EndIf        
'                           
         ElseIf COUNTER_1 > 16 And COUNTER_1 < 33 Then  'КОЛИЧЕСТВО ИМПУЛЬСОВ ЭНКОДЕРА КАРЕТКИ ЗА 1 ОБОРОТ БАРАБАНА           
                VEL_1_WAY_IN.15 = D_IN_ENC  
                If COUNTER_1 != 32 Then
                    VEL_1_WAY_IN = VEL_1_WAY_IN >> 1
                EndIf
'                           
         ElseIf COUNTER_1 > 32 Then             ' КОЛИЧЕСТВО ИМПУЛЬСОВ ОТ ЭНКОДЕРА БАРАБАНА 
                ROTATION.15 = D_IN_ENC         
                If COUNTER_1 != 48 Then
                    ROTATION = ROTATION >> 1
                EndIf
         EndIf            
'                             
     EndIf
'                        
     If COUNTER_1 = 48 Then 
         COUNTER_1 = 0
     Else                                             
         GoTo CYCLE_1
     EndIf    
Return
                    
Еще раз хочу поблагодарить за информацию и попрошу уточнить по Протону и Рыбе.

Сообщение отредактировал dimitriy-bc - Ср, 14.01.2015, 01:11
ЯНДЕКС Дата: 14.01.2015
AndrF Дата: Ср, 14.01.2015, 07:18  |                                                                                                                Сообщение # 32
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 148
Репутация: 3   ±
Замечания:   ±
На сайте с 03.02.2012

Статус: Offline

Лично я предпочитаю Swordfish. На Протоне писал раньше, но дюже он древен и неудобен - одно только отсутствие нормальных функций убивает... Ну и развиваться он больше не будет -> путь в тупик. Для древних и маломощных пиков еще сойдет, а на новые уж лучше сразу использовать Swordfish или Firewing.

И еще, у всех этих трех продуктов (Proton/Swordfish/Firewing) один производитель...
MiXaS Дата: Ср, 14.01.2015, 09:35  |                                                                                                                Сообщение # 33
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

dimitriy-bc,  если Вы пишите исключительно на пиках по-мощнее 18f.. 24f.. то вам полюбому нужно или рыба или огнекрылый, как говорит AndrF. Протон нормально работает с 18f, но не все внем есть таргеты, то есть не под все можно написать код, плюс он уже устарел. Если Вы освоили Протон, то рыбу тоже освоите. Немного другой синтаксис, но если надо, можно и переучиться.
dimitriy-bc Дата: Ср, 14.01.2015, 10:58  |                                                                                                                Сообщение # 34
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

MiXaS,  AndrF,  спасибо. Вчера в Протоне нашел ошибку, IF X <= Y Then. Для шестнадцатого пика работает без проблем, а в восемнадцатом вариант = воспринимает  не во всех участках программы, а отрабатывает только < . И попило кровушки не мало.
И еще один вопрос по экранированию. Чаще всего я цеплял экран только на GND питания передающего устройства. Со стороны приемника экран оставался в воздухе. Как делаете Вы.
demanik Дата: Ср, 14.01.2015, 23:03  |                                                                                                                Сообщение # 35
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Цитата AndrF ()
уж лучше сразу использовать Swordfish или Firewing
good


Попробуй всё и вся... может быть пол...

terrarus Дата: Чт, 15.01.2015, 16:18  |                                                                                                                Сообщение # 36
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

dimitriy-bc:  "...Еще такой вопрос, не в эту тему, на восемнадцатые пики Вы пишите в Протоне или Рыба в приоритете? Спрашиваю поскольку Протон для восемнадцатых пиков меня замучил..."

Отчечаю  dimitriy-bc: Я пишу на Протоне.

Кстати конструкции, Подобные вашей   IF X <= Y Then
мной используют очень часто, например:

If VRA1 >=1000 Then VRA1 =1000
или
If
VRA1 > 400  AND  VRA1 <= 600 Then

Работаю очень даже нормально!  Ничего плохого ни в 16 серии ни в 18-ой я за ними не замечал никогда.

К вопросу о экранировании.
Экран я припаиваю к  контактам разъема длинной линии с обоих сторон. Соответствующий контакт разъема со стороны микроконтроллера припаиваю к земле (естественно изолированной посредством DC/DC преобразователя). Со стороны энкодера (или подобного датчика, например, измерительной головки магнитной линейки) припаиваю к соответствующему контакту разъема, который соединяется с металлическим корпусом энкодера (датчика). Соответственно корпус датчика имеет электрический контакт со станиной станка, так как корпус энкодера крепится к станине металлическими винтами.

На реплику AndrF,  ".... На Протоне писал раньше, но дюже он древен и неудобен - одно только отсутствие нормальных функций убивает... Ну и развиваться он больше не будет -> путь в тупик. Для древних и маломощных пиков еще сойдет, а на новые уж лучше сразу использовать Swordfish или Firewing.
И еще, у всех этих трех продуктов (Proton/Swordfish/Firewing) один производитель..."

Замечу так:

Когда я увидел в новых версиях Протона, что появились новые операторы и поддержка PIC 24 серии, то я понял, что Протон будет развиваться и дальше. То есть все утверждения, что Протон "...это тупиковая ветвь" это мягко говоря не верно!
Сразу предупреждаю оппонентов, что в полемику на эту тему вступать не буду. Если хотите в это верить - верьте. Флаг вам в руки!

Протон меня вполне устраивает и я вижу в нем большие возможности.
Считаю, что особенно для начинающих (и не только) это самая лучшая среда программирования для PIC микроконтроллеров и освоить начинающим Протон годаздо  проще, чем Swordfish и в Firewing

ОН МНЕ НРАВИТСЯ!
Очень нравится то, что в Протоне  очень много различных функций и операторов более 200.

В пользу моего положительного мнения о Протоне говорит и тот факт, что у всех этих трех продуктов (Proton/Swordfish/Firewing) один производитель. Я вижу что, в последнии версии Протона уже интегрировано много того, что было отработано и в Swordfish и в Firewing.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Пт, 16.01.2015, 14:14
dimitriy-bc Дата: Пт, 16.01.2015, 00:06  |                                                                                                                Сообщение # 37
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

terrarus, здравствуйте. Спасибо за ответ по экранированию. Если для каждого датчика у Вас индивидуальный DC/DC преобразователь то все логично, петли не получается. Еще раз спасибо за правильное направление.
По поводу Протона. Не понимаю в чем проблема, но периодически у меня такие непонятки вылазят. Причем в одной части программы отрабатывает нормально в другой глючит. Сейчас у меня стоит версия 3.5.2.6. Пробовал поставить 3.5.6.5. то в одном месте программы при Х=Х-У в Х вписывалось значение 0. Посмотрев асм. увидел, что Протон с генерировал Х-Х На других участках программы такой ошибки не давал. У меня на компьютерах стоит ХР. Какие версии Протона стоят у Вас и на какую винду?

Сообщение отредактировал dimitriy-bc - Пт, 16.01.2015, 00:08
terrarus Дата: Пт, 16.01.2015, 14:35  |                                                                                                                Сообщение # 38
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

До середины октября 2014 года у меня стояли XP и Протон 3.5.2.6.. Затем я поставил вторую операционную систему  Win 8.1 и Протон 3.5.6.5, они все 64-битные. Старая XP и Протон 3.5.2.6 осталась в резерве, так как начитался у нас на форуме о "проблемах" с ними. Опасался что и у меня будут проблемы. И вот уже более трех месяцев полностью перешел на работу в  Win 8.1  и Протон 3.5.6.5. Никаких серьезных проблем не замечаю. За это время ни разу не переходил на XP.

Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Сообщение отредактировал terrarus - Пт, 16.01.2015, 16:48
ADMIN Дата: Пт, 16.01.2015, 17:00  |                                                                                                                Сообщение # 39
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот, кстати, человек с энкодером работал. Может, кому-то интересны будут его решения.
dimitriy-bc Дата: Сб, 17.01.2015, 01:34  |                                                                                                                Сообщение # 40
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

ADMIN, спасибо за ссылку.
Сообщение отредактировал dimitriy-bc - Сб, 17.01.2015, 11:57
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Энкодер (программа для обслуживания енкодера)
Страница 3 из 3«123
Поиск: