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

標題: STM32收集的步進電機資料 S型加減速分析 [打印本頁]

作者: 飛向藍天nie    時間: 2021-6-3 09:17
標題: STM32收集的步進電機資料 S型加減速分析
STM32收集的步進電機S加減速資料
  1. #include "Speed.h"
  2. //函數(shù)名稱: CalculateSpeedTab
  3. //函數(shù)功能:計算加減速表
  4. //參數(shù)參數(shù):Speed 速度結(jié)構(gòu)體
  5. //             V0;                //初速度,單位:step/s
  6. //             Vt;                //末速度,單位:step/s
  7. //             S;                 //路程,單位:step
  8. //             t;                 //加速時間,單位:s
  9. //             time;              //加速次數(shù)    單位:次
  10. //             *SpeedTab;         //加速速度表,速度單位:step/s
  11. //             SecSpeedPoint;     //減速點 單位:step
  12. //返回輸出:速度結(jié)構(gòu)體
  13. static Speed_t CalculateSpeedTab(Speed_t Speed)
  14. {
  15.     int i;                        
  16.     double aa;                    //加加速
  17.     int DeltaV;                   //速度變化量
  18.     int tempVt;
  19.     //如果速度記錄表的指針為空,說明沒有分配內(nèi)存
  20.     RT_ASSERT(Speed->SpeedTab != RT_NULL);
  21.     //各參數(shù)是否超范圍
  22.     RT_ASSERT(IS_SPEED(Speed->V0, Speed->Vt));
  23.     RT_ASSERT(IS_SPACE(Speed->S));
  24.     RT_ASSERT(IS_ADDTIMING(Speed->t));
  25.     RT_ASSERT(IS_ADDTIME(Speed->time));
  26.     //根據(jù)加速法則計算末速度
  27.     tempVt = LASTVELOCITY(Speed->S / SPEEDPRINCIPLE, Speed->V0, Speed->t);
  28.     Speed->Vt = (tempVt > Speed->Vt) ? Speed->Vt : tempVt;                                                   
  29.     Speed->SecSpeedPoint = ACCELERATESPACE(Speed->V0, Speed->Vt, Speed->t);        //計算減速點位置,剩余路程為該值時開始減速
  30.     aa = (double)((Speed->Vt - Speed->V0) / 2)      //加速度變化拐點時的速度值                           a|   /|\            
  31.         * 2                                         //知道直角三角形面積,逆推三角型高度時將面積*2        |  / | \面積為DeltaV
  32.         / (Speed->time / 2)                         //除以底邊                                            | /  |  \            
  33.         / (Speed->time / 2);                        //再除以底邊,得到斜率,即加加速                      |/___|___\__time   
  34.     //開始速度計算
  35.     for(i = 0; i < ((Speed->time / 2) + 1); i++)
  36.     {
  37.         DeltaV = (aa * i * i) / 2;                                     //V = V0 + a * t / 2;  a = aa * t;
  38.         *(Speed->SpeedTab + i) = Speed->V0 + DeltaV;                   //當前點的速度
  39.         *(Speed->SpeedTab + Speed->time - i) = Speed->Vt - DeltaV;     //對稱點的速度
  40.     }
  41.     return Speed;
  42. }
  43. //函數(shù)名稱:TestSpeed
  44. //函數(shù)功能:測試速度表計算函數(shù)
  45. //函數(shù)參數(shù):V0      初速度,單位:轉(zhuǎn)/min
  46. //          Vt      末速度,單位:轉(zhuǎn)/min
  47. //          S       路程,單位:mm
  48. //          time    加速次數(shù)
  49. //函數(shù)返回:無
  50. void TestSpeed(int V0, int Vt, int S, int time)
  51. {
  52.     int i;
  53.     Speed_t Speed = (Speed_t)rt_malloc(sizeof(struct SPEED));
  54.     Speed->V0 = STEPSPEED(V0);    //起速
  55.     Speed->Vt = STEPSPEED(Vt);    //末速
  56.     Speed->S = TOTALSTEP(S);      //路程
  57.     Speed->t = 0.2;               //加速時間設為0.2秒
  58.     Speed->time = time;           //加速次數(shù)
  59.     Speed->SpeedTab = (int *)rt_malloc(sizeof(int) * (Speed->time + 1)); //根據(jù)加速次數(shù)申請表格內(nèi)存,加1,以防用的時候超界
  60.     CalculateSpeedTab(Speed);       //開始計算
  61.     for(i = 0; i < Speed->time; i++)
  62.     {
  63.         rt_kprintf("SpeedTab[%d] = %d, Acceleration = %d\n"
  64.                   , i
  65.                   , *(Speed->SpeedTab + i)
  66.                   , *(Speed->SpeedTab + i + 1) - *(Speed->SpeedTab + i));
  67.     }
  68.     rt_kprintf("SpeedTab[%d] = %d\n", i, *(Speed->SpeedTab + i));
  69.     rt_free(Speed->SpeedTab);              
  70.     rt_free(Speed);                    
  71. }

  72. FINSH_FUNCTION_EXPORT(TestSpeed, Test Speed table calculate);

復制代碼
  1. #ifndef __SPEED_H__
  2. #define __SPEED_H__
  3. #include "rtthread.h"
  4. #include "finsh.h"
  5. /*  三分之一加減速法則:
  6. 加速路程不超過三分之一總路程,
  7. 這樣做的目的是給減速留有足夠的時間去檢測減速點,
  8. 進而實現(xiàn)平穩(wěn)的將速度減到初速度,
  9. 如果在處理速度夠快的情況下,
  10. 可以選擇二分之一加減速
  11. */
  12. //加減速法則,2分之一法則或3分之一法則
  13. #define SPEEDPRINCIPLE              3
  14. //電機最大轉(zhuǎn)速,單位轉(zhuǎn)/min
  15. #define MOTOMAXSPEED                1500   
  16. //電機每轉(zhuǎn)對應的傳動距離,單位:mm
  17. #define MOTOROUNDLENGTH             36
  18. //電機最大初速度,初速度超過該值會對電機造成傷害,單位轉(zhuǎn)/min
  19. #define MOTOMAXSTART                200
  20. //驅(qū)動器細分數(shù)
  21. #define DRIVERSFRACTION             1
  22. //電機細分數(shù)
  23. #define MOTOFRACTION                200
  24. //根據(jù)初速度,末速度,以及時間,計算加速路程
  25. #define ACCELERATESPACE(V0,Vt,t)    (((V0) + (Vt)) * (t) / 2)
  26. //根據(jù)加速路程,初速度,以及時間,計算末速度
  27. #define LASTVELOCITY(S,V0,t)        (2 * (S) / (t) - (V0))
  28. //根據(jù)電機轉(zhuǎn)速(轉(zhuǎn)/min),計算電機步速度(step/s)
  29. #define STEPSPEED(RV)               ((RV) * MOTOFRACTION * DRIVERSFRACTION / 60)
  30. //根據(jù)長度計算電機所需走的步數(shù),S的單位為mm
  31. #define TOTALSTEP(S)                S * MOTOFRACTION * DRIVERSFRACTION / MOTOROUNDLENGTH
  32. struct SPEED
  33. {
  34.     int         V0;                 //初速度,單位:step/s
  35.     int         Vt;                 //末速度,單位:step/s
  36.     long long   S;                  //路程,單位:step
  37.     double      t;                  //加速時間,單位:s
  38.     int         time;               //加速次數(shù)    單位:次
  39.     int         *SpeedTab;          //加速速度表,速度單位:step/s
  40.     int         SecSpeedPoint;      //減速點 單位:step(在電機運動過程中,如果剩余路程小于等于該值,那么電機開始減速)
  41. };
  42. typedef struct SPEED * Speed_t;


  43. //各參數(shù)范圍值,可以在此設置參數(shù)范圍
  44. //初速度大于0小于電機最高起速,末速度大于初速度,小于電機最高轉(zhuǎn)速
  45. #define IS_SPEED(V0,Vt)     (((V0) >= 0) && ((V0) <= STEPSPEED(MOTOMAXSTART))  \
  46.                             && ((Vt) >= (V0)) && ((Vt) <= STEPSPEED(MOTOMAXSPEED)))                           
  47. #define IS_SPACE(S)         ((S) > 0)
  48. #define IS_ADDTIMING(t)     ((t) > 0)            
  49. #define IS_ADDTIME(time)     ((time) >= 32)        //讓加速次數(shù)必須大于等于32,否則計算表格就沒什么意義

  50. #endif
復制代碼

以上代碼下載: S型加減速分析.7z (1.34 MB, 下載次數(shù): 67)
信濃步進電機STP-43D2035選型及使用說明.docx (280.68 KB, 下載次數(shù): 21)





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本xxxx69| 亚洲在线视频 | 日本熟妇毛耸耸xxxxxx | 亚洲精品色 | av狠狠干 | 国产中文在线 | 日韩成人综合 | 亚洲国产精品suv | 黄色一级片免费看 | 久久视频这里只有精品 | 成人aaaa | 黄色小视频免费 | 色激情网 | 日日夜夜综合网 | 久久av网站 | 四虎四虎| 亚洲在线视频 | 麻豆一级片 | 黄色免费小视频 | 国产探花在线精品一区二区 | av三级在线观看 | 伊人亚洲综合 | 欧美一级淫片免费视频黄 | 国产精品午夜视频 | 日韩精品免费视频 | 亚洲成人黄色 | 国产三级黄色 | 日韩视频在线播放 | 免费一级黄色录像 | 午夜成人免费视频 | 国产在线www | 电家庭影院午夜 | 日韩专区在线观看 | 日韩理论视频 | 国产视频在线观看视频 | 国产又粗又黄又爽又硬的视频 | 久久香蕉国产 | 欧美精品区 | 日韩午夜av | 久久亚洲成人 | 亚洲国产天堂 |