Помогите со скетчем

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Владимир555, 25 фев 2018.

  1. Всем доброго дня!
    Возникла такая проблема не могу никак заставить крутится движки на плате Romeo BLE mini В ней используется драйвер двигателя DRV8833PWR В котором по два входа на канал, один из которых ШИМ для управления скорость вращения.
    Имеется скетч: в котором используется L298N
    У меня не получается адаптировать скетч под драйвер двигателя DRV8833PWR
    Помогите пожалйста

    Сам скетч:

    Код (C++):
    /*
    Arduino Wireless Control using the NRF24L01 Transceiver module

    */

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>

    #define enA 2 // Note: Pin 9 in previous video ( pin 10 is used for the SPI communication of the NRF24L01)
    #define in1 4
    #define in2 5
    #define enB 3 // Note: Pin 10 in previous video
    #define in3 6
    #define in4 7

    RF24 radio(8, 9); // CE, CSN
    const byte address[6] = "00001";

    char receivedData[32] = "";
    int xAxis, yAxis;

    int motorSpeedA = 0;
    int motorSpeedB = 0;

    void setup() {
    pinMode(enA, OUTPUT);
    pinMode(enB, OUTPUT);
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    Serial.begin(9600);
    radio.begin();
    radio.openReadingPipe(0, address);
    radio.setPALevel(RF24_PA_MIN);
    radio.startListening();
    }

    void loop() {

    if (radio.available()) { // If the NRF240L01 module received data
    radio.read(&receivedData, sizeof(receivedData)); // Read the data and put it into character array
    xAxis = atoi(&receivedData[0]); // Convert the data from the character array (received X value) into integer
    delay(10);
    radio.read(&receivedData, sizeof(receivedData));
    yAxis = atoi(&receivedData[0]);
    delay(10);
    }

    // Y-axis used for forward and backward control
    if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
    }
    else if (yAxis > 550) {
    // Set Motor A forward
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    // Set Motor B forward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 550, 1023, 0, 255);
    motorSpeedB = map(yAxis, 550, 1023, 0, 255);
    }
    // If joystick stays in middle the motors are not moving
    else {
    motorSpeedA = 0;
    motorSpeedB = 0;
    }

    // X-axis used for left and right control
    if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
    motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
    motorSpeedB = 255;
    }
    }
    if (xAxis > 550) {
    // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
    int xMapped = map(xAxis, 550, 1023, 0, 255);
    // Move right - decrease right motor speed, increase left motor speed
    motorSpeedA = motorSpeedA + xMapped;
    motorSpeedB = motorSpeedB - xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA > 255) {
    motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
    motorSpeedB = 0;
    }
    }
    // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
    if (motorSpeedA < 70) {
    motorSpeedA = 0;
    }
    if (motorSpeedB < 70) {
    motorSpeedB = 0;
    }
    analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
    analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
    }
     
    Последнее редактирование: 26 фев 2018
  2. Arduino_man

    Arduino_man Гик

    Для начала: драйверы принципиально отличаются.
    Как я понял, у DRV8833PWR один цифровой вход для направления, и один для скорости.
    У L298N два входа для направления.
    Советую сначала поискать здесь и здесь, как работать с этими драйверами, а потом задавать вопросы.
    И еще: попробуйте сначала САМОСТОЯТЕЛЬНО написать простой скетч, чтобы мотор туда-сюда покрутился. Если САМИ напишете - разберетесь, что неправильно в вашей программе.
     
  3. Написал!

    Код (C++):
    const int pwm = 3;  // вывод ШИМ
    const int in_1 = 5; // вывод направления двигателя
    const int in_2 = 3;


    void setup()
    {
      pinMode(pwm,OUTPUT);    // Настраиваем ШИМ вывод на выход
      pinMode(in_1,OUTPUT);   // Настраиваем логический выход
    }

    void loop()
    {
      // Вращение по часовой стрелки
      digitalWrite(in_1,HIGH);
      analogWrite(pwm,85);   // установка pwm в значение 95
              // Вращение двигателя по часовой стрелке 3 секунды.
      delay(3000);

      // Остановка
      digitalWrite(in_1,HIGH);
      digitalWrite(in_2,HIGH);
      delay(3000) ;

      // Для вращения против часовой стрелки
      digitalWrite(in_1,LOW);
       analogWrite(pwm,85);  // установка pwm в значение 95
      delay(3000); // Вращение двигателя против часовой стрелке 3 секунды.


    }
     
    Последнее редактирование: 26 фев 2018
  4. Это скетч работы двигателя для одного канала
     
  5. Написал скетч для двигателя, но как его применить на самом первом скетче?
     
  6. Arduino_man

    Arduino_man Гик

    Где покупали свой драйвер?
     
  7. Контроллер называется Pololu на DRV8833 <1,2 А
     
    Последнее редактирование: 26 фев 2018
  8. Arduino_man

    Arduino_man Гик

     
  9. Алиэкспресс
     
  10. Arduino_man

    Arduino_man Гик

    Хоть бы ссылку дал! Мне же надо понять, что это за зверь, и как с ним работать.
     
  11. Arduino_man

    Arduino_man Гик

    Вам нужно управлять скоростью двигателей?
     
  12. Вообщем управление двигателями и скоростью.
     
  13. Arduino_man

    Arduino_man Гик

    Вы вообще умеете двигателями управлять? Без драйверов.
     
  14. Без драйвера двигателя. Это через транзистор подовая сигнал через базу?