完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1、舵机的工作原理:
舵机内部的控制电路,电位计(可变电阻器)和电机均被连接到电路板上,如内部结构图的右边部分。控制电路通过电位计可监控舵机的当前角度。 如果轴的位置与控制信号相符,那么电机就会关闭。如果控制电路发现这个角度不正确,它就会控制马达转动,直到它达到指定的角度。舵机角度根据制造商的不同而有所不同。比如,一个180度的舵机,它可以在0度至180度之间运动。由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了。 舵机的输出功率与它所需要转动的距离成正比。如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运行,这叫做速度比例控制。 2、如何让舵机转到指定角度: 控制线用于传输角度控制信号。这个角度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中立位置,对于180°舵机来说,就是90°位置)。如果脉冲宽度小于1.5毫秒,那么电机轴向朝向0度方向。如果脉冲宽度大于1.5毫秒,轴向就朝向180度方向。以180度舵机为例,对应的控制关系是这样的: 0.5ms————-0度;1.0ms————45度;1.5ms————90度;2.0ms———–135度;2.5ms———–180度; 3、舵机转动角度对应的占空比以及比较寄存器的值计算方法: 舵机配置需要满足频率为50HZ,PWM占空比是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空比就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器就为200-200*5% = 190 4、STM32控制舵机的代码: 控制舵机代码: Main.cpp #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "timer.h" int main(void) { u16 led0pwmval=185; //u8 dir =1; delay_init(); LED_Init(); TIM3_PWM_Init(199, 7199);//50hz while(1) { led0pwmval=195;//45 TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800); led0pwmval=190;//45 TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800); led0pwmval=185;//90 TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800); led0pwmval=180;//135 TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800); led0pwmval=175;//180 TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800); } } Timer.h #ifndef __TIMER_H #define __TIMER_H #include "sys.h" void TIM3_PWM_Init(u16 arr , u16 psc); #endif Timer.c #include "timer.h" void TIM3_PWM_Init(u16 arr , u16 psc) { GPIO_InitTypeDef GPIO_InitTypestrue; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypestrue; TIM_OCInitTypeDef TIM_OCInitTypesture; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟,以及TIM3时钟使能 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//复用 GPIO_InitTypestrue.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitTypestrue.GPIO_Pin=GPIO_Pin_5; GPIO_InitTypestrue.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitTypestrue); //GPIO初始化 TIM_TimeBaseInitTypestrue.TIM_Period=arr; TIM_TimeBaseInitTypestrue.TIM_Prescaler=psc; TIM_TimeBaseInitTypestrue.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitTypestrue.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3 ,&TIM_TimeBaseInitTypestrue); //定时器初始化 TIM_OCInitTypesture.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitTypesture.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInitTypesture.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC2Init(TIM3 ,&TIM_OCInitTypesture );//CH2通道初始化 TIM_OC2PreloadConfig( TIM3 ,TIM_OCPreload_Enable);//使能预装载寄存器 TIM_Cmd(TIM3,ENABLE); } |
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
369 浏览 1 评论
250 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
219 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
590 浏览 2 评论
615 浏览 2 评论
1345浏览 9评论
27浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
28浏览 3评论
31浏览 3评论
KEIL MDK为什么无法debug library中的代码?
65浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-18 15:03 , Processed in 0.853586 second(s), Total 74, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号