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

12.[STM32]PWM脈寬調(diào)制-舵機控制(一篇足以)

這篇具有很好參考價值的文章主要介紹了12.[STM32]PWM脈寬調(diào)制-舵機控制(一篇足以)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??
????
作者簡介:大家好啊,我叫DW,每天分享一些我新學(xué)到的知識,期待和大家一起進步
??
????
系列專欄:STM32
??
????
??????
??小實驗?zāi)繕?biāo):控制舵機旋轉(zhuǎn)??
??如有寫得不好的地方歡迎大家指正??
創(chuàng)作時間:??????2022年5月2日??????

1. 舵機簡介

在機器人機電控制系統(tǒng)中,舵機控制效果是性能的重要影響因素。舵機可以在微機電系統(tǒng)和航模中作為基本的輸出執(zhí)行機構(gòu),其簡單的控制和輸出使得單片機系統(tǒng)非常容易與之接口。
舵機是一種位置(角度)伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。目前在高檔遙控玩具,如航模,包括飛機模型,潛艇模型;遙控機器人中已經(jīng)使用得比較普遍。舵機是一種俗稱,其實是一種伺服馬達。
12.[STM32]PWM脈寬調(diào)制-舵機控制(一篇足以)
本次實驗使用的舵機是MG90S。

1.1 舵機控制

舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內(nèi)的角度控制脈沖部分。以180度角度伺服為例,那么對應(yīng)的控制關(guān)系是這樣的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;

因此,我們只需要讓IO口產(chǎn)生相應(yīng)的脈寬就可以控制舵機的角度。如何產(chǎn)生PWM波:11.[STM32]PWM脈寬調(diào)制-呼吸燈

2. 占空比調(diào)節(jié)函數(shù)

PWM占空比的調(diào)節(jié)通過TIM_SetCompare函數(shù)進行相應(yīng)調(diào)節(jié)。通過查找資料,我們可以知道有
TIM_SetCompare1
TIM_SetCompare2
TIM_SetCompare3
TIM_SetCompare4
共四個,它們分別可以控制著CH1-CH4的占空比。

函數(shù)原形:
void TIM_SetCompare1(TIM_TypeDef* TIMx, u16 Compare1)

第一個參數(shù)傳入相應(yīng)定時器,本次實驗選擇TIM3的CH1,故選擇TIM_SetCompare1、TIM3。
第二個參數(shù)是捕獲比較 1 寄存器新值,即定時時間。

例如,我們想要控制舵機旋轉(zhuǎn),需要產(chǎn)生周期為20ms的脈沖,其操作如下:

 PWM_UserConfig(200-1,7200-1);//50hz 20ms  72000   
 //72 000 000/7200=10 000 Hz
 //10 000*0.020=200 

每次進入中斷服務(wù)程序間隔時間為:時間=1/頻率×次數(shù)

重裝載值Period為200,也就是計數(shù)到200產(chǎn)生一個更新事件或者中斷(定時到了)。
計算過程:
時間=1/頻率×次數(shù) ,次數(shù)=時間x頻率=0.020(20ms)x10 000=200

 PWM_UserConfig(200-1,7200-1);

那么,我們想要產(chǎn)生1ms的脈寬該如何操作呢?
x=10 000hz*0.001=10,即Compare1=10,就可以實現(xiàn)舵機旋轉(zhuǎn)45°。

TIM_SetCompare1(TIM3,10)

按照這個方法我們可以計算出其他對應(yīng)的角度:

TIM_SetCompare1(TIM3,5);//0°
TIM_SetCompare1(TIM3,10);//45°
TIM_SetCompare1(TIM3,15);//90°
TIM_SetCompare1(TIM3,20);//135°
TIM_SetCompare1(TIM3,25);//180°

3.結(jié)語

今天的分享就到這里,謝謝大家的耐心閱讀,如果覺得有用的話給個??????

??????本章結(jié)束,我們下一章見??????

參考資料:
1.STM32固件庫手冊
2.正點原子STM32不完全手冊_庫函數(shù)版本
3.學(xué)習(xí)視頻鏈接

資料已上傳,需要自取文章來源地址http://www.zghlxwxcb.cn/news/detail-414539.html

附錄:全部程序

//main.c
#include "sys.h"
#include "delay.h"
#include "pwm.h"


 int main(void)
 {		
	 
	 //u8 flag = 0,time = 0;
	 
	 delay_init();
	 PWM_UserConfig(200-1,7200-1);//50hz 20ms  72000   
	 
	 while(1){
		 
			TIM_SetCompare1(TIM3,5);//0
		 delay_ms(500);
		 TIM_SetCompare1(TIM3,10);//45
		 delay_ms(500);
		  // TIM_SetCompare1(TIM3,15);//90
			//TIM_SetCompare1(TIM3,20);//135
			//TIM_SetCompare1(TIM3,25);//180
		  //DuoJi();
		 
 }
}
 
//pwm.c
#include "pwm.h"



void PWM_UserConfig(u16 Period,u16 Prescaler){
	
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_InitStructure;
	TIM_OCInitTypeDef PWM_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	
	//PA1 TIM2_CH2
	GPIO_InitStructure.GPIO_Pin = CH1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復(fù)用推挽輸出
	GPIO_Init(PWM_PROT,&GPIO_InitStructure);
	
	TIM_InitStructure.TIM_Period = Period;
	TIM_InitStructure.TIM_Prescaler = Prescaler;
	TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//不分割
	TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上計數(shù)
	TIM_InitStructure.TIM_RepetitionCounter = DISABLE;//不重復(fù)計數(shù)
	TIM_TimeBaseInit(TIM3,&TIM_InitStructure);
	TIM_Cmd(TIM3,ENABLE);//開啟全局使能

	//PWM配置
	PWM_InitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	PWM_InitStructure.TIM_OutputState = TIM_OutputState_Enable;//輸出使能
	PWM_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//輸出極性高
	TIM_OC1Init(TIM3,&PWM_InitStructure);//通道幾就選oc幾
	
	TIM_OC1PreloadConfig(TIM3,ENABLE);//預(yù)裝在寄存器 
	TIM_SetCompare1(TIM3,0);//控制占空比
}
void DuoJi(void){

	u16 com[] = {5,10,15,20,25,20,15,10,5};
	
	for(u8 i = 0;i<9;i++){
	
		TIM_SetCompare1(TIM3,com[i]);
		delay_ms(500);
	
	}
}

//pwm.h
#ifndef __PWM_H
#define __PWM_H

#include "sys.h"
#include "delay.h"

#define CH1 GPIO_Pin_6
#define PWM_PROT GPIOA

void PWM_UserConfig(u16 Period,u16 Prescaler);
void DuoJi(void);
#endif



到了這里,關(guān)于12.[STM32]PWM脈寬調(diào)制-舵機控制(一篇足以)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 單片機中的PWM(脈寬調(diào)制)的工作原理以及它在電機控制中的應(yīng)用。

    單片機中的PWM(脈寬調(diào)制)的工作原理以及它在電機控制中的應(yīng)用。

    目錄 工作原理 在電機控制中的應(yīng)用 脈寬調(diào)制(PWM)是一種在單片機中常用的控制技術(shù),它通過調(diào)整信號的脈沖寬度來控制輸出信號的平均電平。PWM常用于模擬輸出一個可調(diào)電平的數(shù)字信號,用于控制電機速度、亮度、電壓等。 ? 產(chǎn)生PWM信號: 單片機內(nèi)部的定時器/計數(shù)器通

    2024年01月23日
    瀏覽(34)
  • 用STM32CubeMX配置輸出PWM信號控制多路舵機(HAL)

    用STM32CubeMX配置輸出PWM信號控制多路舵機(HAL)

    (1)編程平臺:Keil5 (2)CubeMX (1)本此使用最小核心板STM32F103C8T6為例 (2)一個舵機:SG90或者MG996等均可 (3)ST-link 下載器 (4)杜邦線若干 ????????舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內(nèi)的角度控制脈沖部分,總間隔為2ms。以180度角度

    2023年04月09日
    瀏覽(26)
  • 【STM32單片機】STM32控制SG90舵機的PWM部分參數(shù)的設(shè)置解答

    【STM32單片機】STM32控制SG90舵機的PWM部分參數(shù)的設(shè)置解答

    我們要知道,SG90舵機接收的PWM信號的參數(shù):f=50Hz,T=1/f,所以周期為20ms。 當(dāng)高電平的脈寬在0.5ms-2.5ms之間時舵機就可以對應(yīng)旋轉(zhuǎn)到不同的角度。 換句話說,我們要用單片機產(chǎn)生一個 周期(20ms) 的PWM波,然后獲得對應(yīng)這些時長(分別是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高電

    2024年02月13日
    瀏覽(24)
  • 藍橋杯STM32 G431 hal庫開發(fā)速成——按鍵+PWM綜合案例——按鍵控制PWM驅(qū)動舵機

    藍橋杯STM32 G431 hal庫開發(fā)速成——按鍵+PWM綜合案例——按鍵控制PWM驅(qū)動舵機

    適用于學(xué)習(xí)了TIM輸出比較(PWM)跟GPIO輸入(按鍵)的新手作為練習(xí)的綜合項目! PWM(Pulse Width Modulation,脈沖寬度調(diào)制)是一種常用的技術(shù),用于通過調(diào)節(jié)電信號的脈沖寬度(即脈沖的持續(xù)時間)來控制模擬系統(tǒng)的電源。在數(shù)字電子系統(tǒng)中,由于只能輸出固定的高(通常為

    2024年01月21日
    瀏覽(38)
  • stm32 筆記 PWM輸入模式測量脈寬和占空比原理

    stm32 筆記 PWM輸入模式測量脈寬和占空比原理

    在測量占空比之前,我們先一步一步來,先讓 STM32 可以測量脈寬。 TIM3_CH1(tim3 定時器通道 1)捕獲模式測量脈寬步驟如下: 1.輸入捕獲到 PWM 上升沿觸發(fā) 2.發(fā)送中斷,通知用戶此時被觸發(fā),用戶獲得當(dāng)前計數(shù)器值 3.計數(shù)器清零,然后繼續(xù)計數(shù)... 讓 STM32 芯片一直重復(fù)這三步即

    2024年01月15日
    瀏覽(18)
  • 【FPGA基礎(chǔ)】基于PWM脈寬調(diào)制的呼吸燈設(shè)計(Vivado)

    【FPGA基礎(chǔ)】基于PWM脈寬調(diào)制的呼吸燈設(shè)計(Vivado)

    軟件:Vivado2019.1 硬件:Zynq7010 仿真:Vivado Simulator 眾所周知,燈的亮度和加在其兩端的電壓有關(guān)。電壓越高,亮度越亮,反之越暗。 于是,設(shè)計一個呼吸燈就變得很簡單了。讓IO的輸出電平由低到高,再有高到底有規(guī)律的變化,就能達到呼吸效果。 現(xiàn)在問題來了,IO的輸出電

    2024年02月07日
    瀏覽(45)
  • FPGA綜合設(shè)計實驗:基于PWM脈寬調(diào)制的呼吸流水燈設(shè)計

    目錄 一、引言 二、項目準(zhǔn)備 1.項目預(yù)期目標(biāo) 2.項目原理及總體實現(xiàn)思路

    2024年02月13日
    瀏覽(23)
  • 【STM32】PWM:脈沖寬度調(diào)制

    【STM32】PWM:脈沖寬度調(diào)制

    注意點: TIM_Period----指要進行比較的值Compare TIM_Prescaler---- 指要進行分頻的值【分頻值/原始時鐘值】 PWM是一種 周期固定,脈寬可 調(diào)整 的輸出波形。 1) 在程序員寫入CCR1(比較值)的時候,值是不會傳輸?shù)接白蛹拇嫫髦械?2)影子寄存器百年直接被訪問 有8種輸出模式 PWM輸出

    2024年02月22日
    瀏覽(22)
  • STM32使用PWM(脈沖寬度調(diào)制)

    STM32使用PWM(脈沖寬度調(diào)制)

    脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出(1或0)來對模擬電路進行控制的一種非常有效的技術(shù)。 PWM應(yīng)用場景如下: 占空比:占空比是指在一個脈沖循環(huán)內(nèi),通電時間(可能是高電平,可能是低電平)相對于總時間所

    2024年02月13日
    瀏覽(20)
  • STM32之17.PWM脈沖寬度調(diào)制

    STM32之17.PWM脈沖寬度調(diào)制

    ?一·LED0脈沖寬度調(diào)制在TIM14_CHI,先將LED(PF9)代碼配置為AF推挽輸出模式,將PF9引腳連接到TIM14, ? ?二·在配置TIM14定時器脈沖寬度 調(diào)動比較值1-100內(nèi),越小燈越亮 如果PWM信號的頻率很高,比如大于80Hz,那么人眼就無法感知到燈的閃爍,而只能感知到燈的亮度。這時候,占

    2024年02月11日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包