STM32之SG90舵機控制(附視頻講解)

目錄

前言:

一、硬件準備與接線

1.1 硬件清單

1.2 接線

二、 SG90舵機簡介

1.1 外觀

?1.2 基本參數

1.3 引腳說明?

1.4 控制原理

1.5 特點

1.6 常見問題

三、 單片機簡介

四、 程序設計?

4.1 定時器配置

4.2 角度控制函數

4.3 主函數調用

五、 總結


前言:

STM32F103C8T6?是一款性價比極高的ARM Cortex-M3內核微控制器,廣泛應用于嵌入式開發。SG90舵機?則是小型舵機的代表,常用于機器人、智能家居等場景。本文將通過硬件連接、PWM信號配置、代碼實現等步驟,詳細講解如何用STM32F103C8T6控制SG90舵機。

視頻講解鏈接:

STM32之SG90舵機教學(附源碼)

一、硬件準備與接線

1.1 硬件清單

器件數量備注
STM32F103C8T6最小系統板1核心控制器
SG90舵機1工作電壓4.8-6V,信號線需PWM
5V電源模塊1獨立供電,避免板載電流不足
杜邦線若干連接電路

1.2 接線

SG90舵機?????????? STM32F103C8T6??????? 外部電源

棕色線(GND)? →??? GND引腳??????????? →? GND
紅色線(VCC)? →? ? 連外部5V? ? ? ? ? ? ?→? 5V
橙色線(信號)???→??? PB0(TIM3_CH3)

注意:若需驅動多個舵機,建議使用獨立電源供電,避免STM32板載電源過載。

二、 SG90舵機簡介

1.1 外觀

?1.2 基本參數

參數數值
工作電壓4.8V - 6V(典型5V)
電流消耗100mA(空閑),250mA(運行)
扭矩1.2kg·cm(4.8V),1.6kg·cm(6V)
轉速0.12秒/60°(4.8V),0.10秒/60°(6V)
重量9克
尺寸22.2mm × 11.8mm × 31mm
轉動角度180°(部分型號支持360°)
齒輪材質塑料(部分型號為金屬齒輪)
接口類型3針(信號、電源、地)

1.3 引腳說明?

SG90舵機通常有3根線

棕色線(GND):接地。

紅色線(VCC):接電源(4.8V-6V)。

橙色線(信號線):接收PWM信號控制角度。

1.4 控制原理

PWM信號控制

  • 信號周期:20ms(50Hz)。

  • 脈沖寬度:0.5ms - 2.5ms,對應角度0° - 180°。

1.5 特點

優點

  • 體積小、重量輕:適合空間受限的項目。

  • 價格低廉:成本低,適合批量使用。

  • 易于控制:標準PWM信號接口,兼容性強。

缺點

  • 扭矩較小:僅適合輕負載場景。

  • 塑料齒輪易磨損:長時間高負載工作可能導致損壞。

1.6 常見問題

1)舵機抖動或不轉動

  • 檢查電源電壓是否足夠。

  • 檢查PWM信號是否正確。

2)?舵機發熱嚴重

  • 檢查是否超負荷運行。

  • 確保轉動范圍內無機械卡阻。

3)?角度不準確

  • 校準PWM信號脈沖寬度。

  • 檢查舵機齒輪是否磨損。

三、 單片機簡介

STM32F103C8T6最小系統板:

本文使用的開發板為STM32F103C8T6最小系統板,SG90舵機使用到的引腳為PB0引腳。?

四、 程序設計?

4.1 定時器配置

使用?TIM3的通道3(PB0)生成PWM,步驟如下:

1)?時鐘配置

  • 系統時鐘設為72MHz(默認配置)。

  • APB1總線預分頻系數為2。

  • TIM3時鐘源為APB1總線(36*2=72MHz)。

2)?定時器參數計算

  • PWM頻率:50Hz → 周期20ms 。

  • 預分頻值(PSC):72MHz / (719 + 1) = 1MHz → 每個計數周期10μs。

  • 自動重裝載值(ARR):20,000μs / 10μs = 2000 →?ARR = 1999(從0計數)。

3)?脈沖寬度計算(以90°為例):

  • 1.5ms = 1500μs →?占空比?= 1500 / 20000 = 7.5%。

  • 比較寄存器(CCR):2000 * 7.5% = 150 →?CCR = 150 - 1 = 149

定時器初始化代碼如下:

void SG90_PWM_Init(u16 arr, u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;// 使能定時器TIM3時鐘,注意TIM3時鐘為APB1,而非APB2RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 使能PWM輸出GPIO口時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       // 定時器TIM3的PWM輸出通道3,TIM3_CH3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 復用推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOTIM_TimeBaseStructure.TIM_Period = arr;//自動重裝值TIM_TimeBaseStructure.TIM_Prescaler =psc; //時鐘預分頻數TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上計數模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化TIM3//初始化TIM3_CH3的PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC3Init(TIM3, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能通道的預裝載寄存器TIM_ARRPreloadConfig(TIM3, ENABLE); //使能重裝寄存器TIM_Cmd(TIM3, ENABLE);//使能定時器TIM3,準備工作 
}

初始化參數如下:?

SG90_PWM_Init(1999,719);  //初始化舵機

4.2 角度控制函數

將角度轉換為對應的占空比,角度最大為180° 。

void SG90_Set_Angle(uint8_t angle)
{if (angle > 180)angle = 180;uint16_t duty = 10 * (angle + 45) / 9; // 角度轉化為占空比TIM_SetCompare3(TIM3, duty); // 設置占空比    
}  

4.3 主函數調用

SG90_Set_Angle(0);  //占空比2.5%,0度
delay_ms(1000);
SG90_Set_Angle(90);  //占空比7.5%,90度
delay_ms(1000);

五、 總結

????????通過STM32F103C8T6的定時器PWM功能,可精準控制SG90舵機角度。關鍵在于正確配置定時器的預分頻值和自動重裝載值,并合理映射角度到脈寬。本方案成本低、可靠性高,適合機器人、智能家居等應用場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82583.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

netstat命令Windows與Linux雙平臺

深入解析netstat命令:Windows與Linux雙平臺實戰指南 netstat(Network Statistics)是網絡診斷中最經典的工具之一,能夠幫助用戶查看網絡連接、端口監聽狀態、路由表等信息。然而,Windows和Linux系統下的netstat在參數和輸出格式上存在差異,容易讓人混淆。本文將詳細對比兩…

攻防世界-ics-07

進入環境 進入項目管理 點擊進行訪問 是一堆代碼進行審計 <?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) && $_GET[page] ! index.php) {include(flag.php); }else {header(Location: ?pageflag.php);…

基于 Node.js 的 Express 服務是什么?

Express 是基于 ?Node.js? 的一個輕量級、靈活的 Web 應用框架&#xff0c;用于快速構建 ?HTTP 服務?&#xff08;如網站、API 接口等&#xff09;&#xff0c;以下是詳細解析&#xff1a; ?一、Express 的核心作用? ?簡化 Node.js 原生開發? Node.js 原生 http 模塊雖…

linux安裝vscode以及配置vscode

vscode配置 1&#xff0c;準備工作2&#xff0c;VsCode安裝插件3&#xff0c;cmake Tools 的使用 1&#xff0c;準備工作 所謂的準備工作&#xff0c;就是要讓linux具備 vim gcc g編譯器&#xff0c;可使用cmake&#xff0c;makefile等開發的條件。 首先我么以及有一個以安裝好…

基于AI的智能農業病蟲害識別系統實戰指南

引言 在農業現代化進程中&#xff0c;病蟲害防治始終是保障糧食安全的核心挑戰。傳統人工識別方式存在效率低、誤判率高、響應滯后等問題。本文將通過完整的技術實現流程&#xff0c;展示如何利用Python生態構建智能病蟲害識別系統&#xff0c;實現從圖像采集到防治建議輸出的…

【MySQL】第11節|MySQL 8.0 主從復制原理分析與實戰(一)

一、MySQL主從復制基礎 1. 核心概念 定義&#xff1a; MySQL主從復制是將主庫&#xff08;Source/Master&#xff09;的數據變更同步到一個或多個從庫&#xff08;Replica/Slave&#xff09;的機制&#xff0c;默認采用異步復制&#xff0c;支持全庫、指定庫或表的同步。 角…

【RabbitMQ】記錄 InvalidDefinitionException: Java 8 date/time type

目錄 1. 添加必要依賴 2. 配置全局序列化方案&#xff08;推薦&#xff09; 3. 配置RabbitMQ消息轉換器 關鍵點說明 1. 添加必要依賴 首先確保項目中包含JSR-310支持模塊&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…

【機器學習基礎】機器學習入門核心算法:K-近鄰算法(K-Nearest Neighbors, KNN)

機器學習入門核心算法&#xff1a;K-近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09; 一、算法邏輯1.1 基本概念1.2 關鍵要素距離度量K值選擇 二、算法原理與數學推導2.1 分類任務2.2 回歸任務2.3 時間復雜度分析 三、模型評估3.1 評估指標3.2 交叉驗證調參 四、應用…

在h5端實現錄音發送功能(兼容內嵌微信小程序) recorder-core

本文將通過一個實際的 Vue3 組件示例&#xff0c;帶你一步步實現“按住錄音&#xff0c;松開發送&#xff0c;上滑取消”的語音錄制功能。 我們將使用強大且小巧的開源庫 recorder-core&#xff0c;支持 MP3、WAV、AAC 等編碼格式&#xff0c;兼容性較好。 &#x1f527; 項目…

深入掌握Node.js HTTP模塊:從開始到放棄

文章目錄 一、HTTP模塊入門&#xff1a;從零搭建第一個服務器1.1 基礎概念解析1.2 手把手創建服務器 二、核心功能深入解析2.1 處理不同請求類型2.2 實現文件下載功能 三、常見問題解決方案3.1 跨域問題處理3.2 防止服務崩潰3.3 調試技巧 四、安全最佳實踐4.1 請求頭安全設置4.…

SSM整合:Spring+SpringMVC+MyBatis完美融合實戰指南

前言 在Java企業級開發領域&#xff0c;SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架組合一直占據著重要地位。這三個輕量級框架各司其職又相互配合&#xff0c;為開發者提供了高效、靈活的開發體驗。本文將深入探討SSM框架的整合過程&#xff0c;揭示整合背后的原…

[AI]大模型MCP快速入門及智能體執行模式介紹

[AI]大模型MCP快速入門及智能體執行模式介紹 一、MCP入門 介紹 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是一種由Anthropic公司于2024年提出的開放標準協議&#xff0c;旨在為大型語言模型&#xff08;LLM&#xff09;提供統一接口&am…

Mac M1 安裝 ffmpeg

1.前言 官網那貨沒有準備m系列的靜態包&#xff0c;然后我呢&#xff0c;不知道怎么想的就從maven項目中的 javacv-platform&#xff0c;且版本為1.5.11依賴里面將這個靜態包把了出來&#xff0c;親測能用&#xff0c;感覺比那些網上說的用什么wget編譯安裝、brew安裝快多了。…

unity控制相機圍繞物體旋轉移動

記錄一下控制相機圍繞物體旋轉與移動的腳本&#xff0c;相機操作思路分為兩塊&#xff0c;一部分為旋轉&#xff0c;一部分為移動&#xff0c;旋轉是根據當前center中心點的坐標&#xff0c;根據距離設置與默認的旋轉進行位置移動&#xff0c;移動是根據相機的左右和前后進行計…

python打卡day38@浙大疏錦行

知識點回顧&#xff1a; Dataset類的__getitem__和__len__方法&#xff08;本質是python的特殊方法&#xff09;Dataloader類minist手寫數據集的了解 作業&#xff1a;了解下cifar數據集&#xff0c;嘗試獲取其中一張圖片 一、首先加載CIFAR數據集 import torch import torchvi…

用戶配置文件(Profile)

2.4.5 用戶配置文件&#xff08;Profile&#xff09; 用戶配置文件由以下組件構成&#xff1a; 一個運營商安全域&#xff08;MNO-SD&#xff09; 輔助安全域&#xff08;SSD&#xff09;和CASD Applets 應用程序&#xff08;如NFC應用&#xff09; 網絡接入應用&#xff…

如何給自研MCP加上安全驗證

前言 剛過去兩個月,市面的 MCP 服務,如雨后春筍一般不斷涌現出來,包括;百度、高德、網盤、支付寶。這些 MCP 服務,可以讓我們基于 Spring AI 框架構建的 Agent 具備非常豐富的使用功能。同時這也說明,程序員???????,應該具備開發 MCP 服務的能力,Spring AI 讓 J…

Unity網絡開發實踐項目

摘要&#xff1a;該網絡通信系統基于Unity實現&#xff0c;包含以下幾個核心模塊&#xff1a; 協議配置&#xff1a;通過XML定義枚舉&#xff08;如玩家/英雄類型&#xff09;、數據結構&#xff08;如PlayerData&#xff09;及消息協議&#xff08;如PlayerMsg&#xff09;&a…

OpenCV CUDA模塊圖像過濾------創建一個 Sobel 濾波器函數createSobelFilter()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于創建一個 Sobel 濾波器&#xff0c;用于在 GPU 上進行邊緣檢測。它基于圖像的梯度計算&#xff1a; dx 表示對 x 方向求導的階數&…

【JavaSE】枚舉和注解學習筆記

枚舉和注解 -枚舉 規定多選一數據類型的解決方案-枚舉 枚舉對應英文(enumeration,簡寫 enum) 2)枚舉是一組常量的集合。 3)可以這里理解:枚舉屬于一種特殊的類&#xff0c;里面只包含一組有限的特定的對象。 枚舉的兩種實現方式 自定義實現枚舉 使用enum關鍵字實現枚舉 自…