摘要:本次实验的采用的舵机是度伺服,控制关系如下二舵机电路图三高级定时器产生波相比普通定时器初始化中需要多加两句重复计数器的值主输出使能四代码电机初始化延迟初始化电机管脚初始化寻迹管脚初始化。
一、舵机工作原理
控制信号由接收机的通道进入信号调制芯片,获得直流的偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速此轮带动电位器旋转,使得电压差为0,电机停止转动。 舵机的控制:一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分。本次实验的采用的舵机是180度伺服,控制关系如下:
二、舵机电路图
三、高级定时器产生PWM波
相比普通定时器1初始化中需要多加两句:
//重复计数器的值TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//主输出使能 TIM_CtrlPWMOutputs(TIM1, ENABLE);
四、代码
main.c
#include "motor.h"#include #include "delay.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初始化 delay_init();//延迟初始化// motor_GPIO_init();//电机管脚初始化、寻迹管脚初始化。// uart_init1(9600);// hwbz_gpio_init(); steer_gpio_init(); steering_pwm_TIME1_init(7199,199); //int right_2=0,right_1=0 ,left_2=0,left_1=0; while(1) { TIM_SetCompare4(TIM1,jd45); delay_ms(800); TIM_SetCompare4(TIM1,jd90); delay_ms(800); TIM_SetCompare4(TIM1,jd180); delay_ms(800); }}
steeringengine.c
#include "steeringengine.h"void steer_gpio_init(void ){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, 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_TIME1_init(int presc,int arr){ //定义定时器的结构体 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //定义定时器PWM输出通道的结构体 TIM_OCInitTypeDef TIM_OCInitStruct; //打开TIME1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //配置TIME1结构体的参数 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Prescaler = presc; TIM_TimeBaseInitStruct.TIM_Period =arr; //重复计数器的值 TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct); //配置TIME1通道结构体的参数 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_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, TIM_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 );void steering_pwm_TIME1_init(int presc,int arr);#endif
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119359.html
摘要:中央对齐模式向上计数时当时通道为无效电平,否则为有效电平向下计数时一旦通道为有效电平,否则为无效电平。一般来说,舵机接收的信号频率为,即周期为。 STM32——P...
摘要:只能在度到度之间运动,超过范围,舵机轻则齿轮打坏,重则烧坏内部电路舵机能度转动能控制转速。相关定时器的参数设置定时器为例编写相关的函数文件相关函数开启添加定时器的通道和通道的生成开启使能函数,放置于到中的用户代码区。 ...
摘要:一般调高饱和度会降低中相对较低的数值,凸显主要颜色的纯度。对当前唯一的方法霍夫梯度法,它表示在检测阶段圆心的累加器阈值。第八个参数,类型的有默认值,表示圆半径的最小值。 目录 效果展示 基础理论(HSV) 为什么用HSV空间而不是RGB空间? HSV 1、Hue(色相) 2、Value(明...
摘要:延时函数初始化定时器初始化对应度对应度对应度对应度对应度驱动模块驱动程序主函数延时函数初始化初始化舵机驱动 目录 1、51定时器控制单个舵机 2、51定时器控制多路舵机 3、stm32控制舵机 4、pca9685驱动模块 1、51定时器控制单个舵机 舵机的控制一般需要一个20ms左右的时基脉...
摘要:较高时,电机运行连续平稳噪音小,但器件功耗会随频率升高而增大较低时,利于降低功耗,并能提高调速线性度,但过低的频率可能导致电机转动连贯性的降低。通常时,器件能够稳定的控制电机。 一、驱动芯片介绍 TB6612 的的用法: TB6612 是双驱动,也就是可以驱动两个电机下面分别是控制...
阅读 933·2021-09-07 09:58
阅读 1482·2021-09-07 09:58
阅读 2867·2021-09-04 16:40
阅读 2499·2019-08-30 15:55
阅读 2402·2019-08-30 15:54
阅读 1361·2019-08-30 15:52
阅读 422·2019-08-30 10:49
阅读 2597·2019-08-29 13:21