設計模塊

設計一個模塊

實現一個簡單的Student類

class Student(object)://創建一個文件
    def __init__(self, name, score)://構造函數實例化對象的時候會自動調用的,第一個self是必須的,代表它自身。
        self.name = name
        self.score = score

手動寫一個電機模塊

通過控制IO口的高低電平,來抽象出一個Stepper的類

1.框架

class Stepper:
    def __init__(self, step_pin, dir_pin): #初始化
    def steps(self, step_count): #驅動電機走幾步
    def rel_angle(self, angle): #驅動電機旋轉相應的角度(相對角度控制)
    def abs_angle(self, angle):#驅動電機旋轉到相應的位置(絕對角度控制)
        

2.添加構造函數

構造函數在實例化對象的時候會調用,可以看成是初始化的功能。
參數裏,我們傳入兩個引腳對象,還有一個step_time默認爲200。因爲步進電機是一步一步運動的,每一步之間需要有延時,這裏默認是200us。

steps_per_rev,這個的1600代表每圈1600個脈衝,因爲電機的型號是200個脈衝(步進角爲1.8度),easyDriver又進行了8細分。

class Stepper:
    def __init__(self, step_pin, dir_pin, step_time=200):
        #初始化
        self.stp = step_pin
        self.dir = dir_pin

        self.stp.init(Pin.OUT_PP)
        self.dir.init(Pin.OUT_PP)

        self.step_time = step_time # us
        self.steps_per_rev = 1600
        self.current_position = 0

    def steps(self, step_count):
        #驅動電機走幾步

    def rel_angle(self, angle):
        #驅動電機旋轉相應的角度(相對角度控制)
    def abs_angle(self, angle):
        #驅動電機旋轉到相應的位置(絕對角度控制)

3.添加硬件實現

首先設置dir引腳的電平(控制方向),然後stp引腳發送高低脈衝就可以。

from pyb import udelay
class Stepper:
    def __init__(self, step_pin, dir_pin, step_time=200):
        #初始化
        self.stp = step_pin
        self.dir = dir_pin

        self.stp.init(Pin.OUT_PP)
        self.dir.init(Pin.OUT_PP)

        self.step_time = step_time # us
        self.steps_per_rev = 1600
        self.current_position = 0

    def steps(self, step_count=1):
        #驅動電機走幾步
        self.dir.value(0 if step_count > 0 else 1)#當step_count爲正數的時候,設置dir引腳爲低電平。否則爲高電平。
        for i in range(abs(step_count)):#發送step_count數量的脈衝
            self.stp.value(1)
            udelay(self.step_time)
            self.stp.value(0)
            udelay(self.step_time)
        self.current_position += step_count#記錄現在的角度

    def rel_angle(self, angle):
        #驅動電機旋轉相應的角度(相對角度控制)
    def abs_angle(self, angle):
        #驅動電機旋轉到相應的位置(絕對角度控制)

4.測試steps

把這個類的代碼保存成stepper.py文件,放到OpenMV的根目錄中。
main.py中調用Stepper,測試steps會不會使步進電機轉動:
別忘了正確給電機供電。

from stepper import Stepper
from pyb import Pin
dir_pin = Pin(‘P0’)
stp_pin = Pin(‘P1’)

s = Stepper(step_pin=stp_pin, dir_pin=dir_pin)

s.steps()#電機動一步

s.steps(100)#電機動100步

s.steps(-100)#電機反轉100步

5.添加旋轉角度函數

角度轉換成脈衝:角度/360*1600。一圈是1600脈衝,那麼一步就是360/1600度

在絕對角度控制中,把當前位置記錄下來了,做一個差,就可以旋轉了。

def rel_angle(self, angle):
        #驅動電機旋轉相應的角度(相對角度控制)
        steps = int(angle / 360 * self.steps_per_rev)
        self.steps(steps)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章