• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32驅(qū)動SG90舵機(jī)完成控制

7小時(shí)前
442
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請聯(lián)系.docx

共1個(gè)文件

一、前言

SG90舵機(jī)的工作原理主要是基于PWM脈沖寬度調(diào)制)信號來控制。 SG90舵機(jī)內(nèi)部有一個(gè)基準(zhǔn)電壓,微處理器產(chǎn)生的PWM信號通過信號線進(jìn)入舵機(jī),產(chǎn)生直流偏置電壓,與舵機(jī)內(nèi)部的基準(zhǔn)電壓做比較獲得電壓差輸出。電壓差的正負(fù)輸出到電機(jī)驅(qū)動芯片上,從而決定電機(jī)的正反轉(zhuǎn)。當(dāng)舵機(jī)開始旋轉(zhuǎn)的時(shí)候,舵機(jī)內(nèi)部通過急聯(lián)減速齒輪帶動電位器旋轉(zhuǎn),使得電壓差為零,電機(jī)停止轉(zhuǎn)動。

SG90舵機(jī)還分為180度和360度的類型,以及模擬舵機(jī)和數(shù)字舵機(jī)。模擬舵機(jī)需要不斷的發(fā)送PWM信號才能旋轉(zhuǎn)到指定的位置,而數(shù)字舵機(jī)只需要給一個(gè)目的地的PWM信號,就可以轉(zhuǎn)動到指定的位置。

在控制SG90舵機(jī)時(shí),PWM波形的頻率是50HZ,即周期為20毫秒。在這個(gè)周期內(nèi),通過控制高電平的時(shí)長,就能夠控制舵機(jī)旋轉(zhuǎn)的角度。例如,高電平為0.5毫秒時(shí),舵機(jī)旋轉(zhuǎn)到0度;高電平為2毫秒時(shí),旋轉(zhuǎn)到135度;高電平為1.5毫秒時(shí),旋轉(zhuǎn)到90度。

視頻講解:


STM32驅(qū)動SG90舵機(jī)實(shí)操(寫代碼實(shí)測)

SG90舵機(jī)的工作原理是通過接收PWM信號,控制電機(jī)的轉(zhuǎn)動,從而帶動舵機(jī)的旋轉(zhuǎn),實(shí)現(xiàn)精確的角度控制。

image-20240715151053366

下面是180°的SG90舵機(jī)商家給出的說明:寫了高電平時(shí)間與轉(zhuǎn)動的角度對應(yīng)關(guān)系。

什么樣的波形是PWM波形? 下面的圖片就是一個(gè)解釋。

image-20240715150153403

對于舵機(jī)的驅(qū)動原理: 只需要產(chǎn)生一個(gè)周期為20ms,高電平寬度為0.5ms-2.5ms的PWM方波就能驅(qū)動舵機(jī)。

180°舵機(jī) 是一次PWM波形就可以轉(zhuǎn)到指定的角度。

360°舵機(jī)需要持續(xù)發(fā)送PWM波形才可以轉(zhuǎn)動。

一個(gè)完整的PWM是由高電平和低電平組成的。 也就是一個(gè)周期內(nèi),也就是這個(gè)20ms內(nèi)。 可以自由分配 高低電平的占用時(shí)間。

這個(gè)分配 高低電平的占用時(shí)間的過程就叫:調(diào)整占空比。

只需要控制這個(gè)20ms的周期內(nèi)。高電平的時(shí)間在 0.5ms-2.5ms 范圍的內(nèi)的PWM波形。 就可以任意控制舵機(jī)轉(zhuǎn)動。 那么 0.5ms-2.5ms 之間不同的值是有什么不同的效果? 對于: 90°舵機(jī)、180°的舵機(jī) 是不一樣的。

我當(dāng)前是采用STM32F103單片機(jī)驅(qū)動的SG90舵機(jī),采用的定時(shí)器1的通道1和通道4產(chǎn)生PWM波形,控制2個(gè)SG90轉(zhuǎn)動。

定時(shí)器1的CCR1寄存器就是比較寄存器,定時(shí)器1的CNT寄存器在定時(shí)器啟動之后就會不斷的自增或自減(具體看配置),簡單的說就是,CNT寄存器是一個(gè)時(shí)間基準(zhǔn);而輸出的PWM占空比就是依靠CNT寄存器的值與CCR1寄存器的值進(jìn)行相互比較。 比誰大誰小,從而控制當(dāng)前的電平是低電平還是高電平,這個(gè)過程就是控制占空比的過程。 具體的代碼表現(xiàn)形式就是: TIM1->CCR1=xxx 。

STM32F103RCT6單片機(jī)定時(shí)器的運(yùn)行頻率是72MHZ; 如果我的定時(shí)器分頻為720,重裝載值填2000,這樣的配置,輸出的一個(gè)PWM周期就是50HZ,也就一個(gè)周期的總時(shí)間是20ms。

那么如何在代碼里,如何實(shí)現(xiàn)控制 0.5ms-2.5ms 這個(gè)范圍的高電平?

如果設(shè)置為: TIM1->CCR1=1860; 就表示 2000 -1860 = 140 = 1.4ms高電平。
如果設(shè)置為: TIM1->CCR1=1880; 就表示 2000 -1880= 120 = 1.2ms高電平。


二、程序開發(fā)

2.1 邏輯分析儀測試

寫好代碼之后,可以先用邏輯分析儀檢測一下單片機(jī)IO口輸出的PWM情況。

image-20240715151236141

如果設(shè)置為: TIM1->CCR1=1860; 就表示 2000 -1860 = 140 = 1.4ms高電平。

看下面的邏輯分析儀測量的結(jié)果:

image-20240712204524403

image-20240712204335131

2.2 舵機(jī)的驅(qū)動問題

SG90舵機(jī)驅(qū)動的時(shí)候,要給外部電源。 如果采用開發(fā)板USB供電,是帶不動2個(gè)以及2個(gè)以上的SG90舵機(jī),需要外接穩(wěn)壓電源提供足夠的電流才可以正常驅(qū)動舵機(jī)轉(zhuǎn)動。 這個(gè)一定要注意。

2.3 完整代碼

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include <string.h>
#include "timer.h"
#include <string.h>
#include <stdlib.h>


/*


STM32F103C8T6可以用的IO口:PA0-PA15, PB0-PB15, PC13-PC15



STM32F103C8T6最小系統(tǒng)板的IO口。
PB11 PB10 PB1 PB0 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PC15 PC14 PC13 
PB12 PB13 PB14 PB15 PA8 PA9 PA10 PA11 PA12 PA15 PB3 PB4 PB5 PB6 PB7 PB8 PB9



PA13(SWDIO)和PA14(SWCLK): 用作STLNK-V2下載器的-SW模式的下載口。


【】攝像頭云臺舵機(jī)
GND----------->GND
VC------------->5V
PA8------------>IO(上下控制舵機(jī))-定時(shí)器1的PWM-CH1
PA11---------->IO (左右控制舵機(jī))-定時(shí)器1的PWM-CH4


*/



//舵機(jī)停止
void motor_Ctrl_Up_Down_stop(void)
{
    TIM1->CCR1=1850;	      //改變占空比
}

//舵機(jī)停止
void motor_Ctrl_Left_Right_stop(void)
{
    TIM1->CCR4=1850;	      //改變占空比
}


//舵機(jī)開始轉(zhuǎn)動: 正向
void motor_Ctrl_Up_Down_1(void)
{
    TIM1->CCR1=1860;	      //改變占空比
}


//舵機(jī)開始轉(zhuǎn)動: 反向
void motor_Ctrl_Up_Down_2(void)
{
    TIM1->CCR1=1840;	      //改變占空比
}


//舵機(jī)開始轉(zhuǎn)動: 正向
void motor_Left_Right_Down_1(void)
{
    TIM1->CCR4=1860;	      //改變占空比
}


//舵機(jī)開始轉(zhuǎn)動: 反向
void motor_Left_Right_Down_2(void)
{
    TIM1->CCR4=1840;	      //改變占空比
}



//JTAG模式設(shè)置,用于設(shè)置JTAG的模式
//mode:jtag,swd模式設(shè)置;00,全使能;01,使能SWD;10,全關(guān)閉;	   
#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00		  
void JTAG_Set(u8 mode)
{
	u32 temp;
	temp=mode;
	temp<<=25;
	RCC->APB2ENR|=1<<0;     //開啟輔助時(shí)鐘	   
	AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
	AFIO->MAPR|=temp;       //設(shè)置jtag模式
}

void set_pwm_1(float ms)
{
    if(ms >20)
    {
        ms=20;
    }
    TIM1->CCR1=2000-(ms*100);
}


void set_pwm_4(float ms)
{
    if(ms >20)
    {
        ms=20;
    }
    TIM1->CCR4=2000-(ms*100);
}


int main()
{
    //開啟STLINK_SWD下載模式
    JTAG_Set(SWD_ENABLE);
    
    //串口1初始化,用于打印
    USART1_Init(115200);
    printf("STM32串口1初始化成功.rn");
      
    
    //初始化定時(shí)器1,輸出PWM,通道1、4,控制SG90舵機(jī)
    //一個(gè)周期20ms 
    TIM1_PWM_Init(2000,720); //計(jì)數(shù)頻率  單脈沖+重復(fù)計(jì)數(shù)模式	
    
    //轉(zhuǎn)動到0°
    set_pwm_1(0.5);
    set_pwm_4(0.5);
    
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
   
   
    while(1)
    {  
        
        //轉(zhuǎn)動到90°
        set_pwm_1(1.5); //第一個(gè)先轉(zhuǎn)90
        set_pwm_4(2.5); //第二個(gè)再轉(zhuǎn)180

        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);

        set_pwm_1(0.5); //之后第一個(gè)再轉(zhuǎn)到0。
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        
        set_pwm_1(1.5); //然后第一個(gè)再賺到90。
        
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        
        set_pwm_4(0.5);//然后第二個(gè)再占到零。
        
        delay_ms(1000);
        delay_ms(1000);
         delay_ms(1000);
        delay_ms(1000);
        
        set_pwm_1(0.5); //然后第一個(gè)在轉(zhuǎn)到零。
        
        delay_ms(1000);
        delay_ms(1000);
         delay_ms(1000);
        delay_ms(1000);
    }
}
  • 更多詳細(xì)資料請聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦