LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

STM32で複数のサーボモータを駆動させる方法

f:id:AtsuyaKoike:20181113194623j:plainSTM32F303K8で複数のサーボモータを駆動させようとしたらマイコンボードが1つ壊れてしまったので、それについて原因の追求と解決策を書きたいと思います。

前提として、マイコンの5V出力のポートから複数のサーボに並列に電力供給をしている状態です。

まず原因と考えられるものがボードに載っているST890CDRの保護回路によるものだと考えられます。保護回路の仕様で大きな電流が流れるとマイコンがリセットされ、そのリセットのオンオフが繰り返され発熱してしまっています。
その結果、熱に耐えられず壊れてしまっているのです。

保護回路のせいで壊れるなんて、、、あくまで予想ですが。

というわけで5V駆動のマイコンだからと言って、マイコンの5Vから持ってくればいいっていう話ではないんですね。 Arduinoばかり使っていると、やらかしてしまいます(汗
なので、電池ボックスやDCジャックなどを使用して、サーボの電源は別に確保してあげましょう。

そして、せっかくなので保護回路を組んでみたいと思います。マイコンにノイズの影響で5V以上の電圧がかかってしまう場合とサーボを手で動かしたとことによる起電力の発生に考慮した回路になっています。

f:id:AtsuyaKoike:20181106205752j:plain

抵抗の10kΩは気分で決めたものなので、200Ωあたりでも大丈夫だと思います。


以上になります〜。簡単ですのでぜひ動かしてみてください。

以下、サンプルプログラム

#include "mbed.h"
#include "mbed_config.h"
 
PwmOut mypwm(D12);
PwmOut mypwm2(D3);

int main() {
	mypwm.period_ms(20);
	mypwm2.period_ms(20);
	while(1)
	{
		mypwm.pulsewidth_us(700);
		mypwm2.pulsewidth_us(700);
		wait(0.5);
		mypwm.pulsewidth_us(1500);
		mypwm2.pulsewidth_us(1500);
		wait(0.5);
	}
}