Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Output/Motor/Motor.cpp
- Committer:
- t_yamamoto
- Date:
- 2018-01-16
- Revision:
- 1:e73cf2469f83
- Parent:
- 0:562021ed1ba9
- Child:
- 8:cb53beff4bb2
File content as of revision 1:e73cf2469f83:
#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 = 0; i < MOUNTING_MOTOR_NUM * 2; i++) {
directions[i] = 0;
}
//Pwm Initialize
for(uint8_t i = 0; i < MOUNTING_MOTOR_NUM; i++) {
pwms[i].period_us(50); //20kHz
pwms[i] = 0.0;
}
SetDefault();
}
void Motor::SetDefault(void) {
for(uint8_t i = 0; i < MOUNTING_MOTOR_NUM; i++) {
motor[i].dir = FREE;
motor[i].pwm = 0;
}
}
void Motor::Update(MotorStatus *status) {
for(uint8_t i = 0; i < MOUNTING_MOTOR_NUM; i++) motor[i] = status[i];
//PWM Update
for(uint8_t i = 0; i < MOUNTING_MOTOR_NUM; i++) pwms[i] = percentage_to_ratio(motor[i].pwm);
//Port Update
for(uint8_t i = 0; 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;
}
}