А зачем такие плюхи олова на радиаторных полигонах? Теплоемкость может и повысится, но ухудшится теплоперенос в окружающую среду через излучение. Оно же блестит.
Убедил. :) Закажу еще двадцать штучек. Их удобно не только в h-bridge ставить, но и в прочие места, где нужно нагрузкой посерьезнее чем 100ма управлять. N-канальный нагрузку коммутирует, а P-канальный управляет подачей питания для включения/выключения каких-нибудь блоков.
Проверил плату. подцепил моторы гусеничного шасси, при 8В питания было по 1.3А на канал, суммарно 2.6А. шим около 230. проверил близко к максимому, но чтобы был шим. полевики еле теплые. но греется мк
или изза того что N канальные напрямую к мк, или потому что я подпалил мк. сейчас перережу дорожки. если перестанет греться впаяю резисторы на затворы. если нет значит я его все таки немного подпалил
+ мк греется сам по себе. дело не в полевиках. драйвер работает хорошо
не гоночный. но хотелось побыстрее. до этого был медленный, но это так скучно. как засуну электронику и аккумуляторы в корпус проведу тесты на трассе (камни, палки, горки, трамплины) хочу чтобы попрыгал, как в видео про т90 показывают
хочу еще пушку гаусса на него. но там проблемм еще больше (мощные электромагнитные импульсы, высокое напряжение, вес, инерция, механизм заряжания, система поворота и т.д. )
следующий хочу сделать чтобы по скорости был как радиоуправляемая машинка, но там много проблемм. быстрый компактный двигатель достаточной мощности, наверно металлический редуктор (не факт), и самое главное как решить проблему растяжения гусениц, центробежной силы, и боковых нагрузок, изза которых гусеницы будут слетать
если схема из 254 поста к ней есть требования по программе)) защита от сквозного тока сделана программного а не хардварно
шим нужно подавать на определенный пин, предварительно отключить шим на всех выходах. далее задержка 50мс (взял от балды, даже не проверял сколько реально нужно) и только потом меняем направление и подаем шим
что-то пошло не так толи мотор заклинило или еще чего об этом история умалчивает
так вот робот которого я сделал ребенку загорелся
Вот поэтому я и был изначально против схемы, где нет аппаратной защиты против подачи открывающего напряжения на затворы двух полевиков в одной вертикали. Аккумуляторы нынче норовят мощные использовать, при К. З. реально устроить возгорание вплоть до пожара. Небезопасные в этом плане схемы надо либо снабжать предупреждающими надписями, либо не публиковать вовсе. Начинающие возьмутся повторять, слабо понимая, что, как и где работает, а потом пойдут случаи типа этого.
Цитата:
потом переделал его на L298
и на батарейки АА
работает уже год
Что-то я не понял. Схеме из 254 поста и месяца еще нет, а вы о годе говорите.
Я бы все же добавил еще предупреждение о возможном возгорании в случае легкомысленного отношения к силовым цепям. Это лучше мотивирует на размышления о безопасности.
Огромное количество схем в интернете обладают одним общим качеством, не смотря на то, что это схемы совершенно различных устройств. Они не работают и, больше того, не могут работать в принципе.
jeka_tm пишет:
добавил. теперь с такими предупреждениями никто и собирать не захочет)))
Вот и пусть не собирают. От того, что кто-то там не расчитав свои силы спалит квартиру, никому никакой радости не будет точно.
Блин, опять все проглядели (и я тоже). :( Верхине мосфеты снова кверх ногами нарисованы. У них исток толжен сидеть на плюсе питания, а сток идти к нижнему мосфету и мотору. Если кто собирать возьмется, учтите.
это плата для танчика. уже сделал плату, спаял драйверы. осталось мегу впаять
мега будет управлять моторами, общаться по радиоканалу, управлять внешними устройствами
Очень интересно, что там получится. У меня пока так и не дошли руки даже за разводку взяться.
вот собственно схема. 2 перемычки на плате не показаны
я хз когда проверю. осталось то немного
А зачем такие плюхи олова на радиаторных полигонах? Теплоемкость может и повысится, но ухудшится теплоперенос в окружающую среду через излучение. Оно же блестит.
так лучше. мне туда еще провода паять. да и теплопроводность повыше между микрухой и проводами
В принципе, и так красотень. Еще бы заработало только, как надо. :)
да не говори. хотя та менее удачная схема работала же. эта точно должна работать. главное с кодом не накосячить. хотя нестрашно. перепаять недолго))
А мне бы уже 4606 жалко стало. Купленные еще тогда двадцать штук почти разошлись. Остался только пяток.
у меня еще штук 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-...
Убедил. :) Закажу еще двадцать штучек. Их удобно не только в h-bridge ставить, но и в прочие места, где нужно нагрузкой посерьезнее чем 100ма управлять. N-канальный нагрузку коммутирует, а P-канальный управляет подачей питания для включения/выключения каких-нибудь блоков.
Проверил плату. подцепил моторы гусеничного шасси, при 8В питания было по 1.3А на канал, суммарно 2.6А. шим около 230. проверил близко к максимому, но чтобы был шим. полевики еле теплые. но греется мк
или изза того что N канальные напрямую к мк, или потому что я подпалил мк. сейчас перережу дорожки. если перестанет греться впаяю резисторы на затворы. если нет значит я его все таки немного подпалил
+ мк греется сам по себе. дело не в полевиках. драйвер работает хорошо
заменил мк, подпаял подрезанные ножки, не греется. все ровно и работает
код
//============================================================= Левый мотор #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); }Это хорошая новость. У меня, блин, все руки не доходят. :(
да у меня тоже. почти неделя прошла пока сделал. но пока все нравится
хотел придел блютуз, но это другая история для другой темы
Тестировал шасси с этим драйвером. неплохой драйвер)) питание 8В до 1.4А на канал
https://youtu.be/1O_bhBq07Lk
Судя по динамике -- это гоночный танк. :)
не гоночный. но хотелось побыстрее. до этого был медленный, но это так скучно. как засуну электронику и аккумуляторы в корпус проведу тесты на трассе (камни, палки, горки, трамплины) хочу чтобы попрыгал, как в видео про т90 показывают
хочу еще пушку гаусса на него. но там проблемм еще больше (мощные электромагнитные импульсы, высокое напряжение, вес, инерция, механизм заряжания, система поворота и т.д. )
следующий хочу сделать чтобы по скорости был как радиоуправляемая машинка, но там много проблемм. быстрый компактный двигатель достаточной мощности, наверно металлический редуктор (не факт), и самое главное как решить проблему растяжения гусениц, центробежной силы, и боковых нагрузок, изза которых гусеницы будут слетать
делал на полевиках драйвер
так чуть хату не спалил
питание было LI-ION аккумы
что-то пошло не так толи мотор заклинило или еще чего об этом история умалчивает
так вот робот которого я сделал ребенку загорелся
и хорошо его под кран сунули и потушили
дыму было ))))
потом переделал его на L298
и на батарейки АА
работает уже год
так поставил бы предохранитель)) а вообще у меня разок полевик сгорел, но я его перегрузил
хорошая мысля приходит опосля
на биполярниках оно мягче просто греться начинают
а полевик нахрапом берет
а схему того что делал дашь посмотреть? просто интересно
да вот как на страничке вверху
надо бы типа токоограничивающие резюки на питание ставить
или на корпус вешать а с них можно и сигналы перегрузки снимать
можно использовать как датчик препятствия
на самой первой страничке?
или тут
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); }схема из 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 }ну жаль что разобрался с драйвером или кода как им управлять не дождался
а вообще работает, все хорошо, вот видео с гусеничным шасси и таким двухканальным драйвером
https://youtu.be/1O_bhBq07Lk
я видел слишко бысто ездит по квартире не догонишь )))
так скорость всегда можно ограничить))
а в смысле при старте говорит? звуковой модуль прицепил чтоли?
надо как нибудь тоже заморочится чтобы сам препятсвия объезжал. даже интересно получится ли нормальный код написать
ну да на 1760
записал звуки WALL-E
хрюкает песни поет )))
робот похож на валли
расскажи про ISD1760. звуков несколько? можно выбирать проигрываемый звук?
можно по разному работать
звуков можно понаписать сколько угодно лишь бы времени хватило
сама 1760 расчитана на 60сек записи но если поигрться с тактовым резистором можно и 120сек сделать ну и тд в даташите все написано.
записывать можно по порядку или по адресу и так же вопроизводить
по адресу только через SPI, а по порядку можно и по SPI и просто с кнопки REC и PLAY
записывать можно через микрофон или через линейный вход, выход прямо на динамик и есть типа линейный выход
ну и есть естессно либы к ней
spi коды управления
делал на полевиках драйвер
так чуть хату не спалил
питание было LI-ION аккумы
что-то пошло не так толи мотор заклинило или еще чего об этом история умалчивает
так вот робот которого я сделал ребенку загорелся
Вот поэтому я и был изначально против схемы, где нет аппаратной защиты против подачи открывающего напряжения на затворы двух полевиков в одной вертикали. Аккумуляторы нынче норовят мощные использовать, при К. З. реально устроить возгорание вплоть до пожара. Небезопасные в этом плане схемы надо либо снабжать предупреждающими надписями, либо не публиковать вовсе. Начинающие возьмутся повторять, слабо понимая, что, как и где работает, а потом пойдут случаи типа этого.
и на батарейки АА
работает уже год
Что-то я не понял. Схеме из 254 поста и месяца еще нет, а вы о годе говорите.
а я не заметил про год)))
добавил примечание к схеме из 254 поста на всякий случай
Я бы все же добавил еще предупреждение о возможном возгорании в случае легкомысленного отношения к силовым цепям. Это лучше мотивирует на размышления о безопасности.
добавил. теперь с такими предупреждениями никто и собирать не захочет)))
сквозной ток, предохранитель, возгорание
брррр. но зато совесть чиста
Я делал сам подобный полтора года назад
не из поста
а год назад переделал на 298
Огромное количество схем в интернете обладают одним общим качеством, не смотря на то, что это схемы совершенно различных устройств. Они не работают и, больше того, не могут работать в принципе.
Вот и пусть не собирают. От того, что кто-то там не расчитав свои силы спалит квартиру, никому никакой радости не будет точно.
ну так эта схема работает же
да пусть не собирают. главное у меня все норм))
Вот чуток подправил, правильно ли?
Картинка не очень, не знаю где рисовать красиво.
Правильно ли подправил?
С выводом PWM все понятно, а как управлять DIR 0 - вперед, 1 - назад, PWM - 0 стоим, PWM - 255 полный газ ?
ты в курсе что данная схема для питания 5В? максимум 6
а вообще вроде правильно все
Да, я понял что пять вольт. Мне как раз и нужно так.
я вродь тоже ошибок не вижу. Единственное, что там за транзисторы?
IRLML2502 и что то еще подобное. корпус SOT23
На картинке другие обозначения, те что были в каталоге программы.
Планирую ставить.
IRLML0030 N-ch 30v,5.3a sot-23
AO3401 P-ch 30v, -4a sot 23
Купил у китайцев по кучке, так что бы не жалеть.
мне кажется лучше в данном случае 1 so8 чем два sot23
По мне так sot23 более универсально:)
универсальное. а тепло рассеивать? посмотри какая максимальная рассеиваемая мощность у этих корпусов
Пятак на них медный приклеить:)))
Пока комментариев нет.Когда соберу схему тогда возможно будут.
Блин, опять все проглядели (и я тоже). :( Верхине мосфеты снова кверх ногами нарисованы. У них исток толжен сидеть на плюсе питания, а сток идти к нижнему мосфету и мотору. Если кто собирать возьмется, учтите.