Приведение в действие Hobbywing Skywalker 50A-UBEC ESC с Arduino CNC Shield
Мне нужно управлять бесщеточным двигателем, подключенным к этому ESC, используя Arduino CNC Shield V3.00 и Grbl 0.9 j.
Я подключил черный провод ESC к GND от экрана, а белый провод ESC-к Z+ пределу экрана (конечному упору).
Затем я проверил, подключив все, но оставив ESC без питания, отправив несколько команд M3 S*
, где 0 <= * <= 1000
, а затем включив ESC, но ничего не произошло.
@GuiRitter, 👍0
Обсуждение1 ответ
После долгих исследований я выяснил, что выходная частота вращения шпинделя является ШИМ-сигналом, в то время как ESC нуждается в сигнале PPM для управления. Несмотря на это, это специфический сигнал PPM, который на самом деле выглядит как ШИМ, поэтому его можно использовать.
Проблема в том, что вместо того, чтобы управляться рабочим циклом, на самом деле им управляет количество времени, в течение которого каждый импульс остается на высоком уровне, которое зависит от периода, обратного частоте. Короче говоря, частота слишком высока.
Мне удалось изменить частоту, используемую grbl, и найти ту, которая работает. Я не знаю, позволяет ли эта частота управлять всем диапазоном дроссельной заслонки, но для моего приложения, которое не требует очень строгих оборотов в минуту, этого было достаточно. Вот шаги (некоторые шаги уже объяснены в другом месте):
- Импортируйте библиотеку grbl в Arduino IDE.
- Узнайте, где была установлена библиотека, и отредактируйте
grbl/spindle_control.c
, строки 89 и 94. - Измените
0x02
на0x05
. Сохраните и закройте файл. - Скомпилируйте и загрузите библиотеку в Arduino Uno.
- Подключите все, но оставьте ESC без питания.
- Отправьте
M3 S0
(это ноль). - Включите ESC.
- Вы должны услышать 123 сигнала (три звуковых сигнала разной частоты). Затем он будет продолжать время от времени подавать звуковой сигнал — я понятия не имею, почему... Через несколько минут все должно было прекратиться.
- Отправьте
S600
. Он должен начать вращаться. Если это не так, сначала отправьте более низкие значения от 0 до 600. - Отправьте
S500
на остановку.
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- ПИД-регулятор для управления скоростью двигателя
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Синусоидальный инвертор
очень интересный пост, но, к сожалению, работает только для ATMEGA2560: справочная строка: #ifdef CPU_MAP_ATMEGA2560 любое предложение сделать это возможным также для чипа ATMEGA328? это было бы очень полезно для большинства владельцев Arduino UNO+GRBL Shield. ТКС, @Riccardo