;--------------------------------------------------------------------- ; ターンテーブル コントローラ ; ; 2022.04.16 naka ; 1. 概要 ; アマゾンの安いステッピングモータを使ったターンテーブルのコントローラ ; ; 2. ピンアサイン ; ; (1). RA0 (ICAPDAT) [out]:モータドライバinput1 ; (2). RA1 (ICSP CLK) [out]:モータドライバinput2 ; (3). RA2 [out]:モータドライバinput3 ; (4). RA3 (VPP) [in] :停止/正転/逆転切り替えsw ; (5). RA4 (AN3) [in] :速度制御用可変抵抗 ; (6). RA5 [out]:モータドライバinput4 ; ; 4. 備考 ; ・動作クロック :内蔵OSC 8MHz ; ・回転数 :約1rpm 〜12.5rpm ; ; 5. 改版履歴 ; ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- ; デバイス定義 ;--------------------------------------------------------------------- LIST P=PIC12F1501 INCLUDE "P12F1501.INC" __CONFIG _CONFIG1, _FOSC_INTOSC & _CP_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDTE_OFF & _CLKOUTEN_OFF & 0x3FFF __CONFIG _CONFIG2, _WRT_OFF & _STVREN_ON & _LVP_OFF & 0x3FFF ERRORLEVEL -302 ;アセンブル時のバンク警告メッセージ抑制 ;--------------------------------------------------------------------- ; 変数レジスタの定義 ;--------------------------------------------------------------------- STEPCNT EQU 20H ; カウンタ WCNT1 EQU 21H ; カウンタ WCNT2 EQU 22H ; カウンタ IWCNT1 EQU 21H ; カウンタ IWCNT2 EQU 22H ; カウンタ ROTDIR EQU 23H ; 回転方向 TMP EQU 24H ; 作業用 ADCH EQU 70H ADCL EQU 71H ; ;--------------------------------------------------------------------- ; リセットベクタ ;--------------------------------------------------------------------- ORG 00H ; リセット時の飛び込み先 GOTO MAIN ; ; ;--------------------------------------------------------------------- ; 割り込み処理(SW RA3の立下り割り込み) ;--------------------------------------------------------------------- ORG 04H ; 割り込み時の飛び込み先 INTRUPT CLRF INTCON ;全割込み禁止 ; BANKSEL IOCAF BTFSC IOCAF,3 GOTO INT_DIRCHG BANKSEL 0 GOTO INT_RET ; INT_DIRCHG ; 停止・回転方向逆転 BCF IOCAF,3 BANKSEL 0 INCF ROTDIR,F CLRF PORTA CALL W30MS ; チャタリング対策 BTFSS PORTA,3 GOTO $-1 CALL W30MS ; チャタリング対策 ; INT_RET MOVLW B'10001000' ; 割り込み許可 GIE,IOCIE MOVWF INTCON ; RETFIE ;--------------------------------------------------------------------- ; メイン処理 ;--------------------------------------------------------------------- MAIN CALL INIT ; MOVLW D'255' MOVWF WCNT1 LOOP MOVF WCNT1,W CALL CALCWT DECFSZ WCNT1,F GOTO LOOP ; CLRF STEPCNT MAIN_LP BTFSS ROTDIR,0 ; 0bit目が0なら停止 GOTO MAIN_LP ; MOVF STEPCNT,W ANDLW H'03' CALL DRIVEPTN MOVWF PORTA ; CALL CHKVOL CALL CALCWT CALL WAIT ; BTFSC ROTDIR,1 ; 1bit目が0なら正転 GOTO REVRSE FORWRD INCF STEPCNT,F GOTO MAIN_LP REVRSE DECF STEPCNT,F GOTO MAIN_LP ; ;--------------------------------------------------------------------- ; 初期化 ;--------------------------------------------------------------------- INIT CLRF INTCON ;全割込み禁止 ; BANKSEL PORTA CLRF PORTA BANKSEL LATA CLRF LATA BANKSEL ANSELA MOVLW B'00010000' ; RA4:analog MOVWF ANSELA ; digital I/O BANKSEL TRISA MOVLW B'00011000' ; RA3,RA4 input MOVWF TRISA BANKSEL OSCCON MOVLW B'01110010' ; 8MHz MOVWF OSCCON ; ; AD変換用設定 BANKSEL FVRCON MOVLW B'10000001' ; 7:FVR enable, 1-0:00 FVR 1.024V MOVWF FVRCON BANKSEL ADCON0 MOVLW B'00001100' ; bit6-2:00011:AN3 MOVWF ADCON0 MOVLW B'00010001' ; bit7:左詰, bit6-4:001:FOSC/8, bit1-0:01:VDD MOVWF ADCON1 BANKSEL 0 ; ; 外部割込み設定 BANKSEL OPTION_REG CLRF OPTION_REG BANKSEL IOCAP CLRF IOCAP MOVLW B'00001000' ; RA3 Negative edge interupt MOVWF IOCAN BANKSEL 0 ; CLRF ROTDIR ; MOVLW B'10001000' ; 割り込み許可 GIE,IOCIE MOVWF INTCON RETURN ; ;--------------------------------------------------------------------- ; 駆動パターン(2相励磁) ; φ1 φ2 φ3 φ4 ; 1 1 0 0 ; 0 1 1 0 ; 0 0 1 1 ; 1 0 0 1 ;--------------------------------------------------------------------- DRIVEPTN CLRF PCLATH ADDWF PCL,F RETLW B'00000011' ; Step 0 RETLW B'00000110' ; Step 1 RETLW B'00100100' ; Step 2 RETLW B'00100001' ; Step 3 ; ;--------------------------------------------------------------------- ; AD変換 ;--------------------------------------------------------------------- CHKVOL ; AN3をAD変換で測定 BANKSEL ADCON0 BSF ADCON0,0 ; ADCON enable BANKSEL 0 ; CALL W1MS ;Acquisiton delay BANKSEL ADCON0 BSF ADCON0,ADGO ;Start conversion BTFSC ADCON0,ADGO ;Is conversion done? GOTO $-1 BANKSEL ADRESH MOVF ADRESH,W ;Read upper 8 bits MOVWF ADCH ;store in GPR space MOVF ADRESL,W ;Read lower 2 bits MOVWF ADCL ;Store in GPR space BANKSEL 0 ; ; ADC結果は左詰上位8ビットのみ利用(0〜255) MOVF ADCH,W ; AD変換結果上位8ビット RETURN ; ;--------------------------------------------------------------------- ; 電圧からstepのwait時間換算テーブル(計算より早いので) ;--------------------------------------------------------------------- CALCWT MOVWF TMP MOVLW HIGH WTTBL MOVWF FSR1H MOVLW LOW WTTBL ADDWF TMP,W MOVWF FSR1L CLRW ADDWFC FSR1H,F ; キャリー加算 ; MOVF INDF1,W RETURN ; WTTBL RETLW D'255' ; 0 RETLW D'255' ; 1 RETLW D'255' ; 2 RETLW D'255' ; 3 RETLW D'255' ; 4 RETLW D'255' ; 5 RETLW D'255' ; 6 RETLW D'255' ; 7 RETLW D'255' ; 8 RETLW D'255' ; 9 RETLW D'255' ; 10 RETLW D'255' ; 11 RETLW D'255' ; 12 RETLW D'255' ; 13 RETLW D'255' ; 14 RETLW D'255' ; 15 RETLW D'255' ; 16 RETLW D'255' ; 17 RETLW D'255' ; 18 RETLW D'255' ; 19 RETLW D'255' ; 20 RETLW D'243' ; 21 RETLW D'232' ; 22 RETLW D'222' ; 23 RETLW D'213' ; 24 RETLW D'204' ; 25 RETLW D'196' ; 26 RETLW D'189' ; 27 RETLW D'182' ; 28 RETLW D'176' ; 29 RETLW D'170' ; 30 RETLW D'165' ; 31 RETLW D'160' ; 32 RETLW D'155' ; 33 RETLW D'150' ; 34 RETLW D'146' ; 35 RETLW D'142' ; 36 RETLW D'138' ; 37 RETLW D'134' ; 38 RETLW D'131' ; 39 RETLW D'128' ; 40 RETLW D'124' ; 41 RETLW D'121' ; 42 RETLW D'119' ; 43 RETLW D'116' ; 44 RETLW D'113' ; 45 RETLW D'111' ; 46 RETLW D'108' ; 47 RETLW D'106' ; 48 RETLW D'104' ; 49 RETLW D'102' ; 50 RETLW D'100' ; 51 RETLW D'98' ; 52 RETLW D'96' ; 53 RETLW D'94' ; 54 RETLW D'93' ; 55 RETLW D'91' ; 56 RETLW D'89' ; 57 RETLW D'88' ; 58 RETLW D'86' ; 59 RETLW D'85' ; 60 RETLW D'83' ; 61 RETLW D'82' ; 62 RETLW D'81' ; 63 RETLW D'80' ; 64 RETLW D'78' ; 65 RETLW D'77' ; 66 RETLW D'76' ; 67 RETLW D'75' ; 68 RETLW D'74' ; 69 RETLW D'73' ; 70 RETLW D'72' ; 71 RETLW D'71' ; 72 RETLW D'70' ; 73 RETLW D'69' ; 74 RETLW D'68' ; 75 RETLW D'67' ; 76 RETLW D'66' ; 77 RETLW D'65' ; 78 RETLW D'64' ; 79 RETLW D'64' ; 80 RETLW D'63' ; 81 RETLW D'62' ; 82 RETLW D'61' ; 83 RETLW D'60' ; 84 RETLW D'60' ; 85 RETLW D'59' ; 86 RETLW D'58' ; 87 RETLW D'58' ; 88 RETLW D'57' ; 89 RETLW D'56' ; 90 RETLW D'56' ; 91 RETLW D'55' ; 92 RETLW D'55' ; 93 RETLW D'54' ; 94 RETLW D'53' ; 95 RETLW D'53' ; 96 RETLW D'52' ; 97 RETLW D'52' ; 98 RETLW D'51' ; 99 RETLW D'51' ; 100 RETLW D'50' ; 101 RETLW D'50' ; 102 RETLW D'49' ; 103 RETLW D'49' ; 104 RETLW D'48' ; 105 RETLW D'48' ; 106 RETLW D'47' ; 107 RETLW D'47' ; 108 RETLW D'46' ; 109 RETLW D'46' ; 110 RETLW D'46' ; 111 RETLW D'45' ; 112 RETLW D'45' ; 113 RETLW D'44' ; 114 RETLW D'44' ; 115 RETLW D'44' ; 116 RETLW D'43' ; 117 RETLW D'43' ; 118 RETLW D'43' ; 119 RETLW D'42' ; 120 RETLW D'42' ; 121 RETLW D'41' ; 122 RETLW D'41' ; 123 RETLW D'41' ; 124 RETLW D'40' ; 125 RETLW D'40' ; 126 RETLW D'40' ; 127 RETLW D'40' ; 128 RETLW D'39' ; 129 RETLW D'39' ; 130 RETLW D'39' ; 131 RETLW D'38' ; 132 RETLW D'38' ; 133 RETLW D'38' ; 134 RETLW D'37' ; 135 RETLW D'37' ; 136 RETLW D'37' ; 137 RETLW D'37' ; 138 RETLW D'36' ; 139 RETLW D'36' ; 140 RETLW D'36' ; 141 RETLW D'36' ; 142 RETLW D'35' ; 143 RETLW D'35' ; 144 RETLW D'35' ; 145 RETLW D'35' ; 146 RETLW D'34' ; 147 RETLW D'34' ; 148 RETLW D'34' ; 149 RETLW D'34' ; 150 RETLW D'33' ; 151 RETLW D'33' ; 152 RETLW D'33' ; 153 RETLW D'33' ; 154 RETLW D'33' ; 155 RETLW D'32' ; 156 RETLW D'32' ; 157 RETLW D'32' ; 158 RETLW D'32' ; 159 RETLW D'32' ; 160 RETLW D'31' ; 161 RETLW D'31' ; 162 RETLW D'31' ; 163 RETLW D'31' ; 164 RETLW D'31' ; 165 RETLW D'30' ; 166 RETLW D'30' ; 167 RETLW D'30' ; 168 RETLW D'30' ; 169 RETLW D'30' ; 170 RETLW D'29' ; 171 RETLW D'29' ; 172 RETLW D'29' ; 173 RETLW D'29' ; 174 RETLW D'29' ; 175 RETLW D'29' ; 176 RETLW D'28' ; 177 RETLW D'28' ; 178 RETLW D'28' ; 179 RETLW D'28' ; 180 RETLW D'28' ; 181 RETLW D'28' ; 182 RETLW D'27' ; 183 RETLW D'27' ; 184 RETLW D'27' ; 185 RETLW D'27' ; 186 RETLW D'27' ; 187 RETLW D'27' ; 188 RETLW D'27' ; 189 RETLW D'26' ; 190 RETLW D'26' ; 191 RETLW D'26' ; 192 RETLW D'26' ; 193 RETLW D'26' ; 194 RETLW D'26' ; 195 RETLW D'26' ; 196 RETLW D'25' ; 197 RETLW D'25' ; 198 RETLW D'25' ; 199 RETLW D'25' ; 200 RETLW D'25' ; 201 RETLW D'25' ; 202 RETLW D'25' ; 203 RETLW D'25' ; 204 RETLW D'24' ; 205 RETLW D'24' ; 206 RETLW D'24' ; 207 RETLW D'24' ; 208 RETLW D'24' ; 209 RETLW D'24' ; 210 RETLW D'24' ; 211 RETLW D'24' ; 212 RETLW D'24' ; 213 RETLW D'23' ; 214 RETLW D'23' ; 215 RETLW D'23' ; 216 RETLW D'23' ; 217 RETLW D'23' ; 218 RETLW D'23' ; 219 RETLW D'23' ; 220 RETLW D'23' ; 221 RETLW D'23' ; 222 RETLW D'22' ; 223 RETLW D'22' ; 224 RETLW D'22' ; 225 RETLW D'22' ; 226 RETLW D'22' ; 227 RETLW D'22' ; 228 RETLW D'22' ; 229 RETLW D'22' ; 230 RETLW D'22' ; 231 RETLW D'22' ; 232 RETLW D'21' ; 233 RETLW D'21' ; 234 RETLW D'21' ; 235 RETLW D'21' ; 236 RETLW D'21' ; 237 RETLW D'21' ; 238 RETLW D'21' ; 239 RETLW D'21' ; 240 RETLW D'21' ; 241 RETLW D'21' ; 242 RETLW D'21' ; 243 RETLW D'20' ; 244 RETLW D'20' ; 245 RETLW D'20' ; 246 RETLW D'20' ; 247 RETLW D'20' ; 248 RETLW D'20' ; 249 RETLW D'20' ; 250 RETLW D'20' ; 251 RETLW D'20' ; 252 RETLW D'20' ; 253 RETLW D'20' ; 254 RETLW D'20' ; 255 ; ;--------------------------------------------------------------------- ; wait ;--------------------------------------------------------------------- W1MS MOVLW D'238' ; 1.0006ms MOVWF IWCNT1 W1MSLP GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 GOTO $+1 DECFSZ IWCNT1,F GOTO W1MSLP RETURN ; W30MS MOVLW D'30' MOVWF IWCNT2 W30MSLP CALL W1MS DECFSZ IWCNT2,F GOTO W30MSLP RETURN ; WAIT MOVWF WCNT1 WAIT_LP CALL WAIT2 DECFSZ WCNT1,F GOTO WAIT_LP RETURN ; WAIT2 MOVLW D'74' ; 45.4us MOVWF WCNT2 WAIT2LP DECFSZ WCNT2,F GOTO WAIT2LP RETURN ; ;--------------------------------------------------------------------- END ;--------------------------------------------------------------------- ; 終わり ;---------------------------------------------------------------------