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.

58 lines
1.6 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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. cfg->pwm_cfg.calltrace = cfg->enableTrace;
  6. m_pwmCtrl.initialize(&cfg->pwm_cfg);
  7. m_pwmCtrl.settrace(cfg->enableTrace);
  8. ZASSERT(cfg->nsleep != PinNull);
  9. ZASSERT(cfg->nfault != PinNull);
  10. ZASSERT(cfg->sensePin != PinNull);
  11. m_nsleep.initAsOutput(cfg->nsleep, ZGPIO::kMode_nopull, false, false);
  12. m_nsleep.enableTrace(cfg->enableTrace);
  13. m_nfault.initAsInput(cfg->nfault, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
  14. m_nsensePin.initAsInput(cfg->sensePin, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
  15. m_in2.initAsOutput(cfg->in2, ZGPIO::kMode_nopull, false, false);
  16. m_in2.enableTrace(cfg->enableTrace);
  17. enable(false);
  18. }
  19. void DRV8710::moveForward(int32_t duty) {
  20. if (duty > 100) duty = 100;
  21. if (duty < 0) duty = 0;
  22. if (m_cfg.shaft) duty = 100 - duty;
  23. set_direcetion(true);
  24. m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
  25. }
  26. void DRV8710::moveBackward(int32_t duty) {
  27. if (duty > 100) duty = 100;
  28. if (duty < 0) duty = 0;
  29. if (!m_cfg.shaft) duty = 100 - duty;
  30. set_direcetion(false);
  31. m_pwmCtrl.startPWM(m_cfg.in1_chnannel_index, duty);
  32. }
  33. bool DRV8710::isFault() { return !m_nfault.getState(); }
  34. void DRV8710::move(int32_t duty) {
  35. if (duty >= 0) {
  36. moveForward(duty);
  37. } else if (duty < 0) {
  38. moveBackward(-duty);
  39. }
  40. }
  41. void DRV8710::set_direcetion(bool direcetion) {
  42. if (m_cfg.shaft) direcetion = !direcetion;
  43. m_in2.setState(direcetion);
  44. }
  45. void DRV8710::enable(bool varenable) { m_nsleep.setState(varenable); }