Как заставить обороты двигателя постоянного тока прийти к максимальному значению (аналог 255) МЕДЛЕННО - PullRequest
0 голосов
/ 17 декабря 2018

Это домашнее задание, и я понятия не имею, мой учитель говорит, что вам нужны while, analogWrite и счетчик.У меня есть двигатель постоянного тока, транзистор и батарея на 9 В.

Я знаю, что мой код НИЧЕГО, но только в качестве примера.

int analogPin = 3;
int count = 0;
void setup()
{
   pinMode(analogPin, OUTPUT);
}

void loop() { 
   while(count<30){
     analogWrite(analogPin , 255);
     delay(20000);
     count++;
   }
}

1 Ответ

0 голосов
/ 17 декабря 2018

В качестве значения аналогового выхода необходимо использовать значение счетчика:

void loop() 
{ 
    if( count < 256 )
    {
        analogWrite( analogPin, count ) ;
        delay( 20000 );
        count++ ;
    }
}

Обратите внимание, что вам не нужен цикл while;фреймворк Arduino уже итеративно вызывает loop() (подсказка в названии).Однако, если ваш учитель считает, что он вам нужен, и ожидает его, вам, возможно, придется использовать его только для оценок.В качестве альтернативы обсудите это со своим учителем и объясните, почему это не нужно

На самом деле задержка также может быть плохой практикой - она ​​бесполезна в приложениях, где loop() должен выполнять другие действия при управлении двигателем.Следующее позволяет запускать другой код во время управления двигателем:

unsigned long delay_start = 0 ;

void loop() 
{ 
    if( count < 256 &&
        millis() - delay_start >= 20000ul )
    {
        analogWrite( analogPin, count ) ;
        count++ ;
        delay_start = millis() ;
    }

    // Do other stuff here
}

Поскольку loop() теперь никогда не блокирует функцию delay(), вы можете иметь код, который выполняет другие функции, такие как считывание входов переключателя ион может реагировать на них мгновенно, тогда как, как и в вашем решении, такие входы могут игнорироваться в течение до 20 секунд!

Типичный двигатель постоянного тока не начнет вращаться при очень низких значениях - возможно, вы захотите запустить count несколько выше нуля, чтобы учесть "мертвую зону".Аналоговые сигналы, как правило, также являются плохим способом управления двигателем постоянного тока и различной скорости;ШИМ, как правило, является более эффективным методом и позволяет двигателю работать на более низких скоростях.При аналоговом сигнале на низких уровнях (ниже, чем для ШИМ) ваш двигатель не будет двигаться, а только нагреется и разрядит аккумулятор.

В целях тестирования уменьшите время задержки;Вы не хотите сидеть там час и 25 минут, просто чтобы найти код не работает!Установите его, чтобы сказать 500 мс, затем запустите его, время, сколько требуется времени, прежде чем двигатель начинает двигаться.Если, скажем, 30 секунд, то вы знаете, что двигатель начинает двигаться, когда count составляет около 60;в этом случае это лучшее начальное значение, что ноль.Затем вы можете увеличить задержку до 20 секунд, если хотите - хотя источник питания постоянного тока может быть лучше батареи - я не уверен, что он продлится так долго.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...