STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值
生活随笔
收集整理的這篇文章主要介紹了
STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:stm32 定時器輸出PWM原理及工作原理+控制舵機
作者:點燈小哥
發布時間: 2021-03-09 23:17:52
網址:https://blog.csdn.net/weixin_46016743/article/details/114606662
參考:stm32之pwm輸出
作者:打醬油的;
發布時間: 2021-04-11 14:59:05
網址:https://blog.csdn.net/weixin_46098612/article/details/115597823
目錄
- 前言
- PWM的工作原理
- PWM的內部運作機制
- PWM模式一:邊沿對齊模式
- PWM模式二:中央對齊模式
- 自動加載的預加載寄存器
- 通用定時器輸出PWM結構體
- 通用定時器輸出PWM庫函數
- 通用定時器輸出PWM控制舵機
- 硬件接線
- 配置步驟:需要配置3個結構體
- 編程實現
前言
脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。
PWM的工作原理
TIM3通道2,即PB5,作為本實驗連接舵機的引腳。
為何不是通道3PWM輸出?不太理解。
上圖最后一句話,點明PWM的原理。
PWM的內部運作機制
上圖PWM模式選擇介紹如下:
PWM模式一:邊沿對齊模式
有效電平由上面的P位決定
PWM模式二:中央對齊模式
自動加載的預加載寄存器
通用定時器輸出PWM結構體
注意:結構體只要配置上面4個紅色字體即可
通用定時器輸出PWM庫函數
通用定時器輸出PWM控制舵機
硬件接線
SG90電機
紅線 : 3.3v/ 5v 接到VCC
黑線 : GND
黃線 : 信號線(PWM輸出端口) 接到PB5
配置步驟:需要配置3個結構體
編程實現
motor.h
#include "stm32f10x.h" //固件庫void motor_config(void);motor.c
#include "stm32f10x.h" //固件庫 #include "motor.h"void motor_config(void) {GPIO_InitTypeDef GPIO_MotorInit; //1.GPIO結構體TIM_TimeBaseInitTypeDef TIM_MotorInit; //2.通用定時器結構體TIM_OCInitTypeDef TIMPWN_MotorInit; //3.配置定時去輸出PWM結構體RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); //4.1 打開GPIO時鐘 RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE); //4.2 打開定時器3時鐘RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); //復用使能時鐘(我們用到部分重映射)GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE ); //4.3 部分重映射時鐘 TIM3 上面圖有講GPIO_MotorInit.GPIO_Mode = GPIO_Mode_AF_PP;//復用推挽輸出(PB5部分重映射 參照上面圖) GPIO_MotorInit.GPIO_Pin = GPIO_Pin_5;//PB5引腳 連接到舵機的信號線GPIO_MotorInit.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init( GPIOB, &GPIO_MotorInit );TIM_MotorInit.TIM_ClockDivision = TIM_CKD_DIV1;//設置時鐘分頻為1 不分頻TIM_MotorInit.TIM_CounterMode = TIM_CounterMode_Up;//計數模式 TIM向上計數模式TIM_MotorInit.TIM_Period = 200 - 1 ; //重裝載值 設置在下一個更新事件裝入活動的自動重裝載值 200/10000sTIM_MotorInit.TIM_Prescaler = 7200 - 1 ; //預分頻 TIMx時鐘頻率預分頻值 TIM_TimeBaseInit( TIM3, &TIM_MotorInit);//定時器3TIMPWN_MotorInit.TIM_OCIdleState = TIM_OCMode_PWM1; //選擇PWM模式1 即當前CNT值比CCR比較值小為有效電平TIMPWN_MotorInit.TIM_OutputState = TIM_OutputState_Enable; //配置輸出使能TIMPWN_MotorInit.TIM_OCPolarity = TIM_OCPolarity_Low; //比較輸出極性 選低電平 即低電平為有效電平 好像是前面講的P位//還有一個結構體成員 配置比較值CCRX 后面用固件庫函數實現TIM_OC2Init( TIM3, &TIMPWN_MotorInit ); //定時器3的通道2 所以用OC2TIM_OC2PreloadConfig( TIM3, TIM_OCPreload_Enable); //自動加載的預加載寄存器 使能 前面講到TIM_Cmd( TIM3, ENABLE); }main.c
#include "stm32f10x.h" // Device header #include "usart.h" #include "led.h" #include "tim.h" #include "motor.h"//記得添加路徑void delay(uint16_t time) {uint16_t i = 0;while(time--){i=12000;while(i--);} }int main(void) {uint16_t pwmval = 155; //比較值155 自動重裝載值為200 大約3/4motor_config();while(1){ //舵機在155和195之間 一直循環 for(pwmval = 195;pwmval >= 175;pwmval-=5){ //5. 設置PWM比較值函數 即占空比TIM_SetCompare2( TIM3, pwmval); //定時器3 通道2delay(500);//延時0.5s } } }總結
以上是生活随笔為你收集整理的STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: U盘安装系统 从此告别光盘
- 下一篇: 使用Office Word 2010/2