Сигнал ШИМ — это сигнал, генерируемый широтно-импульсной модуляцией.
Короче говоря, ШИМ-модуляция используется для передачи информации по каналу связи или для управления количеством энергии, отправляемой на нагрузку. На этот раз мы займемся генерацией ШИМ на Python.
Серия статей «Основы Raspberry Pi»
- Введение в Raspberry Pi
- Установка системы на Raspberry Pi
- Программирование на scratch и python
- Командная консоль и основы Linux
- Контакты GPIO и их программирование
- Создание нового пользователя
- Конфигурация статического IP
- Удаленное подключение к Raspberry Pi
- Установка ОС Raspberry Pi Lite и связь через UART
- Использование камеры на Raspberry Pi
- ШИМ-сигнал в Python
Начнем с простого примера с использованием светодиода. Подключите светодиод через резистор 1 кОм к контакту № 12, как мы показывали ранее или как показано на схеме ниже:
Теперь мы откроем IDE для программирования на Python, например Thonny Python IDE, в которой откроем новый скетч и скопируем предлагаемый нами код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(12, GPIO.OUT) diodo = GPIO.PWM (12, 50) #Новый ШИМ duty = 0 # Рабочий цикл сигнала PWM diodo.start (duty) # Активирует сигнал ШИМ try: while True: duty+= 5 if duty > 100: duty = 0 diodo.ChangeDutyCycle(duty) #Установить новое значение time.sleep(0.05) except KeyboardInterrupt: print(‘Fin’) diodo.stop() GPIO.cleanup() |
Поясним немного каждую строчку. Как всегда, в самом начале нужно импортировать соответствующие библиотеки и запустить конфигурации, в нашем случае библиотеки выводов и времени GPIO и их конфигурации.
Когда мы хотим сгенерировать ШИМ-сигнал, мы должны начать с создания экземпляра, которому мы назначим информацию о выводе и частоте. Мы делаем это с помощью следующей команды:
GPIO.PWM
Помните, что все, что следует после ‘#’, является комментарием и не влияет на код. В нашем случае это строка:
diodo = GPIO.PWM (12, 50) #Новый ШИМ
Затем мы создаем переменную «заполнения» с именем duty, которая, как следует из ее названия, будет содержать информацию о текущем рабочем цикле сигнала ШИМ (значения от 0 до 100% без знака), это будет цикл сигнала. Короче говоря, процент, в котором сигнал находится в высоком состоянии, по отношению к общему количеству цикла. Мы инициализируем эту переменную в 0.
duty = 0 # Рабочий цикл сигнала PWM
Следующим шагом является запуск ШИМ, в качестве аргумента этой функции мы пишем ожидаемое завершение.
diodo.start (duty) # Активирует сигнал ШИМ
С этого момента сигнал ШИМ будет формироваться на выводе 12. Его рабочий цикл можно все время менять с помощью следующей инструкции:
diodo.ChangeDutyCycle(duty)
Итак, собрав воедино информацию из предыдущих статей, мы можем создать простую программу, которая будет менять ШИМ, совершив один цикл. На практике это будет означать мягкое освещение от светодиода.
Также есть time.sleep(0.05) который делает ожидание внутри цикла while, хоть и минимальное, но это всегда необходимо. В конце программы есть еще одна строка diodo.stop (), которая, наверное, не нуждается в пояснениях. Конечно, он отвечает за остановку «генератора» ШИМ на данном выводе. Во время работы программы мы также можем настроить частоту ШИМ. Для этого мы должны ввести следующую инструкцию: diodo.ChangeDutyCycle (XXX), где внутри скобок можно поставить число от 0 до 100.
Как мы видим, табуляция каждой строки важна, и она должна быть похожа на предыдущее изображение. Как только мы это сделаем, мы можем нажать Run.
Теперь, вы должны увидеть, как светодиод постепенно загорается до максимума, затем гаснет и процесс повторяется. Чтобы остановить программу, вы можете нажать CTRL+C или нажать кнопку «Стоп». Помните, что если светодиод продолжает гореть, то вы можете выключить его вручную с помощью командного терминала, используя команду: gpio -g записать 12 0.
На этом наша серия статей для новичков по работе с Raspberry Pi на Python окончена. Конечно, наши статьи пока еще немного сырые, но мы тоже как и вы еще учимся. Со временем, мы это исправим. И мы очень надеемся, что вы нам в этом поможете.
С Уважением, МониторБанк