RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第三篇-V1.5 TB6612電機(jī)pwm控制STM32智能小車 STM32F103C8T6單片機(jī)

STM32智能小車V1.5 ? 來(lái)源:dfhjgfg ? 作者:dfhjgfg ? 2024-08-12 18:29 ? 次閱讀

功能介紹放開(kāi)頭, 使用便捷無(wú)需愁。

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

V1.5.0-STM32智能小車

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

視頻合集鏈接推薦觀看

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

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

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

視頻合集鏈接推薦觀看

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

系統(tǒng)軟件設(shè)計(jì)

點(diǎn)亮小燈

查看原理圖

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

編寫驅(qū)動(dòng)

在這里插入圖片描述

思考題:如果同時(shí)驅(qū)動(dòng)PC13與PC14,應(yīng)該如何編寫?(答案:應(yīng)該增加下圖代碼)
在這里插入圖片描述
LED_Init()函數(shù)的代碼

void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PC端口時(shí)鐘
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è)定參數(shù)初始化
GPIOC.13
GPIO_SetBits(GPIOC,GPIO_Pin_13); //PC.13輸出高
}

LED.h 部分宏定義

#define LED PCout(13)// PC13
?

測(cè)試

編譯下載(如果沒(méi)有運(yùn)行,需要按復(fù)位 運(yùn)行)

電機(jī)驅(qū)動(dòng)

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

GPIO 高低電平控制AIN和BIN

  1. 查閱原理圖AIN1、AIN2、BIN1、BIN2依次接在單片機(jī)的PB13、PB12、PB1、PB0
    在這里插入圖片描述
  2. 原理同GPIO輸出高低電平見(jiàn)第二節(jié)
    TB6612 GPIO驅(qū)動(dòng)函數(shù)代碼
//驅(qū)動(dòng)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端口時(shí)鐘
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è)定參數(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輸出實(shí)驗(yàn) 的 timer 文件移植到我們前面點(diǎn)燈的工程中,更改驅(qū)動(dòng)文件

  1. 查看原理圖 PWMA 和PWMB依次連接PA11和PA8
  2. 查看 參考手冊(cè) 關(guān)于定時(shí)器復(fù)用功能重映射的介紹(中文參考手冊(cè)第119頁(yè))
    在這里插入圖片描述
  3. 初始化外設(shè)
    配置對(duì)應(yīng)引腳功能
    初始化TIM1
    初始化TIM1 相應(yīng)通道的 PWM模式
    使能
    注意輸出使能 高級(jí)定時(shí)器必須使用:TIM_CtrlPWMOutputs(TIM_TypeDef TIMx, *
    FunctionalState NewState);
//TIM1 PWM部分初始化
//PWM輸出初始化
//arr:自動(dòng)重裝值
//psc:時(shí)鐘預(yù)分頻數(shù)
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//使能對(duì)應(yīng)定時(shí)器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定時(shí)器1時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,
ENABLE); //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE); //Timer3部分重映射
TIM3_CH2- >PB5
//配置對(duì)應(yīng)引腳功能
//設(shè)置該引腳為復(fù)用輸出功能,輸出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; //復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
//初始化TIM1
TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重
裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來(lái)作為TIMx時(shí)鐘頻率除數(shù)的預(yù)
分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計(jì)數(shù)
模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)
TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
//初始化TIM1 Channel1 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式: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ù)初始化外設(shè)TIM3
OC2
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預(yù)裝
載寄存器
//初始化TIM1 Channel4 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時(shí)器模式: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ù)初始化外設(shè)TIM3
OC2
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預(yù)裝
載寄存器
TIM_Cmd(TIM1, ENABLE); //使能TIM1
TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主輸出使能,高級(jí)定時(shí)器必須開(kāi)啟這
個(gè)
}

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

TIM1_PWM_Init(1999,359);
//TIM1掛在APB2為72M ,故計(jì)算 72 000 000 /(359+1)/(1999+1) = 100 Hz,
//故設(shè)置了頻率為100 Hz、自動(dòng)重裝載值 1999
TIM_SetCompare1(TIM1,100); //設(shè)置 TIM1 通道1 捕獲/比較寄存器值 為 1000 可以
計(jì)算出占空比
//PA8 PWMB
TIM_SetCompare4(TIM1,1900); //設(shè)置
//PA11 PWMA
?

通過(guò)軟件仿真

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

在這里插入圖片描述
添加要觀察的引腳
在這里插入圖片描述
跳到設(shè)置對(duì)應(yīng)程序位置,打開(kāi)仿真
在這里插入圖片描述
打開(kāi)實(shí)時(shí)更新選項(xiàng)
在這里插入圖片描述
調(diào)節(jié)觀察分析儀
在這里插入圖片描述
產(chǎn)生的如圖方波就是一種PWM波
在這里插入圖片描述
在這里插入圖片描述
那么在程序哪里設(shè)置的這些參數(shù)那
時(shí)鐘預(yù)分頻數(shù) 決定了PWM 頻率和周期

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

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

  1. 非常好理解、定時(shí)器的計(jì)數(shù)器向上計(jì)數(shù)就是越來(lái)越大。
  2. PWM 模式我們可以看手冊(cè)
    在這里插入圖片描述
    3.這里的TIM_OCPolarity_High 就是把有效電平設(shè)置為高
    舉個(gè)栗子:如果我們?cè)O(shè)置上面的示例參數(shù),工作過(guò)程應(yīng)該是怎么的吶?
    在這里插入圖片描述
    電機(jī)控制通過(guò)AIN1、AIN2、BIN1、BIN2控制電機(jī)正反轉(zhuǎn),通過(guò)PWMA、PWMB控制電機(jī)轉(zhuǎn)速
AIN1 = 1;
AIN2 = 0;
BIN1 = 1;
BIN2 = 0;
TIM_SetCompare4(TIM1,1500); //設(shè)置 A
TIM_SetCompare1(TIM1,1500); //設(shè)置B
?

讓小車跑一跑吧

小車電機(jī)線正確接法
在這里插入圖片描述
錯(cuò)誤接法
在這里插入圖片描述
小車直行

void Forward(void)
{
AIN1 = 1;
AIN2 = 0;
BIN1 = 1;
BIN2 = 0;
TIM_SetCompare4(TIM1,1500); //設(shè)置 A
TIM_SetCompare1(TIM1,1500); //設(shè)置B
}

小車后退

void Backward(void)
{
AIN1 = 0;
AIN2 = 1;
BIN1 = 0;
BIN2 = 1;
TIM_SetCompare4(TIM1,1500); //設(shè)置 A
TIM_SetCompare1(TIM1,1500); //設(shè)置B
}

小車左轉(zhuǎn)

void Leftward(void)
{
AIN1 = 0;
AIN2 = 1;
BIN1 = 1;
BIN2 = 0;
TIM_SetCompare4(TIM1,1500); //設(shè)置 A
TIM_SetCompare1(TIM1,1500); //設(shè)置B
}

小車右轉(zhuǎn)

void Rightward(void)
{
AIN1 = 1;
AIN2 = 0;
BIN1 = 0;
BIN2 = 1;
TIM_SetCompare4(TIM1,1500); //設(shè)置 A
TIM_SetCompare1(TIM1,1500); //設(shè)置B
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電機(jī)
    +關(guān)注

    關(guān)注

    142

    文章

    9000

    瀏覽量

    145336
  • PWM控制
    +關(guān)注

    關(guān)注

    7

    文章

    194

    瀏覽量

    26278
  • 智能小車
    +關(guān)注

    關(guān)注

    87

    文章

    549

    瀏覽量

    81723
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    108

    文章

    160

    瀏覽量

    83498
  • TB6612
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    2314
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于STM32F103C8T6TB6612FNG的平衡小車是如何制作的

    平衡小車的硬件是由哪些部分組成的?基于STM32F103C8T6TB6612FNG的平衡小車是如何制作的?
    發(fā)表于 11-04 06:46

    基于STM32的雙輪平衡小車設(shè)計(jì)

    預(yù)告:代碼及文檔下載方案分析1、基于STM32F103C8T6 單片機(jī)的雙輪自平衡小車系統(tǒng);2、以 MPU6050 軸陀螺儀加速計(jì)為傳感器的姿態(tài)感知系統(tǒng);3、通過(guò)卡爾曼濾波對(duì)傳感器的
    發(fā)表于 11-30 08:03

    TB6612驅(qū)動(dòng)相關(guān)資料推薦

    TB6612驅(qū)動(dòng)(雙驅(qū)動(dòng))PWMA,AIN1, AIN2, BIN1, BIN2和PWMB為驅(qū)動(dòng)電路的輸入引腳連接stm32f103c8t6,左側(cè)的AO1, AO2, BO1和BO2為連接電機(jī)的輸出
    發(fā)表于 01-17 06:08

    采用STM32F103C8T6單片機(jī)制作兩輪平衡小車控制系統(tǒng)的資料分享

    主控MCU采用STM32F103C8T6單片機(jī),電機(jī)驅(qū)動(dòng)模塊采用TB6612FNG模塊,姿態(tài)監(jiān)測(cè)傳感器采用MPU6050芯片,藍(lán)牙模塊采用HC-05藍(lán)牙模塊。
    發(fā)表于 01-19 06:43

    stm32f103c8t6封裝及最小系統(tǒng)原理圖

    系統(tǒng)原理圖。 STM32F103C8T6封裝 STM32F103C8T6封裝為L(zhǎng)QFP48-48引腳小外形四方扁平封裝外形,如下圖: STM32F103C8T6最小系統(tǒng)原理圖 單片機(jī)
    發(fā)表于 11-23 15:50 ?35.1w次閱讀

    STM32F103C8T6單片機(jī)模型的資料和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103C8T6單片機(jī)模型的資料和程序免費(fèi)下載。
    發(fā)表于 09-27 17:00 ?241次下載

    STM32F103C8T6單片機(jī)的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103C8T6單片機(jī)的電路原理圖免費(fèi)下載。
    發(fā)表于 04-22 08:00 ?81次下載
    <b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>單片機(jī)</b>的電路原理圖免費(fèi)下載

    STM32F103C8T6核心板的資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103C8T6核心板的資料合集免費(fèi)下載包括了:STM32F103C8T6核心板測(cè)試程序(PC13閃爍),STM32F103C8T6核心板測(cè)試程序(RTC
    發(fā)表于 06-04 08:00 ?720次下載
    <b class='flag-5'>STM32F103C8T6</b>核心板的資料合集免費(fèi)下載

    STM32F103C8T6單片機(jī)原理圖下載

    STM32F103C8T6單片機(jī)原理圖下載
    發(fā)表于 04-12 09:36 ?0次下載
    <b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>單片機(jī)</b>原理圖下載

    stm32f103c8t6單片機(jī)驅(qū)動(dòng)臺(tái)達(dá)伺服電機(jī)

    、簡(jiǎn)介本文使用的是伺服電機(jī)的位置模式,以stm32f103c8t6單片機(jī)輸出脈沖,作為伺服電機(jī)驅(qū)動(dòng)器的位置脈沖輸入,從而達(dá)到伺服電機(jī)位置
    發(fā)表于 11-18 21:06 ?77次下載
    <b class='flag-5'>stm32f103c8t6</b><b class='flag-5'>單片機(jī)</b>驅(qū)動(dòng)臺(tái)達(dá)伺服<b class='flag-5'>電機(jī)</b>

    使用STM32F103C8T6控制L298N電機(jī)驅(qū)動(dòng)麥克納姆輪小車(HAL庫(kù))

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

    STM32F103C8t6程序下載

    STM32F103C8t6程序下載
    發(fā)表于 11-24 18:21 ?233次下載
    <b class='flag-5'>STM32F103C8t6</b>程序下載

    STM32平衡小車 TB6612電機(jī)驅(qū)動(dòng)學(xué)習(xí)

    TB6612FNG簡(jiǎn)介 單片機(jī)引腳的電流一般只有幾十個(gè)毫安,無(wú)法驅(qū)動(dòng)電機(jī),因此一般是通過(guò)單片機(jī)控制 電機(jī)
    發(fā)表于 05-16 15:18 ?5次下載
    <b class='flag-5'>STM32</b>平衡<b class='flag-5'>小車</b> <b class='flag-5'>TB6612</b><b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)學(xué)習(xí)

    使用stm32f103c8t6設(shè)計(jì)的藍(lán)牙小車

    使用stm32f103c8t6設(shè)計(jì)的藍(lán)牙小車,具有前進(jìn)后退,左轉(zhuǎn)右轉(zhuǎn)等功能
    發(fā)表于 08-07 16:08 ?29次下載

    第七章-V1.5 STM32超聲波測(cè)距STM32F103C8t6超聲波避障小車 超聲波避障模塊 STM32超聲波測(cè)距

    5STM32超聲波測(cè)距STM32F103C8t6超聲波避障小車
    的頭像 發(fā)表于 08-15 16:25 ?659次閱讀
    第七章-<b class='flag-5'>V1.5</b> <b class='flag-5'>STM32</b>超聲波測(cè)距<b class='flag-5'>STM32F103C8t6</b>超聲波避障<b class='flag-5'>小車</b> 超聲波避障模塊 <b class='flag-5'>STM32</b>超聲波測(cè)距
    RM新时代网站-首页