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

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

這篇具有很好參考價(jià)值的文章主要介紹了STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本章節(jié)主要講解直流減速電機(jī)控制原理,電機(jī)驅(qū)動(dòng)電路,以及如何使用PWM控制直流減速電機(jī)

前言

1.軟件準(zhǔn)備:STM32CubeMx、Keil5_?MDK

2.硬件準(zhǔn)備:STM32F103C8T6核心板、TB6612電機(jī)驅(qū)動(dòng)模塊/L298N電機(jī)驅(qū)動(dòng)、18650鋰電池3節(jié)/3S航模電池、杜邦線若干

直流減速電機(jī)

? ? ? ?圖2-1為市場(chǎng)上常用直流減速電機(jī)的圖片,減速電機(jī)由直流電機(jī)加上減速齒輪構(gòu)成。減速齒輪決定減速電機(jī)的減速比,減速比大電機(jī)轉(zhuǎn)速越慢,力矩越大。減速電機(jī)一般驅(qū)動(dòng)電壓有 12V 和 24V 的,驅(qū)動(dòng)電壓越大同樣減速比減速電機(jī)對(duì)應(yīng)的力矩也就越大,同時(shí)耗電電流也會(huì)增加。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

? ? ? ?下圖為某廠家 370減速電機(jī)的參數(shù)表,我們可以從表中看出與減速電機(jī)減速比和驅(qū)動(dòng)電壓相對(duì)應(yīng)的力矩、電流等參數(shù)的相關(guān)關(guān)系。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

? ? ? ?直流電機(jī)有兩個(gè)引腳,當(dāng)我們正向給電機(jī)正向通電時(shí)電機(jī)正轉(zhuǎn),當(dāng)我們反向給電機(jī)通電時(shí)電機(jī)反轉(zhuǎn)。如圖 2-3 所示為,當(dāng)電機(jī)的 1 腳施加正極,2 腳施加負(fù)極時(shí)電機(jī)正轉(zhuǎn);電機(jī)的 2 腳施加正極,1 腳施加負(fù)極電機(jī)反轉(zhuǎn)。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

?直流電機(jī)調(diào)速

???????對(duì)于電機(jī)的調(diào)速我們需要通過(guò)脈沖寬度調(diào)制(Pulse width modulation,PWM)來(lái)實(shí)現(xiàn),PWM 的占空比為高電平占整個(gè)調(diào)制周期的時(shí)間比例。
???????如圖 2-4 所示為脈沖寬度調(diào)制的的原理圖示,比如高電平時(shí)間為 8ms,低電平時(shí)間為 2ms時(shí),這是整個(gè)脈寬周期是為 10ms,占空比即為 80%。我們通過(guò)此波形來(lái)控制電機(jī)即可實(shí)現(xiàn)電機(jī)的速度控制,且占空比越高的話,高電平的比例越高,則電機(jī)速度就會(huì)越快,反之就越慢,一般PWM的頻率應(yīng)大于 1KHZ。當(dāng)然單片機(jī)引腳產(chǎn)生的這個(gè) PWM 波形肯定是不可能直接驅(qū)動(dòng)電機(jī)的,中間需要使用驅(qū)動(dòng)電路。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

? ? ? ? 圖 2-5 左為單向電機(jī)驅(qū)動(dòng)電路,PWM 引腳為高電平時(shí) N 溝道 MOS 管導(dǎo)通,如果把電機(jī)看成電阻的話,這是電機(jī)兩端電壓應(yīng)該為 12V,PWM 引腳為低電平時(shí) N 溝道 MOS管截止,電機(jī)兩端電壓應(yīng)該為 0V。但實(shí)際電機(jī)并不能看成電阻

? ? ? ? 圖 2-5 右的電路等效為右邊的電路,我們可以把電機(jī)看成一個(gè)電感,我們知道電感有儲(chǔ)能的作用,所以當(dāng) MOS管截止電感會(huì)釋放能量,所以電機(jī)兩端電壓并不是 0V。

? ? ? ? 同樣當(dāng) MOS 管導(dǎo)通時(shí)電感會(huì)吸收能量,所以電機(jī)兩端電壓也并不是 12V。而是與 PWM 占空比相關(guān),電機(jī)兩端電壓應(yīng)該為??????=??????????,??????為電機(jī)實(shí)際電壓,????????為占空比,???????為給電機(jī)供電電壓。

? ? ? ? 如果 PWM占空比為 80%,電機(jī)供電電壓為 12V 的話,此時(shí)電機(jī)的實(shí)際電壓應(yīng)為 9.6V,所以調(diào)PWM 占空比調(diào)節(jié)電機(jī)轉(zhuǎn)速也就是調(diào)節(jié)電機(jī)兩端電壓調(diào)節(jié)電機(jī)轉(zhuǎn)速。但是PWM 脈沖周期需要小于電感儲(chǔ)放能的時(shí)間。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

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

? ? ? ? 一般我們控制電機(jī)需要控制電機(jī)的正反轉(zhuǎn),一個(gè) MOS 管并不能滿足我們的需求,所以我們需要通過(guò) H 橋電路來(lái)實(shí)現(xiàn),H 橋需要 4 個(gè) MOSFET,這樣電路設(shè)計(jì)起來(lái)比較麻煩。市場(chǎng)上有幫我們搭建好的 H 橋電機(jī)驅(qū)動(dòng)芯片,這里我們用到的驅(qū)動(dòng)芯片為TB6612FNG,如下圖所示,
TB6612FNG介紹 ?
? ? ? ? 單片機(jī)引腳的電流一般只有幾十個(gè)毫安,無(wú)法驅(qū)動(dòng)電機(jī),因此一般是通過(guò)單片機(jī)控制電機(jī)驅(qū)動(dòng)芯片進(jìn)而控制電機(jī)。TB6612是比較常用的電機(jī)驅(qū)動(dòng)芯片之一。

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

? ? ? ? TB6612FNG可以同時(shí)控制兩個(gè)電機(jī),工作電流1.2A,最大電流3.2A。

AIN1/2、BIN1/2接單片機(jī)的GPIO口。PWMA/B接單片機(jī)的定時(shí)器口(配置為定時(shí)器PWM)。AO1/2、BO1/2接電機(jī)的正負(fù)極。

? ? ? ? PWMA、AIN1/2、AO1/2為一組驅(qū)動(dòng)一個(gè)電機(jī), PWMB、BIN1/2、BO1/2為一組驅(qū)動(dòng)另一個(gè)電機(jī)。

? ? ? ? STBY為正常工作、待機(jī)狀態(tài)控制引腳,一般接3.3V電即可。VM為電機(jī)驅(qū)動(dòng)電壓輸入(<12V,可接3S鋰電池),VCC為邏輯電平輸入端(2.7V~5.5V)。

用戶可通過(guò)配置AIN1/2、BIN1/2的電平狀態(tài)控制電機(jī)轉(zhuǎn)向,如下圖TB6612電機(jī)驅(qū)動(dòng)真值表,

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

? ? ? ?我們將VM和GND接入電源正極(6~12V,一般2-3節(jié)鋰電池)和負(fù)極(GND需要與主控板共地),PWMA接入主控板上PA6端口,AIN1接入主控板的PB12端口,AIN2接入主控板的PB13端口,STBY接入3.3V,AO1和AO2接入電機(jī)的正負(fù)極。

電機(jī)驅(qū)動(dòng)程序?qū)崿F(xiàn)

定時(shí)器配置和GPIO配置均通過(guò)STM32CUBEMX配置,本此教程不再贅述,詳細(xì)請(qǐng)見以往PWM配置教程STM32CubeMx使用教程(五)—— 使用PWM控制蜂鳴器演唱孤勇者

STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)

GPIO配置

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);

  /*Configure GPIO pins : PB12 PB13 PB14 PB15 */
  GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

PWM配置

void MX_TIM3_Init(void)
{

  /* USER CODE BEGIN TIM3_Init 0 */

  /* USER CODE END TIM3_Init 0 */

  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  /* USER CODE BEGIN TIM3_Init 1 */

  /* USER CODE END TIM3_Init 1 */
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 72-1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 1000-1;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM3_Init 2 */

  /* USER CODE END TIM3_Init 2 */
  HAL_TIM_MspPostInit(&htim3);

}

電機(jī)控制代碼

/**************************************************************************
函 數(shù) 名:void motor_ctrl(int16_t left_speed,int16_t right_speed)
功    能:電機(jī)速度設(shè)定函數(shù)
入口參數(shù):left_speed左電機(jī)速度 right_speed右電機(jī)速度
**************************************************************************/
void motor_ctrl(int16_t left_speed,int16_t right_speed)
{
	if(left_speed>=0) //左電機(jī)速度大于0時(shí),電機(jī)正轉(zhuǎn)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
	}
	else 	//電機(jī)反轉(zhuǎn)					    			
	{		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
  }
	
	if(right_speed>=0)  
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);
	}
	else 						    			
	{		
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);
  }
	
	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, abs(left_speed));//將速度占空比賦給電機(jī)
	__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, abs(right_speed);
}

主函數(shù)?

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
		HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//開啟定時(shí)器PWM
		HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		motor_ctrl(500,-500);
		HAL_Delay(5000);
		motor_ctrl(-500,500);
		HAL_Delay(5000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

具體實(shí)現(xiàn)

可以觀察到當(dāng)速度正反改變,電機(jī)轉(zhuǎn)動(dòng)方向也會(huì)改變。

PWM控制電機(jī)調(diào)速文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-452968.html

到了這里,關(guān)于STM32循跡小車系列教程(一)—— 使用PWM控制電機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32實(shí)戰(zhàn)項(xiàng)目系列教程 (一)—— 循跡小車

    以往我們看到很多學(xué)習(xí)單片機(jī)知識(shí)的教程往往是從 單片機(jī)內(nèi)部資源 出發(fā),這樣的教程原理往往晦澀難懂,初學(xué)者很難系統(tǒng)的學(xué)習(xí)開發(fā)單片機(jī)的項(xiàng)目。 而本次教程是 從項(xiàng)目出發(fā) 教你學(xué)習(xí)循跡小車的制作,整個(gè)項(xiàng)目采用 STM32 單片機(jī)作為控制器來(lái)實(shí)現(xiàn),所以在學(xué)習(xí)前需要大家有

    2024年02月11日
    瀏覽(15)
  • STM32單片機(jī)PWM控制實(shí)現(xiàn)電機(jī)調(diào)速度(小車運(yùn)動(dòng),STM32F103C8T6&TB6612&TT電機(jī))

    STM32單片機(jī)PWM控制實(shí)現(xiàn)電機(jī)調(diào)速度(小車運(yùn)動(dòng),STM32F103C8T6&TB6612&TT電機(jī))

    作者:公子易平 時(shí)間:2023/6/6 前段時(shí)間做一個(gè)智能小車的相關(guān)項(xiàng)目時(shí),發(fā)現(xiàn)很少有人能夠?qū)TM32的PWM控制講清楚,故而書此文,希望對(duì)后來(lái)的學(xué)習(xí)者有所幫助。 STM32F103C8T6最小系統(tǒng)板 直流TT電機(jī) 電機(jī)驅(qū)動(dòng)芯片(TB6612) 杜邦線若干 接線情況: TB6612引腳說(shuō)明: STM32主控芯片與TB6612接

    2024年02月15日
    瀏覽(30)
  • 基于stm32的智能小車(遠(yuǎn)程控制、避障、循跡)

    基于stm32的智能小車(遠(yuǎn)程控制、避障、循跡)

    學(xué)完stm32,總是想做點(diǎn)東西“大顯身手”一下,智能小車就成了首選項(xiàng)目,其核心只是就是PWM輸出,I/O口引腳電平判斷。 制作智能小車的硬件名單: 由于我們做的控制功能可以使用2.4G控制,也可以使用藍(lán)牙進(jìn)行控制, 兩種傳輸方式所需購(gòu)買的模塊不同,已在硬件名單中加以

    2024年02月03日
    瀏覽(37)
  • stm32循跡小車教程(保姆級(jí)教程)

    stm32循跡小車教程(保姆級(jí)教程)

    ? ? ? ? ? ? ? ? 我歷時(shí)四周終于制作完成原理圖設(shè)計(jì),原件焊接,代碼測(cè)試,賽道循跡。在此,我要十分感謝在我制作過(guò)程中給予過(guò)幫助的所有人。首先明確小車使用主控芯片為stm32f103c8t6。 ? ? ? ? ? ? ? ? 制作小車要用的軟件有:嘉立創(chuàng)EDA ? ? ? ? ? ? ? ? 首先明確一

    2024年02月02日
    瀏覽(21)
  • (STM32)PWM輸出控制電機(jī)旋轉(zhuǎn)并且使用編碼器讀取脈沖數(shù)

    (STM32)PWM輸出控制電機(jī)旋轉(zhuǎn)并且使用編碼器讀取脈沖數(shù)

    目錄 ?前言 一、pwm輸出讓電機(jī)轉(zhuǎn)? 1.電機(jī)的接線說(shuō)明 2.驅(qū)動(dòng)的接線說(shuō)明 3.pwm輸出代碼 ?pwm.c pwm.h 4.輸出pwm控制電機(jī)旋轉(zhuǎn) 二、配置定時(shí)器編碼器模式 1.定時(shí)器編碼器模式 編碼器原理 編碼器相關(guān)的概念 2.編碼器模式——代碼部分 3.獲取脈沖數(shù) 三、定時(shí)讀取編碼器讀取的脈沖數(shù)

    2024年02月03日
    瀏覽(29)
  • STM32智能小車循跡教程

    STM32智能小車循跡教程

    本篇文章將帶大家學(xué)習(xí)STM32智能小車的循跡功能。 電路工作描述 以其中一路為例 TCRT5000傳感器的紅外發(fā)射二極管不斷發(fā)射紅外線,當(dāng)發(fā)射的紅外線沒(méi)有被反射回來(lái)或者反射回的強(qiáng)度不夠大時(shí),紅外接收管一直處于關(guān)閉狀態(tài),此時(shí)比較器LM393的2腳的電壓低于3腳的電壓,輸出O

    2023年04月08日
    瀏覽(20)
  • STM32PWM控制直流電機(jī)

    STM32PWM控制直流電機(jī)

    PWM介紹 脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫,簡(jiǎn)稱脈寬調(diào)制,是利用 微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。簡(jiǎn)單一點(diǎn),就是對(duì)脈沖寬 度的控制 PWM的原理: 假定定時(shí)器工作在向上計(jì)數(shù) PWM 模式,且當(dāng) CNT=CCRx 時(shí)輸出 1。那么就可以

    2024年02月08日
    瀏覽(17)
  • STM32第八課:PWM控制直流電機(jī)

    STM32第八課:PWM控制直流電機(jī)

    ????????TB6612FNG是一款新型驅(qū)動(dòng)器件,能獨(dú)立雙向控制2個(gè)直流電機(jī),它具有很高的集成度,同時(shí)能提供足夠的輸出能力,運(yùn)行性能和能耗方面也具有優(yōu)勢(shì)因此在集成化、小型化的電機(jī)控制系統(tǒng)中,它可以作為理想的電機(jī)驅(qū)動(dòng)器件。 ??????????????????????????

    2024年03月24日
    瀏覽(21)
  • 搭建stm32電機(jī)控制代碼框架(五)——Stm32CubeMx配置PWM

    搭建stm32電機(jī)控制代碼框架(五)——Stm32CubeMx配置PWM

    采樣配置完成后,進(jìn)行PWM的配置。PWM的生成依賴于STM32的TIM1定時(shí)器,其功能完備如下圖所示,電機(jī)控制中主要應(yīng)用其PWM生成功能。 我們當(dāng)前階段的目標(biāo)是生成占空比為50%的三路PWM,其開關(guān)頻率為10kHz。 那么開始CubeMx的配置,依據(jù)stm32f405數(shù)據(jù)手冊(cè)中地址總線部分內(nèi)容,TIM1是掛

    2024年02月16日
    瀏覽(27)
  • 搭建stm32電機(jī)控制代碼框架(四)——單路PWM生成

    搭建stm32電機(jī)控制代碼框架(四)——單路PWM生成

    STM32中單路PWM的生成一般是基于某一個(gè)通用定時(shí)器,本次小實(shí)驗(yàn)選取TIM2通用定時(shí)器,選擇PA5作為PWM端口輸出。配置步驟如下: 第一步:配置外部晶振與基本的時(shí)鐘,如下圖所示。 (1)選擇外部晶振 ?(2)配置時(shí)鐘樹,如下圖所示,TIM2的時(shí)鐘總線掛在ABP1上,此時(shí)時(shí)鐘源為

    2024年02月07日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包