乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      開(kāi)始上手SimpleFOClibrary

       beginnow1 2022-05-24 發(fā)布于廣東

      安裝完整的 SimpleFOClibrary 

      通過(guò)Arduino Library Manager安裝

      最簡(jiǎn)單的方式是直接通過(guò) Arduino IDE中的 Arduino Library Manager 獲取庫(kù)。

      • 打開(kāi)Arduino IDE, 點(diǎn)擊 Tools > Manage Libraries...,啟動(dòng) Arduino Library Manager

      • 搜索 “Simple FOC” 庫(kù)并安裝 最新版本 .

      • 重新打開(kāi)Arduino IDE,就能在 File > Examples > Simple FOC中看到庫(kù)例程。

       通過(guò)Github安裝

      如果你更傾向于從github倉(cāng)庫(kù)直接下載庫(kù),請(qǐng)看以下指引。

       壓縮包下載

      • 進(jìn)入  main 。

      • 首先點(diǎn)擊 Clone or Download > Download ZIP

      • 解壓下載的壓縮包到Arduino Libraries 文件夾( 文件夾路徑 Windows: Documents > Arduino > libraries

      • 重新打開(kāi)Arduino IDE,就能在 File > Examples > Simple FOC中看到庫(kù)例程。

       電腦終端克隆

      • 打開(kāi)電腦終端并運(yùn)行下列代碼:

        cd #arduino 庫(kù)文件夾git clone https://github.com/simplefoc/Arduino-FOC.git
      • 重新打開(kāi)Arduino IDE,就能在 File > Examples > Simple FOC中看到庫(kù)例程。

      安裝好 SimpleFOClibrary ,準(zhǔn)備好所有必須的 硬件 后, 我們就要開(kāi)始了解驅(qū)動(dòng)電機(jī)的Arduino代碼。以下是編寫程序時(shí)的所有重要步驟。

      第0步 include庫(kù)

      在開(kāi)始前,先include庫(kù)中的頭文件:

      #include <SimpleFOC.h>

      步驟1 設(shè)置位置傳感器

      編寫程序的第一步是初始化和配置位置傳感器。 該庫(kù)支持以下位置傳感器:

      • 編碼器: 支持光學(xué)、電容式、磁編碼器 (ABI方式)

      • 磁性傳感器: 支持SPI, I2C, PWM以及Analog (模擬輸出)

      • 霍爾傳感器: 3x霍爾探頭, 磁性傳感器 (UVW 接口)

      選擇恰當(dāng)?shù)奈恢脗鞲衅鬟\(yùn)行以下例程:

      磁性傳感器 編碼器

      #include <SimpleFOC.h>// SPI 例程// MagneticSensorSPI(int cs芯片選擇引腳, float bit_resolution傳感器分辨率, int angle_register角度讀取寄存器)MagneticSensorSPI sensor = MagneticSensorSPI(10, 14, 0x3FFF);void setup() {
        // 初始化磁傳感器硬件
        sensor.init();}void loop() {}
      在例程中,我們使用了14 位磁性傳感器進(jìn)行設(shè)置,比如:AS5047u, 并將其與引腳10連接。
      磁性傳感器使用SPI方式通訊,在類MagneticSensorSPI中的實(shí)現(xiàn)與定義如下:
      • chip_select 引腳: 10

      • 傳感器總 CPR(每圈脈沖數(shù)): CPR = 2^14bit =16384

      • angle SPI 寄存器: 0x3FFF

      執(zhí)行 sensor.init(),初始化傳感器硬件引腳

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 位置傳感器 docs 。

      步驟2 設(shè)置驅(qū)動(dòng)器

      配置好位置傳感器后,我們開(kāi)始初始化和配置驅(qū)動(dòng)器。該庫(kù)支持由類BLDCDriver3PWM 和 BLDCDriver6PWM 控制的無(wú)刷直流電機(jī)驅(qū)動(dòng)器以及由類StepperDriver4PWM 控制的步進(jìn)電機(jī)驅(qū)動(dòng)器。

      BLDCDriver3PWM的實(shí)例化需要以下參數(shù) :

      • AB 和 C 相對(duì)應(yīng)的引腳編號(hào)

      • enable 的引腳編號(hào) (可選)

      例如:

      #include <SimpleFOC.h>//  BLDCDriver3PWM( pin_pwmA, pin_pwmB, pin_pwmC, enable使能引腳(可選的))BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8);// 實(shí)例化傳感器void setup() {  
      
        // 初始化傳感器
      
        // 電源電壓
        driver.voltage_power_supply = 12;
        // 初始化驅(qū)動(dòng)器
        driver.init();}void loop() {}

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 驅(qū)動(dòng)器 docs 。

      步驟3 設(shè)置電流檢測(cè)

      配置好位置傳感器及驅(qū)動(dòng)器后,如果驅(qū)動(dòng)器支持電流檢測(cè)的話,就要初始化和配置電流檢測(cè)。如果不支持的話,可以跳過(guò)這一步。 該庫(kù)暫時(shí)僅支持在線電流檢測(cè) InlineCurrentSense這一種電流檢測(cè)方式。

      InlineCurrentSense 的實(shí)例化需要以下參數(shù):

      • 采樣電阻的阻值 shunt_resistance

      • 放大增益 gain

      • A, B (以及可選C)相對(duì)應(yīng)的引腳編號(hào)

      例如:

      #include <SimpleFOC.h>// 實(shí)例化驅(qū)動(dòng)器// 實(shí)例化傳感器//  InlineCurrentSense(shunt_resistance分流電阻, gain增益, adc_a, adc_b)InlineCurrentSense current_sense = InlineCurrentSense(0.01, 50, A0, A2);void setup() {  
      
        // 初始化傳感器
      
        // 初始化驅(qū)動(dòng)器
      
        // 初始化電流檢測(cè)
        current_sense.init();}void loop() {}

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 電流檢測(cè) docs 。

      步驟4 設(shè)置電機(jī)

      配置好位置傳感器及驅(qū)動(dòng)器后,我們開(kāi)始初始化和配置電機(jī)。 該庫(kù)支持由 BLDCMotor 類控制的無(wú)刷直流電機(jī)以及由 StepperMotor 類控制的步進(jìn)電機(jī)。僅需填入電機(jī)極對(duì)數(shù)就能實(shí)現(xiàn)這兩個(gè)類的控制。

      // StepperMotor(int pole_pairs極對(duì)數(shù))StepperMotor motor = StepperMotor(50);
      // BLDCMotor(int pole_pairs極對(duì)數(shù))BLDCMotor motor = BLDCMotor(11);

      在這一例程,我們使用了無(wú)刷直流電機(jī):

      #include <SimpleFOC.h>//  BLDCMotor( int pole_pairs極對(duì)數(shù) )BLDCMotor motor = BLDCMotor( 11);
       // 實(shí)例化驅(qū)動(dòng)器// 實(shí)例化傳感器 // 實(shí)例化電流檢測(cè)   void setup() {  
        // 初始化傳感器
        // 連接電機(jī)和傳感器
        motor.linkSensor(&sensor);
      
        // 初始化驅(qū)動(dòng)器
        // 連接電機(jī)和驅(qū)動(dòng)器
        motor.linkDriver(&driver);
        
        // 初始化電流檢測(cè)
        // 連接其至電機(jī)
        motor.linkCurrentSense(&current_sese);
      
        // 設(shè)置控制環(huán)類型
        motor.controller = MotionControlType::velocity;
        // 初始化電機(jī)
        motor.init();}void loop() {}

      在 創(chuàng)建motor 實(shí)例后,我們需要用motor.linkSensor() 連接傳感器,用 motor.linkDriver()連接驅(qū)動(dòng)器。
      下一步是配置電機(jī)。在這個(gè)配置例子中,我們僅用到了運(yùn)動(dòng)控制:

      // 設(shè)置控制環(huán)類型motor.controller = MotionControlType::velocity;

      最后,我們執(zhí)行 motor.init() 函數(shù),完成電機(jī) motor 的設(shè)置。

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn)  電機(jī) docs .

      步驟5 FOC 例程及實(shí)時(shí)位置控制

      在初始化位置傳感器、驅(qū)動(dòng)器和電機(jī)之后,在運(yùn)行FOC算法之前,我們需要校準(zhǔn)電機(jī)和傳感器。這個(gè)過(guò)程被稱為 motor.initFOC(). 在這一步之后,我們將擁有一個(gè)能夠正常工作的位置傳感器以及配置好的電機(jī),我們的FOC算法就可以基于位置傳感器的測(cè)量設(shè)定合適的電壓。

      在FOC算法的實(shí)時(shí)運(yùn)行時(shí),我們需要在Arduino loop()中添加函數(shù) motor.loopFOC() 和 motor.move(target) 。

      • motor.loopFOC():FOC 算法執(zhí)行——應(yīng)該盡可能快地被執(zhí)行 ,頻率> 1kHz

      • motor.move(target): 位置控制例程——取決于motor.controller 參數(shù)。

      下面是其在代碼中的呈現(xiàn):

      #include <SimpleFOC.h>// 實(shí)例化電機(jī)// 實(shí)例化驅(qū)動(dòng)器// 實(shí)例化傳感器// 實(shí)例化電流檢測(cè)void setup() {  
        
        // 初始化傳感器
        // 連接電機(jī)和傳感器
      
        // 初始化驅(qū)動(dòng)器
        // 連接電機(jī)和驅(qū)動(dòng)器
      
        // 初始化電流檢測(cè)
        // 連接電機(jī)和電流檢測(cè)
      
        // 配置電機(jī)
        // 初始化電機(jī)
      
        // 校準(zhǔn)編碼器,啟用FOC
        motor.initFOC();}void loop() {
        // FOC算法函數(shù)
        motor.loopFOC();
      
        // 速度控制環(huán)函數(shù)
        // 設(shè)置目標(biāo)速度或2rad/s
        motor.move(2);}

      無(wú)刷直流電機(jī)完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 無(wú)刷直流電機(jī) docs , 步進(jìn)電機(jī)的完整文件,請(qǐng)?jiān)L問(wèn) 步進(jìn)電機(jī) docs 。

      步驟6 監(jiān)測(cè) 

      類 BLDCMotor 和 StepperMotor 提供監(jiān)測(cè)函數(shù)。為了實(shí)現(xiàn)檢測(cè),你需要確保motor.useMonitoring() 調(diào)用了你想要輸出的串口實(shí)例 Serial 在 motor.init() 和 motor.initFOC() 的運(yùn)行過(guò)程中,類 Serial 將輸出電機(jī)初始化狀態(tài)。

      如果你希望實(shí)時(shí)輸出電機(jī)狀態(tài)變量(這樣會(huì)影響它的性能——串口輸出的速度會(huì)很慢?。?,你可以在 Arduinoloop()中添加函數(shù)motor.monitor()

      #include <SimpleFOC.h>// 實(shí)例化電機(jī)// 實(shí)例化驅(qū)動(dòng)器// 實(shí)例化傳感器void setup() {  
        
        // 初始化傳感器
        // 連接電機(jī)和傳感器
      
        // 初始化驅(qū)動(dòng)器
        // 連接電機(jī)和驅(qū)動(dòng)器
      
        // 初始化電流檢測(cè)
        // 連接電機(jī)和電流檢測(cè)
      
        // 監(jiān)視無(wú)刷直流電機(jī)
        Serial.begin(115200);
        // 監(jiān)視點(diǎn)
        motor.useMonitoring(Serial);
        
        // 配置電機(jī)
        // 初始化電機(jī)
        
        // 校準(zhǔn)編碼器,啟用FOC}void loop() {
        
        // 執(zhí)行FOC
        // 運(yùn)動(dòng)控制環(huán)
      
        // 監(jiān)視函數(shù)向串行終端輸出電機(jī)變量的監(jiān)控
        motor.monitor();}

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 監(jiān)測(cè) docs。

      步驟7  命令接口

      最后,為了配置控制算法,設(shè)定目標(biāo)值,以用戶友好的方式獲得狀態(tài)變量(不只是像使用motor.monitor()那樣的轉(zhuǎn)儲(chǔ))。Arduino SimpleFOC庫(kù) 為你提供像通信接口一樣的 G 代碼,組成類 Commander 。

      以下代碼是用戶使用接口進(jìn)行通信的基礎(chǔ)實(shí)現(xiàn):

      #include <SimpleFOC.h>// 實(shí)例化電機(jī)// 實(shí)例化傳感器// commander實(shí)例化Commander commander = Commander(Serial);void doMotor(char* cmd){commander.motor(&motor, cmd);}void setup() {  
        
        // 初始化傳感器
        // 連接電機(jī)和傳感器
      
        // 初始化驅(qū)動(dòng)器
        // 連接電機(jī)和驅(qū)動(dòng)器
      
        // 初始化電流檢測(cè)
        // 連接電機(jī)和電流檢測(cè)
        
        // 啟用監(jiān)視器
        
        // 訂閱電機(jī)至commands
        commander.add('M',doMotor,"motor");
      
        // 初始化電機(jī)
        
        // 校準(zhǔn)編碼器,啟用FOC}void loop() {
        
        // 執(zhí)行FOC
        // 運(yùn)動(dòng)控制環(huán)
        // 電機(jī)變量
      
        // 讀取用戶命令
        commander.run();}

      完整的設(shè)置和參數(shù)配置文件,請(qǐng)?jiān)L問(wèn) 通信 docs

      步驟8 分步使用教程

      現(xiàn)在你應(yīng)該已經(jīng)熟悉SimpleFOClibrary的代碼框架并且能夠開(kāi)始編寫自己的應(yīng)用程序了。為了使這一過(guò)程更加簡(jiǎn)單易懂,我們?yōu)槟闾峁┝嗽敿?xì)的分步使用教程以確保你能夠在初次接觸這個(gè)庫(kù)時(shí)一步一步的順利進(jìn)行。

      ?? 完整的Arduino代碼例程

      現(xiàn)在你已經(jīng)學(xué)習(xí)完Arduino項(xiàng)目的所有部分了,這是一些額外配置的完整代碼例程,請(qǐng)瀏覽這些代碼以便更好地將先前介紹的所有部分內(nèi)容融會(huì)貫通。這就是該庫(kù)的代碼例程: motor_full_control_serial_examples/magnetic_sensor/full_control_serial.ino。

      #include <SimpleFOC.h>// 磁傳感器實(shí)例 - SPIMagneticSensorSPI sensor = MagneticSensorSPI(AS5147_SPI, 10);// 無(wú)刷直流電機(jī)及驅(qū)動(dòng)器實(shí)例BLDCMotor motor = BLDCMotor(11);BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8);// commander接口Commander command = Commander(Serial);void onMotor(char* cmd){ command.motor(&motor, cmd); }void setup() {
      
        // 初始化磁傳感器硬件
        sensor.init();
        // 連接電機(jī)和傳感器
        motor.linkSensor(&sensor);
      
        // 配置驅(qū)動(dòng)器
        // 電源電壓 [V]
        driver.voltage_power_supply = 12;
        driver.init();
       // 連接驅(qū)動(dòng)器
        motor.linkDriver(&driver);
      
        // 設(shè)置控制環(huán)類型
        motor.controller = MotionControlType::torque;
      
        // 基于控制環(huán)類型配置控制器 
        motor.PID_velocity.P = 0.2;
        motor.PID_velocity.I = 20;
        motor.PID_velocity.D = 0;
        // 默認(rèn)為電源電壓
        motor.voltage_limit = 12;
      
        // 速度低通濾波時(shí)間常數(shù)
        motor.LPF_velocity.Tf = 0.01;
      
        // 角度環(huán)控制器
        motor.P_angle.P = 20;
       // 角度環(huán)速度限制
        motor.velocity_limit = 50;
      
        // 使用串口監(jiān)視電機(jī)初始化
        // 監(jiān)視點(diǎn)
        Serial.begin(115200);
        // 如果不需要,可以注釋掉此行
        motor.useMonitoring(Serial);
      
        // 初始化電機(jī)
        motor.init();
        // 校準(zhǔn)編碼器,啟用FOC
        motor.initFOC();
      
        // 設(shè)置初始目標(biāo)值
        motor.target = 2;
      
        // 定義電機(jī) id
        command.add('A', onMotor, "motor");
      
        // 運(yùn)行用戶命令配置電機(jī)(完整命令列表見(jiàn)docs.)
        Serial.println(F("Motor commands sketch | Initial motion control > torque/voltage : target 2V."));
        
        _delay(1000);}void loop() {
        // 迭代設(shè)置FOC相電壓
        motor.loopFOC();
      
        // 設(shè)置外部環(huán)目標(biāo)的迭代函數(shù)
        // 速度,位置或電壓
        // 如果在參數(shù)中未設(shè)置目標(biāo),則使用電機(jī)目標(biāo)變量
        motor.move();
        
        // 用戶通信
        command.run();}

      開(kāi)源代碼庫(kù)

      對(duì)擴(kuò)展和調(diào)整SimpleFOClibrary源代碼有興趣的朋友,可以在 SimpleFOClibrary 源代碼 docs 中找到完整文檔。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多