パルサー制御用の結線図です。
ボリューム制御と全く同じで、プログラムだけ変えてます。
ロータリーエンコーダーの制御はJH7UBCさんのプログラムを参考にさせて頂きました。
Raspberry Pi Pico Micro Python ロータリーエンコーダ テスト - JH7UBCブログ (goo.ne.jp)
以下、プログラムサンプルです。
-------------------------------------------------------------------------------------------
# ロータリーエンコーダーのパルサーテスト
import utime
from machine import Pin, PWM
# Switch
sw1 = Pin(14,Pin.IN,Pin.PULL_DOWN)#周波数の増減単位数のスイッチ
sw2 = Pin(15,Pin.IN,Pin.PULL_DOWN)#周波数の増減単位数のスイッチ
#ロータリーエンコーダーのA,B端子 プルアップ
pinA = Pin(16, Pin.IN, Pin.PULL_UP)
pinB = Pin(17, Pin.IN, Pin.PULL_UP)
#ステッピングモーターの信号
M1_pul = Pin(2,Pin.OUT)#PUL パルス信号
M1_dir = Pin(3,Pin.OUT)#DIR 方向信号
M1_enr = Pin(4,Pin.OUT)#ENR モーター電源信号
tHz_setnum=10#周波数の増減単位数(?Hz毎に増減)
tHz_U=200#周波数の上限値
tHz_L=0#周波数の下限値
PulserHz=500#パルサー駆動周波数
#回転方向判定初期値
befDat = 0x11
curDat = 0
count = 0
D = 0
#回転方向判定
def watchRotation_Hz(p):
global curDat
global befDat
global count
global tHz_unit
curDat = pinA.value() + (pinB.value()<<1)
if curDat != befDat:
D = ((befDat<<1)^curDat) & 3
if D < 2:
count = count + 1
else:
count = count -1
befDat = curDat
if count >= 3:
print('ASC')
tHz_unit = tHz_setnum
count = 0
Pulser1(M1_pul,PulserHz,tHz_unit,0)
elif count <= -3:
print('DESC')
tHz_unit = tHz_setnum
count = 0
Pulser1(M1_pul,PulserHz,tHz_unit,1)
#ステッピングモーターパルサー駆動
def Pulser1(gpio,Hz,num,mdir):
M1_enr(1)
M1_dir(mdir)
try:
a=1/Hz/2
wait=int(a*1000000)
for x in range(num):
gpio(1)
utime.sleep_us(wait)
gpio(0)
utime.sleep_us(wait)
except:
gpio(0)
tHz_unit=0#パルス周波数増減値を初期化
tHz=0#pwm周波数を初期化
pinA.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler = watchRotation_Hz)
pinB.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler = watchRotation_Hz)
while True:
#スイッチの状態で1クリックのパルス数を変更
if sw1()==0 and sw2()==0:#スイッチが真ん中でOFF
tHz_setnum=0
elif sw1()==1:
tHz_setnum=10
elif sw2()==1:
tHz_setnum=100
コメント
コメントを投稿