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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27076|回復: 37
收起左側

STM32F103C8T6+L298N直流電機調速PWM調速程序與波形圖等資料

  [復制鏈接]
ID:430949 發表于 2018-11-30 09:25 | 顯示全部樓層 |閱讀模式
制作出來的實物圖如下:

實物圖

實物圖

(一)             功能說明
        L298N驅動一臺直流減速電機,引腳IN1IN2可用于PWM控制。僅用STM32的兩個端口給出PWM信號控制IN1IN2即可實現正反轉、加減速等動作。
(二)             硬件說明:
控制板:STM32F03C8T6最小系統;
mcu.jpg
控制板說明
型號:
STM32F103C8T6
內核:
ARM 32位的CortexTM-M3  CPU
調試方式:
SWD
尺寸:
22.86mm×53.34mm

直流電機驅動板:L298NSGS公司的產品,比較常見的是15MulTIwatt封裝的L298N,內部同樣包含4通道邏輯驅動電路。可以方便的驅動兩個直流電機,或一個兩相步進電機。
L298N.jpg
(三)             資源配置:
  
STM32F03C8T6使用端口定義
  
端口
功能說明
配置
PA2
連接L298N芯片的IN1
通用定時器的PWM功能,  
  
TIM2_CH3
PA3
連接L298N芯片的IN2
通用定時器的PWM功能,
  
TIM2_CH4
PC13
控制板帶的LED指示燈,周期性的變化,每變化一次,電機的轉運方向變化一次。
  
TIM3中斷定時控制。
通用定時器TIM3定時中斷

  
L298N端口定義  
  
IN1
IN2
ENA
電機狀態
PA2
0
始終是1
順時針運轉,調整PA2的頻率,可高速。  
0
PA3
始終是1
逆時針運轉,調整PA2的頻率,可高速。
0
0
始終是1
停止

(四)             軟件實現
        1:通用定時器TIM3的中斷定時實現步驟
         使能定時器時鐘。
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
         初始化定時器,配置【ARR自動裝載值,PSC預分頻系數。】   
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
         開啟定時器中斷,配置NVIC
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
        NVIC_Init(&NVIC_InitStructure);
         使能定時器。
        TIM_Cmd(TIM3,ENABLE);     //實際是配置 控制寄存器1  (TIM3_CR1)  
         編寫中斷服務函數。
        TIMxIRQHandler();
        2:通用定時器TIM2Channel1Channel2PWM實現步驟
         使能定時器2和相關IO口時鐘。
        使能定時器2時鐘:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        使能GPIOB時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
         初始化IO口為復用功能輸出。函數:GPIO_Init();
        GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;
         初始化定時器:ARR,PSC等:TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
         初始化輸出比較參數:
                TIM_OC3Init(TIM2,&TIM_OCInitStructure);  
                TIM_OC4Init(TIM2,&TIM_OCInitStructure);
         使能預裝載寄存器:TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
         使能定時器。TIM_Cmd();
         不斷改變比較值CCRx,達到不同的占空比效果:TIM_SetCompare3(); TIM_SetCompare4() ;
使用Keil5 模擬軟件的Logic Analyzer功能,PA2PA3,PC13的波形圖如下所示:
波形圖.jpg
(五)             附錄:程序源碼
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "timer.h"

  4. void GPIO_Config(void)  //配置PA2, PA3
  5. {
  6.   GPIO_InitTypeDef GPIO_InitStructure;

  7.   /* GPIOA  clock enable */
  8.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC,ENABLE);  //

  9.   /*GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull */
  10.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 | GPIO_Pin_3;
  11.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           // 復用推挽輸出
  12.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  14.         
  15.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                                 //LED0-->PC.13 端口配置
  16.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  17.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  18.          GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOC.13         
  19. }

  20. int main(void)
  21. {               
  22.                 delay_init();                     //延時函數初始化         
  23.                 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  24.          
  25.                 //每隔5s的周期,變換電機的轉向。
  26.                 //定時中斷,最小單位鐘頻率=72MHz/36KHz=2KHz
  27.                 TIM3_Int_Init(9999,35999) ;  
  28.          
  29.     GPIO_Config();         //LED,PWM端口初始化,配置PC13,PA2,PA3         
  30.                 TIM2_PWM_Init(47999,2 );         //分頻。最小單位鐘頻率=72000000/(2+1)=24Mhz

  31.            while(1)
  32.                 {
  33.                         
  34.                 }         
  35. }

復制代碼

timer.c
  1. #include "timer.h"

  2. //通用定時器3中斷初始化
  3. //這里時鐘選擇為APB1的2倍,而APB1為36M
  4. //arr:自動重裝值。
  5. //psc:時鐘預分頻數
  6. //這里使用的是定時器3!

  7. #define PC13 PCout(13)// PC13        

  8. void TIM3_Int_Init(u16 arr,u16 psc)
  9. {
  10.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  11.         NVIC_InitTypeDef NVIC_InitStructure;

  12.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
  13. //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE );
  14. //        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3  ,ENABLE);
  15.         
  16.         TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值         計數到5000為500ms
  17.         TIM_TimeBaseStructure.TIM_Prescaler = psc; //設置用來作為TIMx時鐘頻率除數的預分頻值  10Khz的計數頻率  
  18.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
  19.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  20.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

  21.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷

  22.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷
  23.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優先級0級
  24.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優先級3級
  25.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  26.         NVIC_Init(&NVIC_InitStructure);  //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器

  27.         TIM_Cmd(TIM3, ENABLE);  //使能TIMx外設                                                           
  28. }
  29. //定時器3中斷服務程序
  30. void TIM3_IRQHandler(void)   //TIM3中斷
  31. {
  32.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源
  33.                 {
  34.                         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源
  35.                         PC13=!PC13;     
  36.                         
  37.                         if (PC13 ==1)
  38.                         {        
  39.                                 TIM_SetCompare3(TIM2,24000);
  40.                                 TIM_SetCompare4(TIM2,0);               
  41.                         }
  42.                         else
  43.                         {
  44.                                 TIM_SetCompare3(TIM2,0);
  45.                                 TIM_SetCompare4(TIM2,24000);                        
  46.                         }                                       
  47.                 }
  48. }

  49. //TIM2 PWM部分初始化    兩個PWM波形,分別控制電機的正轉與反轉
  50. //PWM輸出初始化
  51. //arr:自動重裝值
  52. //psc:時鐘預分頻數
  53. void TIM2_PWM_Init(u16 arr,u16 psc)
  54. {  

  55.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  56.         TIM_OCInitTypeDef  TIM_OCInitStructure;        

  57.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //使能定時器3時鐘

  58.    //初始化TIM2
  59.         TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
  60.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
  61.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
  62.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  63.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
  64.         
  65.         //初始化TIM2 Channel1 PWM模式
  66.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式2
  67.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  68.         TIM_OCInitStructure.TIM_Pulse = 13500 ;
  69.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  70.         TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC4
  71.         TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的預裝載寄存器
  72.          
  73.         //初始化TIM2 Channel2 PWM模式         
  74.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式2
  75.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  76.         TIM_OCInitStructure.TIM_Pulse = 0;
  77.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  78.         TIM_OC4Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC4
  79.         TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的預裝載寄存器

  80.   TIM_ARRPreloadConfig(TIM2, ENABLE);
  81.         TIM_Cmd(TIM2, ENABLE);  //使能TIM2            

  82. }
復制代碼

0.png

全部資料51hei下載地址:
STM32F103C8T6核心板+L298N_PWM直流電機調速.rar (3.36 MB, 下載次數: 1187)

評分

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

查看全部評分

回復

使用道具 舉報

ID:421308 發表于 2019-7-23 15:44 | 顯示全部樓層
這個速度沒有變化啊,只是正反轉了
回復

使用道具 舉報

ID:393077 發表于 2018-11-30 17:27 | 顯示全部樓層
謝謝分享,很幫的應用!學習了!但是程序還是有問題的
回復

使用道具 舉報

ID:470100 發表于 2019-1-18 13:12 | 顯示全部樓層
謝謝大佬的分享!多多學習
回復

使用道具 舉報

ID:470219 發表于 2019-1-18 16:24 | 顯示全部樓層
大佬好厲害啊
回復

使用道具 舉報

ID:476214 發表于 2019-3-3 09:35 | 顯示全部樓層
謝謝大佬
回復

使用道具 舉報

ID:494311 發表于 2019-3-19 21:50 | 顯示全部樓層
向大佬學習了
回復

使用道具 舉報

ID:149451 發表于 2019-3-27 19:09 | 顯示全部樓層
嘿嘿 ,,,這些硬件手上都有,改天學著玩玩
回復

使用道具 舉報

ID:245405 發表于 2019-4-9 17:04 | 顯示全部樓層
電池是什么型號的啊?
回復

使用道具 舉報

ID:515799 發表于 2019-5-5 16:25 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:421308 發表于 2019-5-27 16:09 | 顯示全部樓層
謝謝大佬
回復

使用道具 舉報

ID:583304 發表于 2019-7-17 21:48 | 顯示全部樓層
學習學習 厲害
回復

使用道具 舉報

ID:421308 發表于 2019-7-22 10:38 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:476510 發表于 2019-7-24 09:33 | 顯示全部樓層
你好 想請問一下 減速電機的電壓最大是多少
回復

使用道具 舉報

ID:591585 發表于 2019-7-29 20:18 | 顯示全部樓層
請問main函數中while(1)中怎么沒有控制程序呢?
回復

使用道具 舉報

ID:592118 發表于 2019-7-30 17:26 | 顯示全部樓層
很感謝,目前正在學習
回復

使用道具 舉報

ID:160995 發表于 2019-8-6 17:46 | 顯示全部樓層
謝謝分享,很幫的應用!學習了!
回復

使用道具 舉報

ID:282095 發表于 2019-8-6 20:21 | 顯示全部樓層
PWM不就是利用高電平調節占空比嗎
回復

使用道具 舉報

ID:591206 發表于 2019-10-6 17:51 | 顯示全部樓層
謝謝你的無私奉獻 老哥加油
回復

使用道具 舉報

ID:122260 發表于 2019-10-6 20:04 | 顯示全部樓層
好資料  謝謝大師分享
回復

使用道具 舉報

ID:361825 發表于 2019-10-12 21:15 | 顯示全部樓層
樓主辛苦,漲知識了
回復

使用道具 舉報

ID:486536 發表于 2019-10-27 13:05 | 顯示全部樓層
這個速度沒有變化啊
回復

使用道具 舉報

ID:630894 發表于 2019-10-27 14:40 | 顯示全部樓層
挺好
回復

使用道具 舉報

ID:486536 發表于 2019-10-28 16:18 | 顯示全部樓層
為什么速度沒有變化呢
回復

使用道具 舉報

ID:486536 發表于 2019-10-28 16:30 | 顯示全部樓層
終于知道為什么不能調速啦,PWM波需要在程序中修改
回復

使用道具 舉報

ID:713590 發表于 2020-3-22 19:36 | 顯示全部樓層
pc13沒有接線
回復

使用道具 舉報

ID:786480 發表于 2020-7-2 00:39 | 顯示全部樓層

大佬你好吖,我剛注冊,有一部分調試不出來,可不可以分享一下吖~謝謝你咯!
回復

使用道具 舉報

ID:890487 發表于 2021-3-10 19:01 | 顯示全部樓層
很有用的應用!學習了!
回復

使用道具 舉報

ID:890487 發表于 2021-3-13 13:28 | 顯示全部樓層
看了 樓主的代碼有點迷茫 請教一下現在是5S 那如果500秒需要改動哪里 時間怎么計算
回復

使用道具 舉報

ID:831233 發表于 2021-9-29 15:54 | 顯示全部樓層
SLfass 發表于 2019-4-9 17:04
電池是什么型號的啊?

18650就行
回復

使用道具 舉報

ID:752403 發表于 2022-7-22 14:30 | 顯示全部樓層
謝謝,大佬的無私分享,正在找PWM控制程序呢,
回復

使用道具 舉報

ID:1085113 發表于 2023-6-29 11:44 | 顯示全部樓層
愛吃魚的人 發表于 2019-10-28 16:30
終于知道為什么不能調速啦,PWM波需要在程序中修改

哥哥,咋實現調速呀
回復

使用道具 舉報

ID:1087287 發表于 2023-7-5 10:01 | 顯示全部樓層
正好需要搞這個,贊
回復

使用道具 舉報

ID:1087287 發表于 2023-7-5 11:36 | 顯示全部樓層
為什么我的都不動啊
回復

使用道具 舉報

ID:1055873 發表于 2023-7-13 17:28 | 顯示全部樓層
好!向大佬學習了
回復

使用道具 舉報

ID:861056 發表于 2024-5-9 15:39 | 顯示全部樓層
木土衛康123 發表于 2019-7-29 20:18
請問main函數中while(1)中怎么沒有控制程序呢?

應該都在中斷中控制了
回復

使用道具 舉報

ID:1073352 發表于 2024-11-11 20:24 | 顯示全部樓層

謝謝大佬的分享!多多學習..
回復

使用道具 舉報

ID:849826 發表于 2024-12-8 10:09 來自手機 | 顯示全部樓層
頻率多少,能不能驅動高頻變壓器,同時可以功率調節
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 青青久久 | 五月天婷婷狠狠 | 免费在线观看av网址 | 亚洲成人国产 | 亚洲精品2区 | 久久专区 | 99精品视频在线观看 | 久久中文一区二区 | 欧美精品一区二区三区在线 | 亚洲午夜网| 热re99久久精品国99热观看 | www.黄色网 | 欧美综合久久久 | 日本久草视频 | 亚洲色欧美另类 | 免费一看一级毛片 | 在线视频三区 | 男女羞羞视频网站 | 丝袜美腿一区二区三区 | 欧美国产精品一区二区三区 | 大伊人久久 | 国产精品激情 | 国产精品视频一 | 成人国产精品免费观看视频 | 欧美综合一区二区 | 日日精品 | 毛片电影| 久久久精品视频免费 | 91在线视频观看 | 久久久99精品免费观看 | 色呦呦网站 | 超碰97人人人人人蜜桃 | 午夜精品一区二区三区免费视频 | 欧美9999 | 成人三级视频 | 日日射影院 | 欧美a在线 | 成人免费在线播放视频 | 亚洲成人免费视频 | 九九久久久 | 国产成人免费 |