RaspberryPIとFETによるモーター制御回路
RaspberryPIでモーター制御を行う。
モーターと一言で言っても色々あるのですが、今回は通称マブチ130モーター
型番は「FA-130RAL」と書いてあります。DC5Vで9000RPM。
知らない人は普通のプラモデル用のモーターだと思ってください。
これを回すのはarduinoの場合はPWM出力してその先にFETで電力を増幅してモーターが回るわけですが、
RaspberryPIで行うには・・・と調べてみたところ、例によって「wiringPi」で実施可能です。
しかし、それで判ったんですが。arduino-UNOにはPWM出力が6本付いていたんですが、
Raspberry-PIには1本しか付いていません。
なぜだRaspberryPI。それが出来るのがGPIO18だけなんです。
他のピンに置き換えて実験してみたけど動きませんでした。悪しからず。
ちなみに、アナログでの電圧入力端子は無いし。電子工作的にはちょっと苦労するかもね。
映像
回路図です。

プログラム解説
簡単ですね。
5000000ナノセックsleepしながらスイッチのUPが押されていたらPower(モーターへの電力)を足す。
DOWNが押されていたらPowerを引く。
「pwmWrite( PIN_MOTOR ,nPower );」で18番ピンに電力する電力を制御する。
といった具合です。
プログラム
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <wiringPi.h>
5
6
7 #define PIN_UP 15
8 #define PIN_DOWN 14
9 #define PIN_MOTOR 18
10
11 int main()
12 {
13 wiringPiSetupGpio();
14
15 pinMode( PIN_MOTOR, PWM_OUTPUT );
16 pinMode( PIN_UP, INPUT );
17 pinMode( PIN_DOWN, INPUT );
18 pwmSetMode( PWM_MODE_MS );
19 pwmSetClock( 400 );
20 pwmSetRange( 1000 );
21
22 //
23 //
24 //
25 struct timespec req, rem;
26 req.tv_sec = 0;
27 req.tv_nsec = 5000000; //
28 //
29 int nPower = 0;
30 //
31 while(1){
32 if(digitalRead(PIN_UP)){
33 printf("PIN_UP¥n");
34 nPower++;
35 }
36 if(digitalRead(PIN_DOWN)){
37 printf("PIN_DOWN¥n");
38 nPower--;
39 }
40 if(nPower<0){
41 nPower=0;
42 }
43 if(nPower>1000){
44 nPower=1000;
45 }
46 printf("nPower = %d¥n", nPower);
47 pwmWrite( PIN_MOTOR ,nPower );
48 nanosleep(&req, &rem);
49 //sleep(1);
50 }
51 return 0;
52 }