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

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

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

3天內不再提示

步進電機S型曲線加減速的實現

GReq_mcu168 ? 來源:嵌入式技術開發 ? 作者:嵌入式技術開發 ? 2022-07-01 16:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前做電機相關的項目比較少,最近有個項目涉及到步進電機的精確控制,參考了一些資料研究了一下S型曲線加減速,這里總結一下分享給大家。

硬件是:STM32+驅動器+步進電機。
STM32定時器輸出PWM,控制驅動器來驅動步進電機。單片機只要控制電機方向,以及PWM的頻率即可,具體驅動由驅動器實現。 首先說一下什么是S型曲線加速,為什么要S型曲線加速。
S型曲線加速是指步進電機的啟動速度按照S型曲線逐漸增加,以達到設定的最大速度。具體的S型曲線方程如下:2cf33e0a-f527-11ec-ba43-dac502259ad0.pngx取值-5~5的曲線圖如下:2d043ca0-f527-11ec-ba43-dac502259ad0.png可以看到,剛開始加速和達到最大速度時加速比較緩慢,中間加速比較快。電機的轉矩和轉速的乘積的k倍等于功率,也就是說,功率一定的時候,轉速與轉矩成反比關系。所以,轉速越低,轉矩越大。當電機直接高速啟動時,電機可能存在震動、丟步甚至啟動不起來的情況。因此需要S型曲線加速,使電機能夠緩慢啟動。程序實現控制電機的速度,其實就是控制PWM的輸出頻率。首先需要對S曲線方程進行一些變化,如下:Fcurrent = Fmin + (Fmax-Fmin)/(1+exp( -Flexible(i - num )/num) )
  • Fcurrent為計算出的當前頻率。

  • Fmin為加速的起始頻率。

  • Fmax為加速的最大頻率。

  • -Flexible*(i - num)/num是對S型曲線進行拉伸變化,其中Flexible代表S曲線區間(越大代表壓縮的最厲害,中間加速度越大;越小越接近勻加速。理想的S曲線的取值為4-6)

  • i是在循環計算過程中的索引,從0開始

  • num為 加速脈沖數/2 大小

上面計算出的是頻率的S曲線,還需要將頻率轉換成定時器的計數周期,程序如下:

//功能:S加速曲線初始化//參數1 *pbuff          計算出的定時器的周期//參數2 fre_max        最大頻率 Hz//參數3 fre_min        最小頻率 Hz//參數4 len            加速需要的脈沖數void CurveS_init(uint16_t *pbuff,uint32_t fre_max,uint32_t fre_min,int16_t len){      int16_t i;      uint16_t flexible =4;floatdelt=fre_max-fre_min;floatdeno;      float melo ;floatfre;
       for(i=0; i       {              melo = flexible* (i-len/2) / (len/2);              deno = 1.0f / (1 + expf(-melo));  //              fre = delt * deno + fre_min;              *pbuff++ = (unsigned short)(TIM2_CLOCK_FREQ / fre);       }
}
TIM2_CLOCK_FREQ為定時器的計數頻率。 之后要做的就是在加減速過程中,每輸出一個PWM脈沖,重新裝載一次定時器周期。具體怎樣輸出指定個數PWM來控制步進電機,可參考之前的文章《STM32定時器產生指定個數脈沖》。在PWM中斷中,將計算好的S曲線數組,重新裝載到定時器的ARR和CCR寄存器中即可。程序如下:
//PWM回調函數void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim){    Motor.PWMcount++;    SpeedAdjust();//速度調節}
//速度調節函數void SpeedAdjust(void){  switch(Motor.Status)  {    /*加速*/                case SPEED_INCREASE:      if(Motor.Count < Motor.CountMax)      {        __HAL_TIM_SET_AUTORELOAD(&htim2,Period[Motor.Count]);//計算下一個PWM的周期        htim2.Instance->CCR1 = Period[Motor.Count]/2;//占空比50%        Motor.Count++;//加速次數      }      else      {        Motor.Status = SPEED_STABLE;        Motor.Count--;      }break;    /*勻速*/      case SPEED_STABLE:      if(Motor.PWMcount >= (Motor.PWMneed - Motor.Count))      {            Motor.Status = SPEED_DECREASE;        }break;    /*減速*/      case SPEED_DECREASE:      if(Motor.Count >= 0)      {        __HAL_TIM_SET_AUTORELOAD(&htim2,Period[Motor.Count]);//計算下一個PWM的周期        htim2.Instance->CCR1 = Period[Motor.Count]/2;        Motor.Count--;        }      if(Motor.PWMcount >= Motor.PWMneed)      {        HAL_TIM_PWM_Stop_IT(&htim2,TIM_CHANNEL_1);      }      break;    default :      break;  }

其中Motor是自己定義的一個結構體:


typedef struct{  uint8_t Status;   //狀態  int32_t Count;     //加減速過程脈沖計數  int32_t CountMax;  //最大加速脈沖數  uint32_t PWMcount;//PWM計數  uint32_t PWMneed; //需要輸出的PWM總數}Motor_t;
啟動時,初始化參數,啟動定時器輸出PWM即可:
//PWM--需要輸出的脈沖個數void StartPWM(uint32_t PWM){             Motor.PWMcount = 0;       Motor.PWMneed = PWM;       Motor.Count = 0;       Motor.Status = SPEED_INCREASE;       Motor.CountMax = 300;//初始化加速曲線,最小頻率100,最大頻率10K,加速脈沖數300CurveS_init(Period,10000,100,Motor.CountMax);       __HAL_TIM_SET_AUTORELOAD(&htim2,Period[0]);       htim2.Instance->CCR1 = Period[0];       HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);  //啟動定時器PWM輸出}
來看一下效果,可以看到,PWM的頻率是逐漸增大的。實際測試效果也不錯。

審核編輯 :李倩

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

    關注

    54

    文章

    9083

    瀏覽量

    155517
  • 步進電機
    +關注

    關注

    153

    文章

    3249

    瀏覽量

    152357

原文標題:步進電機S型曲線加速的實現

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    齒輪減速電機步進電機的特性有哪些區別

    齒輪減速電機步進電機作為工業自動化領域的兩大核心驅動元件,因其不同的結構原理和性能特點,在實際應用中各有側重。深入理解兩者的差異,有助于工程師在選型時更精準地匹配需求。以下從工作原理
    的頭像 發表于 03-04 11:01 ?92次閱讀
    齒輪<b class='flag-5'>減速</b><b class='flag-5'>電機</b>與<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的特性有哪些區別

    TMCM-1316:S 加減速 + 256 微步 步進控制更精準

    一款在運動控制細節上表現突出的模塊——TMCM-1316StepRocker,看看它是如何通過S加減速曲線與最高256微步細分技術,讓步進
    的頭像 發表于 02-09 16:45 ?776次閱讀
    TMCM-1316:<b class='flag-5'>S</b> <b class='flag-5'>型</b><b class='flag-5'>加減速</b> + 256 微步 <b class='flag-5'>步進</b>控制更精準

    TMC4361A:實現步進電機S曲線高速平穩運行!

    效的運動控制的。TMC4361A是一款高度集成的小型運動控制芯片,專為步進電機驅動設計。它不僅支持經典的梯形速度曲線,更內置了S形斜坡和SixPoint斜坡發生器,
    的頭像 發表于 02-05 15:24 ?227次閱讀
    TMC4361A:<b class='flag-5'>實現</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b><b class='flag-5'>S</b>形<b class='flag-5'>曲線</b>高速平穩運行!

    ?DRV8711 步進電機控制器技術文檔總結

    DRV8711器件是一個步進電機控制器,它使用外部 N 溝道 MOSFET 驅動一個雙極步進電機或兩個有刷直流電機。集成了微
    的頭像 發表于 10-17 15:09 ?936次閱讀
    ?DRV8711 <b class='flag-5'>步進</b><b class='flag-5'>電機</b>控制器技術文檔總結

    基于L6482的步進電機驅動評估板技術解析

    集成的解決方案,適用于驅動微步進兩相雙極步進電機。它將用于N溝道MOSFET功率級的雙路全橋柵極驅動器與嵌入式非耗散過流保護相結合。得益于新的電流控制,通過自適應衰減模式實現1/16微
    的頭像 發表于 10-17 11:44 ?610次閱讀
    基于L6482的<b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動評估板技術解析

    基于ST EVL6480評估板的步進電機驅動技術解析

    1/128步進分辨率的微步進。數字控制內核可生成用戶定義的運動曲線,并可通過專用寄存器輕松設置加速、速度、減速或目標位置。所有命令和數據寄存器均通過標準5Mbit/
    的頭像 發表于 10-17 11:41 ?563次閱讀
    基于ST EVL6480評估板的<b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動技術解析

    基于L6472的步進電機驅動評估板技術解析與應用指南

    集成的解決方案,適用于驅動微步進兩相雙極步進電機。它將雙路低R~dsON~ DMOS全橋與精確的片上電流檢測電路相結合,實現非耗散電流控制和過流保護。得益于獨特的控制系統,可
    的頭像 發表于 10-17 11:30 ?583次閱讀
    基于L6472的<b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動評估板技術解析與應用指南

    EVL6470步進電機驅動評估板技術解析與應用指南

    集成的解決方案,適用于驅動微步進兩相雙極步進電機。它將雙路低R~dsON~ DMOS全橋與精確的片上電流檢測電路相結合,實現非耗散電流控制和過流保護。得益于獨特的控制系統,可
    的頭像 發表于 10-17 11:25 ?632次閱讀
    EVL6470<b class='flag-5'>步進</b><b class='flag-5'>電機</b>驅動評估板技術解析與應用指南

    伺服電機步進電機的核心區別

    大家在運動控制的時候是用伺服電機的還是用步進電機做定位控制了?為什么有時候用伺服電機,有時候又步進電機
    的頭像 發表于 10-15 14:32 ?1775次閱讀
    伺服<b class='flag-5'>電機</b>和<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的核心區別

    只是加減速和轉彎,為啥自動駕駛這么難實現

    并不是那么容易?自動駕駛汽車為何發展這么多年,還是沒有實現L5?今天智駕最前沿就來和大家聊聊這個話題。 車輛的運行軌跡看似簡單,但并不是簡單地“往前跑”或“停下來”那么簡單。任何一次加減速,都與車輛的質量、輪胎與
    的頭像 發表于 06-27 12:20 ?624次閱讀
    只是<b class='flag-5'>加減速</b>和轉彎,為啥自動駕駛這么難<b class='flag-5'>實現</b>?

    升降速曲線對直線電機系統性能影響的研究

    Matlab仿真證明二次速度曲線是目前最適用于高速高精直線電機運動控制系統的加/減速曲線,并在帶前饋的直線電機伺服實驗平臺上進行了驗證實驗。
    發表于 06-17 08:48

    實時生成步進電機速度曲線

    一種用于步進電機加速度的新算法可以實現速度曲線的實時參數化和計算。該算法可以在低端微控制器上運行,只使用簡單的定點算術運算并且不使用數據表。它以恒定的加速度和
    發表于 05-14 15:09

    線性模組為什么會限定一個加減速時間?

    在工業自動化領域,線性模組作為精密傳動系統的核心部件,其加減速時間的設定直接影響設備性能與壽命。通過對運動控制原理的深入分析可以發現,加減速時間的限定是機械結構強度、電機特性、運動精度、能耗管理等
    的頭像 發表于 05-11 17:04 ?1141次閱讀
    線性模組為什么會限定一個<b class='flag-5'>加減速</b>時間?

    樹莓派 RP2350 實現步進電機精確控制

    樹莓派 RP2350 實現步進電機精確控制 本文介紹了 樹莓派 RP2350 開發板實現步進電機
    發表于 05-03 15:11

    剎車步進電機的特點

    詳細分析。 一、技術原理與結構設計 剎車步進電機在傳統步進電機的基礎上集成電磁制動裝置,通常采用失電制動原理。當電機斷電時,制動器通過彈簧力
    的頭像 發表于 04-25 15:34 ?1454次閱讀
    剎車<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的特點