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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18802|回復: 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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 | 顯示全部樓層
非常感謝分享
回復

使用道具 舉報

ID:163545 發表于 2017-2-8 10:08 | 顯示全部樓層
非常感謝分享
回復

使用道具 舉報

ID:167942 發表于 2017-3-3 17:13 | 顯示全部樓層
沒金幣
回復

使用道具 舉報

ID:167942 發表于 2017-3-3 17:14 | 顯示全部樓層
再來個
回復

使用道具 舉報

ID:171429 發表于 2017-3-17 08:22 | 顯示全部樓層
我想下載,沒金幣
回復

使用道具 舉報

ID:171429 發表于 2017-3-17 08:24 | 顯示全部樓層
查表呀, 有沒有直接計算的
回復

使用道具 舉報

ID:185687 發表于 2017-4-4 22:24 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:164719 發表于 2017-4-5 14:24 | 顯示全部樓層
非常感謝分享
回復

使用道具 舉報

ID:160249 發表于 2017-6-28 09:24 | 顯示全部樓層
特別想看,我也沒金幣了
回復

使用道具 舉報

ID:163679 發表于 2017-7-3 15:25 | 顯示全部樓層
謝謝分享~
回復

使用道具 舉報

ID:224742 發表于 2017-8-4 16:36 | 顯示全部樓層
多謝樓主分享
回復

使用道具 舉報

ID:239850 發表于 2017-10-16 11:24 | 顯示全部樓層
沒有積分,沒辦法下載啊
回復

使用道具 舉報

ID:265731 發表于 2017-12-23 17:13 | 顯示全部樓層

多謝樓主分享
回復

使用道具 舉報

ID:265966 發表于 2017-12-25 11:41 | 顯示全部樓層
可以參考一下
回復

使用道具 舉報

ID:270571 發表于 2018-1-3 09:21 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:138017 發表于 2018-1-15 22:31 | 顯示全部樓層

非常感謝分享
回復

使用道具 舉報

ID:282536 發表于 2018-2-6 10:53 | 顯示全部樓層
感謝分享,
回復

使用道具 舉報

ID:286642 發表于 2018-3-1 15:51 | 顯示全部樓層
好東西 謝謝分享
回復

使用道具 舉報

ID:317012 發表于 2018-4-26 14:41 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:82014 發表于 2018-4-26 19:38 | 顯示全部樓層
借鑒一下樓主的簡易算法
回復

使用道具 舉報

ID:77110 發表于 2018-5-4 12:42 | 顯示全部樓層
好東西 謝謝分享
回復

使用道具 舉報

ID:316433 發表于 2018-6-6 22:33 | 顯示全部樓層
最近在學習電機相關知識,希望能得到幫助
回復

使用道具 舉報

ID:389520 發表于 2018-10-17 17:01 | 顯示全部樓層
有沒有人知道這個程序怎么接線,對方向和脈沖控制的接口沒看太明白
回復

使用道具 舉報

ID:141486 發表于 2019-8-12 21:07 | 顯示全部樓層
收下了,慢慢研究一下
回復

使用道具 舉報

ID:364137 發表于 2020-11-11 09:38 | 顯示全部樓層
謝謝分享,下載研究一下。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产美女永久免费无遮挡 | 亚洲天堂中文字幕 | 欧美精品在线一区二区三区 | 中文字幕 国产精品 | 国产免费一区二区 | 色网在线播放 | 九九热精品在线视频 | 日韩精品一区二区三区在线 | 在线看免费的a | 色婷婷一区二区三区四区 | 成人午夜在线观看 | 精品乱码一区二区 | 台湾佬成人网 | 一区二区国产在线观看 | 99精品一区| 欧美日韩国产在线观看 | 中文字幕一区二区三区不卡 | 三级视频在线观看 | 性在线 | 亚洲国产二区 | 国产精品久久久亚洲 | 视频在线一区 | 91精品国产综合久久久久 | 日韩久久久久久 | 四虎最新视频 | 在线āv视频 | 久久国产精品一区二区三区 | 中文字幕一区二区三区不卡 | 精品久久99 | 国产成人精品一区二区三区四区 | 国内自拍真实伦在线观看 | 欧美性久久久 | 国内精品久久精品 | 国户精品久久久久久久久久久不卡 | 四虎最新视频 | 亚洲国产第一页 | www.男人天堂.com | 99免费精品视频 | 91网站在线播放 | 91五月天| a免费视频|