PICマイコンでステッピングモーターを動かす

PICマイコンを使用し、ステッピングモーターを動かします。

次のようなステップになります。

  1. 必要なパーツを揃える
  2. ブレッドボードに回路を作成する
  3. MPLABのプロジェクトを作成する
  4. C言語でプログラムを作成する
  5. MPLAB X IDEでプログラムをPICに書き込む
  6. PICをブレッドボードに取り付けてステッピングモーターを動かす

1. 必要なパーツを揃える

必要なもの

補足

2. ブレッドボードに回路を作成する

秋月のPICステッピングモータドライバキットの回路図を参考にブレッドボードに回路を作成します。

回路図

Circuit diagram

Circuit diagram

3. MPLABのプロジェクトを作成する

前回と同様にプロジェクトを作成します
名前は、pic_0005_motorとします。

4. C言語でプログラムを作成する

制御方式は、1相励磁とします。
A相、B相、Aバー相、Bバー相、A相の順に励磁することでモーターが回転します。

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config CP = OFF
#define _XTAL_FREQ 20000000

// 156 = 2[ms] * 5[MHz] / 64
#define TMR0_VALUE (256 - 156)

#define TMR0_10_MS_COUNT 5

static unsigned short t0 = 0;

static unsigned int i = 0;

void interrupt tc_int(void) {
if (T0IF != 1) {
return;
}

T0IF = 0;
t0++;

if (t0 < TMR0_10_MS_COUNT) {
TMR0 = TMR0_VALUE;
return;
}
t0 = 0;

i++;
if (i >= 4) {
i = 0;
}

switch (i) {
case 0:
PORTBbits.RB0 = 1;
PORTBbits.RB1 = 0;
PORTBbits.RB2 = 0;
PORTBbits.RB3 = 0;
break;
case 1:
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 1;
PORTBbits.RB2 = 0;
PORTBbits.RB3 = 0;
break;
case 2:
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB2 = 1;
PORTBbits.RB3 = 0;
break;
case 3:
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0;
PORTBbits.RB2 = 0;
PORTBbits.RB3 = 1;
break;
}

TMR0 = TMR0_VALUE;
}

int main() {
GIE = 1; // Enables all unmasked interrupts
T0IE = 0; // Disable the TMR0 interrupt
T0CS = 0; // Internal instruction cycle clock (CLKOUT)
PSA = 0; // Prescaler is assigned to the Timer0 module

OPTION_REGbits.T0CS = 0; // Internal instruction cycle clock
OPTION_REGbits.PS = 5; // Prescaler Rate = (1:64)
OPTION_REGbits.PSA = 0; // Timer0

TRISBbits.TRISB0 = 0;
TRISBbits.TRISB1 = 0;
TRISBbits.TRISB2 = 0;
TRISBbits.TRISB3 = 0;

TMR0 = TMR0_VALUE;
T0IE = 1; // Enable the TMR0 interrupt

while(1) {
}

return 0;
}

解説

PICとステッピングモータの接続は以下のとおりです。

  • RB0がA相
  • RB1がB相
  • RB2がAバー相
  • RB3がBバー相

順に励磁することでモーターが回転します。励磁の切り替えは10[ms]としました。
今回選択したステッピングモーター(SPG20-1332)は1回転480ステップなので、1周するのに4800[ms]かかります。

5. MPLAB X IDEでプログラムをPICに書き込む

省略

6. PICをブレッドボードに取り付けてステッピングモーターを動かす

今回は電源に注意してください。
モーターのは12Vに接続しますが、PICは今までどおり電池ボックスに接続してください。