色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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的頻率是逐漸增大的。實際測試效果也不錯。

審核編輯 :李倩

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

    關注

    52

    文章

    8226

    瀏覽量

    146253
  • 步進電機
    +關注

    關注

    150

    文章

    3109

    瀏覽量

    147443

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

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

收藏 人收藏

    評論

    相關推薦

    行星減速步進電機步進電機的區別

    步進電機是一種將電脈沖信號轉變為角位移或線位移的開環控制電機。其工作原理是通過電子電路將直流電分為多相序控制電流,使用這種電流給步進電機供電
    的頭像 發表于 11-16 15:11 ?269次閱讀
    行星<b class='flag-5'>減速</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b>與<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的區別

    減速電機該如何分類?

    的分類方式: 按減速機構的類型分類 : 齒輪減速電機:使用齒輪組來降低轉速,是最常用的減速電機類型。 行星
    的頭像 發表于 10-24 10:19 ?297次閱讀

    步進電機如何在加減速過程中控制技術?

    步進電機是一種將電脈沖信號轉換為角位移或線位移的電機,廣泛應用于各種自動化控制系統中。在加減速過程中,步進
    的頭像 發表于 10-23 10:02 ?294次閱讀

    減速步進電機工作原理你知道多少?

    減速步進電機是一種將電機的旋轉運動轉換為齒輪的直線運動的電機。它的結構包括固定部分、旋轉部分和傳動部分。
    的頭像 發表于 08-22 10:20 ?359次閱讀
    <b class='flag-5'>減速</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b>工作原理你知道多少?

    伺服電機加減速機慣量怎么計算

    伺服電機加減速機系統是現代工業自動化領域中常見的一種傳動裝置,它通過將伺服電機的高速旋轉轉化為減速機的低速大扭矩輸出,實現對負載的精確控制。
    的頭像 發表于 06-14 10:54 ?3234次閱讀

    stm32控制步進電機加減速的穩定性?

    各位: 我最近接了一個項目做agv小車的驅動部分。使用兩個定時器和io配合輸出脈沖,控制步進電機。控制上沒問題,但是加減速和轉彎的過程不是很平穩,放一杯水在上邊晃動的很厲害。我是用的方法就是勻速變化
    發表于 05-06 07:21

    STM32的電機庫適合用來做步進電機嗎? 里面包含有加減速算法沒呢?

    STM32 的電機庫 適合用來做步進電機嗎? 里面包含有加減速算法沒呢?
    發表于 05-06 07:02

    如何用stm32f103zet6控制伺服電機加減速運動?

    想用stm32f103zet6控制伺服電機加減速運動,不知該怎么做,請大神指教。具體情況是有個機械凸輪,有一根頂桿頂著凸輪邊沿,隨著凸輪轉動及其外徑的變化,水平頂桿會沿水平方向作直線運動。現在可以
    發表于 04-30 08:00

    步進電機如何減速

    步進電機是一種直接將電脈沖轉化為機械運動的機電裝置,通過控制施加在電機線圈上的電脈沖順序、 頻率和數量, 可以實現步進
    的頭像 發表于 03-23 08:42 ?456次閱讀
    <b class='flag-5'>步進</b><b class='flag-5'>電機</b>如何<b class='flag-5'>減速</b>?

    如何快速開發高性能步進電機控制驅動系統RS485 UART通訊Modebus協議防丟步節能靜音驅動TMCM1290

    實現復雜的運動控制邏輯,提高系統的自動化水平。 三、高級功能 EightPoint加減速曲線:TMCM-1290采用EightPoint加減速曲線
    發表于 03-10 20:44

    什么是伺服減速電機?松下伺服減速電機選型怎么選?

    伺服減速電機,又稱減速伺服電機,一般是指伺服電機減速機,安裝在伺服
    的頭像 發表于 03-05 08:43 ?883次閱讀
    什么是伺服<b class='flag-5'>減速</b><b class='flag-5'>電機</b>?松下伺服<b class='flag-5'>減速</b><b class='flag-5'>電機</b>選型怎么選?

    混合式步進電機的結構圖

    混合式步進電機(Hybrid Stepper Motor)結合了永磁式和變極式步進電機的特點,以實現高性能和高可靠性。 合式
    的頭像 發表于 02-06 10:01 ?945次閱讀
    混合式<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的結構圖

    步進電機工作原理 步進電機和伺服電機的區別

    的應用,如打印機、數控機床等。 步進電機的工作原理可以分為兩種類型:可變磁場步進電機和磁轉子
    的頭像 發表于 01-22 10:15 ?996次閱讀

    解析步進電機三軸聯動的快速加減速算法研究

    步進電機具有快速啟停能力強、高、轉速容易控制的特點。但是,步進電動機應避免轉動速率的突變,而且從停止到開始轉動有一個較低的起動頻率,隨后才可以平緩地過渡到較高的轉速。相應地在步進
    發表于 01-19 14:55 ?1395次閱讀
    解析<b class='flag-5'>步進</b><b class='flag-5'>電機</b>三軸聯動的快速<b class='flag-5'>加減速</b>算法研究

    直流減速電機步進電機的主要區別是什么?(詳解)

    ? ? ? 直流減速電機是一種常見的電機類型,它由直流電機減速器組成。這種電機通常具有較大的啟
    的頭像 發表于 12-25 15:56 ?1585次閱讀
    直流<b class='flag-5'>減速</b><b class='flag-5'>電機</b>和<b class='flag-5'>步進</b><b class='flag-5'>電機</b>的主要區別是什么?(詳解)
    主站蜘蛛池模板: 国产强奷伦奷片| 国产伦精品一区二区三区免费观看| caoporm国产精品视频免费| caoporn 超碰免费视频| 丰满老熟好大bbbxxx| 国产精品九九久久| 久久91精品久久久久久水蜜桃| 久久视频这有精品63在线国产 | 国产精品热久久高潮AV袁孑怡| 国产精品久久久久AV麻豆| 黑丝制服影院| 欧美乱码伦视频免费66网| 色橹橹欧美在线观看视频高清| 鸭子玩富婆流白浆视频| 国产精品亚洲二线在线播放 | 动漫H片在线播放免费高清| 动漫H片在线观看播放免费| 国产中文在线观看| 乱淫67194| 日本又黄又爽又色又刺激的视频| 亚洲成A人片在线观看中文不卡| 越南女子杂交内射BBWXZ| 扒开胸罩揉她的乳尖视频| 国产精品人妻无码久久久奥特曼 | 一本之道加勒比在线观看| 99精品免费观看| 国产毛片视频网站| 理论片87福利理论电影| 日韩欧美一区二区三区免费观看| 亚洲精品一区二区在线看片| 97在线国内自拍视频| 国产精品嫩草影院| 乱xxxjapanese黑人| 天天靠天天擦天天摸| 5G在线观看免费年龄确认| 国产传媒18精品A片在线观看| 久久黄色片| 无码成人AAAAA毛片含羞草| 24小时日本在线观看片| 国产免费高清mv视频在线观看| 麻豆第一区MV免费观看网站 |