例題4.3 MOTOR1


モータが回転します.
;MOTOR1.SRC            (c)yas@E-SYS Lab.

;********************************
;*      モータ回転プログラム   *
;********************************
;
;------CPUの指定---------
        .CPU    300HA

;---------シンボルの定義----------
;今回は,前回までのPWM用に加えて
;モータドライバ制御用にポート1を使用します.

P1DR    .EQU    H'FFFFC2               ;ポート1データレジスタ(制御信号出力用)     *
TSTR    .EQU    H'FFFF60               ;タイマスタートレジスタ
TSNC    .EQU    H'FFFF61               ;タイマシンクロレジスタ
TMDR    .EQU    H'FFFF62               ;タイマモードレジスタ
TCR0    .EQU    H'FFFF64               ;CH0タイマコントロールレジスタ
GRA0    .EQU    H'FFFF6A               ;CH0ジェネラルレジスタA
GRB0    .EQU    H'FFFF6C               ;CH0ジェネラルレジスタB
        .SECTION ROM,CODE,LOCATE=H'000100     ;コードセクションの宣言

;------初期化--------
;ポート1を出力に設定しています.
;PWMのCH0のクリアタイミングを設定しています.

INIT:   MOV.L   #H'FFF10,ER7           ;スタックポインタの設定
        MOV.B   #H'FF,R0L              ;ポート1を                    *
        MOV.B   R0L,@H'FFFFC0  ;出力用ポートに設定する               *
        MOV.B   #B'11000011,R0L ;GRB0コンペアマッチ
        MOV.B   R0L,@TCR0              ;カウンタクリア

;-----初期設定-------
;初期設定はPWM1プログラムと同じです.
;

        MOV.W   @GRA0_UP,R0            ;立ち上げのタイミングデータを読み込む
        MOV.W   R0,@GRA0               ;それをGRA0に書き込む
        MOV.W   @GRB0_DW,R0            ;立下げのタイミングデータを読み込む
        MOV.W   R0,@GRB0               ;それをGRB0に書き込む
        MOV.B   #B'(_______),R0L       ;TMDRに(________)HINT H'81
        MOV.B   R0L,@TMDR              ;CH0のみPWMモードに設定する
        MOV.B   #B'11100001,R0L ;TSTRに書き込み
        MOV.B   R0L,@TSTR              ;CH0のカウントを始める

;----MAIN-------
;メイン部分です.
;前述の通り,ポート1の出力信号でモータドライバを制御しています.
;今回はモータを1つだけ使用しますので
;ポート1で使用するのはbit0とbit1となります.
;ここではそれぞれの出力を1,0と設定することにより
;モータを正回転に設定しています.
;モータドライバの制御信号については別表を参照して下さい.

        BSET    #0,@P1DR               ;下の行とセットで              *
        BCLR    #1,@P1DR               ;モーターを正回転に設定               *
PWM:    BRA     PWM                    ;PWMにジャンプ

;-----DATA SECTION--------

        .SECTION RAM,DATA,LOCATE=H'000B00
GRA0_UP:       .DATA.W H'1800         ;GRA0,CH0波形立ち上げタイミングデータ
GRB0_DW:       .DATA.W H'3000         ;GRB0,CH0波形立ち下げタイミングデータ

                  .END 

課題 4.3の説明

  • 4行目 CPUの指定をしています.
  • 6〜13行目 シンボルの定義をしています.ほとんどがコントロールレジスタの番地です.P1DRをモータドライバ制御信号出力用に使用します.
  • 15行目 CODEセクションの宣言をしています.
  • 18〜22行目 初期化.スタックポインタにH'FFF10を書き込んでいます.ポート1を出力用ポートに設定しています.TCR(タイマコントロールレジスタ)のCCLR1,CCLR0に1,0,CKEG1,CKEG0に0,0,TPSC2〜TPSC0に0,1,1を書き込みGRB0のコンペアマッチ(一致)でTCNT0がクリアされ,クロックの立ち上がりエッジでカウント動作が行われるように設定しています.また,クロックは内部クロックをプリスケーリングあり(2MHz)で使用するように選択されています.
  • 25〜33行目 データセクションの数値をGRA0,GRB0,GRA1,GRB1に書き込んでいきます.TMDRのPWM0に1を書き込み,CH0をPWMモードに設定し,TSTRのSTR0に1を書き込みカウントをスタートさせます.P1DRのbit0に1をセットし,P1DRのbit2に0をクリアしています.
  • 41〜43行目 41行目ではデータセクションを宣言し,データ領域を確保します.そして,ここにはGRA0,GRB0に書き込むタイミング数値をデータとして書き込んでおきます.

課題:余裕のある人はモータを 2つ回してみましょう.
また,回転速度を変えてみましょう.


  次にモータの制御信号を変えて,モータの回転を正転,逆転など操作します.



[山口研究室] <back | index | next >