This commit is contained in:
2026-04-23 11:17:01 +08:00
commit d7fc51018e
11 changed files with 854 additions and 0 deletions

113
src/DRV8870.cpp Normal file
View File

@ -0,0 +1,113 @@
#include "DRV8870.h"
#include <Arduino.h>
DRV8870::DRV8870(int motor_pin_1, int motor_pin_2)
{
this->_motor_count = 1;
this->_motor_pin_1 = motor_pin_1;
this->_motor_pin_2 = motor_pin_2;
pinMode(this->_motor_pin_1, OUTPUT);
pinMode(this->_motor_pin_2, OUTPUT);
}
DRV8870::DRV8870(int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4)
{
this->_motor_count = 2;
this->_motor_pin_1 = motor_pin_1;
this->_motor_pin_2 = motor_pin_2;
this->_motor_pin_3 = motor_pin_3;
this->_motor_pin_4 = motor_pin_4;
pinMode(this->_motor_pin_1, OUTPUT);
pinMode(this->_motor_pin_2, OUTPUT);
pinMode(this->_motor_pin_3, OUTPUT);
pinMode(this->_motor_pin_4, OUTPUT);
}
void DRV8870::setMaxSpeed(int max_speed)
{
this->max_speed = max_speed;
}
void DRV8870::setSpeed(int motor_speed, int direction)
{
switch (this->_motor_count)
{
case 1:
switch (direction)
{
case HighLow:
analogWrite(this->_motor_pin_1, motor_speed);
analogWrite(this->_motor_pin_2, 0);
break;
case LowHigh:
analogWrite(this->_motor_pin_1, 0);
analogWrite(this->_motor_pin_2, motor_speed);
break;
case HighHigh:
analogWrite(this->_motor_pin_1, 0);
analogWrite(this->_motor_pin_2, 0);
break;
default:
break;
}
break;
case 2:
switch (direction)
{
case HighLow:
analogWrite(this->_motor_pin_1, motor_speed);
analogWrite(this->_motor_pin_2, 0);
analogWrite(this->_motor_pin_3, motor_speed);
analogWrite(this->_motor_pin_4, 0);
break;
case LowHigh:
analogWrite(this->_motor_pin_1, 0);
analogWrite(this->_motor_pin_2, motor_speed);
analogWrite(this->_motor_pin_3, 0);
analogWrite(this->_motor_pin_4, motor_speed);
break;
default:
break;
}
break;
default:
break;
}
}
//brake 有误,不在代码中使用
void DRV8870::brake(int mode) //LL休眠HH刹车
{
if (mode == COAST)
{
switch (this->_motor_count)
{
case 1:
digitalWrite(this->_motor_pin_1, LOW);
digitalWrite(this->_motor_pin_2, LOW);
break;
case 2:
digitalWrite(this->_motor_pin_1, LOW);
digitalWrite(this->_motor_pin_2, LOW);
digitalWrite(this->_motor_pin_3, LOW);
digitalWrite(this->_motor_pin_4, LOW);
break;
default:
break;
}
}
else if (mode == BRAKE)
{
switch (this->_motor_count)
{
case 1:
digitalWrite(this->_motor_pin_1, HIGH);
digitalWrite(this->_motor_pin_2, HIGH);
break;
case 2:
digitalWrite(this->_motor_pin_1, HIGH);
digitalWrite(this->_motor_pin_2, HIGH);
digitalWrite(this->_motor_pin_3, HIGH);
digitalWrite(this->_motor_pin_4, HIGH);
break;
default:
break;
}
}
}