Home / Posts / Электроника / Управление сервоприводом на Arduino и принцип работы /


Управление сервоприводом на Arduino и принцип работы



Сервопривод - это устройство точной кинематики, включающее в себя мотор, редуктор и потенциометр для определения угла поворота вала и для поддержания его постоянного значения.

Выглядит он примерно так:

 

 

К зубчатому валу могут прикрепляться специальные "качалки" для передачи момента другим деталям. Угол поворота может быть разным - 60, 180 градусов. Есть многооборотные сервоприводы.

 

Работает он следующим образом:

На управляющий вход подаются импульсы с длительностью t, от которой зависит угол поворота вала. Эти импульсы идут через равные промежутки времени, обычно 20 ms - так рекомендовано производителями. 

 

Параметр t, в свою очередь, может принимать значения от минимального до максимального, а последние могут различаться в зависимости от модели сервопривода.

К примеру, минимальное может быть 0.8 ms что соответствует 0 градусов, а максимальное 2.3 ms - 180 градусов.

 

Сама же логика работы такова: входящий импульс запускает одновибратор, который выдает импульс, длительность которого зависит от угла поворота вала (который определяется встроенным потенциометром). Затем длительности этих импульсов сравниваются.

Если разность длительностей положительна, то на мотор подается, допустим, прямая полярность. Если отрицательная - то наоборот.

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

 

В зависимости от проекта, сервопривод можно подключить к Arduino или к отдельному микроконтроллеру.

Рассмотрим подключение к Arduino.

В примере ниже (который есть в библиотеке) все крайне просто.

Угол задается командой myservo.write(pos) непосредственно в градусах.

Инициализация происходит командой  myservo.attach(9), где 9 - номер пина к которому подключен сервопривод.

 

#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

 

Для более точных результатов можно запускать инициализацию с тремя параметрами

myServo.attach(Pin, min, max);

 

Где pin - номер пина, а min и max - значения минимальной и максимальной длительности в микросекундах (которые для каждой сервомашинки подбираются опытным путем). 

В таком случае длительность импульсов можно задавать непосредственно командой

myServo.writeMicroseconds(t);

 

 

 

В BASCOM-AVR тоже есть специальная библиотека.

Иниациализируемся командой 

Config Servos = 1 , Servo1 = Portb.0 , Reload = 20 , Timer = Timer0

где задается соответственно количество сервоприводов, пин, reload и таймер, выделяемый под наши нужды.

Угол задается командой Servo(1) = F

 

$regfile = "m8def.dat" 
$crystal = 8000000
Config Servos = 1 , Servo1 = Portb.0 , Reload = 20 , Timer = Timer0
Enable Interrupts
Enable Timer0
Dim max As Byte
Dim min As Byte
min = 60
max = 250
F = 150
Do
Servo(1) = F
Loop
End

 

 

 

 


,






Еще статьи по теме


Arduino клиент, чтение RSS и API, парсинг статистики
Arduino и Ethernet shield, подключение к интернету
Поворотное устройство для веб камеры из сервоприводов




Свежие статьи


Часы на газоразрядных индикаторах ИН-8
Инфракрасный барьер своими руками
Светодиодное освещение - продолжение эволюции
Часы на газоразрядных индикаторах ИН-12 (Nixie Clock)
Светодиодное освещение своими руками



Главная



Комментарии (0)











Мужской Проект

Подписка


Поиск