在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32F103C8T6+L298N通過PWM控制直流電機

CHANBAEK ? 來源:月月望歸鳥 ? 作者:K.Fire ? 2023-06-15 16:51 ? 次閱讀

01 前言

原來做的差速小車是基于Arduino控制的,感覺有些簡單,也有些基礎,Arduino方便簡單的同時,可操作性感覺也少了很多,所以想將控制器換成STM32,然后將樹莓派作為上位機,STM32作為下位機,通過樹莓派和STM32進行通訊,實現對差速移動小車的控制,本人也是寒假期間初學STM32,也是奔著應用去的,所以對于STM32編程原理方面可能不太精通,這里偏重于記錄應用層面的知識。

02 PWM調速原理

直流電機驅動是最簡單的,給電機通上電就能轉,根據電機的公式:

圖片

可知:當提高電壓時,反電勢升高,進而轉速升高,電壓與轉速大致有如圖所示的關系。

圖片編輯

所以我們只要控制給電機通電的電壓即可控制電機的轉速,但是在實際的控制中,控制直流電機需要通過H橋控制電機的正反轉,如圖,當T1和T4二極管導通時,有粉色通路;當T2和T3二極管導通時,有藍色通路,這樣我們就可以實現弱電控制強電,通過二極管的通斷來控制電機的轉向。

但是這樣電機通電時電壓就是Us,我們如果想自由的控制Us的電壓值基本是不能實現的,因為電機是接到單片機的引腳上的,引腳的供電電壓值是確定的,我們就要使用控制二極管的通斷時間對電機的轉速進行控制,即PWM控制。

圖中的D1~D4二極管為續流的作用,因為電機中有繞組,在斷電后,電感的電流不能瞬時變為0,所以在斷電后電流沿棕色和綠色的通路放點電。

image.png

image.png

在一個周期內,我們通過控制通電的時間就可以調控平均電壓,而平均電壓的高低直接控制電機的轉速,通電時間/周期,就可以得到占空比,我們也就是通過控制電機的占空比來控制電機的轉速的。

image.png

在實際應用過程中,我們不用自己搭建H橋,而是使用電機驅動板(如:L298N)對直流電機進行驅動,L298N內搭載兩個H橋電路,可以實現對兩個電機的轉向和轉速進行控制。

圖片

這是淘寶商家提供的電機驅動板控制表,將IN1~4接到單片機的引腳,我們就可以通過引腳輸出PWM控制信號,對直流電機進行控制。

03 STM32編程實現

在STM32中如果想輸出PWM信號,需要借助定時器,通過定時器的捕獲/比較通道的PWM輸出

圖片

當我們對定時器設置了預裝載值arr和比較值ccr后,可以通過配置PWM模式,使定時器CNT計數值超過ccr后產生有效信號,并通過配置相應寄存器設置有效信號是1還是0,而配置PWM的輸出方式,具體原理信息可以參考原子哥的視頻,也可以參考中文參考手冊的14.4.7內容。

圖片

在程序中,我們使用庫函數進行配置,配置步驟如下:

  1. 使能定時器和相關外設引腳時鐘 :RCC_APBxPeriphClockCmd()
  2. 配置IO口為復用輸出模式(查手冊8.1.11)配置成相應的模式(復用推挽輸出)
  3. 初始化定時器:TIM_TimeBaseInit()
  4. 初始化TIM2 Channe1234 PWM模式:TIM_OCxInit()
  5. 使能OCx通道的預裝載寄存器:TIM_OC1PreloadConfig()
  6. 使能時鐘:TIM_Cmd()
  7. 在主函數中配置占空比進行調速:TIM_SetCompare1()
#include "sys.h"


/********************
功能:通用時鐘2用來產生通道1234四路PWM信號
函數:TIM2_PWM_Init(u16 arr,u16 psc)
作者:K.Fire
日期:2022.01.30
引腳:PA0 PA1 PA2 PA3
參數:arr:自動重裝值 psc:時鐘預分頻數
*****************/


void TIM2_PWM_Init(u16 arr,u16 psc)
{  
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  //使能GPIOA外設模塊時鐘  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   

  //設置引腳為復用輸出功能,輸出TIM2 CH1的PWM脈沖波形  GPIOA.0
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復用推挽輸出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

  //設置引腳為復用輸出功能,輸出TIM2 CH2的PWM脈沖波形  GPIOA.1
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //TIM2_CH2
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

    //設置引腳為復用輸出功能,輸出TIM2 CH3的PWM脈沖波形  GPIOA.2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //TIM2_CH3
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

  //設置引腳為復用輸出功能,輸出TIM2 CH4的PWM脈沖波形  GPIOA.3
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //TIM2_CH4
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

  //使能定時器2時鐘
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  
    //初始化TIM2
  TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
  TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值 
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

  //初始化TIM2 Channe1234 PWM模式   
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式2
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高

  TIM_OC1Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC1
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC2
  TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC3
  TIM_OC4Init(TIM2, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM2 OC4


  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR1上的預裝載寄存器
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR2上的預裝載寄存器
  TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR3上的預裝載寄存器
  TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM2在CCR4上的預裝載寄存器

  TIM_Cmd(TIM2, ENABLE);  //使能TIM2

}

04 總結

原理部分我講的很簡略,我也是看原子哥的視頻學,如果大家對單片機控制原理有學習需要,可以去B站看原子哥的視頻,博主主要是做控制和上位機的,所以這部分只需要會用即可。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 直流電機
    +關注

    關注

    36

    文章

    1710

    瀏覽量

    70298
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5196

    瀏覽量

    214408
  • STM32
    +關注

    關注

    2270

    文章

    10918

    瀏覽量

    356842
  • Arduino
    +關注

    關注

    188

    文章

    6475

    瀏覽量

    187465
  • 樹莓派
    +關注

    關注

    117

    文章

    1710

    瀏覽量

    105773
收藏 人收藏

    評論

    相關推薦

    STM32F103C8T6實現直流電機速度PID控制

    前面完成了基于STM32F103C8T6+L298N+MG513P30直流電機PWM控制和兩種方法的編碼器實時速度反饋,拿到這個反饋值后我們就可以使用經典的PID算法,對
    的頭像 發表于 06-15 16:52 ?5135次閱讀
    <b class='flag-5'>STM32F103C8T6</b>實現<b class='flag-5'>直流電機</b>速度PID<b class='flag-5'>控制</b>

    L298N驅動直流電機問題

    pwm調制 l298n驅動一個直流電機c程序怎么編寫還有該怎么接線
    發表于 05-04 17:14

    STM32L298N相關資料推薦

    文章目錄用STM32L298N(正反轉、調速)控制直流電機正反轉使用PWM調速用STM32
    發表于 06-29 06:02

    空心杯直流電機控制

    統的控制對象是4個空心杯直流電機電機帶光電編碼器,可以反饋轉速大小的波形。電機驅動模塊是普通的L298N模塊。芯片型號,
    發表于 09-13 08:47

    使用L298n控制兩路直流電機PWM調速

    新手來記錄自己從0開始自學STM32,也不曉得自己能堅持多久。使用L298n控制兩路直流電機PWM調速還沒學直接上程序.
    發表于 01-06 07:11

    L298N電機驅動直流電機程序匯總

    關于L298N驅動直流電機的各種寫法程序匯總
    發表于 05-04 16:04 ?31次下載

    基于80C196KC和L298N直流電機PWM控制技術

    介紹了基于80C196KC和L298N直流電機PWM控制技術,pwm調速系統的工作原理、
    發表于 12-12 09:41 ?6270次閱讀
    基于80<b class='flag-5'>C</b>196KC和<b class='flag-5'>L298N</b>的<b class='flag-5'>直流電機</b><b class='flag-5'>PWM</b><b class='flag-5'>控制</b>技術

    使用STM32F103C8T6控制L298N電機驅動麥克納姆輪小車(HAL庫)

    使用STM32F103C8T6控制L298N電機驅動麥克納姆輪小車(HAL庫)
    發表于 11-23 17:36 ?56次下載
    使用<b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>控制</b><b class='flag-5'>L298N</b><b class='flag-5'>電機</b>驅動麥克納姆輪小車(HAL庫)

    如何使用L298N和Arduino板控制直流電機

    在這個Arduino教程中,我們將學習如何使用Arduino控制直流電機。我們來看看控制直流電機的一些基本技術,并通過兩個例子,學習如何使用
    的頭像 發表于 04-08 15:06 ?1.1w次閱讀
    如何使用<b class='flag-5'>L298N</b>和Arduino板<b class='flag-5'>控制</b><b class='flag-5'>直流電機</b>

    L298n直流電機的原理說明

    該文件包含了L298n直流電機的工作原理圖和PCB制圖
    發表于 05-28 10:06 ?3次下載

    ros與arduino通信控制直流電機

    前言:在成功通過arduino開發板控制直流電機后,開始嘗試用ros與arduino通信來控制直流電機,為無人小車作準備 硬件 ardui
    發表于 03-31 11:45 ?4次下載
    ros與arduino通信<b class='flag-5'>控制</b><b class='flag-5'>直流電機</b>

    STM32F103C8T6+L298N通過PWM控制直流電機轉速

    下位機,通過樹莓派和STM32進行通訊,實現對差速移動小車的控制,本人也是寒假期間初學STM32, 也是奔著應用去的,所以對于STM32
    發表于 03-31 11:16 ?4次下載
    <b class='flag-5'>STM32F103C8T6+L298N</b><b class='flag-5'>通過</b><b class='flag-5'>PWM</b><b class='flag-5'>控制</b><b class='flag-5'>直流電機</b>轉速

    STM32F103C8T6實現直流電機速度PID控制

    前面完成了基于STM32F103C8T6+L298N+MG513P30直流電機PWM控制和兩種方法的編碼器實時速度反饋,拿到這個反饋值后我們就可以使用經典的PID算法,對
    發表于 03-31 11:26 ?3次下載
    <b class='flag-5'>STM32F103C8T6</b>實現<b class='flag-5'>直流電機</b>速度PID<b class='flag-5'>控制</b>

    基于STM32PWM控制直流電機轉速(CubeMX+HAL庫)

    使用到的各元件: 1、12V電源一個 2、單片機:STM32F103C8T6 3、直流電機4個 4、電機驅動模塊:L298N 5、降壓模塊兩個 6
    發表于 03-31 09:36 ?12次下載
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>PWM</b><b class='flag-5'>控制</b><b class='flag-5'>直流電機</b>轉速(CubeMX+HAL庫)

    L298N直流電機總結

    采用L298N雙橋直流電機驅動芯片 工作電壓范圍5V35V,如果需要從模塊內取電,則供電范圍為7V35V 峰值輸出電流2A 每個通道有一個使能輸入端 可以驅動兩個直流電機或者一個四線步進
    發表于 04-03 11:05 ?3次下載
    <b class='flag-5'>L298N</b><b class='flag-5'>直流電機</b>總結
    主站蜘蛛池模板: 亚洲免费在线观看视频| 天天做天天爰夜夜爽| 伊人精品视频在线| 国产午夜视频在线观看| 97午夜理伦片在线影院| 久久国产精品99久久久久久老狼| 天堂资源在线官网| 精品热99| 中年艳妇乱小玩| 亚洲福利视频一区| 床上激情四射| 韩国韩宝贝2020vip福利视频| 99热1| 亚洲 [12p]| 一级毛片日韩a欧美| 国产精品三级a三级三级午夜| 一区二区三区高清在线观看| 色综合天天综合| 久久婷婷久久一区二区三区| 欧美xxxx色视频在线观看| 日本在线黄| 日本天堂网在线观看| 免费的黄色片| 免费国产成人α片| 国产精品手机在线| 天天爽夜夜爽人人爽曰喷水| 国产chinesetube| 日本不卡一| 色婷婷综合激情| 国产色秀视频在线观看| 天天干天天爱天天操| 日日操夜夜骑| 日本wwwhdsex69| 中文一级黄色片| 亚洲成人激情片| 天堂在线中文无弹窗全文阅读| 日本动漫天堂| 久久青草精品免费资源站| 亚洲福利午夜| 日本免费人成黄页网观看视频| 色综合免费视频|