国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

直流減速編碼電機的使用(STM32f103c8t6)L298N電機驅(qū)動模塊

這篇具有很好參考價值的文章主要介紹了直流減速編碼電機的使用(STM32f103c8t6)L298N電機驅(qū)動模塊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引言

直接減速電機就是在直流電機上加上霍爾編碼器,霍爾編碼器可用于電機轉(zhuǎn)動的測速,A、B相會產(chǎn)生相位相差90°的方波信號。stm32可以使用硬件資源或者軟件模擬來捕獲編碼器信號。這里我介紹的是stm32自帶的編碼器模式來使用直流減速電機。

1.模塊介紹

1.1直流減速編碼電機

以下是直流減速電機的商品圖
??stm32f103c8t6控制直流電機,STM32,stm32,單片機,嵌入式硬件,模塊測試
同時我使用的是轉(zhuǎn)速為620的直流電機,此直流電機的電流在0.07A(空載)到1.8A(堵轉(zhuǎn))之間。
stm32f103c8t6控制直流電機,STM32,stm32,單片機,嵌入式硬件,模塊測試
直流電機和編碼盤互相獨立供電,紅色和白色需要連接到電機驅(qū)動模塊的輸出。黑色和綠色是編碼器電源,3.3V供電。黃色和綠色就是編碼器的AB相,硬件資源會占用定時器的ch1和ch2通道。

1.2電機驅(qū)動模塊

直流電機沒有辦法直接接在單片機上面使用,大部分的單片機引腳通過的電流在100mA左右,沒有辦驅(qū)動直流電機,同時單片機也無法承受直流電機的反饋脈沖電流強度,會導致單片機燒毀。所以單片機驅(qū)動電機時添加驅(qū)動電路來控制電機的轉(zhuǎn)動。也就是由外部電源來提供電流,驅(qū)動電機轉(zhuǎn)動。
這里使用的是L298N驅(qū)動模塊來驅(qū)動電機轉(zhuǎn)動。
stm32f103c8t6控制直流電機,STM32,stm32,單片機,嵌入式硬件,模塊測試
驅(qū)動模塊的5V連接到單片機的5V接口,L298N模塊在連接外部電源時會給單片機5V供電,L298N模塊的GND連接電池的負極以及單片機板載GND,輸出A和輸出B連接電機的正負極。
在測試模塊是否正常使用時,使能端(ENA和ENB)的跳線帽可以不拔(這樣相當于ENA、ENB接高電平,),IN1,IN2設置高低電平來讓電機轉(zhuǎn)動。當使用PWM信號控制電機轉(zhuǎn)速時,使能端的跳線帽要拔下來,同時PWM信號要輸入在使能端。

以下是L298N驅(qū)動模塊的引腳使用方法

ENA IN1 IN2 轉(zhuǎn)動
1 1 0
1 0 1
1 1 1
0 - -
ENB IN3 IN4 轉(zhuǎn)動
1 1 0
1 0 1
1 1 1
0 - -

接線如下
ENA–>PA8
ENB–>PA9
IN1–>PB12
IN2–>PB13
IN3–>PB14
IN4–>PB15
編碼器1–>PA0 PA1
編碼器2–>PA6 PA7
之后的代碼只舉例一個編碼電機,也就是編碼器2。
stm32f103c8t6控制直流電機,STM32,stm32,單片機,嵌入式硬件,模塊測試

2.軟件部分

2.1中斷配置

使用TIM4定時器進行軟件中斷,用于刷新OLED顯示stm32捕獲編碼器的速度值,單獨寫在Timer.c的文件中

#include "stm32f10x.h"                  // Device header

void Timer_Init(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);		//使能TIM4時鐘
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;				//TIM4中斷
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	//先占優(yōu)先級0級
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;			//從優(yōu)先級0級
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				//IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);								//根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設NVIC寄存器
	
	TIM_TimeBaseStructure.TIM_Period = 10000-1;				//總的值設置為0xFFFF,設定計數(shù)器自動重裝值
	TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;			//預分頻器
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				//設置時鐘分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	//TIM向上計數(shù)模式
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);				//根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位
	
	TIM_Cmd(TIM4, ENABLE);										//開啟定時器
	TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);					//開啟定時器更新中斷
}

中斷函數(shù)可以寫在Timer.c文件或者main.c文件

void TIM4_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM4, TIM_IT_Update) == SET)
	{
		//LED_ON();//用于測試是否進入中斷
		Speed1 = Encoder_Get1();
		Speed2 = Encoder_Get2();
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
	}
}

這里需要說明一下LED_ON();的函數(shù),這個函數(shù)的作用是點亮stm32f103c8t6最小系統(tǒng)板自帶的LED燈,新手在配置中斷時候可以使用這樣的方法快速檢驗是否進入中斷。

2.2編碼器模式配置

這里把TIM3配置為編碼器模式,當定時器配置為編碼器模式的時候,時鐘會被占用,無法處理其他任何工作,并且編碼器模式會占用時鐘的1和2通道。

#include "stm32f10x.h"                  // Device header

void Encoder_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//開啟時鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;//配置GPIO
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
		
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//配置時基單元
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
	
	TIM_ICInitTypeDef TIM_ICInitStructure;//配置編碼器模式
	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	//開啟編碼器模式
	TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
	
	TIM_Cmd(TIM3, ENABLE);//使能時鐘
}

int16_t Encoder_Get(void)//獲取編碼器模式讀取的值,用于OLED顯示
{
	int16_t Temp;
	Temp = TIM_GetCounter(TIM3);
	TIM_SetCounter(TIM3, 0);
	return Temp;
}

2.3主函數(shù)代碼

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "OLED.h"
#include "L298N.h"
#include "Timer.h"
#include "Encoder.h"

int16_t Speed1,Speed2;

int main(void)
{
	
	OLED_Init();
	Timer_Init();
	LED_Init();
	Encoder_Init();
	L298N_Init();
	OLED_ShowString(1, 1, "Speed1:");
	OLED_ShowString(2, 1, "Speed2:");
	
	while (1)
	{
		
		OLED_ShowSignedNum(1, 7, Speed1, 5);
		OLED_ShowSignedNum(2, 7, Speed2, 5);
		L298N_TurnText();
	}
}

void TIM4_IRQHandler(void)//中斷函數(shù)一直刷新編碼器模式捕獲的值
{
	if (TIM_GetITStatus(TIM4, TIM_IT_Update) == SET)
	{
		//LED_OFF();//用于測試是否進入中斷
		Speed1 = Encoder_Get1();
		Speed2 = Encoder_Get2();
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
	}
}

OLED顯示刷新放在中斷函數(shù)中是為了多任務考慮,如果只需要單片機顯示編碼器的值,那OLED的刷新放在主函數(shù)中就可以,但是會占用主程序的資源,單片機執(zhí)行其他任務就會有壓力。所以將OLED顯示刷新放在中斷函數(shù)中顯示

3.總結(jié)

使用stm32來捕獲編碼電機信號,主要是使用TIM_EncoderInterfaceConfig函數(shù)來開啟和配置編碼器模式。stm32的編碼器模式相關函數(shù)只有這一個。

stm32使用PWM信號控制直流電機速度會在我的其他文章中說明(還沒有更新出來),更新后我會把文章鏈接放在末尾。文章來源地址http://www.zghlxwxcb.cn/news/detail-545898.html

到了這里,關于直流減速編碼電機的使用(STM32f103c8t6)L298N電機驅(qū)動模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于STM32F103的PWM電機驅(qū)動A4950

    基于STM32F103的PWM電機驅(qū)動A4950

    A4950的峰值輸出電流可達±3.5 A,工作電壓為7.6~40v。 優(yōu)點:相對于L298N模塊控制2個電機正反轉(zhuǎn)僅需要4個I/O口,體積小,發(fā)熱低。 缺點:需要2個PWM引腳才能控制正反轉(zhuǎn),所以控制2個電機需要4PWM引腳,會使用STM32F103芯片一個定時器的全部PWM通道。 A4950模塊是靠輸入2路的PWM占空

    2024年02月04日
    瀏覽(31)
  • stm32f103單片機—編碼器測速

    stm32f103單片機—編碼器測速

    stm32f103ZET6開發(fā)板(非指定) MG513P3012V型號電機(帶霍爾編碼器)(非指定) 此種測速方法要求單片機的定時器具有編碼器模式,對于stm32f1系列,具備編碼器模式的定時器有TIM1/2/3/4/5/8, 定時器使用通道1、2來實現(xiàn)編碼器功能 ,接線時注意把A/B相接到定時器通道1/2的引腳。 電

    2024年02月06日
    瀏覽(33)
  • stm32F103單片機pwm控制伺服驅(qū)動器進而控制步進電機

    stm32F103單片機pwm控制伺服驅(qū)動器進而控制步進電機

    1.需要一臺步進電機,私服驅(qū)動器,stm32單片機;先按照說明文檔,連接好硬件相關線路,對應好sign+,sign-,puls+,puls-線路,其中sign只是個io口拉高拉低操作,puls是pwm波形輸出口,雖然有兩根線,但只是需要控制一個IO口輸出波形即可; 采用主從模式,TIM1為主定時器,tim3未從定

    2024年02月04日
    瀏覽(22)
  • 設計分享 | STM32F103RCT6利用ULN2003驅(qū)動步進電機正反轉(zhuǎn)

    設計分享 | STM32F103RCT6利用ULN2003驅(qū)動步進電機正反轉(zhuǎn)

    https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1ftoken=1923877603lang=zh_CN#rd https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a8

    2023年04月17日
    瀏覽(88)
  • 【32單片機學習】(3)霍爾編碼器減速直流電機控制及測速

    【32單片機學習】(3)霍爾編碼器減速直流電機控制及測速

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 前言 1.實驗現(xiàn)象 2.實驗接線及原理圖 接線圖 原理圖? 電機接線圖 3.代碼部分 1.主函數(shù)? main.c 2.按鍵部分? ?key.c ?key.h pwm代碼? ?pwm.c ?pwm.h 電機驅(qū)動? ?motor.c? ?motor.h ?OLED顯示 oled.c oled.h? 編碼器

    2024年02月11日
    瀏覽(36)
  • 基于stm32的減速直流電機PID算法控制

    基于stm32的減速直流電機PID算法控制

    本例程采用了HAL庫進行項目開發(fā)(主要使用軟件CubexMX和keil5),文章末尾會有代碼開源,歡迎各位對文章進行指正和探討。 ????????硬件組成:stm32f103c8t6最小系統(tǒng)板;0.96寸LED12864(I2C通訊模式);智能小車12v移動電源;25GA370直流減速電機(帶霍爾編碼器);JDY-31藍牙模塊

    2024年02月20日
    瀏覽(23)
  • J-Link使用匯總(STM32F103)

    J-Link使用匯總(STM32F103)

    內(nèi)容包括SWD硬件連接,Keil仿真設置與其問題解決, J-Flash解除寫保護與下載Hex文件及對芯片批量加密 。紫色文字是超鏈接,點擊自動跳轉(zhuǎn)至相關博文。持續(xù)更新,原創(chuàng)不易!? 一、SWD實時仿真硬件電路 1、SWD實時仿真接線 2、注意 二、仿真設置 三、仿真時問題的解決 (Keil5.

    2024年02月06日
    瀏覽(30)
  • 基于STM32單片機直流電機控制加減速正反轉(zhuǎn)系統(tǒng)proteus仿真原理圖程序

    基于STM32單片機直流電機控制加減速正反轉(zhuǎn)系統(tǒng)proteus仿真原理圖程序

    功能: 0.本項目采用STM32F103C8T6作為單片機系統(tǒng)的控制MCU 1.通過按鍵可以控制電機,正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止。 2.總共六個功能按鍵可實現(xiàn)正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停止。 3.啟停和正反轉(zhuǎn)均有指示燈,測試采用的霍爾傳感器方案 4.采用DC002作為電源接口可直接輸入5V給

    2024年02月12日
    瀏覽(38)
  • 使用STM32F103的串口實現(xiàn)IAP程序升級功能

    使用STM32F103的串口實現(xiàn)IAP程序升級功能

    ??IAP程序燒錄全過程演示: ?這幾天折騰IAP升級功能,狂補了很多相關BootLoader相關的知識。本來最想實現(xiàn)IAP升級程序的方式是,基于SPI通訊的SD卡,借助掛載的FatFS文件系統(tǒng),來實現(xiàn)對目標stm32芯片的自身程序的升級,奈何沒有實現(xiàn),只能求其次,先來通過官方現(xiàn)有的串口實

    2024年02月10日
    瀏覽(21)
  • stm32f103rct6使用內(nèi)部晶振作為時鐘源

    stm32f103rct6使用內(nèi)部晶振作為時鐘源

    stm32f103rct6(庫函數(shù)版例程)使用內(nèi)部晶振8M,倍頻64M 參考 https://blog.csdn.net/oHuanCheng/article/details/105112884 http://www.openedv.com/forum.php?mod=viewthreadtid=286233 https://blog.csdn.net/ll148305879/article/details/106138302 修改system_stm32f10x.c文件中的void SystemInit(void)函數(shù) 內(nèi)部時鐘用到了FLASH,需要添加s

    2024年02月07日
    瀏覽(1209)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包