- 最終更新日
- 記事公開日
PICで振動モーター(バイブレーション)が動かないのは「電流不足」が原因
【P-15315】 円盤型振動モーター FM64F30T11F
【P-15317】 円盤型振動モーター FM64G30T101
秋月電子で購入した振動モーター(バイブレーション)、とりあえず3Vを流してみたけど動きませんでした。
どうやら、電流が足りていない模様。
- PICに流すことができる電流:25mA
- 振動モーターを動かすのに必要な電流:55mA
トランジスタ(2SC1815)を追加して、電流を増幅することで、無事に動きました。
回路図
プログラム
// PIC12F683 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// 初期設定
#pragma config FOSC = INTOSCIO // 内部クロックを使用する(3番Pinは入出力に)
#pragma config WDTE = OFF // フリーズしたときに強制リセットするか?
#pragma config PWRTE = OFF // 起動時、電源が安定するまで待つか?
#pragma config MCLRE = ON // 外部からのリセット信号を受け付けるか?
#pragma config CP = OFF // プログラムの外部読み取りを許可するか?
#pragma config CPD = OFF // データの外部読み取りを許可するか?
#pragma config BOREN = ON // 電源が不安定になったとき動作を停止するか?
#pragma config IESO = OFF // 外部クロックが安定するまで内部クロックを使用するか?
#pragma config FCMEN = OFF // 外部クロックが止まったとき内部クロックを使用するか?
#define _XTAL_FREQ 1000000 // delay_ms()などの関数用にクロック周波数を定義
// ============================================================
//
// メインプログラム
//
// ============================================================
/* 12F683
* ------
* VDD -| 1 8 |- VSS
* GP5 -| 2 7 |- GP0
* GP4 -| 3 6 |- GP1
* GP3 -| 4 5 |- GP2
* ------
*/
void main(void)
{
// OSCCON レジスタ(内部クロックの周波数を設定)
// 1MHzに設定
OSCCON = 0b01000000;
// TRISIO レジスタ(GP0~GP5の入出力モードを設定)
// すべて出力モードに設定
TRISIO = 0b00000000;
// ANSEL レジスタ(A/D変換のクロック・アナログ入力ピンを設定)
// 全てデジタルピンに設定
ANSEL = 0b00000000;
while(1) {
GP2 = 1;
__delay_ms(1000);
GP2 = 0;
__delay_ms(1000);
}
}
こういう当たり前のことって、意外とみんな書いてくれませんもんね。