Управление сервоприводом на микроконтроллере | 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, служит для крепления фланца к валу серводвигателя.
Другая сторона не так уж отличается.
Сборка средней части.
Соединение частей мобильной коробки.