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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32 PWM調速電機控制源碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:226590 發表于 2017-8-10 15:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/**********************************************************************************
** 紅龍開發板
** 實驗名: 紅龍板_基定時器(帶視頻)
** KEIL MDK-ARM Standard Version:4.11
** 軟件庫(keil) Version: unused
** 固件庫(ST) Version: V3.5
** 使用外設: 基定時器
**********************************************************************************/
程序測試說明: #define TEST_1  TEST_1 LED燈測試
              #define TEST_2  TEST_2 按鍵測試
LED 測試說明:注釋掉 TEST_2 按鍵測試   //#define TEST_2  
              初始化系統時鐘
              LED燈的IO口初始化

測試現象:    JLINK下載運行后,三個LED燈輪番閃爍。
-----------------------------------------------------------------------------------
TIM 測試說明:TIM定時器定時點燈(高級定時器TIM1,通用定時器TIM2 均可設置,
                                 其他定時器以此為例,均能快速掌握)  
        步驟:初始化系統時鐘
              中斷初始化
              TIM初始化
        注意:中斷使能(NVIC)
              中斷函數調用(STM32F10X_IT.C)

實驗現象:
      JLINK下載運行后
      軟件:定時時間到,發生一次更新事件Update;
      硬件:LED1燈按設置閃爍。打開和關閉LED3由亮漸滅控制。
      
      
/********************************************************************************************
*函數名稱:void RCC_Configuration(void)
*功能說明:系統時鐘初始化配置
*           RCC_HSICmd(ENABLE);//使能內部高速晶振 ;
*          RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//選擇內部高速時鐘作為系統時鐘SYSCLOCK=8MHZ   
*           RCC_HCLKConfig(RCC_SYSCLK_Div1);       //選擇HCLK時鐘源為系統時鐘SYYSCLOCK
*           RCC_PCLK1Config(RCC_HCLK_Div4);        //APB1時鐘為2M
*           RCC_PCLK2Config(RCC_HCLK_Div4);        //APB2時鐘為2M
*           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);//使能APB2外設GPIOB時鐘
*******************************************************************************************/
void RCC_Configuration(void);

void RCC_Configuration(void)
{
    /* RCC system reset(for debug purpose) */
      RCC_DeInit();

      /* Enable HSE */
      RCC_HSEConfig(RCC_HSE_ON);

      /* Wait till HSE is ready */
      while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);

    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08);
}

#define   GPIO_IN     GPIOB
#define   GPIO_PWM     GPIOA

#define   GPIO_Pin_IN1    GPIO_Pin_1
#define   GPIO_Pin_IN2    GPIO_Pin_2
#define   GPIO_Pin_IN3    GPIO_Pin_5
#define   GPIO_Pin_IN4    GPIO_Pin_6

#define   GPIO_PWM_A      GPIO_Pin_8
#define   GPIO_PWM_B      GPIO_Pin_11

#define   IN1_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN1);
#define   IN1_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN1);

#define   IN2_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN2);
#define   IN2_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN2);

#define   IN3_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN3);
#define   IN3_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN3);

#define   IN4_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN4);
#define   IN4_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN4);

#define   PWM_A_OFF   1000
#define   PWM_B_OFF   1000

單片機源程序如下:


  1. #define   GPIO_IN     GPIOB
  2. #define   GPIO_PWM     GPIOA

  3. #define   GPIO_Pin_IN1    GPIO_Pin_1
  4. #define   GPIO_Pin_IN2    GPIO_Pin_2
  5. #define   GPIO_Pin_IN3    GPIO_Pin_5
  6. #define   GPIO_Pin_IN4    GPIO_Pin_6

  7. #define   GPIO_PWM_A      GPIO_Pin_0
  8. #define   GPIO_PWM_B      GPIO_Pin_1

  9. #define   IN1_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN1);
  10. #define   IN1_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN1);

  11. #define   IN2_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN2);
  12. #define   IN2_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN2);

  13. #define   IN3_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN3);
  14. #define   IN3_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN3);

  15. #define   IN4_H       GPIO_SetBits(GPIO_IN,GPIO_Pin_IN4);
  16. #define   IN4_L       GPIO_ResetBits(GPIO_IN,GPIO_Pin_IN4);

  17. #define   PWM_A_OFF   1001
  18. #define   PWM_B_OFF   1001

  19. #include "pbdata.h"

  20. void TimCounterInit(int rate_1,int rate_2);
  21. void Gpio_PWM_Init(void);
  22. void Gpio_M_Init(void);
  23. void NVIC_Configuration(void);

  24. void TurnLeft(void);
  25. void TurnRight(void);
  26. void straight(void);
  27. void sternway(void);

  28. int A,B;
  29. /****主函數****/
  30. int main(void)
  31. {
  32.           u8 flag=1;
  33.                 Gpio_PWM_Init();
  34.           Gpio_M_Init();

  35.     while(flag==1)
  36.                 {
  37.                         flag=0;
  38.                         straight();//直走
  39.                         delay_ms(1000);
  40.                         delay_ms(1000);
  41.                         delay_ms(1000);
  42.                   TurnLeft();//左轉       
  43.                         delay_ms(1000);
  44.                         delay_ms(500);                       
  45.                         straight();
  46.       delay_ms(1000);                       
  47.                         TurnRight();
  48.       delay_ms(1000);       
  49.       delay_ms(500);                       
  50.                         straight();
  51.       delay_ms(500);                       
  52.                         TurnRight();
  53.       delay_ms(1000);                       
  54.        straight();
  55.       delay_ms(1000);
  56.       delay_ms(1000);
  57.       delay_ms(1000);                       
  58.                        
  59. //                /*    回到中線     */                       
  60. //                       
  61. //                        TurnLeft(1.5);                       
  62. //                        straight(0.5);                       
  63. //                        TurnLeft(0.5);
  64. //      straight(4);

  65. //                        /*  回到中線   */                               
  66. //               
  67. //                        TurnRight(1.5);                       
  68. //                        straight(0.5);                       
  69. //                        TurnRight(1);       
  70. //      straight(2);                                               
  71. //                       
  72. //                        /*    回到中線     */
  73. //                       
  74. //                        TurnLeft(1.5);                       
  75. //                        straight(0.5);                       
  76. //                        TurnLeft(1);                       
  77. //                        straight(2);
  78. //                        sternway(1);
  79.                        
  80.                         TimCounterInit(PWM_A_OFF,PWM_B_OFF);
  81.                 }


  82. }

  83. void TurnLeft()
  84. {  

  85.          IN1_H IN2_L
  86.          IN3_H IN4_L
  87.          A=500;
  88.          B=800;       
  89.          TimCounterInit(A,B);

  90. }
  91. void TurnRight(void)
  92. {
  93.          IN1_H IN2_L
  94.          IN3_H IN4_L
  95.          A=800;
  96.          B=500;       
  97.         TimCounterInit(A,B);

  98. }
  99. void straight(void)
  100. {
  101.          IN1_H IN2_L
  102.          IN3_H IN4_L
  103.          A=600;
  104.          B=600;
  105.   TimCounterInit(A,B);
  106. }

  107. void sternway(void)
  108. {
  109.         IN1_L        IN2_H       
  110.         IN3_L IN4_H       
  111.         A=700;
  112.         B=700;       
  113.         TimCounterInit(A,B);
  114. }
  115. void Gpio_PWM_Init(void)
  116. {
  117.         GPIO_InitTypeDef GPIO_InitStructure;
  118.   //以下設定是將TIM2的通道1(PA0)的復用功能打開,這很重要很容易被忘掉
  119.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  120.         GPIO_InitStructure.GPIO_Pin        = GPIO_PWM_A|GPIO_PWM_B;              //選擇led1
  121.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;          //管腳頻率為50MHZ
  122.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         //模式為復用推挽輸出
  123.   GPIO_Init(GPIO_PWM, &GPIO_InitStructure);           //初始化led1寄存器
  124. }

  125. void Gpio_M_Init(void)
  126. {
  127.         GPIO_InitTypeDef GPIO_InitStructure;
  128.   
  129.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  130.         GPIO_InitStructure.GPIO_Pin        = GPIO_Pin_IN1|GPIO_Pin_IN2|GPIO_Pin_IN3|GPIO_Pin_IN4;              //選擇led1
  131.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;          //管腳頻率為50MHZ
  132.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  133.   GPIO_Init(GPIO_IN, &GPIO_InitStructure);           //初始化led1寄存器
  134. }

  135. /********************************************************************************************
  136. *函數名稱:void TimCounterInit(void)
  137. *功能說明:TIM計數初始化配置
  138. *               TIMCLK = 72 MHz, Prescaler = TIM_PSC, TIM counter clock = TIMCLK/TIM_COUNTER MHz
  139. *******************************************************************************************/
  140. void TimCounterInit(int rate_1,int rate_2)        //rate可以改變占空比
  141. {
  142.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  143.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  144.        
  145.         /* TIM時鐘使能 */
  146.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  147.         /* 基定時器初始化 */
  148.         TIM_TimeBaseStructure.TIM_Period = 1000000*0.001;        //計數值 1000;須介于0~65535
  149.         TIM_TimeBaseStructure.TIM_Prescaler = 72;          //分頻系數,為了設定值數值較大,這里選得較小                 
  150.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;                //時鐘分割:計數模式中無作用
  151.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //計數模式,向上計數
  152.         TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;        //重復計數值

  153.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);                //初始化TIM
  154.        
  155.         /* PWM1 Mode configuration: Channel1 */
  156.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//輸出模式設定
  157.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//輸出模式使能
  158.   TIM_OCInitStructure.TIM_Pulse = rate_1; //設置占空比,0時全低電平,1001時全高電平.須介于0~65535
  159.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//輸出比較極性;最終輸出值是高/低電平
  160.   
  161.         TIM_OC1Init(TIM2, &TIM_OCInitStructure);//輸出通道x,參數寫入
  162.         TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能通道x預裝載寄存器       
  163.        
  164.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//輸出模式設定
  165.         TIM_OCInitStructure.TIM_Pulse = rate_2; //設置占空比,0時全低電平,1001時全高電平.須介于0~65535
  166.         TIM_OC2Init(TIM2, &TIM_OCInitStructure);//輸出通道x,參數寫入
  167.         TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能通道x預裝載寄存器
  168.         TIM_Cmd(TIM2, ENABLE);                                                //使能TIM
  169. }

復制代碼

所有資料51hei提供下載:
1.PWM調速電機控制(6.10).rar (279.69 KB, 下載次數: 300)


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

使用道具 舉報

沙發
ID:151000 發表于 2017-8-10 23:55 | 只看該作者
謝謝樓主分享        
回復

使用道具 舉報

板凳
ID:137742 發表于 2017-11-8 21:41 | 只看該作者
下來學習一下
回復

使用道具 舉報

地板
ID:244172 發表于 2017-12-1 15:21 | 只看該作者
謝謝漏卮分享
回復

使用道具 舉報

5#
ID:258069 發表于 2017-12-6 10:41 | 只看該作者
新人  黑幣不夠   不能下載 能不能麻煩樓主發一下我的郵箱呀  398262842@qq.com   拜托啦
回復

使用道具 舉報

6#
ID:265454 發表于 2017-12-22 20:39 | 只看該作者
學習一下,現在在做項目需要用
回復

使用道具 舉報

7#
ID:343208 發表于 2018-6-1 22:51 | 只看該作者
謝謝樓主分享  
回復

使用道具 舉報

8#
ID:337376 發表于 2018-6-3 22:19 | 只看該作者
謝謝分享~~~
回復

使用道具 舉報

9#
ID:386504 發表于 2018-8-22 16:22 | 只看該作者

新人  黑幣不夠   不能下載 能不能麻煩樓主發一下我的郵箱呀  475225389@qq.com   拜托啦
回復

使用道具 舉報

10#
ID:386504 發表于 2018-8-22 16:23 | 只看該作者

新人不能下載 。麻煩樓主發一下我的郵箱 475225389@qq.com  。想學習學習,麻煩樓z
回復

使用道具 舉報

11#
ID:386504 發表于 2018-8-22 17:09 | 只看該作者
glxmf 發表于 2017-11-8 21:41
**** 作者被禁止或刪除 內容自動屏蔽 ****

之前那個STM32 電機控制的底層還有沒有,能發給我一下嘛。475225389@qq.com。學習學習
回復

使用道具 舉報

12#
ID:395317 發表于 2018-9-25 18:23 | 只看該作者
為什么我輸入到F103里面 通過L298n后 蜂鳴器一直在響
回復

使用道具 舉報

13#
ID:395317 發表于 2018-9-25 18:23 | 只看該作者
蜂鳴器一直在響
回復

使用道具 舉報

14#
ID:375272 發表于 2018-9-26 10:31 | 只看該作者
謝謝分享~      
回復

使用道具 舉報

15#
ID:324611 發表于 2019-1-3 15:07 | 只看該作者
好東西,學習下。
回復

使用道具 舉報

16#
ID:480593 發表于 2019-2-25 19:58 | 只看該作者
謝謝分享
回復

使用道具 舉報

17#
ID:413719 發表于 2019-4-19 14:52 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

18#
ID:538948 發表于 2019-5-17 16:53 | 只看該作者
請問下文件為什么沒有mdk打開文件。。。
回復

使用道具 舉報

19#
ID:505027 發表于 2019-5-21 22:31 | 只看該作者
感謝分享,學習一下
回復

使用道具 舉報

20#
ID:342094 發表于 2019-6-20 15:58 | 只看該作者
你好,怎么找不到OBJ文件
回復

使用道具 舉報

21#
ID:584441 發表于 2019-7-18 20:20 | 只看該作者
在做智能小車中,感謝分享
回復

使用道具 舉報

22#
ID:476093 發表于 2020-4-13 20:27 | 只看該作者
這個復雜么?我也想學
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品久久久久久一区二区 | 日p视频免费看 | 午夜爱爱毛片xxxx视频免费看 | 日日艹夜夜艹 | 老外黄色一级片 | 无码一区二区三区视频 | 婷婷久久综合 | 欧美成人一区二区三区片免费 | 欧美一区二区三区免费在线观看 | 国产激情| 欧美成人精品一区二区男人看 | 91精品国产综合久久香蕉麻豆 | 91精品中文字幕一区二区三区 | 久久婷婷色 | 色婷婷国产精品综合在线观看 | av永久 | 中文字幕一区二区三区在线乱码 | 成人免费视频在线观看 | 成人亚洲视频 | 黑人精品欧美一区二区蜜桃 | 亚洲精品欧美 | 日韩欧美在线观看 | 国产成人免费视频 | 黄色网址免费看 | 国产精品久久亚洲 | 久久y| 国产伦一区二区三区 | 国产精品视频一区二区三区 | 国产精品久久久久aaaa樱花 | jdav视频在线观看免费 | 国产91在线播放精品91 | 999国产精品视频免费 | 天天天天天操 | 日韩欧美在线一区 | 国产伦精品一区二区三毛 | 在线免费视频一区 | 在线91 | 亚洲91| 亚洲综合大片69999 | 日韩在线播放一区 | 一区二区三区视频在线观看 |