久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4528|回復: 2
收起左側

基于STM32F4的S曲線加減速的實現程序

[復制鏈接]
ID:724859 發表于 2020-4-8 15:58 | 顯示全部樓層 |閱讀模式
  1. /**
  2.   * 函數功能: 主函數.
  3.   * 輸入參數: 無
  4.   * 返 回 值: 無
  5.   * 說    明: 無
  6.   */
  7. int main(void)
  8. {
  9.   /* 復位所有外設,初始化Flash接口和系統滴答定時器 */
  10.   HAL_Init();
  11.   /* 配置系統時鐘 */
  12.   SystemClock_Config();
  13.   /* 配置GPIO作為按鍵使用 */
  14.   KEY_GPIO_Init();
  15.   /* 配置串口輸出 */
  16.   USARTx_Init();
  17.   /* 無限循環 */
  18.   while (1)
  19.   {
  20.     if(KEY1_StateRead() == KEY_DOWN)
  21.     {
  22.       /* 計算S型加減速曲線的加速段速度值*/
  23.       CalcSpeed(0,10,4);    // 從0加速到10r/min,加速時間是4s
  24.     }
  25.   }
  26. }

  27. /**
  28.   * 函數功能:速度表計算函數
  29.   * 輸入參數:V0      初速度,單位:轉/min
  30.   *          Vt      末速度,單位:轉/min
  31.   *          Time    加速時間 單位: s
  32.   * 返 回 值:無
  33.   * 說    明: 根據速度曲線和加速時間,將數據密集化,即計算每一步的速度值
  34. */
  35. void CalcSpeed(int Vo, int Vt, float Time)
  36. {
  37.   int32_t i = 0;
  38.   
  39.   int32_t Vm =0;      // 中間點速度
  40.   float Jerk = 0;   // 加加速度
  41.   float Tn = 0;     // 時間間隔
  42.   float DeltaV = 0; // 速度的增量dv  
  43.   float TimeDel = 0;

  44.   /* 這里采用的數學模型是勻變速直線運動
  45.    * 加速段的曲線有兩部分組成,第一是加速度遞增的加加速段,
  46.    * 第二是加速度遞減的減加速段,兩段曲線可以視為關于中心對稱(中心是中點速度).這兩段曲線所用時間相等
  47.    * 所以中點速度 Vm = (Vt + Vo)/2;
  48.    * 加加速段:
  49.    *     加加速段的加速度曲線是一條過原點的遞增的直線,對加速度積分得到的就是速度的增加量
  50.    *     所以有:Vm - Vo = 1/2 * Jerk * t^2,得到加加速度Jerk.
  51.    *     最后得到位移方程 S = 1/6 Jerk * t^3
  52.    *  :分析過程請結合工程文件夾下得曲線圖理解.
  53.    *     由于S型曲線是V-t曲線,所以這里對時間進行等分,然后根據每一份的時間計算出速度表
  54.    */
  55.   Speed.Vo = ROUNDPS_2_STEPPS(Vo);    // 起速:Step/s
  56.   Speed.Vt = ROUNDPS_2_STEPPS(Vt);    // 末速:Step/s
  57.   Time = ACCEL_TIME(Time);                                // 得到加加速段的時間
  58.   Vm =  MIDDLEVELOCITY( Speed.Vo , Speed.Vt );            // 計算中點速度
  59.   Jerk = ACCELL_INCREASE( Speed.Vo, Vm, Time );           // 根據中點速度計算加加速度
  60.   Speed.AcceleratingStep  = (int32_t)ACCEL_DISPLACEMENT(Jerk,Time);// 加加速需要的步數
  61.   
  62.   /* 申請內存空間存放速度表 */
  63.   Speed.AcceleratingStep  = abs(Speed.AcceleratingStep ); // 減速計算的時候防止出現負數
  64.   if( Speed.AcceleratingStep  % 2 != 0)     // 由于浮點型數據轉換成整形數據帶來了誤差,所以這里加1
  65.     Speed.AcceleratingStep  += 1;
  66.   Speed.AccelStep = Speed.AcceleratingStep * 2;           // 加速段的步數
  67.   Speed.VelocityTab = (float*)(malloc( Speed.AccelStep * sizeof(float) + 1 ));//申請內存
  68.   if(Speed.VelocityTab == NULL)
  69.   {
  70.     printf("內存不足!請修改曲線參數!\n");
  71.     return ;
  72.   }
  73.   
  74.   /* 目標的速度曲線是對時間的方程,所以這里對時間等分成Speed.S份,根據時間,計算出對應的速度 */
  75.   TimeDel = Time / Speed.AcceleratingStep;
  76.   for(i = 0; i <= Speed.AcceleratingStep; i++)
  77.   {
  78.     Tn = i * TimeDel;                       // 計算第n個時刻t
  79.     DeltaV = 0.5 * Jerk * pow(Tn,2);        // dv = 1/2 * Jerk * t^2;
  80.     Speed.VelocityTab[i] = Speed.Vo + DeltaV;  // 得到每一時刻對應的速度 // 加加速過程與減加速是中心對稱,可以直接求出后半段速度
  81.     Speed.VelocityTab [ Speed.AccelStep - i] = Speed.Vt - DeltaV ;        // 減加速過程對稱點的速度
  82.   }
  83.   
  84.   /* 串口打印輸出速度表 */
  85.   for(i = 0; i <= Speed.AccelStep ; i++)
  86.   {
  87.     printf("VelocityTab[%d] = %.3f\n",i,Speed.VelocityTab[i]);
  88.   }
  89.   free((void*)Speed.VelocityTab);
  90.   Speed.VelocityTab = NULL;
  91. }

  92. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/
復制代碼


YSF4_HAL_MOTOR-134. 57&amp;42步進電機S型加減速速度計算.7z

2.88 MB, 下載次數: 98, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:25103 發表于 2020-6-17 14:30 | 顯示全部樓層
謝謝樓主分享!!!
回復

使用道具 舉報

ID:307544 發表于 2020-6-18 08:22 | 顯示全部樓層
正在找步進電機控制資料,謝謝分享!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲视频 | 日韩欧美在线观看 | 成人深夜福利网站 | 国产成人免费视频网站高清观看视频 | 自拍偷拍亚洲一区 | 日韩中出 | 日日夜夜天天干 | 亚洲少妇综合网 | 久久婷婷av | 久久躁日日躁aaaaxxxx | 成人1区2区 | 精品国产乱码久久久久久老虎 | 九九热免费观看 | 成人精品免费视频 | 韩国av电影网 | 精品国产伦一区二区三区观看说明 | 亚洲精品久久久久久宅男 | 欧美性高潮 | 欧美日韩中文在线 | 国内成人免费视频 | 国产一区二区久久久 | 欧美日韩一区二区电影 | 欧美一区二区三区视频 | 久久免费精品 | 日韩视频精品 | 久久精品国产久精国产 | 性色av一区 | 亚洲精品久 | 91精品一区 | 超碰伊人 | 9191av| 91免费观看国产 | 欧美一区久久 | 久久国产视频一区 | 色综合久久88色综合天天 | 国产视频1区 | 午夜精品视频一区 | 精久久久 | 日本高清不卡视频 | 亚洲午夜视频 | 欧美中文一区 |