目次

パルスモータ制御

 パルスモータ制御ICを、8048に接続します。



 ICのブロック図は、以下。



 動作は、次の真理値表で理解できます。



 モータを回転させるには、次のシーケンスを利用。
  1. VS2BのAに'1'をセット、VS2BのBに'0'をセット
  2. (INB,INA)=(0,1)を印加
  3. (INB,INA)=(0,0)を印加
  4. VS2BのBに'1'をセット、VS2BのAに'0'をセット
  5. (INB,INA)=(1,0)を印加
  6. (INB,INA)=(0,0)を印加
 ポート1の4ビットにINA、INBV、VS2Bを接続して  論理値を出力すれば、パルスモータを回転させる  ことができます。  ポート1のピンアサインは以下。  必要なサブルーチンを定義します。  VS2B処理   ポート1の2ビット目を、セットするか   クリアするためのサブルーチンを別々に   作成。 EN_VA: ; get now state in a,P1 ; set target bit orl a,#4 ; impress outl P1,a ; ret DIS_VA: ; get now state in a,P1 ; clr target bit xrl a,#0fbh ; impress outl P1,a ; ret EN_VB: ; get now state in a,P1 ; set target bit orl a,#8 ; impress outl P1,a ; ret DIS_VB: ; get now state in a,P1 ; clr target bit xrl a,#0f7h ; impress outl P1,a ; ret  INAとINBの処理   ポート1の0、1ビット目を、セットするか   クリアするためのサブルーチンを別々に作成。 SET_A: ; get now state in a,P1 ; set target bit orl a,#1 ; impress outl P1,a ; ret SET_B: ; get now state in a,P1 ; set target bit orl a,#2 ; impress outl P1,a ; ret CLR_AB: ; get now state in a,P1 ; set target bit xrl a,#0fch ; impress outl P1,a ; ret  正転処理   利用できるサブルーチンができているので   正転させるためのシーケンスを考えます。
  1. VS2BのAに'1'をセット、VS2BのBに'0'をセット
  2. (INB,INA)=(0,1)を印加
  3. (INB,INA)=(0,0)を印加
  4. VS2BのBに'1'をセット、VS2BのAに'0'をセット
  5. (INB,INA)=(1,0)を印加
  6. (INB,INA)=(0,0)を印加
  シーケンスができれば、アセンブリ言語コードに   落としこみ。 FWD_ROT: ; VS2B call EN_VA call DIS_VB ; set A call SET_A ; clear A call CLR_AB ; VS2B call DIS_VA call EN_VB ; set B call SET_B ; clear A call CLR_AB ; ret  逆転処理   逆転は、INBからの電圧印加でシーケンスを   開始します。 REV_ROT: ; VS2B call DIS_VA call EN_VB ; set B call SET_B ; clear A call CLR_AB ; VS2B call EN_VA call DIS_VB ; set A call SET_A ; clear A call CLR_AB ; ret  サブルーチンを用意したので、ハードウエアを半田付け。  大阪のデジットで1個¥100で入手できるパルス  モータにドライバとなるICを接続。  8048は、ドライバICに制御パルスを出力します。  まとめると、以下。 ; ; TEST program for 8048 ( PROASM-II ) ; Copyright (C) 2018 Kensuke Ooyu ; INCLUDE 8048.LIB ;******************* ; value and address ;******************* MODE equ 18h ADR equ 19h DIGITA equ 1Ah DIGITB equ 1Bh ;**************** ; define symbols ;**************** ENTRY equ 0h E_INT equ 3h E_TIM equ 7h ;******************* ; interrupt vectors ;******************* org ENTRY jmp START ; external interrupt org E_INT retr ; timer interrupt org E_TIM retr org 10h ;************** ; sub routines ;************** INIT: ; disable external interrupt dis i ; disable timer interrupt dis tcnti ; initialize I/O mov a,#0 outl p1,a outl p2,a ret EN_VA: ; get now state in a,P1 ; set target bit orl a,#4 ; impress outl P1,a ; ret DIS_VA: ; get now state in a,P1 ; clr target bit xrl a,#0fbh ; impress outl P1,a ; ret EN_VB: ; get now state in a,P1 ; set target bit orl a,#8 ; impress outl P1,a ; ret DIS_VB: ; get now state in a,P1 ; clr target bit xrl a,#0f7h ; impress outl P1,a ; ret SET_A: ; get now state in a,P1 ; set target bit orl a,#1 ; impress outl P1,a ; ret SET_B: ; get now state in a,P1 ; set target bit orl a,#2 ; impress outl P1,a ; ret CLR_AB: ; get now state in a,P1 ; set target bit xrl a,#0fch ; impress outl P1,a ; ret FWD_ROT: ; VS2B call EN_VA call DIS_VB ; set A call SET_A ; clear A call CLR_AB ; VS2B call DIS_VA call EN_VB ; set B call SET_B ; clear A call CLR_AB ; ret REV_ROT: ; VS2B call DIS_VA call EN_VB ; set B call SET_B ; clear A call CLR_AB ; VS2B call EN_VA call DIS_VB ; set A call SET_A ; clear A call CLR_AB ; ret ;************** ; main routine ;************** org 100h START: call INIT MAIN: ; jmp MAIN end  アセンブルリストは、次のようになります。 0000 ; 0000 ; TEST program for 8048 ( PROASM-II ) 0000 ; Copyright (C) 2018 Kensuke Ooyu 0000 ; 0000 INCLUDE 8048.LIB 0000 list 0000 0000 ;******************* 0000 ; value and address 0000 ;******************* 0018 MODE equ 18h 0019 ADR equ 19h 001A DIGITA equ 1Ah 001B DIGITB equ 1Bh 0000 0000 ;**************** 0000 ; define symbols 0000 ;**************** 0000 ENTRY equ 0h 0003 E_INT equ 3h 0007 E_TIM equ 7h 0000 0000 ;******************* 0000 ; interrupt vectors 0000 ;******************* 0000 org ENTRY 0000 2400 + jmp START 0002 0002 ; external interrupt 0002 org E_INT 0003 93 + retr 0004 0004 ; timer interrupt 0004 org E_TIM 0007 93 + retr 0008 0008 org 10h 0010 ;************** 0010 ; sub routines 0010 ;************** 0010 INIT: 0010 ; disable external interrupt 0010 15 + dis i 0011 0011 ; disable timer interrupt 0011 35 + dis tcnti 0012 0012 ; initialize I/O 0012 2300 + mov a,#0 0014 39 + outl p1,a 0015 3A + outl p2,a 0016 0016 83 + ret 0017 0017 EN_VA: 0017 ; get now state 0017 09 + in a,P1 0018 ; set target bit 0018 4304 + orl a,#4 001A ; impress 001A 39 + outl P1,a 001B ; 001B 83 + ret 001C 001C DIS_VA: 001C ; get now state 001C 09 + in a,P1 001D ; clr target bit 001D D3FB + xrl a,#0fbh 001F ; impress 001F 39 + outl P1,a 0020 ; 0020 83 + ret 0021 0021 EN_VB: 0021 ; get now state 0021 09 + in a,P1 0022 ; set target bit 0022 4308 + orl a,#8 0024 ; impress 0024 39 + outl P1,a 0025 ; 0025 83 + ret 0026 0026 DIS_VB: 0026 ; get now state 0026 09 + in a,P1 0027 ; clr target bit 0027 D3F7 + xrl a,#0f7h 0029 ; impress 0029 39 + outl P1,a 002A ; 002A 83 + ret 002B 002B SET_A: 002B ; get now state 002B 09 + in a,P1 002C ; set target bit 002C 4301 + orl a,#1 002E ; impress 002E 39 + outl P1,a 002F ; 002F 83 + ret 0030 0030 SET_B: 0030 ; get now state 0030 09 + in a,P1 0031 ; set target bit 0031 4302 + orl a,#2 0033 ; impress 0033 39 + outl P1,a 0034 ; 0034 83 + ret 0035 0035 CLR_AB: 0035 ; get now state 0035 09 + in a,P1 0036 ; set target bit 0036 D3FC + xrl a,#0fch 0038 ; impress 0038 39 + outl P1,a 0039 ; 0039 83 + ret 003A 003A FWD_ROT: 003A ; VS2B 003A 1417 + call EN_VA 003C 1426 + call DIS_VB 003E ; set A 003E 142B + call SET_A 0040 ; clear A 0040 1435 + call CLR_AB 0042 ; VS2B 0042 141C + call DIS_VA 0044 1421 + call EN_VB 0046 ; set B 0046 1430 + call SET_B 0048 ; clear A 0048 1435 + call CLR_AB 004A ; 004A 83 + ret 004B 004B REV_ROT: 004B ; VS2B 004B 141C + call DIS_VA 004D 1421 + call EN_VB 004F ; set B 004F 1430 + call SET_B 0051 ; clear A 0051 1435 + call CLR_AB 0053 ; VS2B 0053 1417 + call EN_VA 0055 1426 + call DIS_VB 0057 ; set A 0057 142B + call SET_A 0059 ; clear A 0059 1435 + call CLR_AB 005B ; 005B 83 + ret 005C 005C ;************** 005C ; main routine 005C ;************** 005C org 100h 0100 START: 0100 1410 + call INIT 0102 0102 MAIN: 0102 ; 0102 2402 + jmp MAIN 0104 0104 end  HEXファイルは、次のようになります。 :020000002400DA :010003009369 :010007009365 :1000100015352300393A83094304398309D3FB3961 :1000200083094308398309D3F739830943013983A5 :10003000094302398309D3FC398314171426142B7E :100040001435141C14211430143583141C14211479 :0C00500030143514171426142B143583BB :0401000014102402B1 :00000001FF

目次

inserted by FC2 system