Занятие 6. Широтно-импульсная модуляция—анятие-6... ·...

9
Занятие 6. Широтно-импульсная модуляция 1. Управление уровнем напряжения Как нам уже известно, микроконтроллер умеет работать исключительно с цифровыми данными. Он легко может выполнять арифметические операции над ними, принимать и передавать цифровые данные. Например, мы можем запросто зажечь светодиод, подав на него положительный сигнал, равный напряжению питания контроллера. Для того чтобы погасить светодиод просто отключим его от питания. Получается, для управления мы используем только ноль или единицу, что и называется цифровым управлением. Но что делать, если нам нужно зажечь этот самый светодиод только на половину яркости? Или запустить двигатель, на 30% его мощности? Для того чтобы это сделать, нам потребуется преобразовать цифровой сигнал в некое подобие аналогового сигнала с заданным уровнем напряжения. Для этой цели можно использовать специальное устройство, называемое цифроаналоговым преобразователем (ЦАП, DAC). О его брате “аналогоцифровом преобразователе” мы говорили на прошлом занятии. ЦАП умеет генерировать нужный уровень напряжения, который задается микроконтроллером в цифровом виде. Однако, такой способ слишком избыточный для большинства задач робототехники. Кроме того, если потребуется управлять мощным двигателем, придется использовать очень дорогой ЦАП. Другой способ генерации сигнала с заданным уровнем напряжения называется широтноимпульсной модуляцией (ШИМ, PWM). Этот способ позволяет обойтись чисто цифровыми устройствами, что значительно упрощает схему и тем самым значительно удешевляет процесс создания робота. Проще всего такой подход можно описать при помощи обычного маховика. Представим, что некий маховик подключен к двигателю. Если мы включим двигатель на целый час, то маховик раскрутится до максимальновозможной скорости, которую будет поддерживать пока двигатель не выключится. После того, как мы выключим двигатель маховик некоторое время еще будет вращаться по инерции, а затем остановится. Но что, если если в течениии этого часа, мы будем ненадолго включать двигатель каждые 10 минут? Очевидно, что маховик станет вращаться не на полной скорости. И чем реже мы будем включать двигатель, тем медленнее будет скорость маховика. Аналогично, если оставить момент включения двигателя неизменным, а менять лишь время его работы, то скорость маховика также будет уменьшаться. Таким образом, имея возможность включать и выключать двигатель, и варьировать период и длительность его включения, мы можем плавно управлять маховиком. Подобным образом устроен и ШИМ. В отличие от случая с маховиком, здесь мы манипулируем напряжением на конкретном выводе микроконтроллера. Причем, для работы со светодиодом нам потребуется очень часто выключать и включать ток в цепи около 100 тысяч раз в секунду. Ведь светодиод не имеет такой инерции как маховик, как только мы его отключим он сразу перестает излучать свет.

Upload: others

Post on 21-Aug-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Занятие 6. Широтно-импульсная модуляция

1. Управление уровнем напряжения

Как нам уже известно, микроконтроллер умеет работать исключительно с цифровыми данными. Онлегко может выполнять арифметические операции над ними, принимать и передавать цифровыеданные. Например, мы можем запросто зажечь светодиод, подав на него положительный сигнал,равный напряжению питания контроллера. Для того чтобы погасить светодиод ­ просто отключим его отпитания. Получается, для управления мы используем только ноль или единицу, что и называетсяцифровым управлением.

Но что делать, если нам нужно зажечь этот самый светодиод только на половину яркости? Илизапустить двигатель, на 30% его мощности? Для того чтобы это сделать, нам потребуетсяпреобразовать цифровой сигнал в некое подобие аналогового сигнала с заданным уровнем напряжения.

Для этой цели можно использовать специальное устройство, называемое цифро­аналоговымпреобразователем (ЦАП, DAC). О его брате “аналого­цифровом преобразователе” мы говорили напрошлом занятии. ЦАП умеет генерировать нужный уровень напряжения, который задаетсямикроконтроллером в цифровом виде. Однако, такой способ слишком избыточный для большинствазадач робототехники. Кроме того, если потребуется управлять мощным двигателем, придетсяиспользовать очень дорогой ЦАП.

Другой способ генерации сигнала с заданным уровнем напряжения называется широтно­импульсноймодуляцией (ШИМ, PWM). Этот способ позволяет обойтись чисто цифровыми устройствами, чтозначительно упрощает схему и тем самым значительно удешевляет процесс создания робота.

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

Но что, если если в течениии этого часа, мы будем ненадолго включать двигатель каждые 10 минут?Очевидно, что маховик станет вращаться не на полной скорости. И чем реже мы будем включатьдвигатель, тем медленнее будет скорость маховика. Аналогично, если оставить момент включениядвигателя неизменным, а менять лишь время его работы, то скорость маховика также будетуменьшаться.

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

Подобным образом устроен и ШИМ. В отличие от случая с маховиком, здесь мы манипулируемнапряжением на конкретном выводе микроконтроллера. Причем, для работы со светодиодом нампотребуется очень часто выключать и включать ток в цепи ­ около 100 тысяч раз в секунду. Ведьсветодиод не имеет такой инерции как маховик, как только мы его отключим ­ он сразу перестаетизлучать свет.

Page 2: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Итак, Будем передавать на наш светодиод сигнал в виде последовательности импульсов с частотой100 килогерц. Выглядят эти импульсные сигналы следующим образом.

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

2. Регулятор хода двигателей

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

Нам известно, что микроконтроллер ­ это очень “чуткое” и “нежное”устройство. Оно оперирует малыми токами и напряжениями. Так,большинство современных микроконтроллеров, и ЭВМ вообще,работают с напряжением 3.3 Вольт, либо 5.5 Вольт. При этом, сила токациркулирующая в типичных микросхемах не превышает 30­40миллиампер.

Page 3: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Что же делать, если нам нужно с помощью микроконтроллера управлять мощными двигателями робота?Ведь двигателям, порой, требуется непряжение 14 Вольт и сила тока до десятков ампер! Такаянагрузка непременно уничтожит любой микроконтроолер за доли секунды.

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

GND ­ земля;VIN ­ напряжение питания двигателей 2.7­10.8В;AIN1, AIN2 ­ управлением каналом 1 (к контроллеру);BIN1, BIN2 ­ управлением каналом 2 (к контроллеру);AOUT1, AOUT2 ­ выходы канала 1 (к двигателю);BOUT1, BOUT2 ­ выходы канала 2 (к двигателю);AISEN, BISEN ­ настройка ограничителя тока (не подключаем);nSLEEP ­ переключение в режим сна (активный низкий, не подключаем);nFAULT ­ сигнал ошибки (не подключаем).

Два вывода для управления каждый каналом нужны для того, чтобы задавать направление вращениядвигателя. Например, если на вывод AOUT1 передавать шим­сигнал, а на AOUT2 ­ ноль (то естьсоединить с землей), то двигатель будет вращаться в одном направлении. Передавая шим на AOUT2, аноль на AOUT1 мы изменим направление вращения двигателя.

Page 4: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

3. Лабораторные работы

3.1. Управление яркостью светодиода

Результат работыЧерез секунду после запуска программы, светодиод должен зажечься с 20% яркости. Еще черезсекунду ­ с 40%. И так далее, до 100% яркости.

Используемые компоненты:

Светодиод ­ 1шт Резистор 200Ом ­1шт

Схема установки

Page 5: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Управляющая программа

from RPi import GPIOfrom time import sleep

from pizypwm import *

GPIO.setmode(GPIO.BCM)

ledPin = 17led_pwm = PiZyPwm(100, ledPin, GPIO.BCM) # настройка ШИМ для 17­го выводаled_pwm.start(100) # запуск цикл ШИМ с начальным значением скважности 100%

for power in range(100,­1,­20): # перебор в списке [100, 80, 60, 40, 20, 0] led_pwm.changeDutyCycle(power) # смена скважности ШИМ sleep(1)

led_pwm.stop() # остановка цикла ШИМGPIO.cleanup()

3.2. Управление яркостью светодиода при помощи потенциометра

Результат работыПри вращении ручки потенциометра, соответствующим образом меняется яркость светодиода.

Используемые компоненты:

Светодиод ­ 1шт Резистор 200Ом ­1шт

АЦП MCP3008 ­ 1шт Потенциометр 47КОм­ 1шт

Page 6: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Схема установки

Управляющая программа

from RPi import GPIOfrom MCP3008 import ADCfrom time import sleep

from pizypwm import *

GPIO.setmode(GPIO.BCM)

ledPin = 17

Page 7: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

led_pwm = PiZyPwm(100, ledPin, GPIO.BCM)led_pwm.start(100)

adc = ADC( pin_clk=7, pin_cs=24, pin_miso=8, pin_mosi=25 )

try: while True: raw_pot = adc.read(0) # считываем показания с нулевого канала АЦП power = raw_pot*100/1024 # нормируем значение АЦП в диапазон от 0 до 100 led_pwm.changeDutyCycle(power) sleep(0.1)

except KeyboardInterrupt: pass

led_pwm.stop()GPIO.cleanup()

3.3. Управление двигателем постоянного тока

Результат работыПосле запуска программы, двигатель должен постепенно увеличивать скорость вращения шпинделя. На20% каждую секунду. Затем остановиться.

Используемые компоненты:

Регулятор ходадвигателя ­ 1шт

Двигатель ­ 1шт

Page 8: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

Схема установки

Программа

from RPi import GPIOfrom time import sleep

from pizypwm import *

GPIO.setmode(GPIO.BCM)

motPin1 = 11

Page 9: Занятие 6. Широтно-импульсная модуляция—анятие-6... · Занятие 6. Широтно-импульсная модуляция 1. Управление

motPin2 = 9mot1_pwm = PiZyPwm(100, motPin1, GPIO.BCM)mot2_pwm = PiZyPwm(100, motPin2, GPIO.BCM)mot1_pwm.start(0)mot2_pwm.start(0)

for power in range(0,100,20): mot1_pwm.changeDutyCycle(power) sleep(1)

mot1_pwm.stop()mot2_pwm.stop()

GPIO.cleanup()

3.4. Дополнительные задания

1) Плавное управлением светодиодомПосле запуска программы, светодиод плавно рагорается до 100% яркости, затем угасает до 20%, послечего цикл повторяется.

2) Управление мощностью двигателя с помощью потенциометраВращение ручки потенциометра приводит к пропорциональному изменению скорости двигателя.