Як надіслати сигнали ШІМ на ESC за допомогою Raspberry Pi 4B для керування підводними двигунами?
Опубліковано Fengyukun
Використовується ESC: APISQUEEN 24V 100A ESC
Інструкція з експлуатації 100A ESC: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535
1: Розблокуйте ESC
Нейтральний сигнал зупинки є його сигналом розблокування
Використовуйте сигнал 50 Гц з періодом сигналу 20 мс.
Відсоток у посібнику стосується відсотка ширини імпульсу керування ШІМ, а не фактичного робочого циклу сигналу ШІМ (тут легко зрозуміти помилки).
Тоді нейтральний сигнал зупинки:
75% робочий цикл, 7,5% фактичний робочий цикл: 1,5 мс (між 1,475 мс і 1,525 мс);
імпортні свині
Час імпорту
pi = pigpio.pi() #Створити об'єкт pigpio
LED_PIN = 18 #Визначте порт GPIO, до якого підключено світлодіод
PWM_FREQUENCY = 50 #Визначити частоту ШІМ (одиниця: Гц)
ШІМ_діапазон = 1000
PWM_DUTYCYCLE = 0 #Визначити робочий цикл ШІМ, діапазон значень 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Установити порт GPIO у режим виведення
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #Установити частоту ШІМ
pi.set_PWM_range(LED_PIN, PWM_range) #Установити діапазон 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Установити робочий цикл ШІМ 75/1000=7,5%
time.sleep(3) #Затримайте 3 секунди для успішного розблокування
2. Контроль ESC
Робочий цикл 75%: фактичний робочий цикл 7,5%-1,5 мс (між 1,475 мс-1,525 мс) зупинки;
Робочий цикл 50%-75%: фактичний робочий цикл 5%-7,5%, 1 мс-1,5 мс у зворотному напрямку;
Робочий цикл 100%: фактичний робочий цикл 7,5%-10% 1,5-2 мс вперед
pi.set_PWM_dutycycle(LED_PIN, 100)
#Вперед: 7,5%-10% Чим вищий робочий цикл, тим вище швидкість руху вперед.
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
#Реверс: чим ближче робочий цикл до 5%, тим вищою буде швидкість реверсу
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Робочий цикл
time.sleep(5)
3. Налагодження
Під час процесу налагодження ви можете використовувати осцилограф, щоб перевірити, чи правильна форма сигналу:
Наприклад, на зображенні нижче показано, що амплітуда ШІМ-сигналу становить 3,3 В, період — 20 мс, а фактичний робочий цикл — 7,5 %.
Але я все одно не міг розблокувати ESC, оскільки у формі сигналу було занадто багато шуму та перешкод.
Спочатку я використовував бібліотеку RPi.GPIO, але пізніше перейшов на бібліотеку pigpio для надсилання апаратних сигналів ШІМ, і проблема була вирішена.
4. Зразок коду:
імпортні свині
час імпорту
pi = pigpio.pi() #Створити об'єкт pigpio
LED_PIN = 18 # Визначте порт GPIO, до якого підключено світлодіод.
PWM_FREQUENCY = 50 #Визначити частоту ШІМ у Гц
ШІМ_діапазон = 1000
PWM_DUTYCYCLE = 0 #Визначити робочий цикл ШІМ, діапазон значень 0(2)55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Установити порт GPIO у режим виведення
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #Установити частоту ШІМ
pi.set_PWM_range(LED_PIN, PWM_range) #Установити діапазон 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Установити робочий цикл ШІМ 75/1000=7,5%
time.sleep(3) #Delay 3s для успішного розблокування
pi.set_PWM_dutycycle(LED_PIN, 100)
#Обертання вперед 7,5%-10% робочого циклу, чим більше робочий цикл, тим швидше швидкість обертання вперед
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
# Реверс Чим ближче робочий цикл до 5%, тим вищою буде швидкість реверсу
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Робочий цикл
time.sleep(5)
Інструкція з експлуатації 100A ESC: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535
1: Розблокуйте ESC
Нейтральний сигнал зупинки є його сигналом розблокування
Використовуйте сигнал 50 Гц з періодом сигналу 20 мс.
Відсоток у посібнику стосується відсотка ширини імпульсу керування ШІМ, а не фактичного робочого циклу сигналу ШІМ (тут легко зрозуміти помилки).
Тоді нейтральний сигнал зупинки:
75% робочий цикл, 7,5% фактичний робочий цикл: 1,5 мс (між 1,475 мс і 1,525 мс);
імпортні свині
Час імпорту
pi = pigpio.pi() #Створити об'єкт pigpio
LED_PIN = 18 #Визначте порт GPIO, до якого підключено світлодіод
PWM_FREQUENCY = 50 #Визначити частоту ШІМ (одиниця: Гц)
ШІМ_діапазон = 1000
PWM_DUTYCYCLE = 0 #Визначити робочий цикл ШІМ, діапазон значень 0 (2) 55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Установити порт GPIO у режим виведення
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #Установити частоту ШІМ
pi.set_PWM_range(LED_PIN, PWM_range) #Установити діапазон 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Установити робочий цикл ШІМ 75/1000=7,5%
time.sleep(3) #Затримайте 3 секунди для успішного розблокування
2. Контроль ESC
Робочий цикл 75%: фактичний робочий цикл 7,5%-1,5 мс (між 1,475 мс-1,525 мс) зупинки;
Робочий цикл 50%-75%: фактичний робочий цикл 5%-7,5%, 1 мс-1,5 мс у зворотному напрямку;
Робочий цикл 100%: фактичний робочий цикл 7,5%-10% 1,5-2 мс вперед
pi.set_PWM_dutycycle(LED_PIN, 100)
#Вперед: 7,5%-10% Чим вищий робочий цикл, тим вище швидкість руху вперед.
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
#Реверс: чим ближче робочий цикл до 5%, тим вищою буде швидкість реверсу
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Робочий цикл
time.sleep(5)
3. Налагодження
Під час процесу налагодження ви можете використовувати осцилограф, щоб перевірити, чи правильна форма сигналу:
Наприклад, на зображенні нижче показано, що амплітуда ШІМ-сигналу становить 3,3 В, період — 20 мс, а фактичний робочий цикл — 7,5 %.
Але я все одно не міг розблокувати ESC, оскільки у формі сигналу було занадто багато шуму та перешкод.
Спочатку я використовував бібліотеку RPi.GPIO, але пізніше перейшов на бібліотеку pigpio для надсилання апаратних сигналів ШІМ, і проблема була вирішена.
4. Зразок коду:
імпортні свині
час імпорту
pi = pigpio.pi() #Створити об'єкт pigpio
LED_PIN = 18 # Визначте порт GPIO, до якого підключено світлодіод.
PWM_FREQUENCY = 50 #Визначити частоту ШІМ у Гц
ШІМ_діапазон = 1000
PWM_DUTYCYCLE = 0 #Визначити робочий цикл ШІМ, діапазон значень 0(2)55,
pi.set_mode(LED_PIN, pigpio.OUTPUT) #Установити порт GPIO у режим виведення
pi.set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #Установити частоту ШІМ
pi.set_PWM_range(LED_PIN, PWM_range) #Установити діапазон 1000
pi.set_PWM_dutycycle(LED_PIN, 75) #Установити робочий цикл ШІМ 75/1000=7,5%
time.sleep(3) #Delay 3s для успішного розблокування
pi.set_PWM_dutycycle(LED_PIN, 100)
#Обертання вперед 7,5%-10% робочого циклу, чим більше робочий цикл, тим швидше швидкість обертання вперед
time.sleep(15)
pi.set_PWM_dutycycle(LED_PIN, 60)
# Реверс Чим ближче робочий цикл до 5%, тим вищою буде швидкість реверсу
time.sleep(5)
pi.set_PWM_dutycycle(LED_PIN, 75)
#Робочий цикл
time.sleep(5)
Поділіться цією публікацією
- 0 коментарів
- Мітка: ESC
← Старіший пост нові публікації →