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

项目6:定时器1生成PWM控制舵机(定时器控制PWM波实验)

总结:本实验使用的舵机是度舵机。 控制关系如下。 2. 伺服电路图 3. 高级定时器产生波形。 与普通定时器初始化相比,还需要两条语句。 重复计数器值成为主输出使能。 4 代码 电机初始化 延迟初始化 电机引脚初始化 跟踪引脚初始化。

1. 舵机工作原理

控制信号接收通道进入信号调制芯片并获得直流偏置电压。 它具有内部参考电路,可产生周期为20ms、宽度为1.5ms的参考信号。 将得到的直流偏置电压与电位器的电压进行比较,得到电压差输出。 最后将正负电压差输出给电机驱动芯片,决定电机正转还是反转。 在电机速度恒定的情况下,该轮通过级联减速驱动电位器旋转,直到电压差达到零并且电机停止旋转。 舵机控制:通常需要大约 20ms 的时基脉冲。 脉冲的高电平部分一般为0.5ms-~2.5ms范围内的角度控制脉冲部分。 本实验使用的舵机为180度舵机,控制关系如下。

2、舵机电路图

p>

3.高级定时器生成PWM波形

普通定时器与初始化相比1、我们还需要添加两条语句:

//重复计数器值 TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0 ;//主输出使能 TIM_CtrlPWMOutputs(TIM1, ENABLE);

4. 代码

main.c

#include "motor.h"#include #include "lay.h"#include "stm32f10x.h"#include "followline.h"#include "ultrasonic.h"#include "steeringengine.h"u8 UART3_data,UART1_data;u8 UART3_rcv[20] ,UART3_rcv_count;u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;int main(void){/ /motor_pwm_TIME4_init(71,999);//电机PWM初始化 Late_init();//延迟初始化//motor_GPIO_init();//电机引脚初始化,跟踪引脚初始化。    // uart_init1(9600); // hwbz_gpio_init();steering_pwm_TIME1_init(7199,199); //int right_2=0,right_1=0 ,left_2=0,left_1=0;while(1 ){ TIM1,jd45);TIM_SetCompare4(TIM1,jd90);TIM_SetCompare4(TIM1,jd180);}} 

steeringengine.c

#include "steeringengine.h" void steer_gpio_init(void ){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO);//RCC_APB2PeriphClockCmd( RCC_APB2Per iph_GPI办公自动化, ENABLE);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;GPIO_InitStruct.GPIO_Speed ​​= GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);}void Steering_pwm_TIME 1_init(int presc ,int arr){ //定义定时器结构体 T IM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定义定时器PWM输出通道的结构体 TIM_OCInitTypeDef TIM_OCInitStruct; //打开TIME1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //设置TIME1结构体的参数 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD _DIV 1; TIM_TimeBaseInitStruct . TIM_CounterMode_Up;TIM_TimeBaseInitStruct。TIM_TimeBaseInitStruct.TIM_Period =arr; //重复计数器值 TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct); //设置 TIME1 通道结构体的参数 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode de_PWM1 ; TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High ; TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable; TIM_OCInitStruct.TIM_Pulse =0; //初始化 TIME4 通道 4 TIM_OC4Init(TIM1, &TIM_OCInitStruct); //启用 TIME4 通道 1 的预载寄存器 TIM_OC4PreloadConfig(TIM1, T IM_OCPreload_Enable);主输出可启用,使用通用定时器时不需要此语句 TIM_CtrlPWMOutputs(TIM1, ENABLE); // TIM_ARRPreloadConfig(TIM1, ENABLE); //启用 TIME4 TIM_Cmd(TIM1, ENABLE); Steeringengine.h

#ifndef __STEERINGENGINE_H__#define __STEERINGENGINE_H__#include "stm32f10x_gpio.h"#include "stm32f10x_tim.h"#include "stm32f10x_rcc.h"#define jd0 5#define jd45 10#define jd90 15#define jd135 20#define jd180 25void steer_gpio_init(void );voidsteering_pwm_TIME1_init(int presc,int arr);#endif 

未经允许不得转载:主机频道 » 项目6:定时器1生成PWM控制舵机(定时器控制PWM波实验)

评论 抢沙发

评论前必须登录!