摘要:中央對齊模式向上計數時當時通道為無效電平,否則為有效電平向下計數時一旦通道為有效電平,否則為無效電平。一般來說,舵機接收的信號頻率為,即周期為。
以TIM3為例,STM32的通用定時器氛圍TIM2,TIM3,TIM4,TIM5,每個定時器都有獨立的四個通道可以用來作為: 輸入捕獲,輸出比較,PWM輸出,單脈沖模式輸出等。
STM32的定時器除了TIM6和TIM7(基本定時器)之外,其他的定時器都可以產生PWM波輸出,高級定時器TIM1,TIM8可以同時產生7路PWM輸出,而通用定時器可以同時產生4路PWM輸出,這樣STM32可以最多同時輸出30路PWM輸出!
以向上計數為例,講述PWM原理:
在PWM輸出模式下除了CNT(計數器當前值),ARR(自動重裝載值),CCRx(捕獲/比較寄存器值)。
當CNT小于CCRx時,TIMx_CHx通道輸出低電平
當CNT等于或大于CCRx時,TIMx_CHx通道輸出高電平
所謂脈寬調制信號(PWM波),就是一個TIMx_ARR自動重裝載寄存器確定頻率(由它決定PWM周期),TIM_CCRx寄存器確定占空比信號。
向上計數時: 當TIMx_CNT 向下計數時: 一旦TIMx_CNT>TIMx_CCRx,CCR1通道1為無效電平,否則為有效電平。 向上計數時: 當TIMx_CNT 向下計數時: 一旦TIMx_CNT>TIMx_CCRx,CCR1通道1為有效電平,否則為無效電平。 是指在一個周期內,信號處于高電平的時間占據整個信號周期的百分比。 SG9O電機 硬件接線: 紅線 : 3.3v/ 5v 舵機的主要組成部分為伺服電機,所謂伺服就是服從信號的要求而動作。在信號來之前,轉子停止不動;信號來到之后,轉子立即運動。因此我們就可以給舵機輸入不同的信號,來控制其旋轉到不同的角度。 舵機上有三根線,分別是GND、VCC和SIG,也就是地線、電源線和信號線,其中的PWM波就是從信號線輸入給舵機的。 PWM周期為20ms = 0.02s = (7200*200)/72000000 是指在一個周期內,信號處于高電平的時間占據整個信號周期的百分比.由于PWM周期為20ms,所以(以舵機會轉動 45°為例),占空比就應該為1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕獲比較 1 寄存器值就為200 * 5% = 10 單位: % (0%~100%) 在STM32第9篇中可以找到 9. STM32——HC_SR04超聲波測距 在STM32分欄第9篇中可以找到 9. STM32——HC_SR04超聲波測距 在STM32分欄第6篇中可以找到 6. STM32——用串口發送數據點亮LED(串口的中斷接收) 在STM32分欄第6篇中可以找到 6. STM32——用串口發送數據點亮LED(串口的中斷接收) 如果覺得這篇文章對你有用。歡迎大家點贊、評論哈哈TIM_OCMode_PWM2(中央對齊模式)
占空比
舵機
實物圖
接線
黑 / 棕線 : GND
黃線 : 信號線舵機工作原理
舵機接收的是PWM信號,當信號進入內部電路產生一個偏置電壓,觸發電機通過減速齒輪帶動電位器移動,使電壓差為零時,電機停轉,從而達到伺服的效果。簡單來說就是給舵機一個特定的PWM信號,舵機就可以旋轉到指定的位置。
一般來說,舵機接收的PWM信號頻率為50HZ,即周期為20ms。當高電平的脈寬在0.5ms~2.5ms之間時舵機就可以對應旋轉到不同的角度。t = 0.5ms——————-舵機會轉到 0 °t = 1.0ms——————-舵機會轉到 45°t = 1.5ms——————-舵機會轉到 90°t = 2.0ms——————-舵機會轉到 135°t = 2.5ms——————-舵機會轉到 180°
周期T
PWM占空比
TIM3 PWM輸出 驅動SG90電機 配置過程:
1. 使能GPIO時鐘,TIM定時器時鐘,部分重映射時鐘
//1.使能GPIO時鐘、定時器時鐘、復用時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
2. 重映射定時器
//2.重映射定時器GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
3. 配置GPIO結構體
GPIO_InitTypeDef gpioInitStructure;//3.配置GPIOgpioInitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出gpioInitStructure.GPIO_Pin = GPIO_Pin_5; //引腳5gpioInitStructure.GPIO_Speed = GPIO_Speed_10MHz; //10HzGPIO_Init(GPIOB, &gpioInitStructure); //初始化
4. 配置通用定時器TIM結構體
TIM_TimeBaseInitTypeDef timInitStructure;//4.配置定時器timInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分頻timInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數模式timInitStructure.TIM_Period = 200-1; //設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。timInitStructure.TIM_Prescaler = 7200-1; //設置了用來作為 TIMx時鐘頻率除數的預分頻值。TIM_TimeBaseInit(TIM3, &timInitStructure); //初始化
5. 配置PWM
//5.配置PWMtimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //邊沿對齊模式timOCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能timOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //設置為高電平有效 TIM_OC2Init(TIM3, &timOCInitStructure); //初始化TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //配置自動加載的預加載寄存器 TIM_Cmd(TIM3, ENABLE); //使能
stm32 超聲波感應開蓋垃圾桶
motor.c
#include "motor.h"#include "stm32f10x.h"void motor_Init(void){ GPIO_InitTypeDef gpioInitStructure; TIM_TimeBaseInitTypeDef timInitStructure; TIM_OCInitTypeDef timOCInitStructure; //1.使能GPIO時鐘、定時器時鐘、復用時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //2.重映射定時器 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //3.配置GPIO gpioInitStructure.GPIO_Mode = GPIO_Mode_AF_PP; gpioInitStructure.GPIO_Pin = GPIO_Pin_5; gpioInitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOB, &gpioInitStructure); //4.配置定時器 timInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; timInitStructure.TIM_CounterMode = TIM_CounterMode_Up; timInitStructure.TIM_Period = 200-1; timInitStructure.TIM_Prescaler = 7200-1; TIM_TimeBaseInit(TIM3, &timInitStructure); //5.配置PWM timOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; timOCInitStructure.TIM_OutputState = TIM_OutputState_Enable; timOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM3, &timOCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); }
motor.h
#include "stm32f10x.h"void motor_Init(void);
HC_SR04.c
HC_SR04.h
usart.c
usart.h
main.c
#include "stm32f10x.h"#include "main.h"#include "led.h"#include "shake.h"#include "relay.h"#include "exti.h"#include "usart.h"#include "tim.h"#include "motor.h"#include "SysTick.h"#include "HC_SR04.h"int main(){ float Length=0;// int pwmval=155; motor_Init(); HC_SR04Init(); usart_init(); // printf("abc"); while(1) { Length=Get_Length(); printf("%.3f/r/n",Length); delay_ms(100); if(Length<5) { TIM_SetCompare2(TIM3, 15); delay_ms(1000); } else if(Length>5) { TIM_SetCompare2(TIM3, 25); } }}
stm32 超聲波感應開蓋垃圾桶 效果展示
需要整個工程代碼,歡迎大家打賞,評論區留上你的郵箱 or vx or qq。o( ̄︶ ̄)o
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121491.html
摘要:只能在度到度之間運動,超過范圍,舵機輕則齒輪打壞,重則燒壞內部電路舵機能度轉動能控制轉速。相關定時器的參數設置定時器為例編寫相關的函數文件相關函數開啟添加定時器的通道和通道的生成開啟使能函數,放置于到中的用戶代碼區。 ...
摘要:本次實驗的采用的舵機是度伺服,控制關系如下二舵機電路圖三高級定時器產生波相比普通定時器初始化中需要多加兩句重復計數器的值主輸出使能四代碼電機初始化延遲初始化電機管腳初始化尋跡管腳初始化。 一、舵機工作原理 ? ? 控制信號由接收機的通道進入信號調制芯片,獲得直流的偏置電壓。它內部有一個基準電...
基于STM32f103c8t6和L292N驅動設計避障小車(核心函數的建立為自己所寫) 一.項目感觸 完成這個項目自己一開始也是無法從本身上出發,看著這個最小系統板和這個電機驅動模塊上面想著怎樣實現讓這兩塊板子實現四個電機上面轉動呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長的借鑒之路,首先作為一個開發者,我覺得學習的地方首選是B站,所以我找了相關的做智能小車的視頻 首先是B站智能小車教...
摘要:利用可視化界面來進行的相關配置,所以時鐘滴答定時器串口等就不用根據數據手冊去操作標準庫甚至是寄存器了,可以通過軟件直接生成。 使用STM32CubeMX初始化ST...
摘要:較高時,電機運行連續平穩噪音小,但器件功耗會隨頻率升高而增大較低時,利于降低功耗,并能提高調速線性度,但過低的頻率可能導致電機轉動連貫性的降低。通常時,器件能夠穩定的控制電機。 一、驅動芯片介紹 TB6612?的的用法: ? ? ?TB6612?是雙驅動,也就是可以驅動兩個電機下面分別是控制...
閱讀 1963·2023-04-25 15:45
閱讀 1197·2021-09-29 09:34
閱讀 2497·2021-09-03 10:30
閱讀 1999·2019-08-30 15:56
閱讀 1456·2019-08-29 15:31
閱讀 1267·2019-08-29 15:29
閱讀 3196·2019-08-29 11:24
閱讀 3047·2019-08-26 13:45