Проблема совместной работы библиотек 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 и работает. Все остальные перепробовал, не хочет.
Что это?