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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19048|回復: 27
打印 上一主題 下一主題
收起左側

分享個簡易的步進電機S加減速

  [復制鏈接]
跳轉到指定樓層
樓主
ID:93106 發表于 2016-11-4 09:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以前自己有研究過S曲線加減速,步進電機盡量都跑這種曲線,原因就是當電機驅動器給電機一個較高的頻率的時候,步進電機很可能反應不過來,造成堵轉,或者這個頻率變化的斜率太大剛由低頻起轉突然就變到高頻了一樣會造成堵轉、失步等等。

S曲線就是為了讓電機由低速到高速有個比較平滑的過度,能順利讓步進電機運行到要求的狀態,其實就是我們常說的緩起緩停,直流電機也一樣,突然啟停電機都有非常大的沖動,如果不消除這種沖動是無法玩位置定位的

那么我就傳一份比較簡單的查表式的S曲線啟停咯,具體S曲線講究非常多,百度也有很多文章,大家可自行去了解,高難的我也不會,因為確實用不到,但是有機會一樣要學,大家一起學,我先拋個磚,站在前排的都小心點哈,砸死你哦!!

查表我是直接扒別人的,自己算和實驗目前還沒有時間,大家先自己下來玩耍一番,有好的東西一起分享下
簡易步進電機S加減速.rar (306.43 KB, 下載次數: 417)

評分

參與人數 2黑幣 +90 收起 理由
wfliu + 10 贊一個!
admin + 80 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:146204 發表于 2016-11-8 09:48 | 只看該作者
/*

    * 步進電機S曲線加減速
   
    * 若發現啟動后電機有堵轉的情況請增大數組中的數值,簡單的方法是在調用的時候直接乘個倍數
   
*/

下面是樓主的PWM.c文件:
  1. #include "PWM.h"

  2. static void TIM_GPIO_Config(void)
  3. {
  4.   GPIO_InitTypeDef GPIO_InitStructure;
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

  6.         /* PA0(TIM2_CH1) PA1(TIM5_CH2) PA6(TIM3_CH1) */
  7.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6;
  8.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 復用推挽輸出
  9.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  10.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.        
  12.         /* PB6(TIM4_CH1) */
  13.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  14.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 復用推挽輸出
  15.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  16.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  17. }

  18. static void TIM2_Mode_Config(void)
  19. {
  20.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  21.         TIM_OCInitTypeDef  TIM_OCInitStructure;        
  22.        
  23.         /* TIM2 開啟時鐘 */
  24.         //PCLK1經過2倍頻后作為TIM2的時鐘源等于72MHz
  25.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  26.   /* TIM2基本配置 */                 
  27.   TIM_TimeBaseStructure.TIM_Period = 1000;
  28.   TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                    //設置預分頻:不預分頻,即為72MHz
  29.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                                //設置時鐘分頻系數:不分頻
  30.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                  //向上計數模式

  31.   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  32.        
  33.   /* PWM2模式通道1 */
  34.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                    //配置為PWM模式2
  35.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                //使能比較輸出
  36.   TIM_OCInitStructure.TIM_Pulse = 200;                                                                                                           //設置跳變值,當計數器計數到這個值時,電平發生跳變
  37.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                          //當定時器計數值小于CCR1_Val時為高電平

  38.   TIM_OC1Init(TIM2, &TIM_OCInitStructure);                                                                                                 //使能通道1

  39.   TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

  40.   TIM_ARRPreloadConfig(TIM2, ENABLE);                                                                                                                         // 使能TIM3重載寄存器ARR
  41.        
  42.   TIM_Cmd(TIM2, DISABLE);                                                                                                                                                                        //使能TIM3
  43. }

  44. static void TIM3_Mode_Config(void)
  45. {
  46.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  47.         TIM_OCInitTypeDef  TIM_OCInitStructure;        
  48.        
  49.         /* TIM3 開啟時鐘 */
  50.         //PCLK1經過2倍頻后作為TIM3的時鐘源等于72MHz
  51.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  52.   /* TIM3基本配置 */                 
  53.   TIM_TimeBaseStructure.TIM_Period = 1000;
  54.   TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                    //設置預分頻:不預分頻,即為72MHz
  55.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                                //設置時鐘分頻系數:不分頻
  56.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                  //向上計數模式

  57.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  58.        
  59.   /* PWM2模式通道1 */
  60.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                    //配置為PWM模式2
  61.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                //使能比較輸出
  62.   TIM_OCInitStructure.TIM_Pulse = 200;                                                                                                           //設置跳變值,當計數器計數到這個值時,電平發生跳變
  63.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                          //當定時器計數值小于CCR1_Val時為高電平

  64.   TIM_OC1Init(TIM3, &TIM_OCInitStructure);                                                                                                 //使能通道1

  65.   TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  66.   TIM_ARRPreloadConfig(TIM3, ENABLE);                                                                                                                         // 使能TIM3重載寄存器ARR
  67.        
  68.   TIM_Cmd(TIM3, DISABLE);                                                                                                                                                                        //使能TIM3
  69. }

  70. static void TIM4_Mode_Config(void)
  71. {
  72.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  73.         TIM_OCInitTypeDef  TIM_OCInitStructure;        
  74.        
  75.         /* TIM4 開啟時鐘 */
  76.         //PCLK1經過2倍頻后作為TIM3的時鐘源等于72MHz
  77.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  78.   /* TIM4基本配置 */                 
  79.   TIM_TimeBaseStructure.TIM_Period = 1000;
  80.   TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                    //設置預分頻:不預分頻,即為72MHz
  81.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                                //設置時鐘分頻系數:不分頻
  82.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                  //向上計數模式

  83.   TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  84.        
  85.   /* PWM2模式通道1 */
  86.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                    //配置為PWM模式2
  87.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                //使能比較輸出
  88.   TIM_OCInitStructure.TIM_Pulse = 200;                                                                                                           //設置跳變值,當計數器計數到這個值時,電平發生跳變
  89.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                          //當定時器計數值小于CCR1_Val時為高電平

  90.   TIM_OC1Init(TIM4, &TIM_OCInitStructure);                                                                                                 //使能通道1

  91.   TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

  92.   TIM_ARRPreloadConfig(TIM4, ENABLE);                                                                                                                         // 使能TIM4重載寄存器ARR
  93.        
  94.   TIM_Cmd(TIM4, DISABLE);                                                                                                                                                                        //使能TIM4
  95. }

  96. static void TIM5_Mode_Config(void)
  97. {
  98.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  99.         TIM_OCInitTypeDef  TIM_OCInitStructure;        
  100.        
  101.         /* TIM5 開啟時鐘 */
  102.         //PCLK1經過2倍頻后作為TIM3的時鐘源等于72MHz
  103.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);

  104.   /* TIM5基本配置 */                 
  105.   TIM_TimeBaseStructure.TIM_Period = 1000;
  106.   TIM_TimeBaseStructure.TIM_Prescaler = 0;                                                                                    //設置預分頻:不預分頻,即為72MHz
  107.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                                //設置時鐘分頻系數:不分頻
  108.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                  //向上計數模式

  109.   TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
  110.        
  111.   /* PWM2模式通道1 */
  112.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                    //配置為PWM模式2
  113.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                //使能比較輸出
  114.   TIM_OCInitStructure.TIM_Pulse = 200;                                                                                                           //設置跳變值,當計數器計數到這個值時,電平發生跳變
  115.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                          //當定時器計數值小于CCR1_Val時為高電平

  116.   TIM_OC2Init(TIM5, &TIM_OCInitStructure);                                                                                                 //使能通道1

  117.   TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);

  118.   TIM_ARRPreloadConfig(TIM5, ENABLE);                                                                                                                         //使能TIM5重載寄存器ARR

  119.   TIM_Cmd(TIM5, DISABLE);                                                                                                                                                                        //使能TIM5
  120. }

  121. void TIM_Config(void)
  122. {
  123.         TIM_GPIO_Config();
  124.         TIM2_Mode_Config();
  125.         TIM3_Mode_Config();
  126.         TIM4_Mode_Config();
  127.         TIM5_Mode_Config();
  128. }

復制代碼



回復

使用道具 舉報

板凳
ID:147443 發表于 2016-11-14 15:06 | 只看該作者
好東西 謝謝分享
回復

使用道具 舉報

地板
ID:138686 發表于 2017-1-20 17:29 | 只看該作者
非常感謝分享
回復

使用道具 舉報

5#
ID:163545 發表于 2017-2-8 10:08 | 只看該作者
非常感謝分享
回復

使用道具 舉報

6#
ID:167942 發表于 2017-3-3 17:13 | 只看該作者
沒金幣
回復

使用道具 舉報

7#
ID:167942 發表于 2017-3-3 17:14 | 只看該作者
再來個
回復

使用道具 舉報

8#
ID:171429 發表于 2017-3-17 08:22 | 只看該作者
我想下載,沒金幣
回復

使用道具 舉報

9#
ID:171429 發表于 2017-3-17 08:24 | 只看該作者
查表呀, 有沒有直接計算的
回復

使用道具 舉報

10#
ID:185687 發表于 2017-4-4 22:24 | 只看該作者
謝謝分享
回復

使用道具 舉報

11#
ID:164719 發表于 2017-4-5 14:24 | 只看該作者
非常感謝分享
回復

使用道具 舉報

12#
ID:160249 發表于 2017-6-28 09:24 | 只看該作者
特別想看,我也沒金幣了
回復

使用道具 舉報

13#
ID:163679 發表于 2017-7-3 15:25 | 只看該作者
謝謝分享~
回復

使用道具 舉報

14#
ID:224742 發表于 2017-8-4 16:36 | 只看該作者
多謝樓主分享
回復

使用道具 舉報

15#
ID:239850 發表于 2017-10-16 11:24 | 只看該作者
沒有積分,沒辦法下載啊
回復

使用道具 舉報

16#
ID:265731 發表于 2017-12-23 17:13 | 只看該作者

多謝樓主分享
回復

使用道具 舉報

17#
ID:265966 發表于 2017-12-25 11:41 | 只看該作者
可以參考一下
回復

使用道具 舉報

18#
ID:270571 發表于 2018-1-3 09:21 | 只看該作者
感謝分享
回復

使用道具 舉報

19#
ID:138017 發表于 2018-1-15 22:31 | 只看該作者

非常感謝分享
回復

使用道具 舉報

20#
ID:282536 發表于 2018-2-6 10:53 | 只看該作者
感謝分享,
回復

使用道具 舉報

21#
ID:286642 發表于 2018-3-1 15:51 | 只看該作者
好東西 謝謝分享
回復

使用道具 舉報

22#
ID:317012 發表于 2018-4-26 14:41 | 只看該作者
謝謝分享
回復

使用道具 舉報

23#
ID:82014 發表于 2018-4-26 19:38 | 只看該作者
借鑒一下樓主的簡易算法
回復

使用道具 舉報

24#
ID:77110 發表于 2018-5-4 12:42 | 只看該作者
好東西 謝謝分享
回復

使用道具 舉報

25#
ID:316433 發表于 2018-6-6 22:33 | 只看該作者
最近在學習電機相關知識,希望能得到幫助
回復

使用道具 舉報

26#
ID:389520 發表于 2018-10-17 17:01 | 只看該作者
有沒有人知道這個程序怎么接線,對方向和脈沖控制的接口沒看太明白
回復

使用道具 舉報

27#
ID:141486 發表于 2019-8-12 21:07 | 只看該作者
收下了,慢慢研究一下
回復

使用道具 舉報

28#
ID:364137 發表于 2020-11-11 09:38 | 只看該作者
謝謝分享,下載研究一下。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品视频在线 | 亚洲成人一区二区 | 成人日韩| 久久人人网| 亚洲日本中文字幕在线 | 日本久久网 | 麻豆久久久9性大片 | 一级一级毛片免费看 | 久久成人精品视频 | 色网站视频 | 伊人影院在线观看 | 日韩精品 电影一区 亚洲 | 一区在线观看 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | www.婷婷 | 国产精品免费看 | 国产精品日韩欧美一区二区三区 | 淫片一级国产 | 中文在线日韩 | 久久久123| 三级成人在线 | 精品视频久久久久久 | 国产精品免费观看 | 一级片av| 久久精品一区二区三区四区 | 99国产精品久久久 | 亚洲激情综合 | 亚洲成人精品国产 | 国产福利小视频 | 天堂网色 | av资源网站 | 国产精品久久久久久久久久妞妞 | 中文字幕日韩欧美一区二区三区 | 日日爱av| 精品久久国产 | 国产高清一区二区三区 | 请别相信他免费喜剧电影在线观看 | 美女国产 | 欧美成人手机在线 | 久久爱黑人激情av摘花 | 久久精品小视频 |