Максимально медленный ШИМ

svorog
Offline
Зарегистрирован: 27.04.2017

Всем доброго времени суток! в проектe использую управление шаговым двигателем с помощью arduino leonardo,  при включении начинает крутить двигатель с помощью  analogWrite задаю минимальный шим, но при этом все равно получаю слишком большую скорость оборотов двигателя необходимо уменьшить как минимум в трое.

int ledPin = 9;    
 
void setup()
{
    pinMode(ledPin, OUTPUT);      
}
 
void loop()
{
    
    analogWrite(ledPin, 1); 
}

Не подскажите как можно ещё замедлить ШИМ? может можно какое то прерывание поставить что бы работал 400 мс а 600 мс простаивал?

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

в этой ветке есть тема называется она блинк без делай и без милс там описано как делать шим с частотой 0. сколько то там герц, и вроде как есть библиотека пвм

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

svorog, шаговым двигателем при помощи ШИМ не управляют. От слова совсем.

ШИМ может использоваться для управления коллекторным двигателем. И, кроме того, частота ШИМ не играет роли.

Похоже, Вы чего-то не понимаете, поэтому задаете совсем не тот вопрос, ответ на который Вам нужен. Либо делаете что-то совсем неправильно, поэтому не можете получить желаемого.

Опишите подробно, что хотите получить и приведите схему.

Если двигатель действительно шаговый, возможно Вам нужна tone(), а не analogWrite().

svorog
Offline
Зарегистрирован: 27.04.2017

Двигатель действительно шаговый, управляю им конечно не на прямую а через драйвер, которому для управления нужен ШИМ, чем слабее ШИМ тем медленнее обороты

nevkon
Offline
Зарегистрирован: 20.01.2015

Похоже вы неправильно понимаете как работает драйвер ШД. Судя по всему у вас драйвер с управлением степ-дир. Так вот для продвижения на один шаг нужно подать один раз высокий-низкий уровень сигнала на степ. Можно даже так:

в loop
digitalWrite(10, HIGH);
delay(10);
digitalWrite(10, LOW);
delay(10);

И ШД будет делать по 50 шагов в секунду. 10 пин на степ. И даже будет работать. Вы ведь не описали какая задача у вас стоит.

svorog
Offline
Зарегистрирован: 27.04.2017

Спасибо, работает! прада не так плавно к analogWrite, на зато можно регулировать в более медленном диапазоне

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Все-таки попытайитесь tone() в диапазоне 50-200.

 

PS. И еще: не используйте термины, значения которых не понимаете. ШИМ - это Широтно Импульсная Модуляция. К Вашей задаче никакого отношения не имеет.

nevkon
Offline
Зарегистрирован: 20.01.2015

Для плавности хода у вашего драйвера скорее всего есть настройка деления шага. В случае если будете играться с этим параметром стоит учесть что количество шагов на оборот для контроллера стоит увеличивать в количество дробления, например у вас ШД с 200 шагов на оборот, вы ставите делитель на 1/4, получаем что контроллер должен сделать 800 тиков на оборот. Это я к тому что надо будет уменьшать задержку для получения тех же оборотов что и прежде, иначе ШД будет вращать вал медленнее.

svorog
Offline
Зарегистрирован: 27.04.2017

 с delay(3)  при 1/16 шага получаю приблительно ту скорость которую хотел, просто двигатель как то то жестковато работает и достаточно шумно. впринципе то конечно главное что работал, на ресурсе думаю это никак не отразиться.

не буду спорить с людьми у которых спрашиваю совета, просто хочу сказать что термин ШИМ я взял не бездумно а прочитал на этом сайте в описании функции  analogWrite которую относительно успешно до этого использовал и думал далее на её базе  так же сказать сделать какое либо прерывание.

А с функцией tone () не могли бы выложить пример в три строчки, не могу найти маленького примера что бы ничего лишнего не было.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

svorog пишет:

не буду спорить с людьми у которых спрашиваю совета, просто хочу сказать что термин ШИМ я взял не бездумно а прочитал на этом сайте в описании функции  analogWrite которую относительно успешно до этого использовал и думал далее на её базе  так же сказать сделать какое либо прерывание.

Вы совершенно правы в том, что функция analogWrite напрямую свяфзана с ШИМ (вопреки, кстати, своему названию). 

Вполне допускаю, чты Вы также с успехом применяли эту функцию по назначению, т.е. для управления нагрузкой типа светодиода или коллекторного двигателя.

Но вот для управления шаговым двигателем она не предназначениа и вряд ли ее можно считать подходящей. Хотя при определенных условиях она может заставить шаговый двигатель крутиться. Но это не потому, что "ШИМ", а потому, что "частота". 

Т.е. для управления шаговым двигателем Вам нужна не ШИМ, а управление частотой сигнала, что ШИМ (и соответственно функция analogWrite) не поддерживает.

Цитата:

А с функцией tone () не могли бы выложить пример в три строчки, не могу найти маленького примера что бы ничего лишнего не было.

Изыините, в три строчки не получается:

tone(pin,50);