В данной статье будет рассмотрено управление сервоприводом с логикой 5в с помощью микрокомпьютера Raspberry Pi с логикой 3.3в, с использованием преобразователя уровней.
Согласование логических уровней
Распространенной проблемой в электротехнике является совместимость устройств по значению напряжения логического сигнала. Многие внешние электронные устройства работают с логическим сигналом величиной от 5в до 7в. Т.е. логическая единица на входе или выходе у таких устройств имеет значение напряжения от 5в до 7в.
Правило 1. Если значение напряжения логического сигнала будет ниже указанного, устройство может работать неисправно или совсем не работать.
Микрокомпьютер Raspberry Pi включает в себя выходы (порты) GPIO для управления и опроса внешних устройств. Порты GPIO отправляют/принимают логический сигнал величиной не выше 3.3в.
Правило 2. Никогда не подключайте напрямую к логическим портам GPIO устройства, работающие с напряжением выше 3.3в. Если на логический порт GPIO придет напряжение выше 3.3в – это может навсегда уничтожить данный порт, а также остальные порты GPIO.
Схема подключения сервопривода к Raspberry Pi
Для управления устройствами с логикой выше 3.3в необходимо включать в электрическую схему преобразователь уровней. В данной статье использовался двунаправленный восьмиканальный преобразователь уровней (см. Рис. 1)
![](http://el-dev.com/ru/wp-content/uploads/2020/08/LevelShifter.jpg)
Сервопривод MG995 принимает управляющий сигнал величиной от 4.8в до 6.6в. Поэтому нам необходимо повысить логический уровень Raspberry Pi с 3.3в до подходящего значения.
К порту VCCA подключаем постоянное напряжение 3.3в, к порту GND подключаем землю от источника напряжения 3.3в. К порту VCCB подключаем постоянное напряжение 5в и землю от источника напряжения 5в. Логический уровень 3.3в от Raspberry Pi подключаем к порту A0. Преобразованный сигнал 5в получаем на выходе порта B0 соответственно.
Питание 3.3в для преобразователя уровней было взято от GPIO выхода 3.3в Raspberry Pi. Землю 3.3в также подключаем от Raspberry Pi к преобразователю. Питание 5в для преобразователя уровней было взято от внешнего источника питания (см. Рис. 2).
![](http://el-dev.com/ru/wp-content/uploads/2020/08/ConnectionLevelShifterScheme.jpg)
Управление сервоприводом
Для проверки работы сервопривода был написан небольшой Python скрипт. Для управления портами GPIO использовалась библиотека RPi.GPIO. Поворот сервопривода на заданный угол осуществляется за счет частотной модуляции (PWM) путем изменения значения DutyCycle у назначенного порта GPIO.
Python скрипт для теста работы сервопривода:
import RPi.GPIO as GPIO import time P_SERVO = 17 # adapt to your wiring fPWM = 50 # Hz (not higher with software PWM) a = 10 b = 2 def setup(): global pwm GPIO.setmode(GPIO.BCM) GPIO.setup(P_SERVO,GPIO.OUT) pwm = GPIO.PWM(P_SERVO,fPWM) pwm.start(0) def setDirection(direction): duty = float(direction)/(180/(10)) + 2.0 duty = round(duty, 2) pwm.ChangeDutyCycle(duty) print ("direction =", direction, "-> duty =", duty) time.sleep(2) # allow to settle print ("starting") setup() for direction in range(0, 120, 10): setDirection(direction) direction = 0 setDirection(0) GPIO.cleanup() print ("done")