Помогите с ШИМ на L298N

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем mkgs, 3 апр 2019.

Метки:
  1. mkgs

    mkgs Нуб

    Здравствуйте, у меня проблема. Не работает ШИМ в моей программе, точнее работает, но только на макс значении, т.е.analogwrite(SHIM, 255), что равносильно цифровому HIGH. Прога ниже, схема подключения правильная к L298N, подключено 2 движка вот по такой схеме ниже. Питаю от блока питания на 12 вольт моторы и ардуинку отдельно. ШИМ нужен для ограничения скорости моторов

    Моя прога:
    #include <IRremote.h> // библиотека


    #define IR_PIN A5 //вход ИК приемника

    #define SHIM 3

    #define LED1 4 //пины управляющие моторами, светодиодами или реле, чем угодно.

    #define LED2 5

    #define LED3 6

    #define LED4 7

    #define LED5 8

    #define LED6 9

    #define LED7 10

    #define LED8 11

    #define timer 12

    IRrecv irrecv(IR_PIN);

    decode_results results;

    unsigned long eventTime = 0;//eventTime, для паузы, вместо delay,будем использовать функцию millis.

    void setup() {

    irrecv.enableIRIn(); // включить приёмник

    pinMode(LED1, OUTPUT); // назначаем пины как выходы

    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(LED4, OUTPUT);
    pinMode(LED5, OUTPUT);
    pinMode(LED6, OUTPUT);
    pinMode(LED7, OUTPUT);
    pinMode(LED8, OUTPUT);
    pinMode(timer, OUTPUT);

    pinMode(SHIM, OUTPUT);
    for (int i = 0; i < 3; i++) { // Сигнал показывающий, что приёмник включён
    digitalWrite(timer, HIGH);
    delay(70);
    digitalWrite(timer, LOW);
    delay(50);
    }
    Serial.begin(9600);
    }

    void loop() {

    if (digitalRead(IR_PIN) == LOW){ // Если обнаружен отрицательный сигнал запускаем таймер,и включаем таймерПИН //(timer, HIGH);

    eventTime = millis(), analogWrite(SHIM, 105), digitalWrite(timer, HIGH);}

    // Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW)

    if (millis() - eventTime > 100){ digitalWrite(timer, LOW), analogWrite(SHIM, 0), digitalWrite(LED1, LOW), digitalWrite(LED2, LOW),digitalWrite(LED3, LOW),digitalWrite(LED4, LOW),digitalWrite(LED5, LOW),digitalWrite(LED6, LOW),digitalWrite(LED7, LOW),digitalWrite(LED8, LOW),digitalWrite(LED9, LOW);}

    if (irrecv.decode(&results)) { //Если обнаружен сигнал с датчика
    if (digitalRead(timer) == HIGH) {
    if (results.value == 0x866B20DF){ digitalWrite(LED1, HIGH);}
    if (results.value == 0x866B10EF){ digitalWrite(LED2, HIGH);}
    if (results.value == 0x866B40BF){ digitalWrite(LED3, HIGH);}
    if (results.value == 0x866BF00F){ digitalWrite(LED4, HIGH);}
    if (results.value == 0x866BA05F){ digitalWrite(LED5, HIGH);}
    if (results.value == 0x866B609F){ digitalWrite(LED6, HIGH);}
    if (results.value == 0x866B30CF){ digitalWrite(LED7, HIGH);}
    if (results.value == 0x866BB04F){ digitalWrite(LED8, HIGH);}
    if (results.value == 0x866B50AF){ digitalWrite(LED9, HIGH);}
    }
    Serial.println(results.value,HEX);
    irrecv.resume(); //Принимаем новый сигнал

    }

    }
    Суть моей проги в том, что жмешь на кнопку ИК пульта, мотор работает, не жмешь, не работает.



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


    int IN3 = 5; // Input3 подключен к выводу 5
    int IN4 = 4;
    int ENB = 3;
    void setup()
    {
    pinMode (ENB, OUTPUT);
    pinMode (IN3, OUTPUT);
    pinMode (IN4, OUTPUT);
    }
    void loop()
    {
    // На пару выводов "IN" поданы разноименные сигналы, мотор готов к вращаению
    digitalWrite (IN3, HIGH);
    digitalWrite (IN4, LOW);
    // подаем на вывод ENB управляющий ШИМ сигнал
    analogWrite(ENB,55);
    delay(2000);
    analogWrite(ENB,105);
    delay(2000);
    analogWrite(ENB,255);
    delay(2000);
    // Останавливаем мотор повад на вывод ENB сигнал низкого уровеня.
    // Состояние выводов "IN" роли не играет.
    analogWrite(ENB,0);
    delay(5000);
    }
     

    Вложения:

    • L298N_2_mot.jpg
      L298N_2_mot.jpg
      Размер файла:
      123,8 КБ
      Просмотров:
      45
  2. parovoZZ

    parovoZZ Гуру

    А моя прога и рабочая прога - это два разных устройства?
     
    Airbus нравится это.
  3. Tomasina

    Tomasina Сушитель лампочек Команда форума

  4. Belkin

    Belkin Гик

    Для реализации этого ШИМ не нужен от слова "совсем".
     
  5. mkgs

    mkgs Нуб

    Я знаю, но мне на разные моторы нужны разные скорости, для этого нужен шим
     
  6. mkgs

    mkgs Нуб