技術頻道

娓娓工業(yè)
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 如何使用脈沖加方向方式對步進電機進行位置的自由控制

如何使用脈沖加方向方式對步進電機進行位置的自由控制

時間:2022-10-17 15:59:20來源:中國傳動網

導語:?關閉定時器。以上控制方式都沒實現對步進電機的位置的自由控制,即讓步進電機跟隨任意位置曲線運動,此項目是為了實現步進電機的自由控制,能準確定位??梢允褂镁幋a器或者電位器作為控制器,用手擰編碼器,步進電機可跟隨一起運動,也可以按照函數曲線運動。

  總體介紹

  對步進電機的控制通常使用PWM控制,改變頻率來控制速度,然后統(tǒng)計脈沖個數知道電機當前位置,可以很容易實現加減速規(guī)劃,或者不考慮加減速平穩(wěn)性,直接以小于最大啟動速度的速度啟動,發(fā)完給定個脈沖后直接關閉定時器。以上控制方式都沒實現對步進電機的位置的自由控制,即讓步進電機跟隨任意位置曲線運動,此項目是為了實現步進電機的自由控制,能準確定位??梢允褂?a href="http://www.wangxinlc.cn/p/coding/" target="_blank" rel="nofollow">編碼器或者電位器作為控制器,用手擰編碼器,步進電機可跟隨一起運動,也可以按照函數曲線運動。

  步進電機驅動

  步進電機驅動器有很多種,如A4988、TMC2208等,常用的驅動方式是脈沖加方向,有的高端點的使用can、串口等方式控制。本篇介紹如何使用脈沖加方向方式對步進電機進行位置的自由控制!

  控制原理

  使用通信協(xié)議方式控制步進電機,可周期性同步位置到驅動器,實現位置的自由控制,脈沖加方向方式也可抽象為使用通信協(xié)議在與驅動器通信,只不過是使用增量方式在通信,通過對脈沖的累計得到目標位置。

  程序使用兩個定時器,一個中斷頻率為1k,用于周期采樣目標位置,并計算當前速度,當前速度值用于修改另一個定時器中斷頻率,所以在第二個定時器中判斷目標位置與當前位置的偏差,然后翻轉電平,實現對脈沖發(fā)送,同時判斷方向,對應控制方向控制IO電平。

  在其他函數中可給定任意形式的位置變化,根據采樣定理,應該位置變化頻率不大于500Hz的都能被1k的定時器中斷正常采樣,由于發(fā)送脈沖需要以一定的頻率發(fā)送,所以第二個定時器頻率根據目標位置變化率而改變,可以讓速度平滑,也可以減小CPU帶寬占用。以此方式可實現對步進電機的自由控制,可使用編碼器或函數隨意控制電機!

  代碼分析

  此程序可實現對多個步進電機的控制,以下是步進電機類

  /*步進電機控制類*/

  typedef struct

  {

  volaTIle unsigned long *gpio_dir; //電機方向控制GPIO

  volaTIle unsigned long *gpio_pluse; //電機脈沖GPIO

  int pluse_count;

  int goal_posiTIon;

  int last_posiTIon;

  int cur_position;

  int pos_bias;

  int speed;

  uint8_t status;

  }stepMotor;

  步進電機控制核心函數,由一個簡易狀態(tài)機組成,此函數放上面提到的第二個中斷函數執(zhí)行,先得到當前偏差,狀態(tài)轉換,再發(fā)脈沖

  void StepMotorCtrl(stepMotor *motor)

  {

  switch(motor->status)

  {

  case 0:

  if(motor->goal_position != motor->cur_position) //掃描

  {

  motor->pos_bias = motor->goal_position - motor->cur_position; //得到偏差

  motor->status = 1;

  }

  break;

  case 1:

  if(motor->pos_bias > 0)

  {

  motor->pluse_count ++;

  *(motor->gpio_dir) = 1; //正方向

  *(motor->gpio_pluse) = !*(motor->gpio_pluse);

  if(motor->pluse_count == (motor->pos_bias * 2))

  {

  motor->cur_position += motor->pos_bias;

  motor->pluse_count = 0;

  motor->status = 0;

  }

  }

  else

  {

  motor->pluse_count ++;

  *(motor->gpio_dir) = 0; //負方向

  *(motor->gpio_pluse) = !*(motor->gpio_pluse);

  if(motor->pluse_count == ((-motor->pos_bias) * 2))

  {

  motor->cur_position += motor->pos_bias;

  motor->pluse_count = 0;

  motor->status = 0;

  }

  }

  break;

  default:

  break;

  }

  }


標簽: 步進電機

點贊

分享到:

上一篇:運動控制的定義、電機控制和...

下一篇:工業(yè)控制系統(tǒng)異常檢測方法的...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯(lián)網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業(yè)自動化與智能制造的全媒體“互聯(lián)網+”創(chuàng)新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號