先了解舵机的内部结构,舵机主要由以下几个部分组成:舵盘、外壳、直流电机、减速齿轮组、角度传感器、控制驱动电路和接口线缆等
主要的角度传感器作用为负责舵机的位置反馈,直接装在舵机的主输出轴上,将轴旋转后产生的角度变化变成电压信号发回控制电路;舵机电路板上面用于接收外部接口传来的信号和角度传感器反馈的电压值,以及驱动直流电机旋转;有减速齿轮用于降低直流电机的转速并且加大扭矩。
舵机按照控制电路划分为:数字舵机和模拟舵机,数字舵机有微控制器,只需要发送一次目标值就可以完成相应的任务;模拟舵机纯电路的,需要不停的发送才可以(所以才会用到定时器吧应该)。
工作原理
形成的闭环控制, 模拟舵机内部的控制驱动电路板从外界接收控制信号,经过处理后变为一个直流偏置电压,在控制板内部有一个基准电压,这个基准电压由电位器产生,将外部获得的直流偏置电压与电位器的电压进行比较获得电压差,并输出到电机驱动芯片驱动电机,电压差的正负决定电机的正反转,大小决定旋转的角度,电压差为0 时,电机停止转动。
舵机可以通过两种方式:PWM输出控制和串行总线控制
PWM输出的设置(以F103z8t6为例)
1.先定义GPIO和TIM的结构体变量
GPIO_InitTypeDef GPIO_InitStructure;//初始化GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//初始化定时器
TIM_OCInitTypeDef Tim_OCInitStructure;//初始化外设TIM
2.开启TIM4的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟
3.设置GPIO口的模式,开启引脚复用推挽模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure);
4.初始化定时器,设置定时器的预装值和分频值
TIM_TimeBaseInitStructure.TIM_Period=19999;
TIM_TimeBaseInitStructure.TIM_Prescaler=71;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
5.设置TIM4_CH1的PWM模式,使能它输出
Tim_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
Tim_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
Tim_OCInitStructure.TIM_OCPolarity= TIM_OCPolarity_High;//输出刚开始为高电平模式
TIM_OC1Init(TIM4,&Tim_OCInitStructure);
6.使能定时器
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_Cmd(TIM4,ENABLE);
7.修改TIM4_CCR1来控制占空比
TIM_SetCompare1(TIM4,600);
连接:
舵机有三根线:GND,VCC和控制线。GND要单片机,舵机和电源都在同一个GND上面。
注意事项:
1.最小系统板 定时器4对应PB6 7 8 9,舵机只需要一路PWM输出
2.舵机占空比可以在500—1000内,TIM_Period=19999,TIM_Prescaler(分频值:71+1=72)=71;
学习源于(13条消息) 第9章 舵机控制_总结所学的博客-CSDN博客_舵机控制博主
文章为自己写的笔记,有错误谢谢各位大佬指正。