STM32控制SG90舵機原理及代碼

STM32控制SG90舵機原理及代碼

  • 一.SG90舵機原理
  • 二.控制SG90舵機
  • 三.代碼實例
    • 3.1 配置定時器
    • 3.2 main 函數
  • 四.實驗現象

一.SG90舵機原理

舵機的運用還是比較廣泛的,那么舵機工作原理是什么呢,一般來說我們給舵機一個信號他就能工作了,那么這個信號是什么,以及如何產生的呢。這里我們需要給舵機一個PWM信號,頻率是50HZ,即周期是20ms(產品手冊上這樣說的。)。在這個條件下不同的占空比就是不同的信號。不同的信號就能控制舵機轉動角度。注意舵機只有在改變信號時才會轉動,一直維持一種信號的情況舵機是不會轉動。

二.控制SG90舵機

那么我們如何控制舵機呢,我們需要單片機產生一個20ms的信號PWM(產品手冊上這樣說的。)然后我們可以設置占空比來控制舵機如何轉動。這里怎么產生PWM波和設置占空比可以參考博主的一篇文章,寫的很詳細。pwm詳解

三.代碼實例

我這里使用的是stm32f103ZET6的定時器8的通道一 PC8引腳

3.1 配置定時器


void TIM8_PWM_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);	// 開啟定時器時鐘,即內部時鐘CK_INT=72MRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//設置輸出速度GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC_Pin_9//周期為72M/(200*7200)us=20msTIM_TimeBaseStructure.TIM_Period= (200-1);							 //自動重裝載寄存器的值,累計TIM_Period+1個頻率后產生一個更新或者中斷TIM_TimeBaseStructure.TIM_Prescaler= (7200-1);					 //驅動CNT計數器的時鐘 = Fck_int/(psc+1)TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;		 //時鐘分頻因子 ,用于配置死區時間,沒用到,隨意TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//計數器計數模式,設置為向上計數TIM_TimeBaseStructure.TIM_RepetitionCounter=0;					 //重復計數器的值,沒用到,可以隨意設置TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);					 //初始化定時器TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;						 //配置為PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//輸出使能TIM_OCInitStructure.TIM_Pulse = 0;													 //設置占空比大小,在主函數compare中又設置一遍TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;		 //輸出通道電平極性配置TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;	 //輸出通道空閑電平極性配置TIM_OC1Init(TIM8, &TIM_OCInitStructure);			   						 //初始化通道1TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);						 //使能通道1輸出TIM_Cmd(TIM8, ENABLE);						//使能計數器TIM_CtrlPWMOutputs(TIM8, ENABLE);	// 主輸出使能,當使用的是通用定時器時,這句不需要
}

3.2 main 函數

/* 主函數 */
int main(void)
{	delay_init();							//延時初始化TIM8_PWM_Init(); 					//舵機初始化             	 while(1){  //解釋一下,這里只要產生一個周期的信號即(20ms)舵機就能轉動//如果一直保持這個信號,舵機也不會再轉動。//這里延時只是為了觀察現象。轉動后,過1s再轉動。TIM_SetCompare1(TIM8,5);//轉到0度位置delay_ms(1000);TIM_SetCompare1(TIM8,15);//轉到90度位置delay_ms(1000);	TIM_SetCompare1(TIM8,25);//轉到180度位置delay_ms(1000);	}
}

四.實驗現象

舵機實驗

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

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

相關文章

00 - 環境配置

查看所有文章鏈接:(更新中)GIT常用場景- 目錄 文章目錄 1. 環境說明2. 安裝配置2.1 配置user信息2.2 config的三個作用域 3. 建git倉庫3.1 把已有的項目代碼納入git管理3.2 新建的項目直接用git管理3.3 配置local的user和email3.4 優先級&…

Redis_緩存1_緩存類型

14.redis緩存 14.1簡介 穿透型緩存: 緩存與后端數據交互在一起,對服務端的調用隱藏細節。如果從緩存中可以讀到數據,就直接返回,如果讀不到,就到數據庫中去讀取,從數據庫中讀到數據,也是先更…

股票指數——RSI指數

RSI指數的計算非常簡單,就是使用一段時間內的平均上漲除以平均上漲加平均下跌(取正值)。也就意味著RSI指數的取值是[0,100]之間,其中0表示周期內沒有上漲的,100表示周期內沒有下跌的。RSI的直觀意義是它表示了一段周期…

學習筆記整理-JS-06-函數

一、函數基本使用 1. 什么是函數 函數就是語句的封裝,可以讓這些代碼方便地被復用。函數具有"一次定義,多次調用"的優點。使用函數,可以簡化代碼,讓代碼更具有可讀性。 2. 函數的定義和調用 和變量類似,函…

Jupyter并發測試以后出現EOFError marshal data too short

Jupyter 并發測試以后出現EOFError: marshal data too short 背景 由于項目需求需要用戶能進行網頁在線運行python代碼程序,調研后決定使用Jupyter的服務接口實現此功能,目前使用docker進行容器化部署,測試針對次服務進行并發測試。測試并發…

JimuReport積木報表 v1.6.0版本發布—免費的可視化報表

項目介紹 一款免費的數據可視化報表,含報表和大屏設計,像搭建積木一樣在線設計報表!功能涵蓋,數據報表、打印設計、圖表報表、大屏設計等! Web 版報表設計器,類似于excel操作風格,通過拖拽完成報…

開源代碼分享(13)—整合本地電力市場與級聯批發市場的投標策略(附matlab代碼)

1.引言 1.1摘要 本地電力市場是在分配層面促進可再生能源的效率和使用的一種有前景的理念。然而,作為一個新概念,如何設計和將這些本地市場整合到現有市場結構中,并從中獲得最大利潤仍然不清楚。在本文中,我們提出了一個本地市場…

中睿天下Coremail | 2023年第二季度企業郵箱安全態勢觀察

今日,中睿天下聯合Coremail郵件安全發布《2023第二季度企業郵箱安全性研究報告》,對2023第二季度和2023上半年的企業郵箱的安全風險進行了分析。 一 垃圾郵件同比下降16.38% 根據監測,2023年Q2垃圾郵件數量達到6.47億封,環比下降…

003-Spring boot 啟動流程分析

目錄 啟動流程分析創建 SpringApplication啟動 run(String... args) 啟動流程分析 SpringApplication.run(App.class, args);return new SpringApplication(primarySources).run(args);創建 SpringApplication SpringApplication(primarySources):this.primarySources new L…

opencv圖片灰度二值化

INCLUDEPATH D:\work\opencv_3.4.2_Qt\include LIBS D:\work\opencv_3.4.2_Qt\x86\bin\libopencv_*.dll #include <iostream> #include<opencv2/opencv.hpp> //引入頭文件using namespace cv; //命名空間 using namespace std;//opencv這個機器視…

Springloc和aop的基礎概念

什么是控制反轉和依賴注入&#xff1f; 控制反轉(IoC)和依賴注入(DI)是軟件開發中常用的編程范式&#xff0c; 它們極大地提高了代碼可維護性和可復用性&#xff0c;簡化了代碼結構。 什么是控制反轉(IoC) 控制反轉是- - 種編程模式&#xff0c;它將應用程序中的控制權轉移到…

使用 SSL/TLS 加強 MQTT 通信安全

在之前的文章中&#xff0c;我們探討了認證和訪問控制機制。接下來&#xff0c;我們將介紹傳輸層安全協議&#xff08;TLS&#xff09;在提升 MQTT 通信安全方面的重要作用。本文將著重介紹 TLS 以及它如何保證 MQTT 通信的完整性、機密性和真實性。 概念解釋 在開始之前&…

TypeScript項目中Axios的封裝

目錄 前言 一、axios中的常見類型 1. AxiosInstance 2. AxiosRequestConfig 3. AxiosResponse 4. AxiosError 二、axios封裝步驟 三、封裝后的完整代碼 1. 基礎封裝 2. 高級封裝 前言 為了實現統一的網絡請求處理和管理&#xff0c;在日常開發中我們常常封裝 axios&…

TiDB v7.1.0 跨業務系統多租戶解決方案

本文介紹了 TiDB 數據庫的資源管控技術&#xff0c;并通過業務測試驗證了效果。資源管控技術旨在解決多業務共用一個集群時的資源隔離和負載問題&#xff0c;通過資源組概念&#xff0c;可以限制不同業務的計算和 I/O 資源&#xff0c;實現資源隔離和優先級調度&#xff0c;提高…

Patch SCN一鍵解決ORA-600 2662故障---惜分飛

客戶強制重啟庫之后,數據庫啟動報ORA-600 2037,ORA-745 kcbs_reset_pool/kcbzre1等錯誤 Wed Aug 09 13:25:38 2023 alter database mount exclusive Successful mount of redo thread 1, with mount id 1672229586 Database mounted in Exclusive Mode Lost write protection d…

題目:2553.分離數組中數字的數位

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;2553. 分割數組中數字的數位 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 倒序放置數組中數位&#xff0c;然后再反轉即可。 解題代碼&#xff1a; class Solution {public int[] sepa…

區分等待、阻塞,加拓展

在java中&#xff0c;很多時候我們忽略的基本的知識&#xff0c;這是很致命的&#xff0c;只有搞懂Thread的基礎知識&#xff0c;才能進一步探索&#xff1a;reentrantLock&#xff0c;AQS等。 1&#xff1a;Thread的線程狀態到底有幾種&#xff1f; 6種&#xff1a; public…

SpringCloud微服務之間如何進行用戶信息傳遞(涉及:Gateway、OpenFeign組件)

目錄 1、想達到的效果2、用戶信息在微服務之間傳遞的兩種途徑3、用RuoYi-Cloud為例進行演示說明&#xff08;1&#xff09;網關將用戶信息寫在請求頭中&#xff08;2&#xff09;業務微服務之間通過OpenFeign進行調用&#xff0c;并且將用戶信息寫在OpenFeign準備的請求頭中&am…

香港站群服務器為什么適合seo優化?

?  香港站群為什么適合seo優化?本文主要從以下四點出發進行原因闡述。 1.香港站群服務器的優勢 2.香港站群服務器與國內服務器的對比 3.多IP站群服務器的優勢 4.香港站群服務器在SEO優化中的注意事項 1.香港站群服務器的優勢 香港站群服務器是為了滿足企業SEO優化需求而提供…

GD32F103VE使用DMA傳輸讀取內部溫度和參考電壓值

GD32F103VE使用DMA傳輸讀取內部溫度和參考電壓值。出廠CPU芯片不同&#xff0c;溫度誤差不同&#xff0c;不要糾結了。 GD32F103的ADC為12位AD轉換器,ADC轉換結果保存在16位數據寄存器中; 模擬輸入通道&#xff1a; 16個外部模擬輸入通道; 1個內部溫度傳感器通道(Vsense) 1個…