Проблема совместной работы библиотек Servo и DRV8835
- Войдите на сайт для отправки комментариев
Сб, 28/02/2015 - 20:04
Столкнулся с проблемой, не могу понять причины.
Суть вопроса: в программе использую библиотеку Servo для управления собственно сервоприводом и библиотеку драйвера двигателя DRV8835.
Проблема в том, что драйвер работает, только если PWM на него подается с выхода 10 UNO. А библиотека серво этот выход отключает. С других выходов с PWM драйвер не работает. Почему не могу понять.
#include <Bounce.h> Bounce button4 = Bounce(4, 40); Bounce button6 = Bounce(6, 40); Bounce button7 = Bounce(7, 40); Bounce button8 = Bounce(8, 40); Bounce button9 = Bounce(9, 40); #include <Mymotor.h> Mymotor motor; int speedS=0; int speedmax=200; int speedmin=-100; int speed=speedS; #include <Servo.h> Servo shipwheel; int posS=90; int posR=30; int posL=150; int pos=posS; void setup() { pinMode(4, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); pinMode(8, INPUT); pinMode(9, INPUT); digitalWrite(4, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); Serial.begin(9600); shipwheel.write(posS); } void loop() { if (button8.update()) { if (button8.read()==0) { Serial.println("Right"); shipwheel.attach(11); if (pos>posR) { pos-=1; } shipwheel.write(pos); Serial.println(pos); button8.rebounce(50); } else { Serial.println("clear RIGHT"); shipwheel.write(posS); pos=posS; Serial.println(pos); } } if (button9.update()) { if (button9.read()==0) { Serial.println("Left"); shipwheel.attach(11); if (pos<posL) { pos+=1; } shipwheel.write(pos); Serial.println(pos); button9.rebounce(50); } else { Serial.println("clear LEFT"); shipwheel.write(posS); pos=posS; Serial.println(pos); } } if (button4.update()) { if (button4.read()==0) { Serial.println("Forward"); if (speed<speedmax) { speed+=40; } motor.setM2Speed(speed); Serial.println(speed); button4.rebounce(3000); } else { Serial.println("reset Forward"); motor.setM2Speed(speed); } } if (button6.update()) { if (button6.read()==0) { Serial.println("Back"); if (speed>speedmin) { speed-=40; } motor.setM2Speed(speed); Serial.println(speed); button6.rebounce(3000); } else { Serial.println("reset Back"); motor.setM2Speed(speed); } } if (button7.update()) { if (button7.read()==0) { Serial.println("STOP"); speed=speedS; motor.setM2Speed(speed); Serial.println(speed); } else { Serial.println("reset STOP"); motor.setM2Speed(speed); } } }
надо ковыряться в библиотеках. может быть их несовместимость.
кстати Bounce тоже таймер использует.
библиотеку драйвера уже ковырял, исправил входы, указанные там, на нужные мне.
НО. дальше просто мистика.
в файле библиотеки .cpp указан _M1PWM=10 и _M2PWM=11.
использую второй канал двайвера, т.е. М2.
Казалось бы, подавать PWM на драйвер надо с вывода 11. Нет, так не работает. А если подать PWM с выхода 10, то двигатель работает. И только с 10 и работает. Все остальные перепробовал, не хочет.
Что это?