建设银行咸阳缴费网站,诸城网站建设费用,深圳h5开发,全平台内容系统免费舵机
舵机是一种位置伺服的驱动器#xff0c;主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机#xff0c;其内部有一个基准电路#xff0c;产生周期为 20ms#xff0c;宽度为 1.5ms 的基准信号#xff0c;将获…舵机
舵机是一种位置伺服的驱动器主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机其内部有一个基准电路产生周期为 20ms宽度为 1.5ms 的基准信号将获得的直流偏置电压与电位器的电压比较获得电压差输出。经由电路板上的 IC 判断转动方向再驱动无核心马达开始转动透过减速齿轮将动力传至摆臂同时由位置检测器送回信号判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时通过级联减速齿轮带动电位器旋转使得电压差为 0电机停止转动。一般舵机旋转的角度范围是 0 度到 180 度
控制原理
通过向舵机的信号信号线发送PWM信号来控制舵机的输出量
一般来说PWM的周期以及占空比我们是可控的所以PWM脉冲的占空比直接决定了输出轴的位置。
下面举个例子
当我们向舵机发送脉冲宽度为1.5毫秒ms的信号时舵机的输出轴将移至中间位置90度
脉冲宽度为1ms时舵机的输出轴将移至最小的位置0度
脉冲宽度为2ms时舵机的输出轴将移至最小的位置180度)
注意不同类型和品牌的伺服电机之间最大位置和最小位置的角度可能会不同。许多伺服器仅旋转约170度或者只有90度但宽度为1.5 ms的伺服脉冲通常会将伺服设置为中间位置通常是指定全范围的一半 这里有张形象的说明
PWM介绍
PWM英文名Pulse Width Modulation是脉冲宽度调制缩写它是通过对一系列脉冲的宽度进行调制等效出所需要的波形包含形状以及幅值对模拟信号电平进行数字编码也就是说通过调节占空比的变化来调节信号、能量等的变化占空比就是指在一个周期内信号处于高电平的时间占据整个信号周期的百分比例如方波的占空比就是50%.STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出这样 STM32 最多可以同时产生 30 路 PWM 输出其实我们仅仅需要一个定时器的一个通道即可完成1路 PWM 输出。
占空比说明
占空比 是一个脉冲周期内高电平的时间与整个周期时间的比例 单位 % (0%-100%) 表示方式20%
周期 一个脉冲信号的时间 1s内测周期次数等于频率 脉宽时间 高电平时间
上图中 脉宽时间占总周期时间的比例就是占空比
比方说周期的时间是10ms脉宽时间是8ms 那么低电平时间就是2ms 总的占空比 8/(82) 80%
这就是占空比为80%的脉冲信号
举例说明 控制总结
通过MCU输出一个占空比可以调节的PWM波信号这个信号的频率是50Hz也就是说一个周期内的时间是20ms 在这一个周期内有0.5ms的高电平时间 舵机就是-90°有1ms的高电平时间就是-45°本质上是在调节方波的占空比占空比越大角度也越大占空比最大是2.5/20*100%
舵机的控制就是通过一个固定的频率给其不同的占空比的来控制舵机不同的转角 舵机的频率一般为频率为50HZ也就是一个20ms左右的时基脉冲而脉冲的高电平部分一般为0.5ms-2.5ms范围。来控制舵机不同的转角 500-2500us的PWM高电平部分对应控制180度舵机的0-180度 以180度角度伺服为例那么对应的控制关系是这样的 0.5ms--------------0度 1.0ms------------45度 1.5ms------------90度 2.0ms-----------135度 2.5ms-----------180度
参考代码【基于STM32F1】
void TIM3_PWM_Init(u32 arr,u16 psc)
{ GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2-PB5 //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5GPIO_InitStructure.GPIO_Pin GPIO_Pin_5; //TIM_CH2GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);//初始化GPIO//初始化TIM3TIM_TimeBaseStructure.TIM_Period arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision 0; //设置时钟分割:TDTS Tck_timTIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM3 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器TIM_Cmd(TIM3, ENABLE); //使能TIM3}代码说明
频率 Fpwm 72M / ((arr1)*(psc1))(单位Hz) 占空比 duty circle TIM3-CCR1 / arr(单位%)