28 lines
813 B
C++
28 lines
813 B
C++
/*
|
|
* MotorController — 直流电机控制器实现
|
|
*/
|
|
#include "MotorController.h"
|
|
|
|
MotorController::MotorController(int pwmchip, int pwmnum, int gpioNum, unsigned int period_ns)
|
|
: pwmController(pwmchip, pwmnum), directionGPIO(gpioNum)
|
|
{
|
|
pwmController.setPeriod(period_ns);
|
|
pwmController.setDutyCycle(0); // 先归零再使能, 防止 sysfs 残留值导致电机瞬动
|
|
directionGPIO.setDirection("out");
|
|
pwmController.enable();
|
|
}
|
|
|
|
MotorController::~MotorController(void)
|
|
{
|
|
pwmController.disable();
|
|
}
|
|
|
|
void MotorController::updateduty(double dutyCycle)
|
|
{
|
|
int newduty = pwmController.readPeriod() * std::abs(dutyCycle) / 100.0;
|
|
if (newduty != pwmController.readDutyCycle())
|
|
pwmController.setDutyCycle(newduty);
|
|
|
|
directionGPIO.setValue(dutyCycle > 0);
|
|
}
|