毕设常用模块之舵机介绍以及使用方法

这篇具有很好参考价值的文章主要介绍了毕设常用模块之舵机介绍以及使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

舵机

舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为 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/(8+2)= 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.5
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
 
   //初始化TIM3
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    TIM_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脉冲宽度调制模式2
     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
 
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
 
    TIM_Cmd(TIM3, ENABLE);  //使能TIM3
    
}

代码说明

频率: Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
占空比: duty circle = TIM3->CCR1 / arr(单位:%)
文章来源地址https://www.toymoban.com/news/detail-462084.html

到了这里,关于毕设常用模块之舵机介绍以及使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Python random模块(获取随机数)常用方法和使用例子

    Python random模块(获取随机数)常用方法和使用例子

    嗨喽,大家好呀~这里是爱看美女的茜茜呐 random.random random.random()用于生成一个0到1的随机符点数: 0 = n 1.0 random.uniform random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。 如果a b,则生成的随机数n: a = n = b。如果 a b, 则 b = n = a

    2024年01月24日
    浏览(31)
  • git的常用命令以及在可视化工具中的使用方法

    git的常用命令以及在可视化工具中的使用方法

    想当初在刚进公司的时候,对于git的使用非常不熟悉,特别是分支的概念,导致开发效率变低,故通过此文章,总结git的使用经验 2.1 git clone [url]: 克隆远程仓库到本地 刚开始时,都需要将远程的代码拉到本地,这里一般是去对应的代码托管平台复制项目的链接,链接有ssh和

    2024年01月16日
    浏览(52)
  • String类的学习笔记(上):介绍String类及其常用方法的使用

    String类的学习笔记(上):介绍String类及其常用方法的使用

    本文介绍了Java中用来描述操作字符串的String类,和其一些常用的基本操作方法,字符串的创建输出,字符串对象的比较,字符串查找,字符串的转化,字符串的替换,字符串拆分,字符串截取,和大小写转换,去除左右空格,子字符串包含,学会使用这些方法,能更方便的使用操作字符串~ 前言

    2023年04月23日
    浏览(14)
  • SOC系统经典IP介绍以及使用方法说明之dw_i2c

    SOC系统经典IP介绍以及使用方法说明之dw_i2c

    第三章 DW_i2c功能及使用流程介绍 文章目录 前言 一、功能介绍 1.1 i2c写操作: 1.1.1 详细flow介绍 1.2 i2c读操作: 1.2.1 详细flow介绍 二、软件流程介绍 2.1 定义WDT中断服务子程序 2.2 定义main函数 三、总结      按照i2c的协议,i2c的时钟由master方提供,master可以向slave发送数据,也

    2024年02月03日
    浏览(12)
  • 【APP渗透测试】Android APK常用测试工具(Drozer)安装及使用方法介绍

    【APP渗透测试】Android APK常用测试工具(Drozer)安装及使用方法介绍

    本篇文章主要介绍 Drozer Android测试工具的安装以及简单使用,后续会持续更新更多使用方法。 Drozer 是 MWR Labs 开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道: Drozer允许你一个普通Android应用的身份与其他应用和操作系统交互。 在Web世界

    2024年02月16日
    浏览(14)
  • USB转串口芯片CH340系列及CH340模块使用方法(CH340驱动,接线,串口下载详细介绍)

    USB转串口芯片CH340系列及CH340模块使用方法(CH340驱动,接线,串口下载详细介绍)

    我们为什么要用到CH340驱动呢?CH340驱动就是USB转串口的驱动的一种,因为我们现在的电脑上,已经不存在串口,所以我们一般使用USB转串口芯片,目的只有一个,把电脑的USB口映射为串口用。常用的USB转串口芯片有CH340、CP2102、PL2303、FT232等。芯片是CH340的均可以使用。安装

    2023年04月08日
    浏览(48)
  • Java中TreeSet的基本介绍,细节讨论,使用注意事项,常用方法,底层源码分析

    TreeSet 是 Java 中的一个有序集合实现,它基于红黑树数据结构来存储元素, 可以保持元素的自然顺序(默认情况下升序)或者根据自定义比较器来进行排序 。下面是关于 TreeSet 的基本介绍、细节讨论、使用注意事项、常用方法以及一些底层实现细节。 基本介绍: TreeSet 是

    2024年02月11日
    浏览(17)
  • 一起玩儿物联网人工智能小车(ESP32)——26. 舵机的使用方法

    一起玩儿物联网人工智能小车(ESP32)——26. 舵机的使用方法

    摘要:本文介绍舵机的使用方法 在前面介绍TT马达的时候,提到过舵机。舵机是一种精密控制类电动机,也是电动机的一种,它的主要作用是旋转到某一指定位置,在机器人领域使用得相当的广泛,用来实现各种机械臂和机器人关节的运动。 下面就来了解一下舵机的工作原理

    2024年02月21日
    浏览(12)
  • Optional常用方法实例, 源码挺简单的,重要的是option 与 stream 以及lambda 的连贯使用

    ​empty(): ​of() // 非null 就继续执行 否则抛异常 ​ ofNullable () ​get() //非null就get 否则异常 ​//lambada // 根据是否为NULL进行操作 ​// filter进行以上对下进行输入 如果opt是一集合的话 , 无法进行筛选 , 只能使用集合本身进行filter 取到map orElseThrow() //是空就抛出自定义异常

    2024年02月05日
    浏览(13)
  • python中的os.mkdir和os.makedirs的使用区别,以及如何查看某个模块中的某些字母开头的属性方法

    os.mkdir(dir_name) :用于 新建文件夹 ,当要新建的文件夹已经存在的时候,就会报错: FileExistsError: [Errno 17] File exists: 因此,我们一般在新建一个文件夹的时候,会和 os.path.exists() 集合使用,如下: 1、判断一个 文件夹是否存在 ,如果不存在就新建它,如果已经存在就跳过:

    2023年04月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包