舵机的控制

舵机内部结构和工作原理


舵机本身就是一个闭环的控制系统。可调电阻就充当传感器,反馈舵机的当前位置角度。


实现舵机的控制


大部分舵机的控制信号的周期都是20ms,也有少部分例外。

代码

控制舵机的定时器配置

#include "bsp_SteerTim.h" static void STEER_TIM_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 输出比较通道1 GPIO 初始化RCC_APB2PeriphClockCmd(STEER_TIM_CH1_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin =  STEER_TIM_CH1_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(STEER_TIM_CH1_PORT, &GPIO_InitStructure);}static void STEER_TIM_Mode_Config(void)
{// 开启定时器时钟,即内部时钟CK_INT=72MSTEER_TIM_APBxClock_FUN(STEER_TIM_CLK,ENABLE);/*--------------------时基结构体初始化-------------------------*/// 配置周期,这里配置为100KTIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断TIM_TimeBaseStructure.TIM_Period=STEER_TIM_Period; // 驱动CNT计数器的时钟 = Fck_int/(psc+1)TIM_TimeBaseStructure.TIM_Prescaler= STEER_TIM_Prescaler;    // 时钟分频因子 ,配置死区时间时需要用到TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;     // 计数器计数模式,设置为向上计数TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;     // 重复计数器的值,没用到不用管TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 初始化定时器TIM_TimeBaseInit(STEER_TIM, &TIM_TimeBaseStructure);/*--------------------输出比较结构体初始化-------------------*/  TIM_OCInitTypeDef  TIM_OCInitStructure;// 配置为PWM模式1TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// 输出使能TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;// 输出通道电平极性配置 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 输出比较通道 1TIM_OCInitStructure.TIM_Pulse = 50;//50对应的脉宽为0.5ms,让舵机初始位置为最左(右)边TIM_OC1Init(STEER_TIM, &TIM_OCInitStructure);TIM_OC1PreloadConfig(STEER_TIM, TIM_OCPreload_Enable);// 使能计数器TIM_Cmd(STEER_TIM, ENABLE);
}void STEER_TIM_Init(void)
{STEER_TIM_GPIO_Config();STEER_TIM_Mode_Config();
}/*********************************************END OF FILE**********************/

相关头文件

#ifndef __BSP_STEERTIME_H
#define __BSP_STEERTIME_H#include "stm32f10x.h"#define            STEER_TIM                   TIM3
#define            STEER_TIM_APBxClock_FUN     RCC_APB1PeriphClockCmd
#define            STEER_TIM_CLK               RCC_APB1Periph_TIM3
#define            STEER_TIM_Period            (2000 - 1)
#define            STEER_TIM_Prescaler         (720 - 1)
// TIM3 输出比较通道1
#define            STEER_TIM_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
#define            STEER_TIM_CH1_PORT          GPIOA
#define            STEER_TIM_CH1_PIN           GPIO_Pin_6/**************************函数声明********************************/void STEER_TIM_Init(void);#endif   /* __BSP_STEERTIME_H */

舵机控制函数

#include "Steercontrol.h"
#include "bsp_SteerTim.h"
u32 full = 2000;
/************************************************************************************
*函数名称:SteerAngle
*输入参数:angle 角度, which
*输出参数:错误代号
*功能;设置舵机角度
*************************************************************************************/
unsigned char SteerAngle(float angle,unsigned char which)
{/////截止判断,角度0-180,which是1-4if(angle<0||angle>180){return 1;}if(which<1||which>4){return 2;}/////角度转换u32 rate=(u32)((angle/180.0*0.1+0.025)*full);switch(which){case 1:TIM_SetCompare1(STEER_TIM ,rate);break;case 2:TIM_SetCompare2(STEER_TIM ,rate);break;case 3:TIM_SetCompare3(STEER_TIM ,rate);break;case 4:TIM_SetCompare4(STEER_TIM ,rate);break;default:break;}return 0;
}

【硬石科技】电机系列教学(基于STM32)——舵机的控制相关推荐

  1. “药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+英文小写+数字)

    项目名称:"药药切克闹"系列-基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字) CSDN:YANG-03                      ...

  2. 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

    设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...

  3. 【资料转发分享】基于STM32智能路灯灯光自动控制系统设计-基于STM32无刷电机BLDC速度控制器系统设计-基于STM32热释人体感应智能门禁报警系统设计-基于STM32居家加湿器控制仿真系统设计

    1604基于STM32智能路灯灯光自动控制系统设计-毕设课设资料 实现的功能如下,下图是仿真原理图: 通过ARM内部的ADC采集光敏电阻电压,判断电压值 电压值低于设定的值,表示光强太弱,开路灯 光强 ...

  4. 基于STM32的语言控制智能家居系统

    承接单片机定做 文章目录 前言 一.设计目标及内容: 二.框架思路 三.实现 喜欢请点赞哦! 前言 基于STM32的语言控制智能家居系统,主控使用STM32F103(正点原子战舰板子) 一.设计目标及 ...

  5. (毕业设计资料)基于STM32智能窗帘控制系统设计

    096[电路方案]基于STM32智能窗帘控制系统设计 基于STM32单片机的智能窗帘控制系统.该系统集蓝牙遥控.人声识别控制.空调红外遥控.24c02数据储存.433m遥控.热释电红外感应.温湿度检测 ...

  6. 液位系统c语言程序,基于STM32的液位控制系统设计

    程训明 董婷婷 摘 要:本文设计一种基于STM32的液位控制系统,该控制系统采用STM32作为控制核心,使用压力传感器采集水箱内的液位,通过串口触摸屏进行液位显示和给定,对水位进行有效的闭环控制.系统 ...

  7. 写基于stm32智能家居控制系统设计论文

    写作一篇基于STM32的智能家居控制系统设计论文需要涵盖以下内容: 简要介绍STM32微控制器的硬件特性和软件开发环境: 分析当前市场上关于智能家居控制系统的发展现状,并阐述为什么选择STM32作为系 ...

  8. 基于STM32智能家居控制系统软件设计及实现

    1.1 系统流程图 智能家居控制系统的软件设计主要使用Keil uVision5进行STM32主烧录程序的编写,主程序完成的功能主要为接收并判断语音识别模块传过来的信息,然后根据满足条件的不同进行对应 ...

  9. (学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)

    使用到的各元件: 1.12V电源一个 2.单片机:STM32F103C8T6 3.直流电机4个 4.电机驱动模块:L298N 5.降压模块两个 6:杜邦线若干 对于直流电机的转动控制如下表 两边电平 ...

  10. 入门电机系列之4步进电机

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 舵机的原理与应用. 文章目录 入门电机系列,基于STM32硬 ...

最新文章

  1. Selenium2+python自动化24-js处理富文本(带iframe)
  2. BZOJ4008. [HNOI2015]亚瑟王 期望概率dp
  3. 金山网络CEO傅盛:简约之美
  4. Android 音频开发(二) 采集一帧音频数据
  5. scrapy 伪装代理和fake_userAgent的使用
  6. Less 官方文档学习笔记
  7. 2020软件测试学科全套上课视频教程网盘免费分享
  8. 四大逆向工程软件简介
  9. WPS自己用来看的 方便记录
  10. mysql数据库事务模拟转账_mysql数据库事务阐发:实现银行转账功能的优化,附代码+实现过程...
  11. Automator——为mac创建自定义mac右键菜单
  12. 八类网线和七类网线的区别_7类网线和8类网线到底有何不同?
  13. 电力系统中的Kron简化,含MATLAB代码(全网唯一)
  14. Android中免root的hook框架Legend原理解析
  15. C++读取读取csv、xls文件的类
  16. iis下ISAPI_Rewrite配置及 iis rewrite 规则书写
  17. 带内网络遥测INT--In-band Network Telemetry
  18. Vueb报错[WDS] Errors while compiling. Reload prevented
  19. 《Windows 8 权威指南》——第1章 Windows 8已经到来的盛宴 1.1 Windows商店
  20. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章

热门文章

  1. C语言中的.h文件的作用
  2. CTPN论文翻译——中文版
  3. 大佬都是怎么画交换机拓扑图的?都给你整理好了
  4. vue项目打包成app
  5. Nmap发现局域网中存活主机
  6. HSQL 中修改字段的语法
  7. 如何在html页面跳转的时候携带数据(页面跳转时参数传递问题)?
  8. 3dmax2015安装教程与破解方法(其中一步极为重要!!!)
  9. 计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
  10. LCD屏幕调试 ~ 字模提取工具和图片转码工具