【電子工学Ⅱ/マイコン制御】016-1:DCモーターの駆動(PIC16F84AでPWM制御|SW切替でDCモーター速度を変える)
YouTube大学ENG【基礎電気電子工学】
0:00 / 0:00
【電子工学Ⅱ/マイコン制御】016-1:DCモーターの駆動(PIC16F84AでPWM制御|SW切替でDCモーター速度を変える)
59 просмотров · 9 дн. назад
YouTube大学ENG【基礎電気電子工学】
470 подписчиков
59 просмотров · 9 дн. назад
【概要】
PIC16F84Aを使って、PWM制御でDCモーターの回転速度を切り
替える方法を紹介します。この動画では、複数のSW入力によって
デューティ比を変更し、モーターの回転速度がどのように変わる
かを解説しています。PWM制御の基本的な考え方や、デューティ
比の意味も図を使ってわかりやすく説明しています。最後に実機
での動作確認も行い、プログラムがどのように動くかを具体的に
見ていきます。
【この動画で分かること】
・PWM制御の基本的な仕組み
・デューティ比と回転速度の関係
・PIC16F84AでのSW入力の使い方
・DCモーター速度制御プログラムの考え方
・実機での動作確認の流れ
【対象】
・PICマイコンを学び始めた方
・PWM制御の基礎を知りたい方
・DCモーター制御を試したい方
・アセンブラでの入出力制御を学びたい方
【動画の内容】
・PIC16F84Aを使った回路と構成
・PWM制御とは何か
・デューティ比の考え方
・SW切替で速度を変える方法
・プログラムの動作説明
・実機による回転速度の確認
【シリーズ】
・DCモーターの駆動(PICでDCモーターを駆動する方法 |
FETと還流ダイオードの選び方)
• 【電子工学Ⅱ/マイコン制御】016:DCモーターの駆動(PICでDCモーターを駆動す...
・動画リスト:<電子工学Ⅱ/マイコン制御>
• 【電子工学ⅡENG】[マイコン制御]
#PIC16F84A #PWM #DCモーター制御
#PICアセンブラ #電子回路 #マイコン制御
#回転速度制御 #スイッチ入力 #実機検証
#初心者向け
=========================================
プログラムリスト MPLABX Ver5.35
[DCモーターの回転速度をSWで切り替える]
コピー&ペーストで使用して下さい。
=========================================
;------------------初期設定-------------------
LIST p=p16F84A
#INCLUDE "p16f84a.inc"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;----------------ユーザー設定----------------
CNT1 EQU 0Ch ;タイマサブルーチン用レジスタ番地指定
CNT2 EQU 0Dh
CNT3 EQU 0Eh
CNT4 EQU 0Fh
;--------------ポート入出力設定---------------
ORG 00h
BSF STATUS,RP0 ;バンク1に切り換え
MOVLW B'00011100' ;RA2_RA4を入力に設定 → Wレジスタ
MOVWF TRISA ;Wレジスタ → Aポート 入出力設定
CLRF TRISB ;PORTB全RB=出力モード
BCF STATUS,RP0 ;バンク0に切り換え
;(以降、PORTA,Bレジスタ扱う為)
CLRF PORTB ;PORTBをリセット
;--------------------------------------------
;-----------------SW入力待ち------------------
MAIN
BTFSS PORTA, 2 ;RA2が1なら次の行をスキップ
CALL LOW2 ;LOW2へ
CALL MT_OFF ;MT_OFFへ
BTFSS PORTA, 3 ;RA3が1なら次の行をスキップ
CALL MIDDLE3 ;MIDDLE3へ
CALL MT_OFF ;MT_OFFへ
BTFSS PORTA, 4 ; RA4が1なら次の行をスキップ
CALL HIGHT4 ;HIGHT4へ
CALL MT_OFF ;MT_OFFへ
GOTO MAIN ;ループ
;-----------------低速回転(SW2)------------------
LOW2 ;デューティ比=20%
CALL MT_ON
CALL TIMER4 ;2[ms]タイマ
CALL MT_OFF
CALL TIMER2 ;8[ms]タイマ
RETURN
;----------------中速回転(SW3)------------------
MIDDLE3 ;デューティ比=40%
CALL MT_ON
CALL TIMER4 ;4[ms]タイマ=2[ms]タイマ×2
CALL TIMER4 ;
CALL MT_OFF
CALL TIMER3 ;6[ms]タイマ
RETURN
;----------------高速回転(SW4)------------------
HIGHT4 ;デューティ比=80%
CALL MT_ON
CALL TIMER2 ;8[ms]タイマ
CALL MT_OFF
CALL TIMER4 ;2[ms]タイマ
RETURN
;----------------モーター回転処理----------------
MT_ON
MOVLW B'10000000' ; リテラル → Wレジスタ
MOVWF PORTB ; Wレジスタ → PORTBに出力(モーター回転)
RETURN
;----------------モーター停止処理----------------
MT_OFF
MOVLW B'00000000' ; リテラル → Wレジスタ
MOVWF PORTB ; Wレジスタ → PORTBに出力(モーター停止)
RETURN
;-------------2[ms]生成サブルーチン--------------
TIMER4
MOVLW D'20'
MOVWF CNT4
LOOP4
NOP
CALL TIMER1
DECFSZ CNT4,F ;デクリメントした値をレジスタCNT4に戻す
GOTO LOOP4
RETURN
;-------------6[ms]生成サブルーチン--------------
TIMER3
MOVLW D'60'
MOVWF CNT3
LOOP3
NOP
CALL TIMER1
DECFSZ CNT3,F ;デクリメントした値をレジスタCNT3に戻す
GOTO LOOP3
RETURN
;-------------8[ms]生成サブルーチン--------------
TIMER2
MOVLW D'80'
MOVWF CNT2
LOOP2
NOP
CALL TIMER1
DECFSZ CNT2,F ;デクリメントした値をレジスタCNT2に戻す
GOTO LOOP2
RETURN
;-------------0.1[ms]生成サブルーチン--------------
TIMER1
MOVLW D'62'
MOVWF CNT1
LOOP1
NOP
DECFSZ CNT1,F ;デクリメントした値をレジスタCNT1に戻す
GOTO LOOP1
RETURN
;----------------------------------------------
END ;プログラムの記述終了