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.

46 lines
1.1 KiB

2 years ago
2 years ago
2 years ago
  1. #include "drv8710.hpp"
  2. using namespace iflytop;
  3. void DRV8710::initialize(config_t* cfg) { //
  4. m_cfg = *cfg;
  5. m_pwmCtrl.initialize(cfg->tim, 10 * 000, false);
  6. m_nsleep.initAsOutput(cfg->nsleep, ZGPIO::kMode_nopull, false, false);
  7. m_nfault.initAsInput(cfg->nfault, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
  8. m_in2.initAsOutput(cfg->in2, ZGPIO::kMode_nopull, false, false);
  9. enable(false);
  10. }
  11. void DRV8710::moveForward(int32_t duty) {
  12. if (duty > 100) duty = 100;
  13. if (duty < 0) duty = 0;
  14. set_direcetion(true);
  15. m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
  16. }
  17. void DRV8710::moveBackward(int32_t duty) {
  18. if (duty > 100) duty = 100;
  19. if (duty < 0) duty = 0;
  20. set_direcetion(false);
  21. m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
  22. }
  23. bool DRV8710::isFault() { return !m_nfault.getState(); }
  24. void DRV8710::move(int32_t duty) {
  25. if (duty >= 0) {
  26. moveForward(duty);
  27. } else if (duty < 0) {
  28. moveBackward(-duty);
  29. }
  30. }
  31. void DRV8710::set_direcetion(bool direcetion) {
  32. if (m_cfg.shaft) {
  33. direcetion = !direcetion;
  34. }
  35. m_in2.setState(direcetion);
  36. }
  37. void DRV8710::enable(bool varenable) { m_nsleep.setState(varenable); }