設計一個模塊
實現一個簡單的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)