Помогите чайнику разобраться-)
Имеем Ардуино Уно
Драйвер Step/Dir TB6560-V2.
Шаговый двигатель 200 шагов за оборот.
На данном этапе необходимо:
иметь возможность ПЛАВНО регулировать скорость вращения двигателя в диапазоне 100-350 оборотов в минуту с помощью потенциометра, с выводом значения на 7-сегментный LED индикатор.
Посоветуйте, пожалуйста, какие библиотеки использовать.
Плавная регулировка скорости вращения ШД с помощью потенциометра
Re: Плавная регулировка скорости вращения ШД с помощью потенциометра
Здравствуйте!
Можете попробовать использовать мои библиотеки.
1. Из урока 35 загрузить в Ардуино скетч программы драйвера ШД с управлением AT командами, и с помощью программы верхнего уровня (из того же урока) проверить работу драйвера, самого двигателя, диапазон регулировки скорости, крутящий момент двигателя и т.п. Таким образом вы сможете полностью проверить работу вашей системы, как электронику, так и механику. Только регулировка будет не от потенциометра, а с компьютера.
2. Если все устраивает, тогда начинаете писать программу. Пишите простейший вариант, который просто вращает двигатель с постоянной скоростью.
3. К этому скелету программы начинаете добавлять все остальное. Подключаете потенциометр и считываете его значение. Я бы настоятельно советовал это значение усреднить. Об этом написано в уроке 13.
4. Масштабируете значение потенциометра в необходимый вам диапазон для скорости вращения (setDivider). Рабочий диапазон определяете на пером этапе.
5. Загружаете масштабируемое значение в setDivider. Теперь вы можете регулировать скорость вращения двигателя от потенциометра.
6. Остается добавить индикацию. читаете урок 20, добавляете библиотеку, выводите на индикатор значение setDivider. Проверяете.
7. Переводите значение setDivider в нужный вам формат, например число оборотов в минуту.
Я вижу это как-то так.
Можете попробовать использовать мои библиотеки.
- Для STEP/DIR драйвера библиотека StepDirDriver (урок 35).
Для управления LED индикатором библиотека Led4Digits (урок 20).
1. Из урока 35 загрузить в Ардуино скетч программы драйвера ШД с управлением AT командами, и с помощью программы верхнего уровня (из того же урока) проверить работу драйвера, самого двигателя, диапазон регулировки скорости, крутящий момент двигателя и т.п. Таким образом вы сможете полностью проверить работу вашей системы, как электронику, так и механику. Только регулировка будет не от потенциометра, а с компьютера.
2. Если все устраивает, тогда начинаете писать программу. Пишите простейший вариант, который просто вращает двигатель с постоянной скоростью.
Код: Выделить всё
#include <TimerOne.h>
#include <StepDirDriver.h>
StepDirDriver myMotor(10, 11, 12); // создаем объект типа StepDirDriver, задаем выводы для сигналов
void setup() {
Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
myMotor.setMode(0, false); // шаговый режим, без фиксации при остановке
myMotor.setDivider(10); // делитель частоты 10 (1 оборот в сек)
}
void loop() {
myMotor.step(100);
}
//-------------------------------------- обработчик прерывания 0,25 мс
void timerInterrupt() {
myMotor.control(); // управление двигателем
}
3. К этому скелету программы начинаете добавлять все остальное. Подключаете потенциометр и считываете его значение. Я бы настоятельно советовал это значение усреднить. Об этом написано в уроке 13.
4. Масштабируете значение потенциометра в необходимый вам диапазон для скорости вращения (setDivider). Рабочий диапазон определяете на пером этапе.
5. Загружаете масштабируемое значение в setDivider. Теперь вы можете регулировать скорость вращения двигателя от потенциометра.
6. Остается добавить индикацию. читаете урок 20, добавляете библиотеку, выводите на индикатор значение setDivider. Проверяете.
7. Переводите значение setDivider в нужный вам формат, например число оборотов в минуту.
Я вижу это как-то так.
Re: Плавная регулировка скорости вращения ШД с помощью потенциометра
День добрый. По этой теме у меня получился скетч ( на базе уроков Эдуарда);
Код: Выделить всё
/* Здесь попытка управлять скоростью вращения ШД потенциометром
* Функция map(value, fromLow, fromHigh, toLow, toHigh)
Функция пропорционально переносит значение (value) из текущего диапазона зна-
чений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный пара-
метрами.
Функция map() не ограничивает значение рамками диапазона, как это делает функ-
ция constrain(). Функция contsrain() может быть использована до или после вы-
зова map(), если необходимо ограничить допустимые значения заданным диапазо-
ном.
Обратите внимание, что "нижняя граница" может быть как меньше, так и больше
"верхней границы". Это может быть использовано, чтобы "перевернуть" диапазон:
y = map(x, 1, 50, 50, 1);
Возможно использование отрицательных значений:
y = map(x, 1, 50, 50, -100);
Функция map() оперирует целыми числами. При пропорциональном переносе
дробная часть не округляется по правилам, а просто отбрасывается.
Параметры:
value — значение для переноса;
fromLow — нижняя граница текущего диапазона;
fromHigh — верхняя граница текущего диапазона;
toLow — нижняя граница нового диапазона, в который переносится значение;
toHigh — верхняя граница нового диапазона.
Возвращаемое значение — значение в новом диапазоне
*/
#include <TimerOne.h>
#include <StepDirDriver.h>
StepDirDriver myMotor(10, 11, 12); // создаем объект типа StepDirDriver, задаем выводы для сигналов
// Step,Dir, Enable
int potPin= A0; // потенциометр
int inputCod; // код входного напряжения на A0
void setup() {
Serial.begin(9600);
//pinMode(A0, INPUT);установка режима аналогового входа для A0
Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
myMotor.setMode(0, false); // шаговый режим, без фиксации при остановке
myMotor.setDivider(10); // делитель частоты 10 (1 оборот в сек)
}
void loop() {
int inputCod = analogRead(A0); // чтение напряжения на входе A0
inputCod = map(inputCod, 0,1023, 5, 15);
Serial.println(inputCod); // смотрим в мониторе порта цифры делителя
myMotor.step(2000);
myMotor.setDivider(inputCod);
}
//-------------------------------------- обработчик прерывания 0,25 мс
void timerInterrupt() {
myMotor.control(); // управление двигателем
}
- RuslanHoock
- Сообщения: 1
- Зарегистрирован: 07 авг 2017, 23:17
-
МужЫки, подскажите, существует ли софтина при помощи которой можно регулировать вентиляторы на проце и блоке питания - у меня там стоит управляемый вентилятор?
Вернуться в «Шаговые двигатели и драйверы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей