国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Raspberry Pi完成直線平臺的設計全過程

工程師兵營 ? 來源:互聯網 ? 作者:佚名 ? 2018-07-31 09:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

像 Raspberry Pi 這樣的單板計算機 (SBC) 只需數小時就能輕松構建復雜的機器,而不必使用一顆裸微控制器從頭開始。 為了展示使用現代 SBC 有多簡單,此“Easy Build”課程將引導您完成構建直線平臺并進行編碼所需的步驟。這里的直線平臺是一個能夠以直線方向執行來回運動的,由系統工程師或研究人員用來完成重復性任務的平臺。

除了引導您完成這些步驟外,我們還將附上用于演示隨附視頻中直線平臺的代碼,以及幫助您啟動的項目物料清單。

為什么選擇直線平臺?

我們啟動此項目的初衷是,展示設定 Raspberry Pi 微型計算機來執行稍復雜的任務是如此容易。 盡管我們不會滿足于幾個閃光燈,但我們也不想嘗試并計算軌道力學。 最終我們決定控制步進電機致動的直線平臺。 畢竟,驅動步進電機正好介于閃爍的 LED 與計算三個天體的多體問題之間。

我們將項目分成三個部分:電子硬件、軟件和機械構造。

電子硬件

顯示所有硬件元素的完整系統布局圖片(單擊查看全尺寸圖片)

圖 1:顯示從 Raspberry Pi Model B 到限位開關的所有硬件元素的完整系統布局(左上角)。 (使用 Digi-Key Scheme-it 繪制的原理圖)

目前為止,這些內容還非常簡單、直接。 很顯然,除了 Raspberry Pi 2 (Rpi) 外,我們還需要步進電機、步進電機驅動器以及上述兩個器件的電源。 之后,我們確定了需要的輸入。 最后,我們確定了以下項目:

- 左移按鈕

- 右移按鈕

- 高/低速開關

- 左限位開關

- 右限位開關

我們將電路布置到 B&K Precision GS-830 試驗板上。 顧名思義,它擁有 830 個連接點以及一個總線條。

圖 2:如圖所示,滑動架擠靠在限位開關上,其中藍色盒子就是限位開關,且在絲杠下方還有一個柱塞。 (來源:Digi-Key Electronics)

輸入從左,還是從右,完全隨意。 我們只需對兩個相反方向命名。 請注意,該限位開關使用上拉電阻器接線為“正常高”。 我們這樣做是為了給這些輸入提供一些抗噪能力。 Raspberry Pi 具有驚人的靈敏度,我們發現,緊湊型熒光燈等外部噪聲源和繼電器線圈等電感器有時可以在 Pi 上觸發輸入。

對于步進電機,我們選擇了 NMB Technologies Corporation 的 23KM-K2(圖 3)。 我們使用的步進驅動器是 Geckodrive 的 G210X。 Geckodrive 比市場上許多廉價的非品牌驅動器要昂貴一些,但它們可以提供流暢、無故障的步進控制。 同樣,我們手頭已經有了一個這樣的步進驅動器。 大多數類似 G210x 這樣的廉價步進電機驅動器是通過 DIRECTION 引腳和 STEP 引腳來控制的。 這很適合簡單的項目:我們只需將這些引腳直接連接到 Rpi 上未使用的 GPIO 引腳即可。

圖 3:對于步進電機,我們選擇了 NMB Technologies Corp. 的 23KM-K2 標準混合電機。 (來源:NMB Technologies Corp.)

我們還將 Geckodrive 的 ENABLE 引腳接至 Rpi。 這樣做使得驅動器僅在程序運行時才“開啟”并向電機線圈供電。 否則,即使驅動器未收到執行任何操作的任何指令,驅動器仍會在我們向整個電路供電后立即將功率轉儲至電機。

將功率轉儲至電機線圈造成兩個結果。 首先,它會促使電機產生制動效果。 電機會主動抵制任何旋轉其軸的嘗試。 這在某些情況下是希望達到的效果;比如當您將滑動架移到某個點并且希望將其鎖定到位,使其不會被撞離位置。

第二個結果是我們希望避免的,即電機會在原地不斷升溫。 此電路在我們編輯和測試代碼的過程中一直保持通電狀態。 如果我們不停用驅動器,它會不斷向我們的電機轉儲功率。 步進電機通常都會變熱,但我們最好不要讓其在等待指令的過程中自行加熱。

圖 4:36 VDC XP Power SHP350 系列 36 V 開關式電源用于替換 24 V 電源為系統供電,以增加電機轉速。 (來源:XP Power)

最初,我們為電機連接 24 VDC 電源, 之后我們決定提高轉速,于是找到了 36 VDC 電源,即 XP Power 的 SHP350 單輸出、350 W AC-DC 電源。 這將在 24 V 電源的基礎上顯著提升電機轉速。

Gecko 驅動器會限制通過電機線圈的最大電流。 您可以在端子 11 和 12 之間使用電阻器來設置電流限制,也可以使用驅動器上的 DIP 開關。 順便提一下,同一組 DIP 開關還用于控制驅動器的微步進模式。 我們將在軟件部分對此做進一步討論。

軟件

軟件程序顯示在本頁面的底部。 此時我們決定選擇使用兩個程序:一個程序用于手動控制平臺;另一個程序負責讓直線平臺滑動架在限位開關之間來回穿梭。 所有代碼均使用 IDLE 3.2.1 以 Python 語言編寫。 我們之所以使用 Python,是因為它是 Rpi 的默認語言。 IDLE 是隨 Raspbian 一起提供的 Python 精簡版系統開發環境。

為什么使用 Python? 不要讓新語言嚇住了您。 Python 與 C 非常相似,即使您不會編寫 Python 代碼,但只要熟悉 C,就幾乎肯定能夠閱讀和理解程序內容。

我們的手動控制程序要執行的操作幾乎一目了然,代碼也未作任何說明。 具體而言,電機加速的問題。 步進電機必須逐漸提高轉速。我知道,許多讀者會說,他們以前見過或控制過步進電機,電機轉速完全取決于向其輸入的脈沖頻率。 也許是這樣,但我敢打賭,這些情況下的電機負載肯定很小,甚至根本沒有任何負載。

而我們的直線平臺中的電機肯定帶有負載。 承載的步進電機必須達到一定的轉速,否則電機將會失速。 將脈沖輸入到其驅動器時,步進電機只會在原地斷續運轉。 這也是我們在軟件中置入加速程度的原因。 加速度需要足夠快,使觀察者不容易觀察到從靜止到最高轉速的過程,但不能太快以至于失速。

加速程序一開始很慢地旋轉電機(步進電機在低速下具有最高的扭矩),以向系統施加最大扭矩,從而克服慣性和“靜摩擦力”。 之后,此程序會快速縮短步進脈沖之間的時間,直至達到最高轉速。 扭矩會隨著轉速的提高而減小,但到此時,如果調節得當,系統中的機械阻力已被克服。

簡單地介紹一下“靜摩擦力”一詞的含義。 此術語的真正解釋遠遠超出了此項目分析的目的。 但我們可以采用類比的方法加深了解。 想象一下握住機器的旋鈕或手輪,并嘗試旋轉。 通常,在旋轉時必須克服一個初始阻力。 一旦克服這個阻力,旋轉旋鈕或手輪就會變得容易多了,現在需要的扭矩也要小得多。 在本文中,該初始阻力便是靜摩擦力。 這種現象在利用滑臺執行操作的機床(例如車床或銑床)中特別明顯。

我們的確注意到,Python 也有一個顯著的局限。 我們對為電機驅動器提供輸出的步進引腳進行切換的速度存在限制。 到某一點后,我們在 5 μs 步進脈沖之間加入的延遲不論多小都無關緊要,因為 Python 代碼中的命令執行之間存在固有的延遲。 我們沒有完全弄清這一問題的緣由,也不知道如何解決此問題。 最好的辦法是采取變通方案,這也是我們將電機驅動器設為 Full_Step 模式的原因。

如果使用任何類型的微步進,我們需要將最大脈沖率(取決于 Python 的具體情況)除以我們將驅動器切換到的微步數。

因此,對于半步進電機,需要將最高轉速除以二。 使用 1/10 微步進時,我們需要將最高轉速除以 10! 如果您追求更流暢、波動較小的動作,微步進方式是不錯的選擇,但對此項目而言則不必如此。

關于微步進的說明

我們在此項目中所用的雙極步進電機類型幾乎總是設計為每轉 200 步。 也就是說,200 個“全”步將會旋轉電機軸一周。 現在,比方說,我們將電機驅動器設置成 ? 微步進。 我們這樣做會將電機的每個滿步分成 4 個更小的步。 電機驅動器收到的每個 STEP 脈沖會將電機軸旋轉 ? 滿步。 這意味著,我們現在必須發送 800 個脈沖到驅動器才能將軸旋轉一整轉。

1/10 微步呢? 現在,您需要發送 2000 個脈沖才能完成一整轉。 咋一看,這看起來不錯。 這樣做增加了電機的位置分辨率。 是的,但不完全如此:您可以采取多小的步幅存在物理限制。 而且,微步越多,您所獲得的可用扭矩越小。

手動控制程序分解

首先,我們導入了時間和 GPIO 庫。 然后,我們為每個變量設置引腳以及這些引腳的輸入/輸出。

方向按鈕和速度開關設置為使用內部下拉電阻。 限位開關設置為使用內部上拉電阻。

轉速和加速變量在開始時設置,并可全局更改,以調節運行程序中的電機轉速和加速度。

程序僅運行一個“while”循環作為主循環,掃描“左”和“右”按鈕。

按其中一個按鈕后,rampUp() 子程序就會立即執行電機,沿所按按鈕的方向加速至最高轉速。

只要按下按鈕,程序就會留在 rampUp() 程序中。 松開按鈕后,rampUp() 程序將會跳入 rampDown() 程序,將電機減速至停止。 rampDown() 會持續減速,直至用完減速步數。 然后程序會返回到主循環,以檢查方向按鈕。 轉速開關有兩個設置,高和低。 此開關會將速度變量更改為對應的速度變量。

在按下左或右方向按鈕以及發出步進脈沖時,步進程序還會檢查確認是否已啟用兩個限位開關之一。 當移動平臺觸及限位開關時,電機就會停止,改變方向,并執行與原始行進方向相反的 50 步 (decelPulseCount) 移動。 這會將滑動架移至足夠遠離限位開關的位置,以免再次觸及限位開關。

來回穿梭程序

從 Raspberry Pi 運行該程序后,直線平臺會立即在一個方向上以固定的速度移動,直至觸及其中一個限位開關。 平臺隨即改變方向,逐步提速,并繼續在另一個方向上移動,直至其觸及平臺行程另一側的限位開關,周而復始。 移動速度可通過手動控制程序中所用的相同開關,在預設的高速度或低速度之間切換。

機械構造

圖 5:直線平臺的最終構造使用現貨零件組裝而成,包括 1.5 英寸鋁型材以及一根 8 螺紋/英寸的絲杠(8 頭)。 (來源:Digi-Key Electronics)

直線平臺完全由現貨零件制成:用于框架的 1.5 英寸鋁型材、夾具、軸、電機底座,以及 0.5 英寸直徑的 8 螺紋/英寸的絲杠(8 頭)。 八頭表示螺紋具有 8 條平行螺紋,類似于橙汁容器蓋。 最終,絲杠每轉動一整轉,機械系統就會移動 1 英寸。 我們這樣做是為了讓直線平臺操作視頻更生動一些。 我們有 10 螺紋/英寸、單螺紋絲杠,但這會導致移動速度非常慢。 步進電機的局限在于其最大轉速實際上很慢。

滑動架架在一對 20 mm 直線軸及配對的軸承上。 針對所用的 NEMA 23 雙極步進電機,我們選擇了一個通用的 NEMA 23 安裝支架。 問問圖片和視頻您可以看到,我們使用齒輪和正時皮帶將機械動力從電機傳遞到軸末端,以便在出現振動或機械靜摩擦時能夠調節齒輪比。 一些實驗表明,電機和軸之間的比率為 1:1 效果很好。

對于位于絲杠從動端的軸臺,我們必須做一些設計工作和加工(圖 6)。 軸臺是支撐軸的一個機械元件,在本例中僅傳輸旋轉運動并阻止直線運動(至少在理論上如此)。 我們能否在沒有軸臺的情況下完成項目? 存在這種可能。 我們本可以將絲杠直接連接到步進電機的輸出軸,但如果我們選擇這種做法,我們的系統將很不穩定。 因此,我們在直線平臺上設計并制造了一個直接連接到 20 mm 直線軸的軸臺。

圖 6:為延長設計壽命,使用軸臺支撐軸并且僅傳輸旋轉運動,同時阻止直線運動(至少在理論上如此)。 (來源:Digi-Key Electronics)

步進電機內的軸承通常僅設置為處理側向力,而非軸向力。 隨著時間的推移,在滑動架來回穿梭的過程中,這些電機軸承將受到不應有的應力。 最終會損壞電機。 我們不清楚多久會發生這種情況。 但我們不希望電機在項目中途出現磨損,因此我們制造軸臺時使用一些推力軸承、一個滾針軸承和一根 1/4 英寸的軸。 滾針軸承(紅色)在軸臺右側中間位置固定 1/4 英寸軸,止推軸承(藍色)負責處理從絲杠傳輸的任何軸向力。

最后,我們對限位開關進行定位,讓滑動架在撞上其機械行程極限之前便能觸發該開關。 此時,滑動架的撞擊不會導致物理損毀,但肯定會開始磨損正時皮帶和齒輪,因此我們會盡力避免這種情況。

以下就是運行中的完整項目:

結論

Raspberry Pi Model B 等 SBC 可以讓工程師和研究人員更輕松地設計并實現可行且實用的系統。 此 Easy Build 分步指南通過一個實用的實例,詳細指導讀者完成直線平臺的設計全過程,同時針對過程中的組件選擇和設計決策,提供了深入淺出的分析。 除物料清單和相關代碼外,您在實現下一個創意時也可借鑒該實例。

物料清單:

  1. Seeed Raspberry Pi 2 Model B

  2. XP Power:36 V 電源

  3. NMB Technologies Corporation:步進電機(零件即將缺貨。)

  4. B&K Precision:試驗板

  5. 項目電線

    1. Bud Industries

    2. MikroElektronika

  6. Honeywell:限位開關

    1. DTE6-2RQ9

    2. NGCMB10AX01R

  7. Judco Manufacturing:表面貼裝開關

  8. C&K Components:JS 系列滑動開關

其它零件:

Gecko 210X 步進電機控制器

? 英寸 8 頭絲杠

Bass 絲杠螺母

軸臺軸承

聯軸器

滑輪

電機驅動正時皮帶

鋁型材

直線軸承

精密連桿

兩個定制底座、滑動架和軸臺

代碼:

代碼、按鈕控制

發送順時針 (CW) 和逆時針 (CCW) 脈沖至步進驅動器;對限位開關做出反應;按初始行程方向相反的方向轉動電機以“退避”限位開關。

"""

"""

導入模塊和/或模塊分段

"""

import RPi.GPIO as GPIO

import time

"""

設置 I/O 引腳掩碼

"""

step = 18 # step signal to driver

directionPin = 23 # direction signal to driver

enable = 24 # enable signal to driver

button1 = 13 # direction pin

button2 = 5

output1 = 19

output2 = 12

output3 = 21

speedHiLo = 6

limitLeft = 12

limitRight = 16

"""

設置通用 IO

"""

GPIO.setmode(GPIO.BCM) #configure pin layout

GPIO.setwarnings(False)

GPIO.setup(step, GPIO.OUT)

GPIO.output(step, GPIO.LOW)

GPIO.setup(directionPin, GPIO.OUT)

GPIO.output(directionPin, GPIO.LOW)

GPIO.setup(enable, GPIO.OUT)

GPIO.output(enable, GPIO.HIGH)

GPIO.setup(button1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(button2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(speedHiLo, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(limitLeft, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(limitRight, GPIO.IN, pull_up_down=GPIO.PUD_UP)

"""

一般配置及聲明

"""

global lospeed, hispeed, startTime, endTime, limitFlag, timeVar, accelTime, decelTime,decelPulseCoun, flag1, highPulse, direction, limitPulseCount

flag1 = 0 # variable for loop control

timeVar = 0 # variable for loop control

direction = 0 # variable for storing direction pin value

endTime = 0 # variable for storing wait time between pulses whilst slowing to a stop

limitFlag = 0 # signals that limit has been reached and flow must return to main loop

highPulse = 0.0001 # time for pulses to go high to trigger driver

startTime = 0.001 # time between pulses at start of movement

hispeed = 0.0001 # time between pulses at full speed

lospeed = 0.001 # time between pulses

accelTime = 0.000003 # amount of time to decrement between acceleration pulses

decelTime = 0.00005 # amount of time to increment between deceleration pulses

decelPulseCount = 50 # number of pulses sent during deceleration, 1/4 rev for current setup

limitPulseCount = 200 # number of pulses sent to the driver when a limit is tripped, 1/2 rev for current setup

"""

功能定義

"""

def rampUp():

GPIO.output(enable, 1) # enable driver for movement

timeVar = startTime #initialize time variable with starting time between pulses

global flag1

global limitFlag

global direction

flag1 = 1 # set flag HI

if(GPIO.input(button1)):

direction = 1

GPIO.output(directionPin, direction)

# light an LED

if(GPIO.input(button2)):

direction = 0

GPIO.output(directionPin, direction)

# light an LED

while((GPIO.input(button1) or GPIO.input(button2) == 1)):

if(GPIO.input(limitLeft)== 0): # if a limit input goes LOW, call the limit function

limit()

if(GPIO.input(limitRight)== 0): #if a limit input goes LOW, call the limit function

limit()

if(limitFlag == 1):

limitFlag = 0

break

GPIO.output(step, 1)

time.sleep(highPulse)

GPIO.output(step, 0)

time.sleep(abs(timeVar))

if(timeVar > endTime):

timeVar = timeVar - accelTime #decrease time between pulses until they reach endTime

def rampDown():

global flag1

flag1 = 0

global timeVar

timeVar = endTime #initialize time variable with ending time bewteen pulses

x = decelPulseCount

while(x > 0):

x = x - 1

GPIO.output(step, 1)

time.sleep(highPulse)

GPIO.output(step, 0)

time.sleep(abs(timeVar))

if(timeVar < startTime):

timeVar = timeVar + decelTime

def limit(): # this routine is like the ramp down routine

print("Limit Hit")

time.sleep(0.015) #wait for a bit

if(GPIO.input(limitLeft) and GPIO.input(limitRight) == 1): # debounce

return

GPIO.output(enable, 1) # enable driver for movement

global direction

global timeVar

global limitFlag

global flag1

flag1 = 0 # disable the flag so u dont call rampDown upon exiting limit()

timeVar = endTime #initialize time variable with ending time bewteen pulses

direction = not direction

GPIO.output(directionPin, direction)

limitFlag = 1 # set this flag so that the rampUp routine 'breaks' and jumps back to Main()

x = limitPulseCount

while(x > 0):

x = x - 1

GPIO.output(step, 1)

time.sleep(highPulse)

GPIO.output(step, 0)

time.sleep(abs(timeVar))

if(timeVar < startTime):

timeVar = timeVar + decelTime

"""

主循環

"""

while(1): #loop forever, check for button presses, speed changes and limit trips

#disable driver to keep from overheatings

if(GPIO.input(button1) or GPIO.input(button2) == 1): # button pressed, call rampUp function

rampUp()

if(flag1 == 1):

rampDown()

# movement over, deactivate direction LEDs

if(GPIO.input(speedHiLo) == 0):

endTime = lospeed #if lo-speed selected, initialize endTIme with lo-speed wait time

else:

endTime = hispeed #if hi-speed selected, initialize endTIme with hi-speed wait time

# light up red LED to indicate hi-speed mode

if(GPIO.input(limitLeft)== 0): # if a limit input goes LOW, call the limit function

limit()

if(GPIO.input(limitRight)== 0): #if a limit input goes LOW, call the limit function

limit()

代碼,來回穿梭

import RPi.GPIO as GPIO

import time

"""

設置 I/O 引腳掩碼

"""

step = 18 # step signal to driver

directionPin = 23 # direction signal to driver

enable = 24 # enable signal to driver

button1 = 13 # direction pin

button2 = 5

output1 = 19

output2 = 12

output3 = 21

speedHiLo = 6

limitLeft = 12

limitRight = 16

"""

設置通用 IO

"""

GPIO.setmode(GPIO.BCM) #configure pin layout

GPIO.setwarnings(False)

GPIO.setup(step, GPIO.OUT)

GPIO.output(step, GPIO.LOW)

GPIO.setup(directionPin, GPIO.OUT)

GPIO.output(directionPin, GPIO.LOW)

GPIO.setup(enable, GPIO.OUT)

GPIO.output(enable, GPIO.HIGH)

GPIO.setup(button1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(button2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(speedHiLo, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(limitLeft, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(limitRight, GPIO.IN, pull_up_down=GPIO.PUD_UP)

"""

一般配置及聲明

"""

global lospeed, hispeed, startTime, endTime, limitFlag, timeVar, accelTime, decelTime,decelPulseCoun, flag1, highPulse, direction, limitPulseCount

flag1 = 0 # variable for loop control

timeVar = 0 # variable for loop control

direction = 0 # variable for storing direction pin value

endTime = 0 # variable for storing wait time between pulses whilst slowing to a stop

limitFlag = 0 # signals that limit has been reached and flow must retuen to main loop

highPulse = 0.000005 # time for pulses to go high to trigger driver

startTime = 0.001 # time between pulses at start of movement

hispeed = 0.0005 # time bewtween pulses at full speed

lospeed = 0.0009 # time between pulses

accelTime = 0.000003 # amount of time to decrement between accleration pulses

decelTime = 0.00005 # amount of time to increment between deceleration pulses

decelPulseCount = 50 # number of pulses sent during deceleration, 1/4 rev for current setup

limitPulseCount = 5 # number of pulses sent to the driver when a limit is tripped, 1/2 rev for current setup

timeVar = startTime

def limit(): # this routine is like the ramp down routine

GPIO.output(enable, 0)

print("Limit Hit")

time.sleep(0.015) #wait for a bit

if(GPIO.input(limitLeft) and GPIO.input(limitRight) == 1): # debounce

return

GPIO.output(enable, 1) # enable driver for movement

global direction

global timeVar

global limitFlag

global flag1

flag1 = 0 # disable the flag so u dont call rampDown upon exiting limit()

timeVar = endTime #initialize time variable with ending time bewteen pulses

direction = not direction

GPIO.output(directionPin, direction)

limitFlag = 1 # set this flag so that the rampUp routine 'breaks' and jumps back to Main()

x = limitPulseCount

while(x > 0):

x = x - 1

GPIO.output(step, 1)

time.sleep(highPulse)

GPIO.output(step, 0)

time.sleep(abs(timeVar))

if(timeVar < startTime):

timeVar = timeVar + decelTime

"""

global direction

print("Limit Hit")

time.sleep(0.015)

if(GPIO.input(limitLeft) and GPIO.input(limitRight) == 1): # debounce

return

timeVar = startTime

flag1 = 0

direction = not direction

"""

"""

主循環

"""

while(1):

GPIO.output(enable, 1)

if(GPIO.input(limitLeft)== 0): # if a limit input goes LOW, call the limit function

GPIO.output(enable, 0)

limit()

if(GPIO.input(limitRight)== 0): #if a limit input goes LOW, call the limit function

GPIO.output(enable, 0)

limit()

if(limitFlag == 1):

limitFlag = 0

GPIO.output(directionPin, direction)

GPIO.output(step, 1)

time.sleep(highPulse)

GPIO.output(step, 0)

time.sleep(abs(timeVar))

if(timeVar > endTime):

timeVar = timeVar - accelTime

if(GPIO.input(speedHiLo) == 0):

endTime = lospeed #if lo-speed selected, initialize endTIme with lo-speed wait time

else:

endTime = hispeed

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Raspberry Pi
    +關注

    關注

    2

    文章

    621

    瀏覽量

    24017
  • 智能硬件
    +關注

    關注

    205

    文章

    2423

    瀏覽量

    111440
  • 步進驅動器
    +關注

    關注

    7

    文章

    86

    瀏覽量

    59939
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    過程×框架×平臺:安全“三支柱”護航AI應用量產落地

    面臨的安全挑戰,并首次系統性展示了經緯恒潤AI安全過程、AI安全框架、AI安全平臺等方面的階段性成果,引發行業廣泛關注。
    的頭像 發表于 12-30 13:23 ?463次閱讀
    <b class='flag-5'>過程</b>×框架×<b class='flag-5'>平臺</b>:安全“三支柱”護航AI應用量產落地

    芯片燒錄原理是什么?一文讀懂芯片程序燒錄全過程

    芯片燒錄是向芯片存儲單元寫入二進制代碼的精密操作,核心是借燒錄器以特定電壓和時序改變浮柵晶體管電荷狀態。全過程分五步:建立連接核對芯片 ID,擦除存儲器原有數據,按協議將程序文件逐位寫入芯片,實時
    的頭像 發表于 12-25 14:20 ?524次閱讀

    Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統模塊

    Banana Pi BPI-CM6 系統模塊 (SoM) 采用 SpacemiT K1 八核 RISC-V 處理器,并且與大多數 Raspberry Pi CM4 或 CM5 模塊的載板兼容。 它
    發表于 11-28 16:59

    Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統模塊

    Banana Pi BPI-CM6 系統模塊 (SoM) 采用 SpacemiT K1 8 核 RISC-V 處理器,并且與大多數為 Raspberry Pi CM4 或 CM5 設計的載板兼容
    的頭像 發表于 11-28 16:57 ?2321次閱讀
    Banana <b class='flag-5'>Pi</b> BPI-CM6 – 一款與 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統模塊

    SOLIDWORKS PDM Professional安裝部署指南:從服務器到客戶端的詳細步驟

    一份詳盡的SOLIDWORKS PDM Professional安裝指南,面向IT管理員,涵蓋從SQL Server配置、服務器安裝到客戶端設置的全過程,確保您高效、正確地完成PDM系統部署
    的頭像 發表于 09-11 17:37 ?1587次閱讀

    Banana Pi BPI-R4 Lite:新型單板計算機比 Raspberry Pi 5 更具優勢

    Raspberry Pi 5(亞馬遜售價 66 美元起)的替代品。 然而,它的側重點略有不同,尤其適合網絡應用。例如,它可以作為 OpenWrt 路由器的基礎。Banana Pi 最新的 SBC
    的頭像 發表于 08-26 16:46 ?1419次閱讀
    Banana <b class='flag-5'>Pi</b> BPI-R4 Lite:新型單板計算機比 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 更具優勢

    BIOS POST CODE資料簡介

    BIOS POST CODE主板上電過程,BIOS自檢全過程,內部絕密資料
    發表于 08-25 16:06 ?0次下載

    技術解析篇:直線電機平臺的核心優勢與應用全景

    在精密自動化領域,直線電機平臺憑借直接驅動原理,消除了傳統傳動中絲杠、皮帶帶來的背隙與損耗,實現了更快的響應速度與更高的定位精度。相較于旋轉電機加機械轉換的結構,直線電機在需要高頻往復運動、微米乃至納米級定位的場景中展現出顯著優
    的頭像 發表于 08-06 14:37 ?719次閱讀

    直線電機平臺的優勢解析

    在追求高精度、高效率的工業自動化浪潮中,憑借其深厚的技術積淀與務實的服務理念,成為眾多企業值得信賴的合作伙伴。其核心產品——直線電機平臺,正以其顯著的優勢助力各行業客戶提升核心競爭力。 深厚底蘊
    的頭像 發表于 08-04 18:19 ?752次閱讀

    貿澤開售Raspberry Pi用于嵌入式和IIoT應用的RP2350微控制器

    2025 年 5 月 23 日 – 提供超豐富半導體和電子元器件?的業界知名新品引入 (NPI) 代理商貿澤電子 (Mouser Electronics) 即日起開售Raspberry Pi的新款
    發表于 05-27 14:50 ?1506次閱讀

    如何在Raspberry Pi OS上安裝SDK?

    Raspberry Pi OS 上安裝 SDK
    發表于 04-30 06:45

    貿澤開售適用于AI和嵌入式應用的 全新Raspberry Pi Compute Module 5

    2025 年 3 月 20 日 – 專注于推動行業創新的知名新品引入 (NPI) 代理商?貿澤電子 (Mouser Electronics) 即日起供應Raspberry Pi的全新Compute
    發表于 03-24 15:09 ?533次閱讀

    開關電源設計要領及設計全過程

    1 目的 希望以簡短的篇幅,將公司目前設計的流程做介紹,若有介紹不當之處,請不吝指教。 2 設計步驟: 2.1 繪線路圖、PCB Layout. 2.2 變壓器計算. 2.3 零件選用. 2.4 設計驗證. 3設計流程介紹(以 DA-14B33 為例): 3.1線路圖、PCB Layout 請參考資識庫中說明. 3.2變壓器計算: 變壓器是整個電源供應器的重要核心,所以變壓器的計算及驗證是很重要的,以下即就 DA-14B33 變壓器做介紹. 3.2.1 決定變壓器的材質及尺寸: 依據變壓器計算公式 B(max) =鐵心飽合的磁通密度(Gauss) Lp =一次側電感值(uH) Ip =一次側峰值電流(A) Np =一次側(主線圈)圈數 Ae =鐵心截面積(cm2) B(max) 依鐵心的材質及本身的溫度來決定,以 TDK Ferrite Core PC40 為例,100℃時的 B(max)為3900 Gauss,設計時應考慮零件誤差,所以一般取 3000~3500 Gauss 之間,若所設計的 power 為Adapter(有外殼)則應取 3000 Gauss 左右,以避免鐵心因高溫而飽合,一般而言鐵心的尺寸越大,Ae 越高,所以可以做較大瓦數的 Power。 文件過大,需要完整版資料可下載附件查看哦!
    發表于 03-07 15:53

    Raspberry Pi上使用IR v11及OpenVINO? 2021.3后不兼容怎么辦?

    PYTHONPATH=\"$PWD\" && python export.py --weights--img 512 --include openvino 轉換后的 IR v11 模型與 Raspberry Pi 上的 OpenVINO? 2021.3
    發表于 03-06 07:14

    Raspberry Pi上從源代碼構建OpenVINO? ARM插件失敗了,怎么解決?

    Raspberry Pi* 上從源代碼構建OpenVINO? ARM 插件。 cmake -DCMAKE_BUILD_TYPE=Release -DOPENVINO_EXTRA_MODULES
    發表于 03-06 06:19