Проблема совместной работы библиотек Servo и DRV8835

Olger
Offline
Зарегистрирован: 28.02.2015

Столкнулся с проблемой, не могу понять причины.

Суть вопроса: в программе использую библиотеку 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);
} 
} 
} 

 

vvadim
Offline
Зарегистрирован: 23.05.2012

надо ковыряться в библиотеках. может быть их несовместимость.

кстати Bounce тоже таймер использует.

Olger
Offline
Зарегистрирован: 28.02.2015

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

НО. дальше просто мистика.

в файле библиотеки .cpp указан _M1PWM=10 и _M2PWM=11.

использую второй канал двайвера, т.е. М2.

Казалось бы, подавать PWM на драйвер надо с вывода 11. Нет, так не работает. А если подать PWM с выхода 10, то двигатель работает. И только с 10 и работает. Все остальные перепробовал, не хочет.

Что это?