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

SG90舵機的使用--STM32F103C8T6

這篇具有很好參考價值的文章主要介紹了SG90舵機的使用--STM32F103C8T6。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.接線

SG90帶有一個3P的接頭
根據(jù)顏色分為
sg90舵機三根線怎么接,STM32,學習,stm32,單片機,嵌入式硬件

  • 黃線(信號線)
  • 紅線(電源線)
  • 棕色 (地線)

舵機的工作電壓4.8V-6V,接在STM32系統(tǒng)板上驅(qū)動不了,所以需要接電源模塊單獨的5V供電,我使用的是如圖所示的電源模塊
sg90舵機三根線怎么接,STM32,學習,stm32,單片機,嵌入式硬件
注:
如果STM32系統(tǒng)板供電和舵機供電不為同一模塊,則需要共地,否則控制不成功!??!

2.舵機的控制

舵機的控制需要一個20ms左右的時基脈沖,該脈沖的高電平部分0.5ms到2.5ms控制舵機轉(zhuǎn)動角度0°-180°呈線性變化。

控制原理:舵機內(nèi)部有一個基準電路,產(chǎn)生周期20ms,寬度1.5ms的基準信號,通過比較器,將外加信號與基準信號相比較,判斷出方向和大小,從而產(chǎn)生電機的轉(zhuǎn)動信號。

知道原理之后,讓我們來編寫驅(qū)動代碼,首先需要一個總周期為20ms的時基脈沖,這里采用TIM3CH2(定時器3通道2)對應的GPIOB5作為輸出控制信號

首先是PWM的基礎(chǔ)配置

void TIM3_PWM_Init(u16 arr,u16 psc)//GPIOB5	
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
	TIM_OCInitTypeDef TIM_OCInitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//RCC配置GPIO,復用時鐘 ->APB2	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//TIM3->APB1
	//GPIO初始化
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;//GPIOB5 
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//設(shè)置部分重映射

	//初始化TIM3
	TIM_TimeBaseStruct.TIM_Period=arr;//定時器周期
	TIM_TimeBaseStruct.TIM_Prescaler=psc;//預分頻系數(shù)定時器周期                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
	TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上計數(shù)
	TIM_TimeBaseStruct.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
	//設(shè)置比較通道CH2
	/*
	PWM模式2- 在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為無效電平,否則為
	有效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。
	PWM模式1- 在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為
	無效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平,否則為有效電平。
	*/
	//PWM1極性高 向上記數(shù) CNT小于CCR為高電平	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;			//PWM輸出模式選擇
	TIM_OCInitStruct.TIM_Pulse=0;							//通道比較值設(shè)定,可以自己設(shè)定
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;	//極性選擇 (有效電平為高/低)
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//輸出狀態(tài)使能
	TIM_OC2Init(TIM3,&TIM_OCInitStruct);					//通道CH2 GPIOB5		
	//使能預裝載寄存器
	 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //通道CH2 GPIOB5
	//定時器使能
	TIM_Cmd(TIM3,ENABLE);
}

然后根據(jù)需要的周期設(shè)置總記數(shù)值以及分頻系數(shù)

void Sg90_Init(void){
	//舵機控制總周期要求為20ms
	//通過改變脈寬0.5ms-2.5ms代表0-180°
	TIM3_PWM_Init(2000-1,720-1);
	//2000*720/72M = 20000us = 20ms
}

然后通過改變比較值來改變舵機轉(zhuǎn)動的角度

void SetAngle(int angle){
	//angle 范圍為0-180
	if(angle >= 0 || angle <= 180){
		//總記數(shù)值為2000 比較值50-250代表0°-180°
		TIM_SetCompare2(TIM3,50+(200*angle/180));//修改定時器3通道2的比較值
	}
}

附帶一個測試函數(shù)

void Sg90_Test(void){//運行一次角度+10° 大于180°時重新從0開始
	static int n = 0;
	n += 10;
	SetAngle(n%180);	
}

main.c

sys.h為官方庫函數(shù)文件

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "sg90.h"
int main()
{
	delay_init();
	LedInit();
	Sg90_Init();	
	while(1)
	{	
		delay_ms(500);
		LED1 = ~LED1;
		Sg90_Test();		
	}
}

這里使用了板載的LED燈,監(jiān)測運行是否正常。

sg90.c

#include "sg90.h"
/*********
SG90控制
GPIOB5 
*********/
void Sg90_Init(void){
	//舵機控制總周期要求為20ms
	//通過改變脈寬0.5ms-2.5ms代表0-180°
	TIM3_PWM_Init(1999,719);
	//2000*720/72M = 20000us = 20ms

}
void TIM3_PWM_Init(u16 arr,u16 psc)//GPIOB5	
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
	TIM_OCInitTypeDef TIM_OCInitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//RCC配置GPIO,復用時鐘 ->APB2	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//TIM3->APB1
	//GPIO初始化
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;//GPIOB5 
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//設(shè)置部分重映射

	//初始化TIM3
	TIM_TimeBaseStruct.TIM_Period=arr;//定時器周期
	TIM_TimeBaseStruct.TIM_Prescaler=psc;//預分頻系數(shù)定時器周期                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
	TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上計數(shù)
	TIM_TimeBaseStruct.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
	//設(shè)置比較通道CH2
	/*
	PWM模式2- 在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為無效電平,否則為
	有效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。
	PWM模式1- 在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為
	無效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平,否則為有效電平。
	*/
	//PWM1極性高 向上記數(shù) CNT小于CCR為高電平	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;			//PWM輸出模式選擇
	TIM_OCInitStruct.TIM_Pulse=0;							//通道比較值設(shè)定,可以自己設(shè)定
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;	//極性選擇 (有效電平為高/低)
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//輸出狀態(tài)使能
	TIM_OC2Init(TIM3,&TIM_OCInitStruct);					//通道CH2 GPIOB5		
	//使能預裝載寄存器
	 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //通道CH2 GPIOB5
	//定時器使能
	TIM_Cmd(TIM3,ENABLE);
}
void SetAngle(int angle){
	//angle 范圍為0-180
	if(angle >= 0 || angle <= 180){
		//總記數(shù)值為2000 比較值50-250代表0°-180°
		TIM_SetCompare2(TIM3,50+(200*angle/180));//修改定時器3通道2的比較值
	}
}
void Sg90_Test(void){//運行一次角度+10° 大于180°時重新從0開始
	static int n = 0;
	n += 10;
	SetAngle(n%180);	
}

sg90.h

#ifndef  __SG90_H_
#define  __SG90_H_
#include "sys.h"

void Sg90_Init(void);
void SetAngle(int angle);
void Sg90_Test(void);
void TIM3_PWM_Init(u16 arr,u16 psc);
#endif //__SG90_H_

led.c

#include "led.h"
void LedInit(void)
{
	//庫函數(shù)版本
	GPIO_InitTypeDef GPIO_InitStructor;
	//開啟硬件時鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	//配置IO 推挽輸出,輸出速度
	GPIO_InitStructor.GPIO_Pin=GPIO_Pin_13;
	GPIO_InitStructor.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructor.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructor);
}

led.h

#ifndef  __LED_H_
#define  __LED_H_
#include "sys.h"
#define LED1 PCout(13)

void LedInit(void);
#endif //__LED_H_

附帶項目總體文件
點擊下載項目文件
鏈接:https://pan.baidu.com/s/1SlVU4H5foOcHIOLDQ_t5NQ?pwd=6666
提取碼:6666文章來源地址http://www.zghlxwxcb.cn/news/detail-776427.html

到了這里,關(guān)于SG90舵機的使用--STM32F103C8T6的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • STM32驅(qū)動SG90舵機

    STM32驅(qū)動SG90舵機

    SG90是一種小型伺服電機,通常用于模型制作和小型機械應用中: 問題 答案 SG90的工作電壓是多少 SG90的工作電壓通常為3V至7.2V SG90最大扭矩是多少 SG90的最大扭矩約為1.5kg/cm SG90的工作溫度范圍是多少 SG90的工作溫度范圍通常為0°C至55°C SG90的控制方式是什么 SG90的控制方式通常為

    2024年02月12日
    瀏覽(20)
  • STM32外設(shè)系列—sg90(舵機)

    STM32外設(shè)系列—sg90(舵機)

    ?? 文章作者:二土電子 ?? 關(guān)注文末公眾號獲取其他資料和工程文件! ?? 期待大家一起學習交流! 首先介紹說一下什么是舵機。舵機是一種位置(角度)伺服的驅(qū)動器。適用于一些需要角度不斷變化的,可以保持的控制系統(tǒng)。sg90就是舵機的一種。 舵機的工作原理比較簡

    2024年02月15日
    瀏覽(15)
  • STM32+SG90舵機詳解(詳細)

    STM32+SG90舵機詳解(詳細)

    上一次使用舵機只是草草了解,只大概知道是pwm控制的,這次又使用到了舵機,本以為復制上次代碼就可以調(diào)試成功,沒想到卻弄了很久。 我使用的是STM32f103c8t6,用的是定時器4。這個f1板子的定時器各個通道io口如下圖所示: 在開始之前我們要了解控制舵機需要的一個周期

    2024年02月08日
    瀏覽(17)
  • 基于STM32 SG90 9g舵機控制

    基于STM32 SG90 9g舵機控制

    產(chǎn)品參數(shù) 名稱:9克舵機180度 尺寸:23mm X 12.2mm X 29mm 重量:9克 扭矩:1.5kg/cm 工作電壓:4.2 - 6V 溫度范圍:0 - 55℃ 運行速度:0.3s/60℃ 死帶寬:10ms 舵機有三條線定義: 暗灰:GND 紅色:VCC 4.8V - 7.2V 橙黃線:脈沖輸入 在機器人機電控制系統(tǒng)中,舵機控制效果是性能的重要影響

    2024年02月14日
    瀏覽(21)
  • STM32第七課:PWM控制SG90舵機

    STM32第七課:PWM控制SG90舵機

    ????????學習完上一課的PWM控制LED小燈實現(xiàn)呼吸燈的效果,我們就可以進一步學習PWM控制舵機的效果了。PWM控制舵機相信會是一個更有意思的小實驗的。 ???????? 舵機是一種位置(角度)伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。目前在高檔

    2024年04月17日
    瀏覽(24)
  • STM32---SG90舵機控制(HAL庫,含源碼)

    STM32---SG90舵機控制(HAL庫,含源碼)

    寫在前面: 在嵌入式的項目中,舵機是一個十分常見的元器件模塊,其主要的功能是實現(xiàn)機械轉(zhuǎn)動,實質(zhì)上舵機是一個伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。例如在機器人的電控制器系統(tǒng)中,飛行器設(shè)計,遙控機器人等。舵機的使用需要PWM信號

    2024年04月13日
    瀏覽(18)
  • 小白入門STM32(2)---控制SG90舵機---基礎(chǔ)工作原理詳解

    小白入門STM32(2)---控制SG90舵機---基礎(chǔ)工作原理詳解

    本人一枚軟件編程人員,有一定C語言基礎(chǔ),目前自學STM32單片機,寫下此篇一鞏固所學二交流分享。 按照慣例,先介紹理論再實戰(zhàn)上手,穿插習題,最后給出我的愚見。 SG90屬于一種舵機,最適合小白入門,可直接由單片機驅(qū)動。另外,單片機中給我們封裝了很多東西,所以

    2023年04月10日
    瀏覽(20)
  • 關(guān)于四足行走機器人步態(tài)分析STM32+SG90舵機控制

    關(guān)于四足行走機器人步態(tài)分析STM32+SG90舵機控制

    最近逛某站看了很多國賽大佬的賽車,下面評論區(qū)一堆大佬在感嘆“老師看到賽車都搖頭?!弊鳛橐粋€初入STM32坑的萌新,我在某些站上查閱了相關(guān)資料后,確定給我自己的機器人搞成四足行走(ps,其實是L298N燒了)。 目前手上的板子是C8T6,學習的視頻是江科協(xié),主要代碼

    2024年01月21日
    瀏覽(24)
  • 【STM32單片機】STM32控制SG90舵機的PWM部分參數(shù)的設(shè)置解答

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

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

    2024年02月13日
    瀏覽(24)
  • Openmv+STM32F103C8T6視覺巡線小車

    Openmv+STM32F103C8T6視覺巡線小車

    機器視覺巡線處理是參考openmv官方代碼 Openmv官網(wǎng)源代碼:book. openmv.cc/project/follow-lines.html 根據(jù)官網(wǎng)視頻及教程將源碼注入openmv中。 小車巡的是黑線,所以顏色閾值要更改。 在文件示例中打開helloworld.py。 打開工具/機器視覺/閾值編輯器/緩沖區(qū)。 將我們需要尋跡的黑線調(diào)至全

    2023年04月09日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包