Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Управление сервоприводом на микроконтроллере | RadioLaba.ru

          #include <P16F628A.INC>

            LIST        p=16F628A    

            __CONFIG    H’3F10′             ;конфигурация микроконтроллера

                                    

                                            

Sec           equ         20h               ;присвоение названий регистрам ОЗУ

Sec1          equ         21h      

t1L           equ         22h               ;младший регистр счета длит. импульса управления

t1H           equ         23h               ;старший регистр счета длит. импульса управления

t1LL          equ         24h               ;промежуточный регистр

t1HH          equ         25h               ;промежуточный регистр

tmp_off       equ         26h               ;регистр счетчика времени

 

flag          equ         7Dh               ;дополнительный регистр флагов

W_TEMP        equ         7Eh               ;регистр для хранения значения аккумулятора W

STATUS_TEMP   equ         7Fh               ;регистр для хранения значения STATUS

                                            ;присвоение названий линиям ввода-вывода

#DEFINE       serv        PORTB,4           ;управляющий сигнал для сервопривода

#DEFINE       knp_1       PORTB,0           ;кнопка 1

#DEFINE       knp_2       PORTB,1           ;кнопка 2

 

  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              org         0000h             ;начать выполнение программы с адреса 0000h

              goto        Start             ;переход на метку Start

          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Подпрограмма обработки прерываний

 

              org         0004h             ;начать выполнение подпрограммы с адреса 0004h

      

              movwf       W_TEMP            ;сохранение значений ключевых регистров

              swapf       STATUS,W          ;

              clrf        STATUS            ;

              movwf       STATUS_TEMP       ;

                

prov_tmr1     bcf         T1CON,TMR1ON      ;остановка таймера TMR1

              btfsc       flag,0            ;проверка флага очередности

              goto        t2                ;флаг установлен (1):перход на метку t2

                                            

t1            movf        t1HH,W            ;флаг очередности равен 0:перезапись длительности

              movwf       TMR1H             ;управляющего импульса из промежуточных регистров  

              movf        t1LL,W            ;в регистры таймера TMR1

              movwf       TMR1L             ;

              bsf         flag,0            ;установка флага очередности

              bsf         serv              ;установить в 1 линию ввода/вывода serv

              goto        extmr1            ;переход на метку extmr1

 

t2            bcf         serv              ;сбросить в 0 линию ввода/вывода serv

              bcf         flag,0            ;сбросить флаг очередности

              movlw       . 183              ;запись длительности паузы между управляющими

              movwf       TMR1H             ;импульсами в 18,5 мс

              movlw       .187              ;

              movwf       TMR1L             ;

              movlw       .24               ;проверка регистра счетчика времени  

              xorwf       tmp_off,W         ;

              btfss       STATUS,Z          ;

              goto        extmr2            ;значение счетчика не равно 24:переход на extmr2

              bcf         PIR1,TMR1IF       ;значение счетчика равно 24: сброс флага прерываний

                                            ;по переполнению TMR1

              goto        exxit             ;переход на метку exxit

extmr2        incf        tmp_off,F         ;инкремент регистра счетчика времени

 

extmr1        bcf         PIR1,TMR1IF       ;сброс флага прерываний по переполнению TMR1

              bsf         T1CON,TMR1ON      ;запуск таймера TMR1

                

exxit         swapf       STATUS_TEMP,W     ;восстановление содержимого ключевых регистров

              movwf       STATUS            ;

              swapf       W_TEMP,F          ;

              swapf       W_TEMP,W          ;

                                            ;

              retfie                        ;выход из подпрограммы обработки прерывания

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основная программа                            

            

Start         clrf        PORTB             ;сброс регистра PORTB

              clrf        PORTA             ;сброс регистра PORTA

              

              movlw       b’00000111′       ;выключение компараторов

              movwf       CMCON

 

              bsf         STATUS,RP0        ;выбрать 1-й банк    

              movlw       b’11101111′       ;настройка линий ввода\вывода порта B    

              movwf       TRISB             ;RB4 на выход, остальные на вход

              bcf         STATUS,RP0        ;выбрать 0-й банк

          

              bcf         flag,0            ;сброс флага очередности

              clrf        tmp_off           ;сброс счетчика времени

 

              movlw       . 220              ;запись длительности (1,5 мс) управляющего импульса

              movwf       t1L               ;в регистры счета и промежуточные регистры

              comf        t1L,W             ;для установки сервопривода в среднее положение

              movwf       t1LL

 

              movlw       .5

              movwf       t1H

              comf        t1H,W

              movwf       t1HH

 

              movlw       b’00000000′       ;коэффициент предд. TMR1 1:1, внутренний  

              movwf       T1CON             ;тактовый сигнал Fosc

              

              clrf        TMR1L             ;сброс регистров тймера TMR1

              clrf        TMR1H

 

              bsf         INTCON,PEIE       ;разрешение прерываний периферийных модулей

              bcf         PIR1,TMR1IF       ;сброс флага прерываний по переполнению TMR1

              bsf         STATUS,RP0        ;выбрать 1-й банк

              bsf         PIE1,TMR1IE       ;разрешение прерываний по переполнению TMR1

              bcf         STATUS,RP0        ;выбрать 0-й банк            

              bsf         T1CON,TMR1ON      ;запуск таймера TMR1

              bsf         INTCON,GIE        ;глобальное разрешение прерываний        

 

opros_knp     btfsc       knp_1             ;опрос кнопки 1

              goto        met_1             ;кнопка 1 не нажата: переход на метку met_1

              call        povorot_1         ;кнопка 1 нажата: вызов подпрограммы povorot_1

              call        pausknp           ;вызов подпрограммы паузы

met_1         btfsc       knp_2             ;опрос кнопки 2

              goto        opros_knp         ;кнопка 2 не нажата: переход на метку opros_knp

              call        povorot_2         ;кнопка 2 нажата: вызов подпрограммы povorot_2

              call        pausknp           ;вызов подпрограммы паузы

              goto        opros_knp         ;переход на метку opros_knp

              

povorot_1     movlw       . 2                ;проверка длительности управляющего импульса

              subwf       t1H,W             ;в регистрах счета

              btfss       STATUS,C          ;

              return                        ;длительность меньше 600 мкс, сервопривод в крайнем

                                            ;положении, выход из подпрограммы povorot_1

              btfss       STATUS,Z          ;

              goto        met_p11           ;длительность больше 600 мкс, переход на метку met_p11

              movlw       .88               ;

              subwf       t1L,W             ;

              btfss       STATUS,C          ;

              return                        ;длительность меньше 600 мкс, сервопривод в крайнем

                                            ;положении, выход из подпрограммы povorot_1

 

met_p11       movlw       .10               ;уменьшение длительности управляющего импульса

              subwf       t1L,F             ;на 10 мкс

              btfsc       STATUS,C          ;

              goto        met_p12           ;

              decf        t1H,F             ;

met_p12       call        perezap           ;вызов подпрограммы perezap

              return                        ;выход из подпрограммы povorot_1

 

povorot_2     movf        t1H,W             ;проверка длительности управляющего импульса

              sublw       . 9                ;в регистрах счета

              btfss       STATUS,C          ;

              return                        ;длительность больше 2,5 мс, сервопривод в крайнем

                                            ;положении, выход из подпрограммы povorot_2

              btfss       STATUS,Z          ;  

              goto        met_p21           ;длительность меньше 2,5 мс: переход на метку met_p21

              movf        t1L,W             ;

              sublw       .196              ;

              btfss       STATUS,C          ;

              return                        ;длительность больше 2,5 мс, сервопривод в крайнем

                                            ;положении, выход из подпрограммы povorot_2

 

met_p21       movlw       .10               ;увеличение длительности управляющего импульса

              addwf       t1L,F             ;на 10 мкс

              btfss       STATUS,C          ;

              goto        met_p22           ;

              incf        t1H,F             ;

met_p22       call        perezap           ;вызов подпрограммы perezap

              return                        ;выход из подпрограммы povorot_1

 

                                            ;

perezap       bsf         STATUS,RP0        ;выбрать 1-й банк

              bcf         PIE1,TMR1IE       ;запрещение прерываний по переполнению TMR1

              bcf         STATUS,RP0        ;выбрать 0-й банк

              comf        t1L,W             ;перезапись значений регистров счета в промежуточные

              movwf       t1LL              ;регистры

              comf        t1H,W             ;

              movwf       t1HH              ;

              clrf        tmp_off           ;сброс счетчика времени

              bsf         T1CON,TMR1ON      ;включение таймера TMR1

              bsf         STATUS,RP0        ;выбрать 1-й банк

              bsf         PIE1,TMR1IE       ;разрешение прерываний по переполнению TMR1

              bcf         STATUS,RP0        ;выбрать 0-й банк

              return                        ;;выход из подпрограммы perezap

 

pausknp       movlw       . 14               ;подпрограмма паузы 10,5 мс

              movwf       Sec1              ;

p3            movlw       .250              ;

              movwf       Sec               ;

p2            decfsz      Sec,F             ;

              goto        p2                ;

              decfsz      Sec1,F            ;

              goto        p3                ;

              return                        ;

                                            ;

              end                           ;

                                            ;

Простая схема управления сервоприводом на микроконтроллере PIC12F675

Главная » Микроконтроллеры » Простая схема управления сервоприводом на микроконтроллере PIC12F675

Сервоприводы идеально подходят для приложений, отличных от тех, для которых они предназначены, например, в качестве привода ригеля замка двери.

В таком нестандартном применении сервопривода, сложность составляет в формировании управляющего импульса необходимой продолжительности. Данная схема избавит нас от такой проблемы.

Принципиальная схема контроллера сервопривода показана на следующем рисунке. Схема содержит всего несколько элементов: диод VD1 (1N4007) защищает схему от обратного подключения напряжения питания, стабилизатор DA1 (7805) обеспечивает напряжение 5 В для сервомотора, а через фильтр R4 и C1 подается питание на микроконтроллер DD1 (PIC12F675).

Потенциометры R6 и R7, подключенные к АЦП микроконтроллера, используются в качестве делителя напряжения для установки двух значений напряжения, которые изменяют продолжительность управляющих импульсов сервопривода. Переключатель SA1 предназначен для перевода сервомотора в одно из двух положений.

Работой контроллера сервопривода управляет программа, содержащаяся в памяти микроконтроллера. Таймер микроконтроллера TIMER1 — это 16-разрядный счетчик, который задействован для генерации прерываний каждые 20 мсек, таким образом, устанавливается стандартная частота управляющих импульсов. Прерывание TIMER1 происходит, когда счетчик переполняется.

Как известно, положение сервопривода определяется длиной импульса. Длительность каждого импульса определяется с помощью TIMER0. Его запуск синхронизируется с прерыванием от TIMER1. Переполнение TIMER0 генерирует второе прерывание, которое завершает импульс и останавливает счетчик.

Время переполнения TIMER0 и, следовательно, длительность импульса определяется начальным значением счетчика, которое пропорционально результату преобразования АЦП. Таким образом, изменение напряжения в диапазоне 0…5 В на входе АЦП приводит к изменению длительности импульса в диапазоне 0,5…2,5 мсек.

Кроме того, состояние SA1 определяет, какой потенциометр (R6 или R7) будет определять напряжение на входе АЦП. Благодаря этому сервопривод может управляться либо через SA1, либо в полном объеме путем изменения положения потенциометров.

Схема проверена в Proteus:

Тестер транзисторов / ESR-метр / генератор

Многофункциональный прибор для проверки транзисторов, диодов, тиристоров. ..

Подробнее

Устройство собрано на печатной плате, схема монтажа которой показана ниже. Следует обратить внимание на то, что R1…R5 — SMD резисторы, которые установлены на другой стороне платы.

Скачать рисунок печатной платы, прошивку, модель Proteus (38,1 KiB, скачано: 1 650)

Блок питания 0…30В/3A

Набор для сборки регулируемого блока питания…

Подробнее




Categories Микроконтроллеры Tags PIC12f675, Сервопривод

Отправить сообщение об ошибке.

Микроконтроллер

. Можно ли перепрофилировать плату внутри сервопривода для управления внешним двигателем постоянного тока

спросил

Изменено 8 лет, 2 месяца назад

Просмотрено 2к раз

\$\начало группы\$

Платы контроллера двигателя обычно дорогие, L298 немного хлопотно для любителей, и оба занимают 2 вывода ввода-вывода на двигатель.

У меня возникла идея отрезать плату управления от внутри сервопривода, заменить потенциометр подстроечным потенциометром и припаять его к двигателю постоянного тока на месте на устройстве, которым я хочу управлять (учитывайте, что устройство будет трудно механически модифицировать для размещения сервопривода).

Здесь показано мое понимание устройства сервоприводов. vIn и Ground только подразумеваются. Сигнал сравнивается с сигналом от потенциометра (нормальное положение двигателя), и сгенерированный код ошибки используется для ШИМ, управляющего Н-мостом вокруг внутреннего двигателя. Я предлагаю вынуть внутренний двигатель и подключить туда внешний.

Предполагается, что вы будете использовать 1 контакт управления вводом-выводом для двунаправленного сервопривода и сервопривод с регулируемой скоростью, модифицированный для непрерывного вращения. В нем уже есть полевые транзисторы, необходимые для управления током двигателя. Затем вынесите управляемый двигатель за пределы корпуса сервопривода или замените его аналогичным двигателем.

Двигатели, о которых идет речь, представляют собой маленькие игрушечные двигатели, ничего большого или с большими нагрузками.

Звучит дешевле и проще в подключении, чем драйвер двигателя. Это сработает?

Вскрытие моего первого сервопривода, рабочий supertec, серводвигатель впаян в плату. Отпаять было бы возможно.

  • микроконтроллер
  • двигатель постоянного тока
  • сервопривод

\$\конечная группа\$

4

\$\начало группы\$

Сервоприводы обычно используют простой протокол, основанный на импульсах. Сервоплаты предназначены для создания этих шаблонов. Двигатели постоянного тока обычно приводятся в действие с помощью Н-моста (википедия), в котором используется (постоянный) управляемый ток. Так что технически возможно, но не очень практично использовать сервоплату для привода двигателя постоянного тока.

\$\конечная группа\$

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

Как управлять манипулятором без микроконтроллера?

Аналоговая электроника, Хобби, Проекты, Учебник

Педро Ней Строски / 11 ноября 2021 г.

Можно управлять манипулятором без микроконтроллера, используя простые электронные схемы. Этот пост показывает, как.

Электронная схема

Серводвигатель

Перед построением электронной схемы необходимо определить, какой серводвигатель будет использоваться на манипуляторе. Был выбран микросерво 9g SG90 башни Pro.

Техническое описание этого сервопривода доступно по этой ссылке.

Создание электронной схемы

Каждый серводвигатель может управляться схемой 555, которая генерирует сигнал прямоугольной формы и управляет длиной волны этого сигнала.

Эта схема очень похожа на показанную в посте о широтно-импульсной модуляции (ШИМ). В этом случае нет необходимости в BJT на выходе терминала 3.

Нажмите кнопку ниже, чтобы получить доступ к сообщению о широтно-импульсной модуляции.

ШИМ Нажмите здесь

Электронная плата, которая будет управлять 4 сервоприводами манипулятора.

Источник питания постоянного тока излучает сигналы помех, которые заставляют сервоприводы дрожать во время движения. Чтобы избежать этого, конденсаторы были поставлены параллельно клеммам питания (конденсатор Cp на схеме). Минимальное значение должно быть 220 мкФ. Я поставил 3 по 220 мкФ и 1 по 470 мкФ. Всего 4 конденсатора, т.к. используются 4 цепи, по одной на каждый серводвигатель.

Полный список:

  • 4 555 фишек.
  • 4 потенциометра 10 кОм.
  • 8 диодов 1N4148.
  • 4 резистора 1,5 кОм.
  • Провода.
  • 4 Электролитические конденсаторы 1 мкФ x 50 В.
  • 4 электролитических конденсатора 220 мкФ x 16 В.
  • Печатная плата 15 х 3,7 см.

Сборка манипулятора

Манипулятор изготовлен из акрила и имеет 4 степени свободы. В этом посте я пошагово покажу как его собрать.

Основание

Детали для сборки основания.

Сборка деталей.

Сервопривод должен быть помещен в прямоугольное пространство сверху, используя эту часть.

В дополнение к первым 4, в этом наборе есть еще 3 типа винтов.

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

Мобильный бокс

Каждый сервопривод SG90 поставляется с 3 винтами и 3 пластиковыми фланцами, как показано на рисунке ниже.

Деталь ниже — это основание мобильного ящика, которое должно быть связано с сервоприводом основания.

Для соединения фланца с акриловыми деталями необходимо использовать более длинные винты, поставляемые с сервоприводом.

Сборка одной из сторон.

Более короткий винт, поставляемый с SG90, служит для крепления фланца к валу серводвигателя.

Другая сторона не так уж отличается.

Сборка средней части.

Соединение частей мобильной коробки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *