Arduino драйвер мотора для робота

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

это плата для танчика. уже сделал плату, спаял драйверы. осталось мегу впаять

мега будет управлять моторами, общаться по радиоканалу, управлять внешними устройствами

a5021
Offline
Зарегистрирован: 07.07.2013

Очень интересно, что там получится. У меня пока так и не дошли руки даже за разводку взяться.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот собственно схема. 2 перемычки на плате не показаны

                

я хз когда проверю. осталось то немного

a5021
Offline
Зарегистрирован: 07.07.2013

А зачем такие плюхи олова на радиаторных полигонах? Теплоемкость может и повысится, но ухудшится теплоперенос в окружающую среду через излучение. Оно же блестит.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так лучше. мне туда еще провода паять. да и теплопроводность повыше между микрухой и проводами

 

a5021
Offline
Зарегистрирован: 07.07.2013

В принципе, и так красотень. Еще бы заработало только, как надо. :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да не говори. хотя та менее удачная схема работала же. эта точно должна работать. главное с кодом не накосячить. хотя нестрашно. перепаять недолго))

a5021
Offline
Зарегистрирован: 07.07.2013

А мне бы уже 4606 жалко стало. Купленные еще тогда двадцать штук почти разошлись. Остался только пяток.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у меня еще штук 50 наверно еще. брал еще по 90 рублей за 20шт

да и сейчас ненамного дороже

http://ru.aliexpress.com/item/20PCS-AO4606-4606-SOP8/2039034991.html?rec...

можно сразу 50шт взять

http://ru.aliexpress.com/item/50PCS-LOT-Original-AO4606-SOP-8-4606-Free-...

a5021
Offline
Зарегистрирован: 07.07.2013

Убедил. :) Закажу еще двадцать штучек. Их удобно не только в h-bridge ставить, но и в прочие места, где нужно нагрузкой посерьезнее чем 100ма управлять. N-канальный нагрузку коммутирует, а P-канальный управляет подачей питания для включения/выключения каких-нибудь блоков.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Проверил плату. подцепил моторы гусеничного шасси, при 8В питания было по 1.3А на канал, суммарно 2.6А. шим около 230. проверил близко к максимому, но чтобы был шим. полевики еле теплые. но греется мк

или изза того что N канальные напрямую к мк, или потому что я подпалил мк. сейчас перережу дорожки. если перестанет греться впаяю резисторы на затворы. если нет значит я его все таки немного подпалил

+ мк греется сам по себе. дело не в полевиках. драйвер работает хорошо

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

заменил мк, подпаял подрезанные ножки, не греется. все ровно и работает

код

//============================================================= Левый мотор
#define dir_L  7
#define ch1_L  5
#define ch2_L  6


//============================================================ Правый мотор
#define dir_R   8
#define ch1_R   9
#define ch2_R  10

int analog;

//========================================= предыдущие значения направления
bool old_dir_L=0;        
bool old_dir_R=0;


void setup(){
  init_driver(dir_L, ch1_L, ch2_L); // dir, n-channel, p-channel
  init_driver(dir_R, ch1_R, ch2_R); // dir, n-channel, p-channel
  //Serial.begin(9600);
}


void loop(){
  analog=analogRead(A3)/2.01-255;
  //Serial.println(analog);
  if(analog<0){
    Driver_L(0, analog*(-1));
    Driver_R(0, analog*(-1));
  }
  if(analog>0){
    Driver_L(1, analog);
    Driver_R(1, analog);
  }  
  
}


//================================================ Управление левым мотором
void Driver_L(bool dir, byte pwm){
  if(old_dir_L != dir){
    old_dir_L = dir;
    analogWrite(ch1_L, 0);
    analogWrite(ch2_L, 0);
    delay(50);
    digitalWrite(dir_L, dir);
  }
  if(dir==1) analogWrite(ch1_L, pwm);
  if(dir==0) analogWrite(ch2_L, pwm);
}


//=============================================== Управление правым мотором
void Driver_R(bool dir, byte pwm){
  if(old_dir_R != dir){
    old_dir_R = dir;
    analogWrite(ch1_R, 0);
    analogWrite(ch2_R, 0);
    delay(50);
    digitalWrite(dir_R, dir);
  }
  if(dir==1) analogWrite(ch1_R, pwm);
  if(dir==0) analogWrite(ch2_R, pwm);
}


//================================================== Инициализация драйвера
void init_driver(byte dir, byte n_ch, byte p_ch){
  pinMode(dir,  OUTPUT);
  pinMode(n_ch, OUTPUT);
  pinMode(p_ch, OUTPUT);
}

 

a5021
Offline
Зарегистрирован: 07.07.2013

Это хорошая новость. У меня, блин, все руки не доходят. :(

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да у меня тоже. почти неделя прошла пока сделал. но пока все нравится

хотел придел блютуз, но это другая история для другой темы

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Тестировал шасси с этим драйвером. неплохой драйвер)) питание 8В до 1.4А на канал

https://youtu.be/1O_bhBq07Lk

a5021
Offline
Зарегистрирован: 07.07.2013

Судя по динамике -- это гоночный танк. :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не гоночный. но хотелось побыстрее. до этого был медленный, но это так скучно. как засуну электронику и аккумуляторы в корпус проведу тесты на трассе (камни, палки, горки, трамплины) хочу чтобы попрыгал, как в видео про т90 показывают

хочу еще пушку гаусса на него. но там проблемм еще больше (мощные электромагнитные импульсы, высокое напряжение, вес, инерция, механизм заряжания, система поворота и т.д. )

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

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

делал на полевиках драйвер

так чуть хату не спалил

питание было LI-ION аккумы

что-то пошло не так толи мотор заклинило или еще чего об этом история умалчивает

так вот робот которого я сделал ребенку загорелся

и хорошо его под кран сунули и потушили

дыму было ))))

потом переделал его на L298

и на батарейки АА

работает уже год

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так поставил бы предохранитель)) а вообще у меня разок полевик сгорел, но я его перегрузил

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

хорошая мысля приходит опосля

на биполярниках оно мягче просто греться начинают

а полевик нахрапом берет

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а схему того что делал дашь посмотреть? просто интересно

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

да вот как на страничке вверху

надо бы типа токоограничивающие резюки на питание ставить

или на корпус вешать а с них можно и сигналы перегрузки снимать

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

можно использовать как датчик препятствия

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на самой первой страничке?

или тут

http://arduino.ru/forum/proekty/arduino-draiver-motora-dlya-robota?page=...

если схема из 254 поста к ней есть требования по программе)) защита от сквозного тока сделана программного а не хардварно

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

вот кусок кода из 263 поста

void Driver_L(bool dir, byte pwm){
  if(old_dir_L != dir){
    old_dir_L = dir;
    analogWrite(ch1_L, 0);
    analogWrite(ch2_L, 0);
    delay(50);
    digitalWrite(dir_L, dir);
  }
  if(dir==1) analogWrite(ch1_L, pwm);
  if(dir==0) analogWrite(ch2_L, pwm);
}

 

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

схема из 254 поста

только я шим не исползовал

потом когда  переделал на L298 при подезде к препятствию включал шим и скорость снижал

препядствие видит HC-SR04

вот код моего робота

он при старте еще и говорит


#include <Servo.h>


//Inputs/outputs


#define RightBumper 19      // digital pin 19
#define LeftBumper  18      // digital pin 18
#define Motor_1     17      // Right Motor
#define Motor_2     16      // Right Motor
#define Motor_3     15      // Left Motor
#define Motor_4     14      // Left Motor
#define SPICLOCK    13      //sck
#define DATAIN      12      //miso  ISD17xx
#define DATAOUT     11      //mosi
#define SLAVESELECT 10      //ss
#define Echo        9       // digital pin 9 
#define Trig        8       // digital pin 8 
#define SoundON     7       // digital pin 7
#define RightSens   6       // digital pin 6
#define LeftSens    2       // digital pin 5
#define LedPin      4       // digital pin 4   
#define PanPin      3       // digital pin 3
#define EnableMotor 5       // digital pin 2
//servo
#define center 94

//opcodes ISD17xx
#define PU          0x01
#define STOP        0x02
#define RESET       0x03
#define CLR_INT     0x04
#define RD_STATUS   0x05
#define RD_PLAY_PTR 0x06
#define PD          0x07
#define RD_REC_PTR  0x08
#define DEVID       0x09
#define PLAY        0x40
#define REC         0x41
#define ERASE       0x42
#define G_ERASE     0x43
#define RD_APC      0x44
#define WR_APC1     0x45
#define WR_APC2     0x65
#define WR_NVCFG    0x46
#define LD_NVCFG    0x47
#define FWD         0x48
#define CHK_MEM     0x49
#define EXTCLK      0x4A
#define SET_PLAY    0x49
#define SET_REC     0x81
#define SET_ERASE   0x82


//Variables
byte dir=0;
int turn90=600;
int turn45=300;
int stopTime=200;
int USdistance=0;
int treshold=20; //20cm min distance
int value=0;
int m=0;
int brake=40;
Servo Pan; 
 
//-----------------------------------------------------------------------------


void setup() { 
   //start serial
    Serial.begin (19200);
    Serial.println("start");

  
  //ISD17xx 
  byte clr;
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
  digitalWrite(SLAVESELECT,HIGH); //disable device  
  SPCR = B01111111; //data lsb, clock high when idle, samples on falling
  clr=SPSR;
  clr=SPDR;
  delay(10);
  
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(PU); // power up
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  delay(100);  

  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(CLR_INT); // clear interupt and eom bit
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);
  delay(100);

  
 //ON/OFF 
  pinMode(SoundON, INPUT);
  digitalWrite(SoundON, HIGH); //turn on pull up
  Stop();
  // set motor pins as output and LOW so the motors are breaked
  pinMode(Motor_1, OUTPUT);
  pinMode(Motor_2, OUTPUT);
  pinMode(Motor_3, OUTPUT);
  pinMode(Motor_4, OUTPUT);
  pinMode(EnableMotor, OUTPUT);
  digitalWrite(EnableMotor, LOW);
  
  //usonic
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  
  //bamper ,track sens L298
  pinMode(LeftBumper, INPUT); 
  digitalWrite(LeftBumper, HIGH); //turn on pull ups
  pinMode(RightBumper, INPUT); 
  digitalWrite(RightBumper, HIGH); //turn on pull ups
  pinMode(LeftSens, INPUT); 
  digitalWrite(LeftSens, HIGH); //turn on pull ups
  pinMode(RightSens, INPUT); 
  digitalWrite(RightSens, HIGH); //turn on pull ups
  
  //servo
  Pan.attach(PanPin);
  Pan.write(center); //90
  StepDelay();

 
 //LED, buzzer
  pinMode(LedPin, OUTPUT);      
  digitalWrite(LedPin, LOW);  

  
} 

void loop(){
 
  
  
  //ON 
if (digitalRead(SoundON)==LOW){
//digitalWrite(LedPin, HIGH);

 Forward();

   digitalWrite(SLAVESELECT,LOW);
   spi_transfer(PLAY); // clear interupt and eom bit
   spi_transfer(0x00); // data byte
   digitalWrite(SLAVESELECT,HIGH); 
 
 
  while(m < 400){
// выполнить  повторив 400 раз
    Drive();
Serial.println(m); 
    
 m++;

}  
 
 //OFF
 //ISD17xx
 digitalWrite(SLAVESELECT,LOW);
 spi_transfer(STOP); // clear interupt and eom bit
 spi_transfer(0x00); // data byte
 digitalWrite(SLAVESELECT,HIGH);
 
 //digitalWrite(LedPin, LOW);
 digitalWrite(EnableMotor, LOW);
 Stop();
 m=0;
delay(1000);
}

}


void Drive(){
   //ISD17xx

 digitalWrite(SLAVESELECT,LOW);
  spi_transfer(FWD); // clear interupt and eom bit
  spi_transfer(0x00); // data byte
  digitalWrite(SLAVESELECT,HIGH);

  
  
  //Work sensor
  if (digitalRead(LeftBumper)==LOW){
  digitalWrite(LedPin, HIGH);  
    Stop();
    StepDelay();
  digitalWrite(LedPin, LOW);  
    Reverse();
    StepDelay();
    Stop();
    StepDelay();
    Right();
    delay(turn45); //turn45
    Stop();
    StepDelay();
    Forward();
  }
  if (digitalRead(RightBumper)==LOW){
  digitalWrite(LedPin, HIGH);  
    Stop();
    StepDelay();
  digitalWrite(LedPin, LOW);  
    Reverse();
    StepDelay();
    Stop();
    StepDelay();
    Left();
    delay(turn45); //turn45
    Stop();
    StepDelay();
    Forward();
  }
  if (digitalRead(LeftSens)==LOW){
  digitalWrite(LedPin, HIGH);  
    Stop();
    StepDelay();
  digitalWrite(LedPin, LOW);  
    Reverse();
    StepDelay();
    Stop();
    StepDelay();
    Right();
    delay(turn45); //turn45
    Stop();
    StepDelay();
    Forward();
  }
  if (digitalRead(RightSens)==LOW){
  digitalWrite(LedPin, HIGH);  
    Stop();
    StepDelay();
  digitalWrite(LedPin, LOW);  
    Reverse();
    StepDelay();
    Stop();
    StepDelay();
    Left();
    delay(turn45); //turn45
    Stop();
    StepDelay();
    Forward();
}
  //usonic
  USdistance=Read_Ping_Sensor();
  Serial.print("USdistance ");
  Serial.println(USdistance);
  if(USdistance>40)analogWrite(EnableMotor,1000);
               else analogWrite(EnableMotor,400);
  if (USdistance<10){
    Stop();
    StepDelay();
    TurnAround();
  }
  if (USdistance<treshold){
    Stop();
    StepDelay();
    Avoid();
    Forward();
  }
  delay(50);

}
//work servo
void TurnAround(){
    Reverse();
    Pan.write(center);
    StepDelay();
    Stop();
    Left();
    delay(turn90);
    delay(turn90);
    Stop();
    StepDelay();
    Forward();
}

void Avoid(){
  int prev=0;
  dir=2;
  for (byte i=0; i<5; i++){
    Pan.write(i*45);
    StepDelay();
    StepDelay();
    USdistance=Read_Ping_Sensor();
    if (USdistance>prev){
      dir=i;
      prev=USdistance;
    }
  }
  Pan.write(center);
  StepDelay();
  switch (dir){
    case 0:
      Right();
      delay(turn90);
      Stop();
      StepDelay();
      break;
    case 1:
      Right();
      delay(turn90); //turn45
      Stop();
      StepDelay();
      break;
    case 2:
      Forward();
      break;
    case 3:
      Left();
      delay(turn90); //turn45
      Stop();
      StepDelay();
      break;
    case 4:
      Left();
      delay(turn90);
      Stop();
     // speaker.Beep();
      StepDelay();
      break;
  }
  delay(500);
}  

// Read Sensors
int Read_Ping_Sensor(){ 
  int cm=0;
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  value=pulseIn(Echo, HIGH);
  value=(value/2) /29.1;
  cm=int(value);
  return cm;
}
   void StepDelay() {
    for (byte t=0; t<10; t++){
 //SoftwareServo::refresh();
      delay(20);
    }
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//Work motors
void Forward(){
  digitalWrite(EnableMotor, HIGH);
  //analogWrite(EnableMotor,USdistance); 
  digitalWrite(Motor_1,  LOW); 
  digitalWrite(Motor_2, HIGH); 
  digitalWrite(Motor_3,  LOW); 
  digitalWrite(Motor_4, HIGH);
  Serial.println("Forward");Serial.println(USdistance);
  return;
}

void Reverse(){
  digitalWrite(EnableMotor, HIGH);
  digitalWrite(Motor_1, HIGH); 
  digitalWrite(Motor_2,  LOW); 
  digitalWrite(Motor_3, HIGH); 
  digitalWrite(Motor_4,  LOW); 
  Serial.println("Reverse");
  return;
}

void Right(){
  digitalWrite(EnableMotor, HIGH);
  digitalWrite(Motor_1,  LOW); 
  digitalWrite(Motor_2, HIGH); 
  digitalWrite(Motor_3, HIGH);
  digitalWrite(Motor_4,  LOW); 
  Serial.println("Right");
  return;
}

void Left(){
  digitalWrite(EnableMotor, HIGH);
  digitalWrite(Motor_1, HIGH); 
  digitalWrite(Motor_2,  LOW); 
  digitalWrite(Motor_3,  LOW); 
  digitalWrite(Motor_4, HIGH); 
  Serial.println("Left");
  return;
}

void Stop()
{
  digitalWrite(EnableMotor, LOW);
  digitalWrite(Motor_1, LOW); 
  digitalWrite(Motor_2, LOW); 
  digitalWrite(Motor_3, LOW);  
  digitalWrite(Motor_4, LOW); 
  Serial.println("Stop");
  return;
}
 //ISD17XX
  char spi_transfer(volatile char data)
{
  SPDR = data;                    // Start the transmission
  while (!(SPSR & (1<<SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну жаль что разобрался с драйвером или кода как им управлять не дождался

а вообще работает, все хорошо, вот видео с гусеничным шасси и таким двухканальным драйвером

https://youtu.be/1O_bhBq07Lk

 

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

я видел слишко бысто ездит по квартире не догонишь )))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так скорость всегда можно ограничить))

а в смысле при старте говорит? звуковой модуль прицепил чтоли?

надо как нибудь тоже заморочится чтобы сам препятсвия объезжал. даже интересно получится ли нормальный код написать

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

ну да на 1760

записал звуки WALL-E

хрюкает песни поет )))

робот похож на валли

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

расскажи про ISD1760. звуков несколько? можно выбирать проигрываемый звук?

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

можно по разному работать

звуков можно понаписать сколько угодно лишь бы времени хватило

сама 1760 расчитана на 60сек записи но если поигрться с тактовым резистором можно и 120сек сделать ну и тд в даташите все написано.

записывать можно по порядку или по адресу и так же вопроизводить

по адресу только через SPI, а по порядку можно и по SPI и просто с кнопки REC и PLAY

записывать можно через микрофон  или через линейный вход, выход прямо на динамик и есть типа линейный выход

ну и есть естессно либы к ней


	//opcodes ISD17xx
	#define PU          0x01
	#define STOP        0x02
	#define RESET       0x03
	#define CLR_INT     0x04
	#define RD_STATUS   0x05
	#define RD_PLAY_PTR 0x06
	#define PD          0x07
	#define RD_REC_PTR  0x08
	#define DEVID       0x09
	#define PLAY        0x40
	#define REC         0x41
	#define ERASE       0x42
	#define G_ERASE     0x43
	#define RD_APC      0x44
	#define WR_APC1     0x45
	#define WR_APC2     0x65
	#define WR_NVCFG    0x46
	#define LD_NVCFG    0x47
	#define FWD         0x48
	#define CHK_MEM     0x49
	#define EXTCLK      0x4A
	#define SET_PLAY    0x49
	#define SET_REC     0x81
	#define SET_ERASE   0x82
	 

spi коды управления

a5021
Offline
Зарегистрирован: 07.07.2013

kayot пишет:

делал на полевиках драйвер

так чуть хату не спалил

питание было LI-ION аккумы

что-то пошло не так толи мотор заклинило или еще чего об этом история умалчивает

так вот робот которого я сделал ребенку загорелся

Вот поэтому я и был изначально против схемы, где нет аппаратной защиты против подачи открывающего напряжения на затворы двух полевиков в одной вертикали. Аккумуляторы нынче норовят мощные использовать, при К. З. реально устроить возгорание вплоть до пожара. Небезопасные в этом плане схемы надо либо снабжать предупреждающими надписями, либо не публиковать вовсе. Начинающие возьмутся повторять, слабо понимая, что, как и где работает, а потом пойдут случаи типа этого.

Цитата:
потом переделал его на L298

и на батарейки АА

работает уже год

Что-то я не понял. Схеме из 254 поста и месяца еще нет, а вы о годе говорите.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а я не заметил про год)))

добавил примечание к схеме из 254 поста на всякий случай

a5021
Offline
Зарегистрирован: 07.07.2013

Я бы все же добавил еще предупреждение о возможном возгорании в случае легкомысленного отношения к силовым цепям. Это лучше мотивирует на размышления о безопасности.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

добавил. теперь с такими предупреждениями никто и собирать не захочет)))

сквозной ток, предохранитель, возгорание

брррр. но зато совесть чиста

kayot
kayot аватар
Offline
Зарегистрирован: 11.04.2014

Я делал сам подобный полтора года назад

не из поста

а год назад переделал на 298

a5021
Offline
Зарегистрирован: 07.07.2013

Огромное количество схем в интернете обладают одним общим качеством, не смотря на то, что это схемы совершенно различных устройств. Они не работают и, больше того, не могут работать в принципе.

jeka_tm пишет:
добавил. теперь с такими предупреждениями никто и собирать не захочет)))

Вот и пусть не собирают. От того, что кто-то там не расчитав свои силы спалит квартиру, никому никакой радости не будет точно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну так эта схема работает же

да пусть не собирают. главное у меня все норм))

Илья73
Offline
Зарегистрирован: 06.09.2013

Вот чуток подправил, правильно ли?

Картинка не очень, не знаю где рисовать красиво.

Правильно ли подправил?

С выводом PWM все понятно, а как управлять DIR 0 - вперед, 1 - назад, PWM - 0 стоим, PWM - 255 полный газ ?

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты в курсе что данная схема для питания 5В? максимум 6

а вообще вроде правильно все

Илья73
Offline
Зарегистрирован: 06.09.2013

Да, я понял что пять вольт. Мне как раз и нужно так.

a5021
Offline
Зарегистрирован: 07.07.2013

я вродь тоже ошибок не вижу. Единственное, что там за транзисторы?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

IRLML2502 и что то еще подобное. корпус SOT23

Илья73
Offline
Зарегистрирован: 06.09.2013

На картинке другие обозначения, те что были в каталоге программы.

Планирую ставить.

IRLML0030 N-ch 30v,5.3a sot-23

AO3401 P-ch  30v, -4a sot 23

Купил у китайцев по кучке, так что бы не жалеть.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

мне кажется лучше в данном случае 1 so8 чем два sot23

Илья73
Offline
Зарегистрирован: 06.09.2013

По мне так sot23 более универсально:)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

универсальное. а тепло рассеивать? посмотри какая максимальная рассеиваемая мощность у этих корпусов

Илья73
Offline
Зарегистрирован: 06.09.2013

Пятак на них медный приклеить:)))

olvlag
Offline
Зарегистрирован: 19.06.2015

Пока комментариев нет.Когда соберу схему тогда возможно будут.

a5021
Offline
Зарегистрирован: 07.07.2013

Блин, опять все проглядели (и я тоже). :( Верхине мосфеты снова кверх ногами нарисованы. У них исток толжен сидеть на плюсе питания, а сток идти к нижнему мосфету и мотору. Если кто собирать возьмется, учтите.