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

標題: 分享個簡易的步進電機S加減速 [打印本頁]

作者: lx911gt    時間: 2016-11-4 09:28
標題: 分享個簡易的步進電機S加減速
以前自己有研究過S曲線加減速,步進電機盡量都跑這種曲線,原因就是當電機驅動器給電機一個較高的頻率的時候,步進電機很可能反應不過來,造成堵轉,或者這個頻率變化的斜率太大剛由低頻起轉突然就變到高頻了一樣會造成堵轉、失步等等。

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

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

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


作者: qinhfm    時間: 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. }

復制代碼




作者: dmgy343    時間: 2016-11-14 15:06
好東西 謝謝分享
作者: ml5780    時間: 2017-1-20 17:29
非常感謝分享
作者: xcvzbff    時間: 2017-2-8 10:08
非常感謝分享
作者: dop101    時間: 2017-3-3 17:13
沒金幣
作者: dop101    時間: 2017-3-3 17:14
再來個
作者: anqir621    時間: 2017-3-17 08:22
我想下載,沒金幣
作者: anqir621    時間: 2017-3-17 08:24
查表呀, 有沒有直接計算的
作者: xin4633    時間: 2017-4-4 22:24
謝謝分享
作者: minlee    時間: 2017-4-5 14:24
非常感謝分享
作者: ximenzi1314    時間: 2017-6-28 09:24
特別想看,我也沒金幣了

作者: phil8199    時間: 2017-7-3 15:25
謝謝分享~
作者: syh960805    時間: 2017-8-4 16:36
多謝樓主分享
作者: apay2004    時間: 2017-10-16 11:24
沒有積分,沒辦法下載啊

作者: yinhong    時間: 2017-12-23 17:13

多謝樓主分享
作者: carlyvin    時間: 2017-12-25 11:41
可以參考一下
作者: bsksk    時間: 2018-1-3 09:21
感謝分享
作者: ty_gdl    時間: 2018-1-15 22:31

非常感謝分享
作者: ycgxy1650601    時間: 2018-2-6 10:53
感謝分享,
作者: geekerjune    時間: 2018-3-1 15:51
好東西 謝謝分享
作者: tiansa521    時間: 2018-4-26 14:41
謝謝分享
作者: wwchang    時間: 2018-4-26 19:38
借鑒一下樓主的簡易算法
作者: 1056247163    時間: 2018-5-4 12:42
好東西 謝謝分享
作者: cjyueyue    時間: 2018-6-6 22:33
最近在學習電機相關知識,希望能得到幫助
作者: 雀巢咖啡    時間: 2018-10-17 17:01
有沒有人知道這個程序怎么接線,對方向和脈沖控制的接口沒看太明白
作者: lcsled    時間: 2019-8-12 21:07
收下了,慢慢研究一下
作者: y1z2f4    時間: 2020-11-11 09:38
謝謝分享,下載研究一下。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人在线a | 国产在线免费 | 国产黄色免费网站 | 9.1成人看片 | 午夜视频免费在线观看 | 日韩三级一区二区 | 亚洲激情文学 | 国产精品成人在线 | 999在线视频 | 日韩中文字幕一区二区三区 | 成人黄色一级片 | 日本精品视频在线 | 免费黄色在线 | 亚洲一区久久 | 久久亚洲国产 | 欧美福利视频 | 国产寡妇亲子伦一区二区三区四区 | 日韩精品一区二区在线 | 国产精品久久久久久中文字 | 国产在线一区二区 | 性欧美精品 | 九九热精品在线观看 | 伊人亚洲 | 久久r | 日韩视频免费看 | 日本免费网站 | 亚洲天堂国产 | 国产精品视频一区二区三区 | 久草网站 | 中文字幕免费视频 | 国产成人精品一区二区三区福利 | 午夜爱| 天天精品 | 国产a视频 | 韩日av| 欧美色图一区二区 | 欧美午夜片 | 亚洲一级黄色片 | 夜夜嗨av一区二区三区网页 | 午夜在线观看免费视频 | 国产欧美一区二区三区视频在线观看 |