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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32步進電機驅動算法(轉帖)

[復制鏈接]
跳轉到指定樓層
樓主
ID:657909 發表于 2019-12-6 23:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
部分核心代碼

  1. #define ACCELERATED_SPEED_LENGTH  3000    //定義加速度的點數(其實也是3000個細分步的意思),調這個參數改變加速點
  2. #define FRE_MIN 3000     //最低的運行頻率,調這個參數調節最低運行速度
  3. #define FRE_MAX 24000  //最高的運行頻率,調這個參數調節勻速時的最高速度

  4. int step_to_run;  //要運行的步數
  5. float fre[ACCELERATED_SPEED_LENGTH];  //數組存儲加速過程中每一步的頻率
  6. unsigned short period[ACCELERATED_SPEED_LENGTH]; //數組儲存加速過程中每一步定時器的自動裝載值

  7. void CalculateSModelLine(float fre[],  unsigned short period[],   float  len,  float fre_max,  float fre_min, float flexible)
  8. {
  9.     int i=0;
  10.     float deno ;
  11.     float melo ;
  12.     float delt = fre_max-fre_min;
  13.     for(; i<len; i++)
  14.     {
  15.         melo = flexible * (i-len/2) / (len/2);
  16.         deno = 1.0 / (1 + expf(-melo));   //expf is a library function of exponential(e)
  17.         fre[i] = delt * deno + fre_min;
  18.         period[i] = (unsigned short)(1000000.0 / fre[i]);    // 10000000 is the timer driver frequency
  19.     }
  20.    return ;
  21. }

  22. //主函數

  23. int main(void)
  24. {

  25.     u8 t;

  26.     delay_init();
  27.     NVIC_Config();
  28.     LED_Init();    //初始化IO口
  29.       TIM1_Int_Init(10,72); //設置定時器的頻率等
  30.     //PB8 9 12 13
  31.     //KEY_Init();
  32.     //SMG_io_init();
  33.     CalculateSModelLine(fre,period,ACCELERATED_SPEED_LENGTH,FRE_MAX,FRE_MIN,4);
  34.     TIM_Cmd(TIM1, ENABLE);

  35.     while(1)
  36.     {

  37.         }
  38. }

  39. 定時器初始化

  40. void TIM1_Int_Init(u16 arr,u16 psc)  
  41. {  
  42.     NVIC_InitTypeDef NVIC_InitStructure;  
  43.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
  44.     TIM_OCInitTypeDef  TIM_OCInitStructure;

  45.     TIM_DeInit(TIM1);                                           /*¸′λTIM1¶¨ê±Æ÷*/  
  46.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        /*¿aê±Öó*/  
  47.     TIM_TimeBaseStructure.TIM_Period = arr;                     /*ê±ÖóμÎ′eμÄ′Îêy£¬1»êyÖD¶ÏÕaàïêÇ1msÖD¶Ïò»′Î*/      
  48.     TIM_TimeBaseStructure.TIM_Prescaler = psc;                /* ·ÖÆμ720*/         
  49.     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;            
  50.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*¼Æêy·½ÏòÏòéϼÆêy*/  
  51.     TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  52.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  

  53.        /* Channel 1, 2,3 and 4 Configuration in PWM mode */
  54.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  55.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  56.     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; //2»ê1óÃNμÄêä3ö£¬ËùòÔòa1Øμô
  57.     TIM_OCInitStructure.TIM_Pulse = 0;   //μúò»′ÎûóDêä3öÂö3å
  58.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  59.     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  60.     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  61.     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

  62.     TIM_OC4Init(TIM1, &TIM_OCInitStructure);
  63.     TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);        
  64.     /* Clear TIM1 update pending flag  Çå3yTIM1òç3öÖD¶Ï±êÖ¾]  */  
  65.     TIM_ClearFlag(TIM1, TIM_FLAG_Update);                 
  66.     NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;          /*òç3öÖD¶Ï*/  
  67.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  68.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;   
  69.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  70.     NVIC_Init(&NVIC_InitStructure);  

  71.         /* TIM1 counter enable */
  72.         TIM_Cmd(TIM1, DISABLE);
  73.         /* TIM1 Main Output Enable */
  74.         TIM_CtrlPWMOutputs(TIM1, ENABLE);

  75.         TIM_ClearFlag(TIM1, TIM_FLAG_Update);
  76.         TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
  77. }

  78. //初始化定時器IO

  79. void LED_Init(void)
  80. {
  81.     GPIO_InitTypeDef  GPIO_InitStructure;

  82.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

  83.     //設置PA11為復用推挽輸出
  84.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  85.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  86.     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;
  87.     GPIO_Init(GPIOA, &GPIO_InitStructure);   

  88.     //Âö3å¿ú+·½Ïò
  89.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  90.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  91.     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;
  92.     GPIO_Init(GPIOB, &GPIO_InitStructure);   

  93.       /* TIM1 Full remapping pins */
  94.     GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);   //打開重映射
  95. }



  96. 定時器更新中斷

  97. int i = 0;
  98. void TIM1_UP_IRQHandler(void)  
  99. {  
  100.   TIM_ClearFlag(TIM1, TIM_FLAG_Update);
  101.     if(i < ACCELERATED_SPEED_LENGTH && g_motor_dir_s == 0) //加速,直到步數達到 ACCELERATED_SPEED_LENGTH
  102.     {
  103.         TIM1->ARR= period[i];
  104.         TIM1->CCR4= period[i]/2;
  105.         i++;
  106.     step_to_run = 20000;   //這里設置要跑的步數,當然可以寫在main函數中,這里沒有把加減速的步數算上
  107.     }
  108.     else if(step_to_run > 0) //勻速
  109.     {
  110.         step_to_run--;
  111.      }
  112.   else if(i > 0 && g_motor_dir_s == 1)  //電機減速
  113.   {
  114.         i--;
  115.         TIM1->ARR= period[i];
  116.         TIM1->CCR4= period[i]/2;
  117.     }        

  118.     if(i == ACCELERATED_SPEED_LENGTH || i == 0)
  119.         {
  120.             g_motor_dir_s = (~g_motor_dir_s)&0x01;
  121.             }   
  122. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费a大片 | 极品粉嫩国产48尤物在线播放 | 精品日韩一区 | 日韩福利 | 国产精品精品久久久 | 亚洲乱码一区二区 | 羞羞免费网站 | 国产精品国产三级国产aⅴ浪潮 | 日韩不卡视频在线 | 日韩色图在线观看 | 久久精品中文 | 欧美激情精品久久久久久 | 免费高清成人 | 激情网五月天 | 国产在线观看 | 久久久123 | 国产免费又色又爽又黄在线观看 | 在线观看国产视频 | 日本在线视频一区二区 | 色婷婷在线视频 | 成人精品免费视频 | 秋霞av国产精品一区 | 韩日一区二区 | 黑人性hd | 蜜桃av一区二区三区 | 亚洲一区二区网站 | 亚洲一区二区三区视频免费观看 | 免费黄色的网站 | 天堂一区二区三区 | 精品国产亚洲一区二区三区大结局 | 亚洲成人免费av | 国产美女视频 | 成人高清在线视频 | 国产在线高清 | 情侣酒店偷拍一区二区在线播放 | 国产精品一区二区三区免费观看 | 日本精品一区二区 | 亚洲人成在线观看 | 国产剧情一区 | 日韩成人高清在线 | 精品欧美一区二区中文字幕视频 |