簡介步進(jìn)電動機是一種將脈沖信號變換成相應(yīng)的角位移(或線位移)的電磁裝置,,是一種特殊的電動機,。一般電動機都是連續(xù)轉(zhuǎn)動的,而步進(jìn)電動機則有定位和運轉(zhuǎn)兩種基本狀態(tài),,當(dāng)有脈沖輸入肘步進(jìn)電動機一步一步地轉(zhuǎn)動,,每給它一個脈沖信號,它就轉(zhuǎn)過一定的角度,。
技術(shù)規(guī)格
接口說明引腳說明我們在擴(kuò)展板上額外引出了一些引腳,,以方便玩家使用跳帽連接驅(qū)動芯片上的必要引腳,。不用再使用纏人的杜邦線了,! 步進(jìn)電機科普指標(biāo)術(shù)語1,、相數(shù):產(chǎn)生不同對極N,、S磁場的激磁線圈對數(shù)。常用m表示,。 動態(tài)指標(biāo)術(shù)語1,、步距角精度:步進(jìn)電機每轉(zhuǎn)過一個步距角的實際值與理論值的誤差。用百分比表示:誤差/步距角*100%,。不同運行拍數(shù)其值不同,,四拍運行時應(yīng)在5%之內(nèi),,八拍運行時應(yīng)在15%以內(nèi)。 步進(jìn)電機驅(qū)動方式功率放大是驅(qū)動系統(tǒng)最為重要的部分,。步進(jìn)電機在一定轉(zhuǎn)速下的轉(zhuǎn)矩取決于它的動態(tài)平均電流而非靜態(tài)電流(而樣本上的電流均為靜態(tài)電流),。平均電流越大電機力矩越大,要達(dá)到平均電流大這就需要驅(qū)動系統(tǒng)盡量克服電機的反電勢,。因而不同的場合采取不同的的驅(qū)動方式,,到目前為止,驅(qū)動方式一般有以下幾種:恒壓,、恒壓串電阻,、高低壓驅(qū)動、恒流,、細(xì)分?jǐn)?shù)等,。 電機選擇步進(jìn)電機有步距角(涉及到相數(shù))、靜轉(zhuǎn)矩,、及電流三大要素組成,。一旦三大要素確定,步進(jìn)電機的型號便確定下來了,。 1,、步距角的選擇電機的步距角取決于負(fù)載精度的要求,,將負(fù)載的最小分辨率(當(dāng)量)換算到電機軸上,每個當(dāng)量電機應(yīng)走多少角度(包括減速),。電機的步距角應(yīng)等于或小于此角度,。市場上步進(jìn)電機的步距角一般有0.36度/0.72度(五相電機)、0.9度/1.8度(二,、四相電機),、1.5度/3度 (三相電機)等。 2,、靜力矩的選擇步進(jìn)電機的動態(tài)力矩一下子很難確定,,我們往往先確定電機的靜力矩。靜力矩選擇的依據(jù)是電機工作的負(fù)載,,而負(fù)載可分為慣性負(fù)載和摩擦負(fù)載二種,。單一的慣性負(fù)載和單一的摩擦負(fù)載是不存在的。直接起動時(一般由低速)時二種負(fù)載均要考慮,,加速起動時主要考慮慣性負(fù)載,,恒速運行進(jìn)只要考慮摩擦負(fù)載。一般情況下,,靜力矩應(yīng)為摩擦負(fù)載的2-3倍內(nèi)好,,靜力矩一旦選定,電機的機座及長度便能確定下來(幾何尺寸),。 3、電流的選擇靜力矩一樣的電機,,由于電流參數(shù)不同,,其運行特性差別很大,可依據(jù)矩頻特性曲線圖,,判斷電機的電流,。 TMC260驅(qū)動器控制方式TMC260驅(qū)動芯片有兩種控制方式接口:SPI串行接口和STEP/DIR接口。SPI串行接口使用來設(shè)置芯片寄存器和讀取芯片寄存器值,,驅(qū)動電機需要通過SPI接口設(shè)置初始化參數(shù)和模式,,在SPI模式下也可以用來設(shè)置通過電機線圈的電流,從而代替STEP/DIR的驅(qū)動方式,,因此我們可以單獨通過SPI接口控制步進(jìn)電機,。只使用SPI接口需要占用CPU時間來查找正弦表值不斷發(fā)送線圈的電流值。(注:我們的開發(fā)者在datasheet中并沒有發(fā)現(xiàn)具體的這個sin表值的計算,,出于科學(xué)嚴(yán)謹(jǐn)態(tài)度開發(fā)者就沒有將sin電流計算方式公布,,同時也歡迎廣大使用者共同開發(fā)) SPI控制模式SPI(Serial Peripheral Interface)是一種串行同步通訊協(xié)議,,由一個主設(shè)備和一個或多個從設(shè)備組成,主設(shè)備啟動一個與從設(shè)備的同步通訊,,從而完成數(shù)據(jù)的交換,。同TMC260或者TMC261通信是發(fā)送一個20位命令字和接收一個20位狀態(tài)字。 STEP/DIRSTEP/DIR模式在默認(rèn)的情況下是啟用的,,在每一個信號跳變時,DIR引腳的輸入狀態(tài)電平?jīng)Q定電機前進(jìn)或者后退,,每一個步距角都可以分為整步或者微步運行,,一個整步可以分為2、4,、8,、16、32,、64,、128或256個微步。在微步控制,,DIR輸入為低電平狀態(tài)每一個階躍信號將會增加內(nèi)部微步計數(shù)器值,,一個內(nèi)部表將計數(shù)器的值轉(zhuǎn)換為正弦和余弦值為微步控制電動機的電流。 TMC260控制方式選擇SPI模式:SDOFF位置高,,STEP/DIR接口失能,,通過DRVCTR指定每個線圈的通過電流。
TMC260庫使用實例好了,,前面說了這么多,,難道需要我們的使用者具體去了解這些什么參數(shù)怎樣設(shè)置,寄存器怎樣配置,,配置什么值,,不,我們?yōu)槭褂谜咦隽诉m配的庫函數(shù),,只需要知道怎樣使用我們的庫函數(shù)就行了,。當(dāng)然,每一個步進(jìn)電機的參數(shù)不相同,需要使用者自己去調(diào)試一些參數(shù),,如果覺得這些很麻煩,,請直接使用我們的步進(jìn)電機[混合式步進(jìn)電機-42BYGH1861A-C]。 注意:請在1.0.X版本的IDE下編譯,,高版本IDE因庫的更新將導(dǎo)致編譯失敗,。 TMC260庫文件下載鏈接 /*************************************************** TMC260 Stepper Motor Driver Shield <http://www./index.php?route=product/product&product_id=1360&search=tmc260&description=true#.Vp9Lrh6OCx8> *************************************************** This example show how to control stepper motors. Created 2015-6-11 By Bruce Hee <Loan.he@> Modified 2015-6-11 By Bruce Hee <Loan.he@> GNU Lesser General Public License. See <http://www./licenses/> for details. All above must be included in any redistribution ****************************************************/ /***********Notice and Trouble shooting*************** 1.Connection and Diagram can be found here <http://www./wiki/index.php?title=TMC260_Stepper_Motor_Driver_Shield_SKU:_DRI0035> 2.This code is tested on Arduino Uno, Leonardo, Mega boards. 3.SHT1x library is created by jonoxer. See <https://github.com/CainZ/TMC260-Stepper-Motor-Driver-Shield> for details. ****************************************************/ #include <SPI.h> #include <TMC26XStepper.h> //we have a stepper motor with 200 steps per rotation,CS pin 6, dir pin 4, step pin 5 and a current of 300mA TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,800); void setup() { Serial.begin(9600); Serial.println("=============================="); Serial.println("TMC26X Stepper Driver Demo App"); Serial.println("=============================="); //set this according to you stepper Serial.println("Configuring stepper driver"); //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0); tmc26XStepper.setRandomOffTime(0); tmc26XStepper.SPI_setCoilCurrent(100); tmc26XStepper.setMicrosteps(128); tmc26XStepper.setStallGuardThreshold(4,0); Serial.println("config finished, starting"); Serial.println("started"); tmc26XStepper.SPI_setSpeed(80); //Set 80 revolutions per minute tmc26XStepper.SPI_step(-200); //Sets the number of runs for 200 steps, reverse motor 1 tmc26XStepper.spi_start() ; //Motor starting delay(2000); tmc26XStepper.SPI_step(200); //Sets the number of runs for 200 steps, that motor is turn 1 tmc26XStepper.spi_start() ; delay(2000); tmc26XStepper.SPI_setSpeed(100); //Set 80 revolutions per minute tmc26XStepper.SPI_step(-300); //Sets the number of runs for 300 steps, reverse motor 1.5 tmc26XStepper.spi_start() ; delay(2000); tmc26XStepper.SPI_setSpeed(120); tmc26XStepper.SPI_step(400); //reverse motor 2.0 tmc26XStepper.spi_start() ; delay(3000); } void loop() { //Motor control can be written inside the loop functions, let motor repetitive movements }
/*************************************************** TMC260 Stepper Motor Driver Shield <http://www./index.php?route=product/product&product_id=1360&search=tmc260&description=true#.Vp9Lrh6OCx8> *************************************************** This example show how to control stepper motors. Created 2015-6-11 By Bruce Hee <Loan.he@> Modified 2015-6-11 By Bruce Hee <Loan.he@> GNU Lesser General Public License. See <http://www./licenses/> for details. All above must be included in any redistribution ****************************************************/ /***********Notice and Trouble shooting*************** 1.Connection and Diagram can be found here <http://www./wiki/index.php?title=TMC260_Stepper_Motor_Driver_Shield_SKU:_DRI0035> 2.This code is tested on Arduino Uno, Leonardo, Mega boards. 3.SHT1x library is created by jonoxer. See <https://github.com/CainZ/TMC260-Stepper-Motor-Driver-Shield> for details. ****************************************************/ #include <SPI.h> #include <TMC26XStepper.h> //we have a stepper motor with 200 steps per rotation, CS pin 6, dir pin 4, step pin 5 and a current of 300mA TMC26XStepper tmc26XStepper = TMC26XStepper(200,6,4,5,700); int curr_step; int speed = 0; int speedDirection = 100; int maxSpeed = 1000; void setup() { Serial.begin(9600); Serial.println("=============================="); Serial.println("TMC26X Stepper Driver Demo App"); Serial.println("=============================="); //set this according to you stepper Serial.println("Configuring stepper driver"); //char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0); tmc26XStepper.setRandomOffTime(0); tmc26XStepper.setMicrosteps(32); tmc26XStepper.setStallGuardThreshold(4,0); Serial.println("config finished, starting"); Serial.println("started"); } void loop() { if (!tmc26XStepper.isMoving()) { speed+=speedDirection; if (speed>maxSpeed) { speed = maxSpeed; speedDirection = -speedDirection; } else if (speed<0) { speedDirection = -speedDirection; speed=speedDirection; } //setting the speed Serial.print("setting speed to "); Serial.println(speed); tmc26XStepper.setSpeed(speed); //we want some kind of constant running time - so the length is just a product of speed Serial.print("Going "); Serial.print(10*speed); Serial.println(" steps"); tmc26XStepper.step(10*speed); } else { //we put out the status every 100 steps if (tmc26XStepper.getStepsLeft()%100==0) { Serial.print("Stall Guard: "); Serial.println(tmc26XStepper.getCurrentStallGuardReading()); } } tmc26XStepper.move(); }
TMC260庫說明TMC260庫解析*TMC26XStepper(int number_of_steps, int cs_pin, int dir_pin, int step_pin, unsigned int current, unsigned int resistor) number_of_steps:每選擇一周的步數(shù),。 *TMC26XSet_SPICS(int cs_pin) cs_pin:在 SPI總線模式下CS引腳選擇,。 *setConstantOffTimeChopper(char constant_off_time, char blank_time, char fast_decay_time_setting, char sine_wave_offset, unsigned char use_current_comparator) constant_off_time:時間設(shè)定,,控制斬波器最低頻率,對于大多數(shù)應(yīng)用這個時間適合范圍為5us-20us,??稍O(shè)置值為0-15. *setCurrent(unsigned int current) current:設(shè)置線圈電流。 *SPI_setCoilCurrent(int Current) Current:設(shè)置SPI模式下電機線圈電流大小,,注意此時的設(shè)置范圍0-248,。 *setMicrosteps(int number_of_steps) number_of_steps:設(shè)置每一步間距的微步數(shù)。可設(shè)置為0-256,。 *setStallGuardThreshold(char stall_guard_threshold, char stall_guard_filter_enabled) stall_guard_threshold:設(shè)置失速保護(hù)(StallGuard)閾值,以獲取合理的StallGuard讀數(shù),。 *step(int steps_to_move) steps_to_move:設(shè)置STEP/DIR模式下前進(jìn)步數(shù),,正負(fù)值確定電機運行方向。 *setSpeed(unsigned int whatSpeed) whatSpeed:設(shè)置STEP/DIR模式下每分鐘的轉(zhuǎn)數(shù),。 *SPI_step(int spi_steps_to_move) spi_steps_to_move:設(shè)置SPI模式下前進(jìn)的步數(shù),,正負(fù)值確定電機運行方向。 *SPI_setSpeed(unsigned int whatSpeed) whatSpeed:設(shè)置SPI模式下每分鐘的轉(zhuǎn)數(shù),。 *tmc26XStepper.move() STEP/DIR模式下電機開始運行,。 *tmc26XStepper.spi_start() SPI模式下電機開始運行。 TMC260資料下載步進(jìn)電機驅(qū)動擴(kuò)展板原理圖下載 |
|
來自: 易水殘虹 > 《步進(jìn)電機》