New | Profile | Travel | PC | Photos | Experiment |
Lチカで目指す信号の出し方が分かったので、今度はステッピングモーターを動かしてみました。回路はブレッドボード上に組み立て、動作確認。Delayは6~4ms位だと脱調せず、きちんと回転します。Delayが余りに長くても、短くても脱調するので要注意です。 |
1: /*************************************************
2: * PIC16F88 ステッピングモータ駆動の実験用
3: * 2017/02/05開始->2017/6/21完了
4: * 90度回転して1秒止まり、また90度回転する
5: * made by M氏 @M氏の幸福実験室
6: *************************************************/
7:
8: #pragma config FOSC = INTOSCCLK//HS//
9: #pragma config WDTE = OFF
10: #pragma config PWRTE = ON 11: #pragma config MCLRE = ON 12: #pragma config BOREN = ON 13: #pragma config LVP = OFF
14: #pragma config CPD = OFF
15: #pragma config WRT = OFF
16: #pragma config CCPMX = RB3
17: #pragma config CP = OFF
18:
19: // CONFIG2
20: #pragma config FCMEN = OFF
21: #pragma config IESO = OFF
22: //#include <pic16f88.h>
23: #include <stdio.h>
24: #include <stdlib.h>
25: #include <xc.h>
26: #define _XTAL_FREQ 8000000
27:
28: void main(void)
29: {
30: OSCCON = 0b01110000; // 内蔵クロックの周波数を8MHzに設定
31: ANSEL = 0;
32: TRISB = 0b00000000;
33: TRISA = 0b00000000;
34: PORTB = 0b00000000;
35: PORTA = 0b00000000;
36:
37: int i, j;
38: //ステッピングモータの駆動部分、1周200ステップなので、90度は50ステップなので、
39: while(1) 40: {
41: __delay_ms(1000); //本チャンでは多段階撮像のシャッター操作を行うサブルーチンを呼ぶ
42: for(i=1;i<=12;i++) //4ステップを12周させて48ステップ回します 43: {
44: PORTBbits.RB7 = 0;
45: PORTBbits.RB6 = 1;
46: PORTBbits.RB5 = 0;
47: PORTBbits.RB4 = 1;
48: __delay_ms(6); //これで1ステップとなります
49: PORTBbits.RB7 = 0;
50: PORTBbits.RB6 = 1;
51: PORTBbits.RB5 = 1;
52: PORTBbits.RB4 = 0;
53: __delay_ms(6);
54: PORTBbits.RB7 = 1;
55: PORTBbits.RB6 = 0;
56: PORTBbits.RB5 = 1;
57: PORTBbits.RB4 = 0;
58: __delay_ms(6);
59: PORTBbits.RB7 = 1;
60: PORTBbits.RB6 = 0;
61: PORTBbits.RB5 = 0;
62: PORTBbits.RB4 = 1;
63: __delay_ms(6);
64: } //残り2ステップを実行
65: PORTBbits.RB7 = 0;
66: PORTBbits.RB6 = 1;
67: PORTBbits.RB5 = 0;
68: PORTBbits.RB4 = 1;
69: __delay_ms(6);
70: PORTBbits.RB7 = 0;
71: PORTBbits.RB6 = 1;
72: PORTBbits.RB5 = 1;
73: PORTBbits.RB4 = 0;
74: __delay_ms(6);
75:
76: __delay_ms(1000); //本チャンでは多段階撮像のシャッター操作を行うサブルーチンを呼ぶ
77:
78: PORTBbits.RB7 = 1; //先ず2ステップの続きを回します
79: PORTBbits.RB6 = 0;
80: PORTBbits.RB5 = 1;
81: PORTBbits.RB4 = 0;
82: __delay_ms(6);
83: PORTBbits.RB7 = 1;
84: PORTBbits.RB6 = 0;
85: PORTBbits.RB5 = 0;
86: PORTBbits.RB4 = 1;
87: __delay_ms(6);
88: for(i=1;i<=12;i++) //4ステップ12周で48ステップ回します 89: {
90: PORTBbits.RB7 = 0;
91: PORTBbits.RB6 = 1;
92: PORTBbits.RB5 = 0;
93: PORTBbits.RB4 = 1;
94: __delay_ms(6);
95: PORTBbits.RB7 = 0;
96: PORTBbits.RB6 = 1;
97: PORTBbits.RB5 = 1;
98: PORTBbits.RB4 = 0;
99: __delay_ms(6);
100: PORTBbits.RB7 = 1;
101: PORTBbits.RB6 = 0;
102: PORTBbits.RB5 = 1;
103: PORTBbits.RB4 = 0;
104: __delay_ms(6);
105: PORTBbits.RB7 = 1;
106: PORTBbits.RB6 = 0;
107: PORTBbits.RB5 = 0;
108: PORTBbits.RB4 = 1;
109: __delay_ms(6);
110: }
111: }
112: }
|
モーターに供給する9V電源はモバイルバッテリから昇圧回路を介して供給しました。12V駆動ですが、とてつもなく加熱するので、9V程度が良い、と秋月電商のアドバイスがありましたが、9VでもST42BYG0506H-4811は結構熱くなります。回るなら、もっと電圧を下げたほうが良いようです。 |
回路の全景 |
ステッピングモータとの結線はこんな感じです。 |