Переделанный 28BYJ-48 и драйвер TB6612FNG
- Войдите на сайт для отправки комментариев
Чт, 10/05/2018 - 01:13
Приветствую!
Фабула:
Унополярный двигатель 28BYJ-48 переделан в биполярный (перерезана дорожка к красному проводу)
http://digitrode.ru/images/2014/08/21/3.jpg
Соответственно, обмотки стали:
1я: Оранжевый, розовый.
2я: Красный, синий.
Теоретически пока все верно. Вместе с двигателями купил новомодный драйвер TB6612FNG от Toshiba, но вот беда - не могу найти библиотеку под этот драйвер для биполярного двигателя. Даже родная библиотека содержит пример только для коллекторных двигателей. Другие библиотеки не используют пины PWM, STBY и AIN1/2, соответственно, нельзя включить мотор или изменить его скорость...
Может кто встречал пример работы этого драйвера и биполярного двигателя ?
А в чем была изначальная задача?
Внести изменения в конструкцию, чтобы затем чесать репу, что с таким измененным устройством делать?
Берите любой step-dir.
Они обычно как раз биполярниками управляют.
https://www.ebay.com/p/4pcs-A4988-StepStick-Stepper-Driver-for-Controler...
А с каких пор TB6612 перестал быть step/dir драйвером ?
А с каких пор TB6612 перестал быть step/dir драйвером ?
Он им никогда и не был, это улучшенная L298. Если совокупить его с L297, то можно получить желаемое, но лучше не надо. Конечно если хочется, то можно все программно сделать, но смысла в этом нет, будет примерно то-же что и на ULN, только чуть помощнее и с защитами.
Ну я хз, очень поход по конструкции. Я так понял регулировка скорости это только про коллекторный двигатель, а на шаговых придется высчитывать время между импульсами ?
С виду похож, наверное автор топика поэтому и купился.
Более того, купил целую пачку под большой проект... Надо че-то делать. Если есть понимание по этому драйверу, скажите - про PWM для биполярного двигателя забыть ?
ЗЫ пришел ответ от разработчика:
If you’re referring to this type of motor, the TB6612FNG can theoretically drive a stepper motor but it’s not intended for that nor do we have information on how to do that.
We do have a couple motor drivers specifically for driving a Bipolar Stepper Motor. The Easy Driver
М-дя... Значит врукопашную присать код по любому.
Более того, купил целую пачку под большой проект... Надо че-то делать. Если есть понимание по этому драйверу, скажите - про PWM для биполярного двигателя забыть ?
М-дя... Значит врукопашную присать код по любому.
PWM в данном случае можно регулировать ток в обмотках ШД, а все остальное программно. Если движок один, это еще не очень страшно, он отъест всего 4 выхода ардуины (если не использовать PWM и Enable). Ищите конструкции с ULN2003 или L298 (она ближе всего к даной МС). Можно еще добавить L297, но это усложнит конструкцию, да и навесухи много. Смотрите Что-то типа этого: http://mypractic.ru/urok-33-bipolyarnyj-shagovyj-dvigatel-v-sisteme-arduino.html
Вощем получился рабочий скеч, крутит в обе стороны вал двигателя с постоянной скоростью. Немного модфицировал уже существующий где-то на форуме код. Даже не знаю, есть ли смысл его выкладывать. Драйвер очень хорош для двух коллекторных двигателей, для шагового в принципе подходит, но лучше сразу брать адекватный драйвер без лишних пинов.
#define PWMA 6 #define PWMB 7 #define AIN1 8 #define AIN2 9 #define BIN1 10 #define BIN2 11 #define STBY 12 #define dstep 1150 // время между тактами bool dir; void ustep(uint8_t s); void steps(uint16_t s); void setup() { pinMode(AIN1, OUTPUT); pinMode(AIN2, OUTPUT); pinMode(BIN1, OUTPUT); pinMode(BIN2, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(PWMB, OUTPUT); pinMode(STBY, OUTPUT); digitalWrite(PWMA, HIGH); // подать на обе катушки доступный ток digitalWrite(PWMB, HIGH); Serial.begin(9600); Serial.println("f - Направление по часовой"); Serial.println("b - Направление против часовой"); Serial.println("g - Один оборот вала редуктора"); Serial.println("m - Один оборот двигателя"); } void loop() { if (Serial.available() > 0) { char incoming_char = Serial.read(); switch (incoming_char) { case 'm': steps(64); break; case 'g': steps(4076); break; case 'f': dir = true; break; case 'b': dir = false; break; } } } void ustep(uint8_t s) { switch (s) { case 0: digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW); digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW); break; case 1: digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW); digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW); break; case 2: digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW); digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW); break; case 3: digitalWrite(AIN1, LOW); digitalWrite(AIN2, HIGH); digitalWrite(BIN1, HIGH); digitalWrite(BIN2, LOW); break; case 4: digitalWrite(AIN1, LOW); digitalWrite(AIN2, HIGH); digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW); break; case 5: digitalWrite(AIN1, LOW); digitalWrite(AIN2, HIGH); digitalWrite(BIN1, LOW); digitalWrite(BIN2, HIGH); break; case 6: digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW); digitalWrite(BIN1, LOW); digitalWrite(BIN2, HIGH); break; case 7: digitalWrite(AIN1, HIGH); digitalWrite(AIN2, LOW); digitalWrite(BIN1, LOW); digitalWrite(BIN2, HIGH); break; } delayMicroseconds(dstep); digitalWrite(AIN1, LOW); digitalWrite(AIN2, LOW); digitalWrite(BIN1, LOW); digitalWrite(BIN2, LOW); } void steps(uint16_t s) { digitalWrite(STBY, HIGH);// разрешить работу двигателя static uint8_t ss; for (uint16_t i=0; i<s;i++) { if (dir) {ss++; if(ss>7) ss=0;} else {if(ss<1) ss=8; ss--;}; ustep(ss); } digitalWrite(STBY, LOW); // запретить работу с двигателем }Если остальных ног хватает для выполнения задачи, то и мудрить больше не стоит.
Думаю, надо убрать пины скорости на плюс. Может еще есть смысл посидеть с осцилографом, глянуть, возможно стоит поиграть с длинной импульса.