ラズパイpicoの ③パルサー制御プログラム

パルサー制御用の結線図です。

ボリューム制御と全く同じで、プログラムだけ変えてます。


ロータリーエンコーダーの制御は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

        

        

        


コメント