Skip to content

Instantly share code, notes, and snippets.

@TakanoTaiga
Last active July 1, 2024 01:05
Show Gist options
  • Save TakanoTaiga/a3f12aa834d51668994497c85676df4a to your computer and use it in GitHub Desktop.
Save TakanoTaiga/a3f12aa834d51668994497c85676df4a to your computer and use it in GitHub Desktop.
BLDC ↑
#include "mbed.h"
// ピンの定義
#define PWM_U PC_9
#define CWCCW_U PA_5
#define PWM_V PB_8
#define CWCCW_V PA_7
#define PWM_W PB_9
#define CWCCW_W PC_8
#define delayTime 1000ms
// PWM出力用のPwmOutオブジェクト
// ToDo: ここは使うNucleに合わせて変える
PwmOut pwm_U(PWM_U);
PwmOut pwm_V(PWM_V);
PwmOut pwm_W(PWM_W);
// デジタル出力用のDigitalOutオブジェクト
DigitalOut sd_U(CWCCW_U);
DigitalOut sd_V(CWCCW_V);
DigitalOut sd_W(CWCCW_W);
int main() {
// 初期設定
pwm_U.period_ms(1); // PWM周期を1msに設定
pwm_V.period_ms(1);
pwm_W.period_ms(1);
pwm_U.write(0.0f); // PWMデューティサイクルを0%に設定
pwm_V.write(0.0f);
pwm_W.write(0.0f);
sd_U = 1; // 通電
sd_V = 1;
sd_W = 1;
wait_us(100000); // 100ms待機
while (true) {
// 1 U->W
pwm_U.write(1.0f); // PWMデューティサイクルを100%に設定
pwm_V.write(0.0f);
pwm_W.write(0.0f);
sd_U = 1;
sd_V = 0;
sd_W = 1;
ThisThread::sleep_for(delayTime);
// 2 U->V
pwm_U.write(1.0f);
pwm_V.write(0.0f);
pwm_W.write(0.0f);
sd_U = 1;
sd_V = 1;
sd_W = 0;
ThisThread::sleep_for(delayTime);
// 3 W->V
pwm_U.write(0.0f);
pwm_V.write(0.0f);
pwm_W.write(1.0f);
sd_U = 0;
sd_V = 1;
sd_W = 1;
ThisThread::sleep_for(delayTime);
// 4 W->U
pwm_U.write(0.0f);
pwm_V.write(0.0f);
pwm_W.write(1.0f);
sd_U = 1;
sd_V = 0;
sd_W = 1;
ThisThread::sleep_for(delayTime);
// 5 V->U
pwm_U.write(0.0f);
pwm_V.write(1.0f);
pwm_W.write(0.0f);
sd_U = 1;
sd_V = 1;
sd_W = 0;
ThisThread::sleep_for(delayTime);
// 6 V->W
pwm_U.write(0.0f);
pwm_V.write(1.0f);
pwm_W.write(0.0f);
sd_U = 0;
sd_V = 1;
sd_W = 1;
ThisThread::sleep_for(delayTime);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment