Помогите с ШИМ на 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 КБ
      Просмотров:
      530
  2. parovoZZ

    parovoZZ Гуру

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

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

  4. Belkin

    Belkin Гик

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

    mkgs Нуб

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

    mkgs Нуб