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

標(biāo)題: STM32步進(jìn)電機(jī)S加減速程序源碼與詳細(xì)分析 [打印本頁(yè)]

作者: 春芳文玉666    時(shí)間: 2018-8-13 18:44
標(biāo)題: STM32步進(jìn)電機(jī)S加減速程序源碼與詳細(xì)分析
基于STM32步進(jìn)電機(jī)s型加減速控制


一個(gè)物體從起點(diǎn)運(yùn)動(dòng)到終點(diǎn),要經(jīng)歷加速,勻速,減速的過(guò)程,把整個(gè)過(guò)程中速度隨時(shí)間變化關(guān)系畫(huà)出來(lái),就是速度曲線.
S型加減速就是指速度曲線中加減速階段的曲線呈現(xiàn)一個(gè)英文字母'S'型.
S型加減速相對(duì)于梯形加減速更加平穩(wěn),對(duì)電機(jī)和傳動(dòng)系統(tǒng)的沖擊更小.
S型加減速的曲線并沒(méi)有限定是什么曲線,所以可以是指數(shù)曲線,可以是正弦曲線.這里分析的S型加減速是基于加速度勻速變化的曲線.
S型加減速的優(yōu)點(diǎn)就是啟動(dòng)和停止都很平滑,不會(huì)有很大的沖擊,但缺點(diǎn)就是啟動(dòng)和停止的時(shí)間比較長(zhǎng).
具體的加減速的速度曲線看背景圖….

右圖就是S型加速曲線和對(duì)應(yīng)的加速度曲線示意圖
在加速過(guò)程中,前半部分由于加速度是勻速遞增的,
這段曲線我們稱為加加速段曲線(后面稱它為IncAccel),后半部分是加速度勻速遞減的,稱為減加速段(DeAccel).
加加速段是加速度關(guān)于時(shí)間的斜率為正的直線,減
加速則是加速度關(guān)于時(shí)間的斜率為負(fù)的直線.
加速度從0開(kāi)始變化,到了最大值開(kāi)始減小,最后為0,
由于加速度的斜率是相同的,所以加加速度和減加速度
所用的時(shí)間是一樣.這兩段曲線是關(guān)于加速度最大值的對(duì)應(yīng)的速度中心對(duì)稱的.





單片機(jī)源程序如下:
  1. #include "Speed.h"
  2. //函數(shù)名稱: CalculateSpeedTab
  3. //函數(shù)功能:計(jì)算加減速表
  4. //參數(shù)參數(shù):Speed 速度結(jié)構(gòu)體
  5. //             V0;                //初速度,單位:step/s
  6. //             Vt;                //末速度,單位:step/s
  7. //             S;                 //路程,單位:step
  8. //             t;                 //加速時(shí)間,單位:s
  9. //             time;              //加速次數(shù)    單位:次
  10. //             *SpeedTab;         //加速速度表,速度單位:step/s
  11. //             SecSpeedPoint;     //減速點(diǎn) 單位: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.     //如果速度記錄表的指針為空,說(shuō)明沒(méi)有分配內(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ù)加速法則計(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);        //計(jì)算減速點(diǎn)位置,剩余路程為該值時(shí)開(kāi)始減速
  30.     aa = (double)((Speed->Vt - Speed->V0) / 2)      //加速度變化拐點(diǎn)時(shí)的速度值                           a|   /|\            
  31.         * 2                                         //知道直角三角形面積,逆推三角型高度時(shí)將面積*2        |  / | \面積為DeltaV
  32.         / (Speed->time / 2)                         //除以底邊                                            | /  |  \            
  33.         / (Speed->time / 2);                        //再除以底邊,得到斜率,即加加速                      |/___|___\__time   
  34.     //開(kāi)始速度計(jì)算
  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;                   //當(dāng)前點(diǎn)的速度
  39.         *(Speed->SpeedTab + Speed->time - i) = Speed->Vt - DeltaV;     //對(duì)稱點(diǎn)的速度
  40.     }
  41.     return Speed;
  42. }
  43. //函數(shù)名稱:TestSpeed
  44. //函數(shù)功能:測(cè)試速度表計(jì)算函數(shù)
  45. //函數(shù)參數(shù):V0      初速度,單位:轉(zhuǎn)/min
  46. //          Vt      末速度,單位:轉(zhuǎn)/min
  47. //          S       路程,單位:mm
  48. //          time    加速次數(shù)
  49. //函數(shù)返回:無(wú)
  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;               //加速時(shí)間設(shè)為0.2秒
  58.     Speed->time = time;           //加速次數(shù)
  59.     Speed->SpeedTab = (int *)rt_malloc(sizeof(int) * (Speed->time + 1)); //根據(jù)加速次數(shù)申請(qǐng)表格內(nèi)存,加1,以防用的時(shí)候超界
  60.     CalculateSpeedTab(Speed);       //開(kāi)始計(jì)算
  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);

復(fù)制代碼

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


  43. //各參數(shù)范圍值,可以在此設(shè)置參數(shù)范圍
  44. //初速度大于0小于電機(jī)最高起速,末速度大于初速度,小于電機(jī)最高轉(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,否則計(jì)算表格就沒(méi)什么意義

  50. #endif
復(fù)制代碼


所有資料51hei提供下載:
S型加減速分析.rar (2.64 MB, 下載次數(shù): 1151)



S型加減速.png (121.42 KB, 下載次數(shù): 178)

S型加減速.png

S型加減速和梯形加減速.png (127.74 KB, 下載次數(shù): 180)

S型加減速和梯形加減速.png

加速度曲線圖.png (113.87 KB, 下載次數(shù): 162)

加速度曲線圖.png

實(shí)際計(jì)算得到的S型曲線圖.png (112.19 KB, 下載次數(shù): 161)

實(shí)際計(jì)算得到的S型曲線圖.png

作者: yang_2018    時(shí)間: 2018-8-24 11:23
正在學(xué)這個(gè) 真是運(yùn)氣呀
謝謝
作者: ache0105    時(shí)間: 2018-9-14 09:35
學(xué)習(xí)了,很受用。請(qǐng)問(wèn)樓主。rtthread.h在STM32里報(bào)錯(cuò)什么原因?
作者: cooldog123pp    時(shí)間: 2018-11-3 09:14
多謝樓主了,收藏 學(xué)習(xí),正需要
作者: lvjuncheng    時(shí)間: 2019-1-3 16:11
感謝樓主!
作者: eng036    時(shí)間: 2019-1-6 23:42
正需要步進(jìn)電機(jī)的資料,謝謝
作者: mike0726    時(shí)間: 2019-1-7 10:03
學(xué)習(xí)學(xué)習(xí)
作者: xode    時(shí)間: 2019-1-13 21:16
很棒,很詳細(xì)
作者: zhangcj0818    時(shí)間: 2019-1-17 17:15
很受用,哈哈,謝謝樓主
作者: mingri11    時(shí)間: 2019-1-25 08:12
謝謝樓主的分享
作者: onono    時(shí)間: 2019-1-31 11:34
一直想學(xué)習(xí)S型算法,無(wú)奈原理性的注釋太少了,也是云里霧里的。看到樓主發(fā)的這個(gè)很欣慰,感謝分享。
作者: ap1005223    時(shí)間: 2019-3-2 16:52
學(xué)習(xí)學(xué)習(xí)
作者: plj213    時(shí)間: 2019-3-6 11:02

謝謝樓主分享。。。
作者: bison    時(shí)間: 2019-3-6 13:43

感謝樓主!
作者: bison    時(shí)間: 2019-3-6 13:44
謝謝樓主分享。。。
作者: fgq411421    時(shí)間: 2019-3-8 10:38
很好,學(xué)習(xí)中
作者: wotepi    時(shí)間: 2019-4-23 08:37
非常感謝樓主的分享,對(duì)于新手來(lái)說(shuō),幫助很大,謝謝
作者: 愛(ài)電子科技    時(shí)間: 2019-4-23 09:19
希望樓主可以出更多更好的教程
作者: 122541325    時(shí)間: 2019-5-15 22:34
好好學(xué)習(xí)下
作者: 1286452520    時(shí)間: 2019-5-16 23:39
樓主厲害
作者: taotuotuo    時(shí)間: 2019-6-12 23:56
不錯(cuò),不錯(cuò)。。。
作者: taotuotuo    時(shí)間: 2019-6-12 23:57
學(xué)習(xí)了,很受用。請(qǐng)問(wèn)樓主。rtthread.h在STM32里報(bào)錯(cuò)什么原因?
作者: aaaaaa。    時(shí)間: 2019-6-13 10:06
很棒,謝謝分享
作者: wangaj9006    時(shí)間: 2019-7-2 22:02
非常好的資料,非常感謝
作者: abc19960812    時(shí)間: 2019-7-4 09:54
不錯(cuò)。。。。。。。。。。。。。。。
作者: WeberXie    時(shí)間: 2019-7-4 14:31
不錯(cuò)不錯(cuò)
作者: cxg0902    時(shí)間: 2019-7-12 15:22
請(qǐng)問(wèn)這是用什么驅(qū)動(dòng)的

作者: xiaozhong1314    時(shí)間: 2019-7-13 16:53
很有價(jià)值
作者: ChenD1    時(shí)間: 2019-7-14 12:48
謝謝分享

作者: chpm8888    時(shí)間: 2019-7-14 15:14

多謝樓主了,收藏 學(xué)習(xí),
作者: abled    時(shí)間: 2019-7-28 11:39
這個(gè)不錯(cuò),可以使很多人入門。算法還有PIID的,需要用到高等數(shù)學(xué)了。
作者: Sampkia    時(shí)間: 2019-8-23 14:59
看起來(lái)挺詳細(xì)  看看
作者: liushi    時(shí)間: 2019-9-10 14:38
謝謝,正在研究這方面的內(nèi)容
作者: bxtww    時(shí)間: 2019-9-11 10:01
感謝樓主的分享!
作者: cawyai23    時(shí)間: 2019-9-18 10:06
謝謝大佬分享!
作者: cawyai23    時(shí)間: 2019-9-18 10:07
謝謝大佬分享,正好能用到,拿來(lái)學(xué)習(xí)一下
作者: zp17777    時(shí)間: 2019-10-17 17:07
正好需要呢,太感謝 了
作者: 那迦    時(shí)間: 2019-11-7 17:25
寫的真好 你真棒寫的真好 你真棒寫的真好 你真棒
作者: ztsos123    時(shí)間: 2019-11-23 15:24
學(xué)習(xí)一下
感謝樓主

作者: mikechancc    時(shí)間: 2019-11-24 09:32
感謝樓主
作者: toolgou    時(shí)間: 2019-11-29 11:32
謝謝樓主的分享
作者: ar_fa    時(shí)間: 2019-12-3 10:23
資料不錯(cuò)!
作者: ar_fa    時(shí)間: 2019-12-4 16:59
資料很好!謝謝
作者: cyx8    時(shí)間: 2019-12-4 20:46
多謝樓主了
作者: dugumiying    時(shí)間: 2019-12-10 12:48
下載學(xué)習(xí)一下,感謝樓主

作者: 張健啊    時(shí)間: 2019-12-12 09:10
不錯(cuò)不錯(cuò)
作者: kingsr    時(shí)間: 2019-12-14 10:36
這個(gè)S曲線加減速算法不錯(cuò).
作者: xiaoxiao686    時(shí)間: 2020-1-8 13:25
正在學(xué)習(xí),下載學(xué)習(xí)一下。
作者: mcza30    時(shí)間: 2020-1-21 22:38
感謝分享!
作者: xhc281358765    時(shí)間: 2020-1-23 09:56
學(xué)習(xí)。。。。
作者: lisd70    時(shí)間: 2020-2-1 18:31
好文章,學(xué)習(xí)了,正需要類似的資料
作者: cqllg    時(shí)間: 2020-2-2 21:33
學(xué)習(xí)一下
感謝樓主!
作者: cqllg    時(shí)間: 2020-2-2 21:34
正在搞電機(jī),感謝樓主!!
作者: GlenXu    時(shí)間: 2020-2-4 20:03
很基礎(chǔ),但很實(shí)用!
謝謝樓主!
作者: shenchaobiao    時(shí)間: 2020-2-16 15:53
感謝樓主分享算法
作者: jiaja    時(shí)間: 2020-4-30 17:17
謝謝樓主的分享
作者: beli    時(shí)間: 2020-5-6 08:27
打卡,怎么看不到內(nèi)容呢
作者: 2421593665    時(shí)間: 2020-5-26 14:24
很好的資料
作者: lht5631080    時(shí)間: 2020-5-26 22:38
感謝分享!
作者: 阿里健健    時(shí)間: 2020-6-5 14:25
您好,這套S曲線適用于57步進(jìn)電機(jī)嗎?步進(jìn)電機(jī)是通過(guò)頻率調(diào)節(jié)速度的呀。
作者: xx359515666    時(shí)間: 2020-6-14 23:12
多謝樓主了,收藏 學(xué)習(xí)
作者: hzd530    時(shí)間: 2020-6-15 09:47
正在找著方面資料,謝謝樓主分享
作者: mvwtest    時(shí)間: 2020-6-17 00:24
正需要步進(jìn)電機(jī)的資料,謝謝
作者: xx359515666    時(shí)間: 2020-6-17 17:52
謝謝分享
作者: cosmos007    時(shí)間: 2020-7-8 16:26
學(xué)習(xí)一下,做產(chǎn)品會(huì)用到。感謝分享!
作者: 穿山躍海    時(shí)間: 2020-7-29 11:40
學(xué)習(xí)學(xué)習(xí),以前用過(guò)AVR的446那個(gè)
作者: 穿山躍海    時(shí)間: 2020-8-19 22:45
多謝樓主,收藏 學(xué)習(xí)
作者: zxdzwcs    時(shí)間: 2020-9-6 17:46
想下載,可惜沒(méi)有黑幣呀,看了下代碼,復(fù)制了。測(cè)試了下。效果還可以
作者: zxdzwcs    時(shí)間: 2020-9-6 21:33
不夠再這里有個(gè)疑問(wèn),加速時(shí)間在這里有什么作用,其次是加速次數(shù)。
作者: SWJ123    時(shí)間: 2020-9-9 10:55
感謝樓主的分享,學(xué)習(xí)了正需要
作者: nuanuan9    時(shí)間: 2022-6-6 10:18
感謝樓主的分享,正好在學(xué)習(xí)步進(jìn)電機(jī)的驅(qū)動(dòng)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人免费在线播放 | 国产成人精品一区二区三区在线 | 网站国产| 九九色九九 | 国产粉嫩尤物极品99综合精品 | 天天精品在线 | 成人中文字幕在线 | 免费午夜视频在线观看 | 成人午夜精品 | 九九久久99 | 色综合天天天天做夜夜夜夜做 | 五月激情六月婷婷 | 日韩av一区二区在线 | 在线中文字幕国产 | 精品一区二区三区四区视频 | 黄网站涩免费蜜桃网站 | 2019天天干夜夜操 | 91精品国产91久久久久久丝袜 | 美女久久久久久久久 | 国产精品视频一区二区三区 | 国产激情| 成年无码av片在线 | 人人操日日干 | 中文字幕第90页 | 中文字幕动漫成人 | 国产伦精品一区二区三区照片91 | 亚洲性视频 | 涩涩视频在线看 | 中文字幕第一页在线 | 国产精品一区二区欧美 | 国产精品综合 | 国产精品久久 | 嫩草网| www.一级片 | 日韩在线观看一区二区三区 | 伊人久久综合 | 精品久久久一区 | 日韩高清中文字幕 | 亚洲欧洲精品在线 | www.国产| 亚洲午夜三级 |