にいむら にいむら
/
mainboardnrp2018
unkounko
Output/Motor/Motor.cpp
- Committer:
- niimurasyou
- Date:
- 2019-02-25
- Revision:
- 11:88f17bc0724f
- Parent:
- 8:cb53beff4bb2
File content as of revision 11:88f17bc0724f:
#include "Motor.h" #include <stdint.h> #include "mbed.h" namespace MOTOR { namespace { MotorStatus motor[MOUNTING_MOTOR_NUM]; DigitalOut directions[] = { DigitalOut(MOTOR0_D1_PIN), DigitalOut(MOTOR0_D2_PIN), DigitalOut(MOTOR1_D1_PIN), DigitalOut(MOTOR1_D2_PIN), DigitalOut(MOTOR2_D1_PIN), DigitalOut(MOTOR2_D2_PIN), DigitalOut(MOTOR3_D1_PIN), DigitalOut(MOTOR3_D2_PIN), DigitalOut(MOTOR4_D1_PIN), DigitalOut(MOTOR4_D2_PIN), }; PwmOut pwms[] = { PwmOut(MOTOR0_PWM_PIN), PwmOut(MOTOR1_PWM_PIN), PwmOut(MOTOR2_PWM_PIN), PwmOut(MOTOR3_PWM_PIN), PwmOut(MOTOR4_PWM_PIN), }; } float percentage_to_ratio(float percentage); void Motor::Initialize(void) { //Port Initialize for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM * 2; i++) { directions[i] = 0; } //Pwm Initialize for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) { pwms[i].period_us(50); //20kHz pwms[i] = 0.0; } SetDefault(); } void Motor::SetDefault(void) { for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) { motor[i].dir = FREE; motor[i].pwm = 0; } } void Motor::Update(MotorStatus *status) { for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) motor[i] = status[i]; //PWM Update for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) pwms[i] = percentage_to_ratio(motor[i].pwm); //Port Update for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) { directions[i * 2] = motor[i].d1; directions[i * 2 + 1] = motor[i].d2; } } float percentage_to_ratio(float percentage) { return percentage / 100.0; } int Motor::SetStatus(float pwm) { if(pwm > 0.0) return FOR; else if(pwm < 0.0) return BACK; else return BRAKE; } }