You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.6 KiB
61 lines
1.6 KiB
#include "drv8710.hpp"
|
|
using namespace iflytop;
|
|
|
|
void DRV8710::initialize(config_t* cfg) { //
|
|
m_cfg = *cfg;
|
|
cfg->pwm_cfg.calltrace = cfg->enableTrace;
|
|
m_pwmCtrl.initialize(&cfg->pwm_cfg);
|
|
m_pwmCtrl.settrace(cfg->enableTrace);
|
|
|
|
ZASSERT(cfg->nsleep != PinNull);
|
|
ZASSERT(cfg->nfault != PinNull);
|
|
ZASSERT(cfg->sensePin != PinNull);
|
|
|
|
m_nsleep.initAsOutput(cfg->nsleep, ZGPIO::kMode_nopull, false, false);
|
|
m_nsleep.enableTrace(cfg->enableTrace);
|
|
m_nfault.initAsInput(cfg->nfault, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
|
|
m_nsensePin.initAsInput(cfg->sensePin, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
|
|
|
|
m_in2.initAsOutput(cfg->in2, ZGPIO::kMode_nopull, false, false);
|
|
m_in2.enableTrace(cfg->enableTrace);
|
|
osDelay(5);
|
|
enable(true);
|
|
}
|
|
|
|
void DRV8710::moveForward(int32_t duty) {
|
|
if (duty > 100) duty = 100;
|
|
if (duty < 0) duty = 0;
|
|
|
|
if (m_cfg.shaft) duty = 100 - duty;
|
|
|
|
set_direcetion(true);
|
|
m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
|
|
}
|
|
void DRV8710::moveBackward(int32_t duty) {
|
|
if (duty > 100) duty = 100;
|
|
if (duty < 0) duty = 0;
|
|
|
|
if (!m_cfg.shaft) duty = 100 - duty;
|
|
|
|
set_direcetion(false);
|
|
m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
|
|
}
|
|
|
|
bool DRV8710::isFault() { return !m_nfault.getState(); }
|
|
|
|
void DRV8710::clearFault() { move(0); }
|
|
|
|
void DRV8710::move(int32_t duty) {
|
|
if (duty >= 0) {
|
|
moveForward(duty);
|
|
} else if (duty < 0) {
|
|
moveBackward(-duty);
|
|
}
|
|
}
|
|
|
|
void DRV8710::set_direcetion(bool direcetion) {
|
|
if (m_cfg.shaft) direcetion = !direcetion;
|
|
m_in2.setState(direcetion);
|
|
}
|
|
|
|
void DRV8710::enable(bool varenable) { m_nsleep.setState(varenable); }
|