舵机工作原理及STM32驱动代码

1.舵机接线
舵机上有三根线,分别为VCC(红色正极)、GND(棕褐色负极)、信号线(橙色信号线)。标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz)。VCC、GND需要另外接驱动给舵机供电,而且得和开发板共地。

2.工作原理:
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。**注意:舵机角度与占空比无关。**以180度角度舵机为例,那么对应的控制关系是这样的:
0.5ms————–0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;

二、STM32驱动程序

1.TIM3 PWM初始化:

void TIM3_PWM_Init(u16 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_CH1->PB4,TIM3_CH2->PB5    //设置该引脚为复用输出功能,输出TIM3 CH1|CH2的PWM脉冲波形   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; //TIM_CH1|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_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2TIM_OC1Init(TIM3, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}

2.主函数:

#include "delay.h"
#include "sys.h"
#include "pwm.h"int main(void){    delay_init();            //延时函数初始化    TIM1_PWM_Init(199,7199);//(7200*200)/72000000=0.02=20mswhile(1){   TIM_SetCompare1(TIM3,10); //45度,1msTIM_SetCompare1(TIM3,10); //45度,1msdelay_ms(1000); TIM_SetCompare1(TIM3,15); //90,1.5msTIM_SetCompare1(TIM3,15); //90,1.5msdelay_ms(1000);        }
}

3.STM32定时器定时计算公式:

  • Tout = ((arr+1)*(psc+1))/Tclk ;
    其中:
    Tclk:定时器的输入时钟频率(单位MHZ)
    Tout:定时器溢出时间(单位为us)
    .TIM_Period = arr; 自动重装载值
    .TIM_Prescaler = psc; 时钟预分频系数
    例如:arr=4999,psc=7199,Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms

初始化定时器的时候指定我们分频系数psc,这里是将我们的系统时钟(72MHz)进行分频,然后指定重装载值arr,这个重装载值的意思就是当我们的定时器的计数值达到这个arr时,定时器就会重新装载其他值。
例如当我们设置定时器为向上计数时,定时器计数的值等于arr之后就会被清0重新计数,定时器计数的值被重装载一次被就是一个更新(Update)

Tclk是定时器时钟源,在这里就是72Mhz,我们将分配的时钟进行分频,指定分频值为psc,就将我们的Tclk分了(psc+1),我们定时器的最终频率就是Tclk/(psc+1) MHz,这里的频率的意思就是1s中记 Tclk/(psc+1)M个数 (1M=10的6次方) ,每记一个数的时间为(psc+1)/Tclk ,很好理解频率的倒数是周期,这里每一个数的周期就是(psc+1)/Tclk 秒,然后我们从0记到arr 就是 (arr+1)*(psc+1)/Tclk。
举例:比如我们设置arr=7199,psc=9999
我们将72MHz (1M等于10的6次方) 分成了(9999+1)等于 7200Hz,每记录一个数就是1/7200秒
我们这里记录7200个数进入定时器更新(7199+1)x(1/7200)=1s,也就是1s进入一次更新Update。

舵机工作原理及STM32驱动代码相关推荐

  1. MG995舵机工作原理及基于STM32的驱动源代码

    MG995舵机工作原理及基于STM32的驱动源代码 一·MG995舵机工作原理 1.MG995舵机简介 产品型号 MG995 产品尺寸 40.7*19.7*42.9mm 产品重量 55g 工作扭矩 1 ...

  2. 传感器:土壤湿度传感器(XH-M214)介绍及stm32驱动代码

    土壤湿度传感器(XH-M214)及stm32驱动代码 XH-M214简介 stm32驱动 XH-M214 protues测试 本篇主要介绍:stm32f103 ADC读取电压 采集土壤湿度传感器(XH ...

  3. 一文读懂舵机工作原理并运用(附代码)

    杂谈 自己拿到这一模块是也挺迷茫的,后来看了一些资料,也渐渐积累了些自己的理解,很多博文并没有将舵机讲明白,至少你待把PWM与角度如何换算讲清楚吧,所以笔者写这篇博文供大家学习掌握. 如果你拿到一个舵 ...

  4. MPU6050工作原理及STM32控制MPU6050

    一·简介: 1.要想知道MPU6050工作原理,得先了解下面俩个传感器: ①陀螺仪传感器: 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的.人们根据这个道理,用它来保持 ...

  5. AMG8833的使用与stm32驱动代码

    一.介绍 1.内部框图 可以看到AMG8833的内部有红外点阵测温,并且还带有一个热敏电阻.使用同一个ADC进行采样,然后送给Control. 2.器件参数 测温点数:64(8x8的矩阵) 帧率:10 ...

  6. 计算机原理1046Q是什么意思,半桥驱动电路工作原理,半桥驱动电路的作用是什么 - 功率器件 - 电子发烧友网...

    半桥驱动电路的作用: 半桥驱动电路的作用主要是通过功率管产生交流电触发信号,从而产生大电流进一步驱动电机.与单片机驱动不同的是,单片机驱动能力有限,一般仅作为驱动信号. 半桥驱动电路工作原理: 半桥电 ...

  7. sg90舵机工作原理_舵机跑舵?锲而不舍终除隐患!

    因为专注才更专业,快快关注吧! 欢迎投稿:sea@shipmg.com 正文开始 一.前言某司二条姐妹船采用 SSP5 型 360º全回转电力推进器,左右两台中压永磁电机推进船舶行驶,另外两面分别由两 ...

  8. sg90舵机工作原理_快来听郑老轨分享船舶舵机液压锁报警测试经验!

    点击☝上方"泛海国际船管"轻松关注哦! [编者按:以下工作经验分享为敝司外派轮机长郑永忠,根据在船工作经验,结合大家日常中,比较容易忽略的地方,整理出来的文章,经其本人同意后,刊发 ...

  9. 移植Nokia5110屏驱动 | 我是如何将51代码转为STM32驱动代码的

    大家好,我是程序员小哈. – 简介 问题由来 NOKIA 5110 屏 Nokia5110屏是一个非常经典的液晶显示模块,在小哈哥玩单片机的时候,可选的液晶模块并不多,一般来说就是LCD1602.LC ...

  10. STM32驱动代码:STM32F4驱动7针0.96寸OLED显示字符、汉字

    STM32F4驱动7针0.96寸OLED显示字符.汉字 适用于stm32f1.stm32f4移植 工程资料链接:STM32F4驱动7针0.96寸OLED.rar 一. 代码效果 二.硬件准备 1.准备 ...

最新文章

  1. 《研磨设计模式》chap25 访问者模式Visitor(3)联合组合模式+总结
  2. 谈点技术吧,6万人在线每秒实时更新的解决方案
  3. Linux汇编语法开发
  4. zklib php,php 安装zookeeper扩展报错
  5. 去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?
  6. centos7从有线切换到无线_TT G821 W1无线三模机械键盘体验:一个键盘满足所有应用场景...
  7. APK 包名修改工具
  8. Linux安装expect命令
  9. C++程序设计基础(揣锦华版)课后习题答案-第一章:程序设计基础知识
  10. vue3.0 ele-plus 与 antd-design的使用
  11. 淘宝店铺运营,店铺访客增加但是浏览量减少这是为什么,应该怎样解决?
  12. 同事在上班期间在干私活,要不要告诉老板!
  13. COMPILATION ERROR
  14. 如何快速打造淘宝爆款
  15. cPanel/WHM前台后台的常用操作
  16. lol1月24服务器维护,《lol》1月24日停机到几点 1月24日停机维护内容一览
  17. linux ddos防御攻击
  18. stuts2 技术内幕 2、3章
  19. Vuforia 使用
  20. 案例2:qqZone

热门文章

  1. 软件破解入门教程和解密手册——PE文件格式
  2. HTTPD虚拟主机配置
  3. 密码编码学初探——传统加密技术
  4. 第十二章 采购管理 采购合同类型以及其区别 合同类型与风险分担 自制与外购分析 招标文件 工作说明书(SOW) 工作大纲 (TOR) 投标人会议 采购谈判 检查 审计 索赔管理 采购合同争议解决方式对
  5. 8款超级好用的3D建模软件上下篇
  6. 11年的macbook还能用吗_8年老本的第二春:2011款Macbook Pro换血记
  7. 思科ccnp认证网络工程师关于NAT64协议概述一定要看
  8. 神经网络 II:神经元模型
  9. MSM8960和MSM8930
  10. 密码学--CTF Crypto