国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

第三篇-V1.5 TB6612電機pwm控制STM32智能小車

發(fā)布者:幸福的家園最新更新時間:2024-09-13 來源: elecfans關(guān)鍵字:pwm控制  STM32  智能小車 手機看文章 掃描二維碼
隨時隨地手機看文章

功能介紹放開頭, 使用便捷無需愁。

這是全網(wǎng)最詳細、性價比最高的STM32實戰(zhàn)項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節(jié)代碼手把手教會你如何開發(fā)和調(diào)試。讓你更快掌握嵌入式系統(tǒng)開發(fā)


V1.5.0-STM32智能小車

V1.5.0:庫函數(shù)開發(fā)。功能:循跡、避障、跟隨、遙控、電池電壓顯示等。

視頻合集鏈接推薦觀看

[https://www.bilibili.com/video/BV1SY411L7rJ/?spm_id_from=333.337.search-card.all.click]

**V3.3.0-STM32智能小車 **

V3:HAL庫開發(fā)、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。

視頻合集鏈接推薦觀看

[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]

系統(tǒng)軟件設計

點亮小燈

查看原理圖

查閱原理圖,小燈接在PC13上下面驅(qū)動PC13
在這里插入圖片描述

編寫驅(qū)動

在這里插入圖片描述

思考題:如果同時驅(qū)動PC13與PC14,應該如何編寫?(答案:應該增加下圖代碼)
在這里插入圖片描述

LED_Init()函數(shù)的代碼


void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PC端口時鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PC13

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz

GPIO_Init(GPIOC, &GPIO_InitStructure); //根據(jù)設定參數(shù)初始化

GPIOC.13

GPIO_SetBits(GPIOC,GPIO_Pin_13); //PC.13輸出高

}

LED.h 部分宏定義


#define LED PCout(13)// PC13



測試

編譯下載(如果沒有運行,需要按復位 運行)

電機驅(qū)動

由TB6612介紹得,通過控制AO和AO2高低電平可以控制AIN1和AIN2輸出。

GPIO 高低電平控制AIN和BIN

  1. 查閱原理圖AIN1、AIN2、BIN1、BIN2依次接在單片機的PB13、PB12、PB1、PB0
    在這里插入圖片描述

原理同GPIO輸出高低電平見第二節(jié)

TB6612 GPIO驅(qū)動函數(shù)代碼

//驅(qū)動6612 的AIN1 AIN2 BIN1 BIN2

// AIN1 PB13

// AIN2 PB12

// BIN1 PB1

// BIN2 PB0

void TB6612_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時鐘

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13

|GPIO_Pin_12|GPIO_Pin_0|GPIO_Pin_1; //PB0 OB1 PB12 PB13端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz

GPIO_Init(GPIOB, &GPIO_InitStructure); //根據(jù)設定參數(shù)初始化

GPIO_SetBits(GPIOB,GPIO_Pin_13 |GPIO_Pin_12|GPIO_Pin_0|GPIO_Pin_1);

//PB0 OB1 PB12 PB1 輸出高

}

相關(guān)宏定義


#define AIN1 PBout(13)// PB13

#define AIN2 PBout(12)// PB12

#define BIN1 PBout(1)// PB1

#define BIN2 PBout(0)// PB0


PWM控制PWMA和PWMB

將 PWM輸出實驗 的 timer 文件移植到我們前面點燈的工程中,更改驅(qū)動文件

  1. 查看原理圖 PWMA 和PWMB依次連接PA11和PA8

  2. 查看 參考手冊 關(guān)于定時器復用功能重映射的介紹(中文參考手冊第119頁)
    在這里插入圖片描述

初始化外設

配置對應引腳功能

初始化TIM1

初始化TIM1 相應通道的 PWM模式

使能

注意輸出使能 高級定時器必須使用:TIM_CtrlPWMOutputs(TIM_TypeDef TIMx, *

FunctionalState NewState);

//TIM1 PWM部分初始化

//PWM輸出初始化

//arr:自動重裝值

//psc:時鐘預分頻數(shù)

void TIM1_PWM_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

//使能對應定時器

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定時器1時鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,

ENABLE); //使能GPIO外設和AFIO復用功能模塊時鐘

//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE); //Timer3部分重映射

TIM3_CH2- >PB5

//配置對應引腳功能

//設置該引腳為復用輸出功能,輸出TIM1 CH1 和CH4

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; //TIM_CH1 TIM_CH4

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

//初始化TIM1

TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重

裝載寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數(shù)的預

分頻值

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù)

模式

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)

TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位

//初始化TIM1 Channel1 PWM模式

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬

度調(diào)制模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸

出比較極性高

TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設TIM3

OC2

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預裝

載寄存器

//初始化TIM1 Channel4 PWM模式

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬

度調(diào)制模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸

出比較極性高

TIM_OC4Init(TIM1, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設TIM3

OC2

TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預裝

載寄存器

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

TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主輸出使能,高級定時器必須開啟這

}

調(diào)用初始化函數(shù)、改變占空比。


TIM1_PWM_Init(1999,359);

//TIM1掛在APB2為72M ,故計算 72 000 000 /(359+1)/(1999+1) = 100 Hz,

//故設置了頻率為100 Hz、自動重裝載值 1999

TIM_SetCompare1(TIM1,100); //設置 TIM1 通道1 捕獲/比較寄存器值 為 1000 可以

計算出占空比

//PA8 PWMB

TIM_SetCompare4(TIM1,1900); //設置

//PA11 PWMA


通過軟件仿真

邏輯分析儀觀察波形輸出、顯示PWM波形
設置好仿真環(huán)境
在這里插入圖片描述
打開邏輯分析儀

在這里插入圖片描述
添加要觀察的引腳
在這里插入圖片描述
跳到設置對應程序位置,打開仿真
在這里插入圖片描述
打開實時更新選項
在這里插入圖片描述
調(diào)節(jié)觀察分析儀
在這里插入圖片描述
產(chǎn)生的如圖方波就是一種PWM波
在這里插入圖片描述
在這里插入圖片描述

那么在程序哪里設置的這些參數(shù)那

時鐘預分頻數(shù) 決定了PWM 頻率和周期


TIM1_PWM_Init(1999,359);

//TIM1掛在APB2為72M ,故計算 72 000 000 /(359+1)/(1999+1) = 100 Hz,


那么誰調(diào)節(jié)占空比那?
在這里插入圖片描述

  1. 非常好理解、定時器的計數(shù)器向上計數(shù)就是越來越大。

  2. PWM 模式我們可以看手冊
    在這里插入圖片描述
    3.這里的TIM_OCPolarity_High 就是把有效電平設置為高
    舉個栗子:如果我們設置上面的示例參數(shù),工作過程應該是怎么的吶?
    在這里插入圖片描述


電機控制通過AIN1、AIN2、BIN1、BIN2控制電機正反轉(zhuǎn),通過PWMA、PWMB控制電機轉(zhuǎn)速


AIN1 = 1;

AIN2 = 0;

BIN1 = 1;

BIN2 = 0;

TIM_SetCompare4(TIM1,1500); //設置 A

TIM_SetCompare1(TIM1,1500); //設置B


讓小車跑一跑吧

小車電機線正確接法
在這里插入圖片描述
錯誤接法
在這里插入圖片描述


小車直行


void Forward(void)

{

AIN1 = 1;

AIN2 = 0;

BIN1 = 1;

BIN2 = 0;

TIM_SetCompare4(TIM1,1500); //設置 A

TIM_SetCompare1(TIM1,1500); //設置B

}

小車后退


void Backward(void)

{

AIN1 = 0;

AIN2 = 1;

BIN1 = 0;

BIN2 = 1;

TIM_SetCompare4(TIM1,1500); //設置 A

TIM_SetCompare1(TIM1,1500); //設置B

}

小車左轉(zhuǎn)


void Leftward(void)

{

AIN1 = 0;

AIN2 = 1;

BIN1 = 1;

BIN2 = 0;

TIM_SetCompare4(TIM1,1500); //設置 A

TIM_SetCompare1(TIM1,1500); //設置B

}

小車右轉(zhuǎn)


void Rightward(void)

{

AIN1 = 1;

AIN2 = 0;

BIN1 = 0;

BIN2 = 1;

TIM_SetCompare4(TIM1,1500); //設置 A

TIM_SetCompare1(TIM1,1500); //設置B

}


關(guān)鍵字:pwm控制  STM32  智能小車 引用地址:第三篇-V1.5 TB6612電機pwm控制STM32智能小車

上一篇:STM32F103的貼片機控制系統(tǒng)的設計
下一篇:都是32位MCU,ESP32、GD32、STM32有什么區(qū)別

推薦閱讀最新更新時間:2025-06-07 23:44

基于三次函數(shù)的電磁導航智能小車設計
智能小車尋線道路設計要求是:在中間鋪設了一條直徑為0.5 mm的銅質(zhì)漆包線,漆包線中有頻率范圍為20 2 kHz、電流范圍為50~150 mA的正弦波信號。隨著智能小車的發(fā)展,需適應更加復雜的賽道,例如直角彎、坡道、障礙等。文中設計的智能小車,是基于Kinetis K60單片機開發(fā)實現(xiàn)的,以電磁線圈作為感應傳感器,采用偏差算法控制小車精準的尋線功能,從而實現(xiàn)智能小車智能快速穩(wěn)定的尋線行駛。 1 硬件總體設計 智能小車系統(tǒng)由Kinetis K60主控模塊、傳感器模塊、舵機控制模塊、電機驅(qū)動模塊、OLED顯示模塊、撥碼開關(guān)模塊、編碼器測速模塊、停車檢測模塊、障礙檢測模塊這9個部分構(gòu)成。系統(tǒng)總體框架如圖1所示。 除了以上9部分外
[單片機]
基于三次函數(shù)的電磁導航<font color='red'>智能小車</font>設計
智能小車驅(qū)動電路
智能小車 驅(qū)動電路是一個全橋驅(qū)動電路, Q1,Q2, Q3, Q4四個三極管組成4個橋臂, Q5 控制Q2和Q3的導通和關(guān)斷, Q6控制Q1 和Q4 的導通和關(guān)斷, 驅(qū)動電路分別用于后輪動力驅(qū)動電路和前輪方向驅(qū)動電路。當1管腳為高電平, 2管腳為低電平時時Q1 和Q4 導通, Q2和Q3截止, 電動機帶動車輪運轉(zhuǎn); 當1管腳為低電平, 2管腳為高電平時時Q1和Q4截止, Q2和Q3導通, 電動機帶動車輪反向運轉(zhuǎn)。   
[模擬電子]
<font color='red'>智能小車</font>驅(qū)動電路
基于51單片機的智能小車設計
O 引言 在現(xiàn)有玩具電動車的基礎(chǔ)上,加裝光電檢測器,實現(xiàn)對電動小汽車的速度、位置、運行狀況的實時測量,并將測量數(shù)據(jù)傳送至單片機進行處理,然后由單片機根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)對電動車的智能控制。 1 直流調(diào)速系統(tǒng)采用PWM調(diào)速 直流調(diào)速系統(tǒng)采用晶閘管的直流斬波器與整流電路。晶閘管不受相位控制,而是工作在開關(guān)狀態(tài)。當晶閘管被觸發(fā)導通時,電源電壓加到電動機上,當晶閘管關(guān)斷時,直流電源與電動機斷開,電動機經(jīng)二極管續(xù)流,兩端電壓接近于零。脈沖寬度調(diào)制(Pulse Width Modulat-ion),簡稱PWM。脈沖周期不變。只改變晶閘管的導通時間,即通過改變脈沖寬度來進行直流調(diào)速。 脈寬調(diào)速也可通過單片機控制繼電器的閉合來實
[單片機]
基于51單片機的<font color='red'>智能小車</font>設計
avr利用pwm控制led光暗及峰鳴器音量大小
//ICC-AVR application builder // Target : M16 // Crystal: 4.0000Mhz #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int void port_init(void); void timer0_init(void); void init_devices(void); void delay_short(uint t); uchar scan_key(void); void port_init(void) { PO
[單片機]
電流模式PWM控制器—MAX17499/MAX17500
????? 該MAX17499/MAX17500電流模式PWM控制器包含所有的控制電路的寬輸入電壓隔離和非隔離式電源設計要求。該MAX17499非常適合低輸入電壓(9.5V至24V直流DC)電源供應。該MAX17500非常適合通用輸入(整流85V的交流到265V AC)或電信(- 36V的直流到72V的直流)電源。   這些IC包含一個內(nèi)部誤差放大器,調(diào)節(jié)第三繞組輸出電壓,在初級側(cè)穩(wěn)壓隔離電源使用。初級側(cè)調(diào)節(jié)省去了光耦的需要。一個輸入欠壓鎖定(UVLO)提供編程的輸入電源啟動電壓,并確保在電源跌落時正常工作。開漏輸出欠壓鎖定標志210μs內(nèi)部延遲,允許二次側(cè)控制器排序。輸入電源啟動電壓與外部分壓器進行編程。一個UVLO / E
[電源管理]
電流模式<font color='red'>PWM控制</font>器—MAX17499/MAX17500
多電平逆變器載波PWM控制方法的仿真研究
摘要:討論了多電平逆變器的載波PWM控制方法,介紹了它們的原理,為了比較它們的控制效果,采用Matlab軟件進行了仿真研究,最后根據(jù)仿真結(jié)果和分析,得出結(jié)論,并對今后的研究提出了建議。 關(guān)鍵詞:載波PWM;多電平逆變器;仿真 1? 引言 ??? 近年來,多電平變換器在高壓大功率方面成為研究的熱點,主要是因為它可以用低耐壓的器件實現(xiàn)高壓大功率輸出,無需動態(tài)均壓電路,無需變壓器;電平數(shù)的增加,改善了輸出電壓波形。目前多電平逆變器的拓撲結(jié)構(gòu)有三種:二極管箝位型逆變器(Diode-clamped inverter),飛跨電容型逆變器(Flying-capacitor inverter)和具有獨立直流電源的級聯(lián)型逆變器 (
[電源管理]
多電平逆變器載波<font color='red'>PWM控制</font>方法的仿真研究
基于PWM控制的開關(guān)電源系統(tǒng)仿真研究
   0 引 言   通過數(shù)學的方法,把小功率開關(guān)電源系統(tǒng)表示成數(shù)學模型和非線性控制模型,建立一種開關(guān)電源全系統(tǒng)的仿真模型,提高了仿真速度。Matlab是一個高級的數(shù)學分析軟件,Simulink是運行在Matlab環(huán)境下,用于建模、仿真和分析動態(tài)系統(tǒng)的軟件包,它支持連續(xù)、離散及兩者混合的線性及非線性系統(tǒng)。   在Matlab 5.2中推出了電力系統(tǒng)工具箱,該工具箱可以與Simulink配合使用,能夠更方便地對電力電子系統(tǒng)進行仿真。隨著電源技術(shù)的發(fā)展,PWM控制的開關(guān)電源得到了廣泛的研究和應用,如通信電源,機車電源等。這里以220 V高頻開關(guān)電源為研究對象,建立模型。該電源采用脈寬調(diào)制控制方式,實現(xiàn)了減輕重量、縮小體積、提高精度
[電源管理]
stm32 freertos 任務不能調(diào)度(啟動)可能原因
觀點 先說結(jié)論,給趕時間的朋友省點事: 檢查FreeRTOS的調(diào)度配置,是否正確配置成可搶占的 是不是某些任務回調(diào)函數(shù)退出的時候,沒有調(diào)用 vTaskDelete() 刪除任務 敘事 今天寫了個簡單的 基于stm32/cubeIDE 的freertos hello_world 例程。創(chuàng)建了2個簡單線程,但是發(fā)現(xiàn)居然不能調(diào)度,而且整個系統(tǒng)都被卡住。 一開始以為是搶占式調(diào)度配置沒有設好, 搶占式時間片調(diào)度(Prioritized Pre-emptive Scheduling with Time Slicing) 這是比較通用的調(diào)度方式,上一篇提到的溫度檢測系統(tǒng)采用的就是這種方式。內(nèi)核調(diào)度器在每個時間片結(jié)束的時候執(zhí)行一次,選擇
[單片機]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved