L298n питание от разных источников

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

Доброго времени суток формумчаене.Возникло несколько вопросов на которые не смог найти в поиске ответы (что тут на форуме ,что в гугле ) . Знающие люди  ответьте если не трудно . Собираю машину на базе arduino nano по ниже приведенной схеме .

 

Скетч данного передатчика :

 

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

#include <SPI.h>
#include "RF24.h" 
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL; 
int msg[1]; 
int potpin_1 = A0; 
int val_1; 
int potpin_2 = A1; 
int val_2; 

void setup(void){
radio.begin();
radio.openWritingPipe(pipe); 

}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);

  
}

 

Приемник :

Скетч приемника :

// Необходимо установить библиотеку для радиомодуля nRF24
#include <SPI.h>
#include "RF24.h"


RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL; 
int msg[1]; 
int data; 
int fspeed;           // forward speed 
int bspeed;           // backward speed
int lspeed;           // left speed 
int rspeed;           // right speed
const int in1 = 2;    // direction pin 1
const int in2 = 4;    // direction pin 2
const int ena = 5;    // PWM pin to change speed
const int in3 = 7;    // direction pin 3
const int in4 = 8;    // direction pin 4
const int enb = 3;    // PWM pin to change speed
void setup()
{
  
  pinMode(in1, OUTPUT);      // connection to L298n
  pinMode(in2, OUTPUT);      // connection to L298n
  pinMode(ena, OUTPUT);      // connection to L298n
  pinMode(in3, OUTPUT);      // connection to L298n
  pinMode(in4, OUTPUT);      // connection to L298n
  pinMode(enb, OUTPUT);      // connection to L298n
delay(50);
radio.begin();
radio.openReadingPipe(1,pipe); 
radio.startListening();
}

void loop()
{
  if (radio.available())radio.read(msg, 1);  
  if (msg[0] >=1 && msg[0] <=63)data = msg[0], rspeed = map(data, 126, 64, 0, 255), right(rspeed);
  if (msg[0] >=64 && msg[0] <=127)data = msg[0], lspeed = map(data, 63, 1, 0, 255), left(lspeed);
  if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
  if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
  if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
}

void stop()
{
  
  analogWrite(ena, 0);
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
}

void forward(int fspeed)
{
  
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(ena, fspeed);
}

void backward(int bspeed)
{
  
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(ena, bspeed);
}
void right(int rspeed)
{
  
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enb, rspeed);
}

void left(int lspeed)
{
  
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  analogWrite(enb, lspeed);
}

Собрал все по схеме ,прошил arduino .Все работает ,но чуть не так как надо .Теперь вопросы :

1. Самый главный .2 день не могу победить L298n с отдельным питаением .Хочу запитать моторы отдельно от внешнего аккамулятора (жду пока придет с китая пока использую бп на 9V ,оба мотора также по 9V ) .Последовательность действий : снимаю джампер  ,на +12V подаю 9V , обьеденяю землю от бп + земля от ардуинки , подаю на логику  L298n + 5v .Все светится горит ,но  не работает . Все убираю,  беру питание от ардуинки + 5V  и паралелю его с + 12V  земля также с ардуинки (джампер снят ) Двигатели начинают работать . Убираю все .Ставлю джампер питаю + 9 на +12 земля от ардуинки .Лампочка не горит пока не закоротишь  + 12 и 5 лампочка загорается  (думаю логика вкл ) ,но двигатели по прежнему не работают .  Интересует именно вопрос по поводу раздельного питания от разных источников  без джампера и тп.

 

2. Хочу в приемник воткнуть еще одноканальное реле . По типу нажал на передатчике кнопку (не джойстик ) реле переключилось ,нажал 2 раз ушло в первоначальное положение . Скет вроде как нашел ,но вот как его обьеденить с вышеописаным знаний не хватает . Если кому не трудно наведите на тему или пример .

 Заранее спасибо за ответ !

malex66
Offline
Зарегистрирован: 28.04.2017

если у вас тот модуль, что нарисован - то там (в модуле) уже есть источник пять вольт. нужно поставить перемычук и убрать связь по питанию пять вольт с арудиной. ардуину можно запитать штатно.

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

malex66 пишет:

если у вас тот модуль, что нарисован - то там (в модуле) уже есть источник пять вольт. нужно поставить перемычук и убрать связь по питанию пять вольт с арудиной. ардуину можно запитать штатно.

Благодарю за ответ ,но перемычка ставится в модуле если напряжение не превышает 12 V ,в других случаях она убирается и на моторы и модуль подается отдельное питание . Методом проб и ошибок понял что земля должна быть общая точнее от  1 источника иначе не заводится . 

 

Касаемо 2 вопроса есть какие нибудь мысли ? Может кто посоветует книгу по  ардинке чтоб простым и понятным языком было расписано . Запитать то я смогу реле но вот по функциям чтоб передавалось и принималось думаю знаний не хватит + это все надо как то обьеденить .

malex66
Offline
Зарегистрирован: 28.04.2017

у вас на рисунке указано двенадцать вольт.

 

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

 Народ  знающие просьба подсказать.  Не могу запустить 2 мотор,который отвечает за движение вперед назад.  Все по той же схеме выше.Проверяю мультиметром когда двигаешь джойстик вперед назад напряжение показывает диапазон от  0- 7В (2 батарейки на 3.2в) ,но как только подключаю  мотор и повторяю действия ,напряжение падает до 0.32 тоже дело и с током. Я так понимаю мотору не хватает входящего напряжения и тока(хотя он подключен без перемычки ) ? В какую сторону двигаться .Пока делаю выводы что дело в ШИМ .Может у кого-то была подобная проблема и наведет на правильный путь. На моторчике  из опознавательных знаков только надпись 53.5-B DC. 

 

P.S 

void loop()
{
  if (radio.available())radio.read(msg, 1);  
  if (msg[0] >=1 && msg[0] <=63)data = msg[0], rspeed = map(data, 126, 64, 0, 255), right(rspeed);
  if (msg[0] >=64 && msg[0] <=127)data = msg[0], lspeed = map(data, 63, 1, 0, 255), left(lspeed);
  if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
  if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
  if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
}

Эти значения map(data, 126, 64, 0, 255) берутся индивидуально  для мотора ? 

P.S.S Если подключить мотор напрямую то все прекрасно работает

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

Народ что никто не может помочь ?