沼津高専 電子制御工学科

MIRS0702回転盤制御用PICプログラム製造仕様書

MIRS0702-ELEC-0004

改訂記録

版数

作成日

作成者

承認

改訂内容

A01

2007.12.14

齋藤・藤田

平田

初版

目次

1 PICプログラム内容

 

 

1 PICプログラム内容

 

接続されるステッピングモーターはPORTAの下位4bit(RA3,RA2,RA1,RA0)01010110101010010101→…と変化させていくことで右回転を実現し、その逆の変化をさせていくことで左回転を実現する。

右回転、左回転、命令はそれぞれが同時に入ったとしても同時に動くことはない。

FPGAボードないでの回路によって、右回転、左回転、停止の命令が複数競合することが内容になっているので、停止を優先させるような処理は行う必要がない。

ステップモーターはパルス入力が入ると動くので、逆に言えば右か左へ動かすような入力がない限り動かない。よって停止命令による特別な処理はしていない。

 

以上の使用を満たすように作成したプログラムを以下に示す

 

                                            

              INCLUDE"p16F84.inc"

              list p=16F84

 

STATUS            EQU                   3

PORTA              EQU                   5

PORTB              EQU                   6

TRISA EQU     H'85'

TRISB EQU     H'86'

Memory             EQU                   0x0C

OutMode           EQU                   Memory+0

 

                            CLRF                 PORTA

START              CALL                 PortSet

                            CALL                 IniSet

 

STEP1

CHKS                BTFSS               PORTB,1

                            GOTO                CHKL

                            GOTO                CHKS

CHKL                BTFSS               PORTB,0

                            GOTO                CHKR

                            GOTO                ROTL

CHKR                BTFSS               PORTB,2

                            GOTO                CHKS

                            GOTO                ROTR

 

PortSet              BSF                    STATUS,5         ;ページ切り替え

                            MOVLW            B'00100111'

                            MOVWF            TRISB               ;PORTBの入出力設定

                            MOVLW            B'00000000'

                            MOVWF            TRISA               ;PORTAを全て出力に設定

                            BCF                   STATUS,5         ;ページ切り替え

                            RETURN

 

IniSet                 MOVLW            B'00000101'     

                            MOVWF            PORTA              ;PORTAに初期値を与える

                            MOVLW            B'00000000'      ;初期値を0としてOUTMODEに入れる

                            MOVWF            OutMode

                            RETURN

 

 

ROTL                 INCF                 OutMode,1

                            GOTO                Rotate

ROTR                DECF                OutMode,1

 

Rotate                BTFSS               OutMode,0        ;OutModeの値判定

                            GOTO                CaseX0

                            GOTO                CaseX1

CaseX0              BTFSS               OutMode,1

                            GOTO                Case00

                            GOTO                Case10

CaseX1              BTFSS               OutMode,1

                            GOTO                Case01

                            GOTO                Case11

 

Case00               MOVLW            B'00000101'     

                            GOTO                Fin

 

Case01               MOVLW            B'00000110'

                            GOTO                Fin

 

Case10               MOVLW            B'00001010'

                            GOTO                Fin

 

Case11               MOVLW            B'00001001'

 

Fin                      MOVWF            PORTA

WAIT                 BTFSS               PORTB,1

                            GOTO                WAIT

                            GOTO                STEP1

 

END

 

 

 

以上のプログラムをアセンブリして、pic16f84に書き込んで用いる。

 

なお、プログラム中のWAITの部分についてであるが、左右の回転命令が来て1ステップ回転させた後、一度STOP命令が来るまで待機する処理である。この処理は、我々のステッピングモーターの回転角制御のためにCPUから送信される回転命令の回数を数える必要があり、そのための対策としてCPUの回転命令は左右どちらかの回転命令のあとSTOP命令を一度はさんで次の回転命令を出すようにしている。例えばLEFTLEFTLEFTCPUが命令を出したとき、PICの入力ポートの値は(FPGAの設計した回路により)何回書き込んでも1から変化しないため、CPUが何回回転命令を出したのか数えることは困難である。そのためLEFTSTOPLEFTSTOPLEFTSTOPと命令をCPUが出すことによって左方向に3ステップとカウントしている。