关注分享主机优惠活动
国内外VPS云服务器

10.STM32——PWM控制舵机(超声波传感器开/关盖垃圾桶)

总结:居中模式下,向上计数时,通道为无效电平,否则为有效电平。 倒计时期间,该通道为有效电平,否则为无效电平。 一般来说,舵机接收到的信号的频率就是它的周期。

STM32 - PWM控制舵机通用时序输出 PWMPWM工作原理 PWM模式 TIM_OCMode_PWM1(边沿对齐模式) TIM_OCMode_PWM2(中心对齐模式) 占空比舵机物理图 接线舵机工作原理 TPWM占空比 TIM3 PWM 输出驱动 SG90 电机配置流程: 1. 使能 GPIO 时钟、TIM 定时器时钟、部分重映射时钟 2. 重映射定时器 3. 配置 GPIO 结构 4. 配置通用定时器 TIM 结构 5. 配置 PWM stm32 超声波传感器开盖垃圾桶电机。 cmotor.hHC_SR04.cHC_SR04.husart.cusart.hmain.cstm32 超声波传感器开盖垃圾桶效果显示

通用时序输出 PWM

以 TIM3 为例。 STM32通用定时器大气TIM2、TIM3、TIM4、TIM5,每个定时器有四个独立通道,可用作输入捕获、输出比较、PWM输出、单脉冲模式输出等。

除了TIM6和TIM7(基本定时器)之外,所有STM32定时器都可以产生PWM波形输出。 高级定时器TIM1和TIM8可以同时产生7个PWM输出,而通用定时器可以同时产生4个PWM输出,因此STM32最多可以同时输出30个PWM输出。

PWM 的工作原理

为了解释 PWM 的原理,我们以计数为例。

PWM 输出模式下的 CNT(计数器当前值)、ARR(自动重载值)和 CCRx(寄存器值的捕获/比较)除外。

如果CNT小于CCRx,TIMx_CHx通道输出低电平。

当CNT大于等于CCRx时,TIMx_CHx通道输出高电平。

所谓脉宽调制信号(PWM波)就是决定频率(决定PWM周期)的TIMx_ARR自动重载寄存器,以及决定占空比信号的TIM_CCRx寄存器。

PWM模式TIM_OCMode_PWM1(边沿对齐模式)

向上计数时:如果TIMx_CNTTIMx_CCRx,则CCR1通道1为无效电平,否则为有效电平。

TIM_OCMode_PWM2(中心对齐模式)

向上计数时:如果TIMx_CNTTIMx_CCRx,则CCR1通道1为有效电平,否则为无效电平。

占空比

指信号在一个周期内为高电平占整个信号周期的百分比。

舵机实拍图

接线

SG9O电机

硬件接线:

红线:3.3v/5v黑/棕线:GND 黄线:信号线

舵机工作原理

舵机的主要部件是伺服电机。 所谓伺服就是按照信号的要求进行动作。 转子将在信号到达之前停止。 信号一到达,转子就会转动。 因此,可以向舵机输入不同的信号来控制舵机旋转到不同的角度。 舵机接收 PWM 信号。 当信号进入内部电路时会产生偏置电压。 触发电机通过减速齿轮驱动电位器。 当电压差变为零时,电机停止,获得伺服效果。 简单来说,如果给舵机一个特定的PWM信号,它就可以旋转到指定的位置。

舵机有GND、VCC、SIG三根线,分别是地线、电源线、信号线。 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 周期为 20ms = 0.02s = (7200*200)/72000000。

PWM 占空比

指的是高电平信号,其范围为: 周期时间是总信号周期的百分比。 由于 PWM 周期为 20ms(例如舵机旋转 45°),占空比必须为 1ms/20ms = 5%,因此 TIM_SetCompare1 中的 TIMx Capture Compare 1 寄存器值为 200 * 5% = 10

单位:%(0%~100%)

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_InitTypeDe。f gpioInitStructure;//3. 配置GPIOgpioInitStructure.GPIO_Mode = GPIO_Mode_AF_PP。 //多路推挽输出 gpioInitStructure.GPIO_Pin = GPIO_Pin_5; //引脚5gpioInitStructure.GPIO_Speed = GPIO_Speed_10MHz; //10HzGPIO_Init(GPIOB, &gpioInitS 结构); //初始化 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" voidmotor_Init(void){GPIO_InitTypeDef gpioInitStructure;TIM_TimeBaseInitTypeDef timInitStructure;TIM_OCInitTypeDef timOCInitStructure;//1.使能GPIO时钟、定时器时钟、复用时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1Per iphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RC C_APB2Periph_AFIO, ENABLE );//2. 重映射时间 r 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, &gpioInitStru)图片); //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) , &timIn)it结构) ; //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) ENABLE);}电机 . h #include " stm32f10x.h"voidmotor_Init(void ); c

见 STM32 第 9 部分 9。 STM32——HC_SR04超声波测距

HC_SR04.h

位于STM32第9部分9。 STM32 - HC_SR04 超声波测距

usart.c

位于 STM32 第 6 栏第 6 部分。 STM32——使用串口发送数据并点亮LED(串口中断接收)

usart.h

STM32 Column 66、STM32——使用串口发送数据并点亮LED(串口中断接收)

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);lay_ms(100);if(Length5){TIM_SetCompare2(TIM3, 25);}}} 用stm32超声波传感器打开 带盖垃圾桶 显示效果

如果您发现本文有用。 欢迎大家点赞评论(笑)。 需要整个项目代码。 任何人都可以给小费。 请在评论区留下您的邮箱、vx、qq。 o( ̄︶ ̄)o

未经允许不得转载:主机频道 » 10.STM32——PWM控制舵机(超声波传感器开/关盖垃圾桶)

评论 抢沙发

评论前必须登录!