玩转X-CTR100 l STM32F4 l 舵机控制

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

本文介绍X-CTR100控制器的舵机控制,X-CTR100具有16路舵机控制接口,通过定时器产生PWM控制信号,可用于航模、机械臂、机器人等制作。
原理

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。
舵机的形状和大小多到让人眼花缭乱,但大致可以如图C所示分类。最右边身材不错的是常见的标准舵机,中间两个小不点是体积最小的微型舵机,左边的魁梧的那个是体积最大的大扭力舵机。它们都是同样的三线控制,因此你可以根据需求换个大个的或小个的。
除了大小和重量,舵机还有两个主要的性能指标:扭力和转速,这两个指标由齿轮组和电机所决定。扭力,通俗讲就是舵机有多大的劲儿。在5V的电压下,标准舵机的扭力是5.5千克/厘米(75盎司/英寸),转速很容易理解,就是指从一个位置转到另一个位置要多长时间。在5V电压下,舵机标准转度是0.2秒移动60度。总之,和我们人一样,舵机的个子越大,转的就越慢但也越有劲儿。

舵机有一个三线的接口。黑色(或棕色)的线是接地线,红线接+5V电压,黄线(或是白色或橙色)接控制信号端。

舵机的控制信号周期为20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5ms,相对应的舵盘位置为0-180度,呈线性变化。即提供一定的脉宽,它的输出轴就会保持一定对应角度上,无论外界转矩怎么改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应位置。舵机控制脉冲宽度与转角关系如下图。

例程
控制16路舵机30度、90度、150度间隔运动。。
硬件说明
硬件资源:
- 串口UART1
- R扩展接口(16个扩展接口都可以接舵机)
- 舵机若干(需自备)
硬件连接:
软件生态
X-SOFT软件生态,X-API扩展文件如下。
ax_servo.c——X-CTR100 舵机控制源文件
ax_servo.h——X-CTR100 舵机控制头文件
接口函数
|
void AX_SERVO_TIM2_AB_Init(void); //舵机AB接口初始化 void AX_SERVO_TIM2_A_SetAngle(uint16_t angle); //舵机A控制 void AX_SERVO_TIM2_B_SetAngle(uint16_t angle); //舵机B控制
void AX_SERVO_TIM5_CD_Init(void); //舵机CD接口初始化 void AX_SERVO_TIM5_C_SetAngle(uint16_t angle); //舵机C控制 void AX_SERVO_TIM5_D_SetAngle(uint16_t angle); //舵机D控制
void AX_SERVO_TIM3_EFGH_Init(void); //舵机EFGH接口初始化 void AX_SERVO_TIM3_E_SetAngle(uint16_t angle); //舵机E控制 void AX_SERVO_TIM3_F_SetAngle(uint16_t angle); //舵机F控制 void AX_SERVO_TIM3_G_SetAngle(uint16_t angle); //舵机G控制 void AX_SERVO_TIM3_H_SetAngle(uint16_t angle); //舵机H控制
void AX_SERVO_TIM4_IJKL_Init(void); //舵机IJKL接口初始化 void AX_SERVO_TIM4_I_SetAngle(uint16_t angle); //舵机I控制 void AX_SERVO_TIM4_J_SetAngle(uint16_t angle); //舵机J控制 void AX_SERVO_TIM4_K_SetAngle(uint16_t angle); //舵机K控制 void AX_SERVO_TIM4_L_SetAngle(uint16_t angle); //舵机L控制
void AX_SERVO_TIM1_MNOP_Init(void); //舵机MNOP接口初始化 void AX_SERVO_TIM1_M_SetAngle(uint16_t angle); //舵机M控制 void AX_SERVO_TIM1_N_SetAngle(uint16_t angle); //舵机N控制 void AX_SERVO_TIM1_O_SetAngle(uint16_t angle); //舵机O控制 void AX_SERVO_TIM1_P_SetAngle(uint16_t angle); //舵机P控制 |
软件说明
函数AX_SERVO_TIMX_XX_Init()完成舵机控制定时器和IO的初始化,TIMX为对应的定时器,XX为初始化所包含的舵机接口,例如AX_SERVO_TIM3_EFGH_Init()初始化定时器TIM3,包含的接口为EFGH。while循环中通过AX_SERVO_TIMX_X_SetAngle()设置舵机的旋转角度,实现16路舵机30°、90°、150°间隔运动。主程序代码如下。
|
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 舵机控制例程***\r\n\r\n");
//模块初始化及配置 AX_SERVO_TIM2_AB_Init(); AX_SERVO_TIM5_CD_Init(); AX_SERVO_TIM3_EFGH_Init(); AX_SERVO_TIM4_IJKL_Init(); AX_SERVO_TIM1_MNOP_Init();
//X-API测试:16路舵机控制测试 printf("*16路舵机控制测试\r\n");
while (1) { printf("*30度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(300); AX_SERVO_TIM2_B_SetAngle(300); AX_SERVO_TIM5_C_SetAngle(300); AX_SERVO_TIM5_D_SetAngle(300); AX_SERVO_TIM3_E_SetAngle(300); AX_SERVO_TIM3_F_SetAngle(300); AX_SERVO_TIM3_G_SetAngle(300); AX_SERVO_TIM3_H_SetAngle(300); AX_SERVO_TIM4_I_SetAngle(300); AX_SERVO_TIM4_J_SetAngle(300); AX_SERVO_TIM4_K_SetAngle(300); AX_SERVO_TIM4_L_SetAngle(300); AX_SERVO_TIM1_M_SetAngle(300); AX_SERVO_TIM1_N_SetAngle(300); AX_SERVO_TIM1_O_SetAngle(300); AX_SERVO_TIM1_P_SetAngle(300); AX_Delayms(1000);
printf("*90度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(900); AX_SERVO_TIM2_B_SetAngle(900); AX_SERVO_TIM5_C_SetAngle(900); AX_SERVO_TIM5_D_SetAngle(900); AX_SERVO_TIM3_E_SetAngle(900); AX_SERVO_TIM3_F_SetAngle(900); AX_SERVO_TIM3_G_SetAngle(900); AX_SERVO_TIM3_H_SetAngle(900); AX_SERVO_TIM4_I_SetAngle(900); AX_SERVO_TIM4_J_SetAngle(900); AX_SERVO_TIM4_K_SetAngle(900); AX_SERVO_TIM4_L_SetAngle(900); AX_SERVO_TIM1_M_SetAngle(900); AX_SERVO_TIM1_N_SetAngle(900); AX_SERVO_TIM1_O_SetAngle(900); AX_SERVO_TIM1_P_SetAngle(900); AX_Delayms(1000);
printf("*150度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(1500); AX_SERVO_TIM2_B_SetAngle(1500); AX_SERVO_TIM5_C_SetAngle(1500); AX_SERVO_TIM5_D_SetAngle(1500); AX_SERVO_TIM3_E_SetAngle(1500); AX_SERVO_TIM3_F_SetAngle(1500); AX_SERVO_TIM3_G_SetAngle(1500); AX_SERVO_TIM3_H_SetAngle(1500); AX_SERVO_TIM4_I_SetAngle(1500); AX_SERVO_TIM4_J_SetAngle(1500); AX_SERVO_TIM4_K_SetAngle(1500); AX_SERVO_TIM4_L_SetAngle(1500); AX_SERVO_TIM1_M_SetAngle(1500); AX_SERVO_TIM1_N_SetAngle(1500); AX_SERVO_TIM1_O_SetAngle(1500); AX_SERVO_TIM1_P_SetAngle(1500); AX_Delayms(1000); } } |
实现效果
可在16路舵机接口中任意一路插入舵机,舵机即可循环30°、90°、150°运动,接口顺序如下图,使用时注意电源供电能力及舵机的功率,一般电脑USB供电(500mA)可为1路GS90舵机提供电源,如果插入多路舵机,或舵机负载扭矩大,也可通过VIN-5V接口供电。

参考
https://m.guokr.com/article/5292/#weixin.qq.com
玩转X-CTR100 l STM32F4 l 舵机控制的更多相关文章
- 玩转X-CTR100 l STM32F4 l 定时器时间测量
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 使用处理器内部硬件定 ...
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
随机推荐
- js分号的重要性
js中语句末尾可以不加分号, 很多时候在做练习或写几个页面时,我都是不会加的.虽然知道加了会好一点.但就是觉得很敲一句就要多按一次分号键(;)来加分号,而不加也不怎么样,然后就不想加了. 也听说在对j ...
- python flask demo
from flask import Flask, jsonify from flask import abort from flask import make_response from flask ...
- Python day9函数部分
函数的学习:函数对于一门编程语言来说挺重要的,尤其是c语言,是完全使用函数来编写的 1.函数的定义:逻辑结构化和过程化的一种编程方法 def squre(x): "求一个数的平方 retur ...
- react新的生命周期
一. react16当前生命周期 componentWillMountrender前,所以setState不会重新渲染,服务端渲染唯一调用,推荐用constructor代替之 render compo ...
- Python 爬虫-Robots协议
2017-07-25 21:08:16 一.网络爬虫的规模 二.网络爬虫的限制 • 来源审查:判断User‐Agent进行限制 检查来访HTTP协议头的User‐Agent域,只响应浏览器或友好爬虫的 ...
- [转]TOMCAT启动提示NB: JAVA_HOME should point to a JDK not a JRE解决
来源:http://blog.csdn.net/caozhongyan/article/details/6602759 本人使用的Tomcat版本为apache-tomcat-6.0.18(用的是解压 ...
- Android出现declaration of org.apache.http.message.BasicLineFormatter appears in /system/framework/
这是由于使用了CloseableHttpClient造成的,把 CloseableHttpClient httpclient = HttpClients.createDefault(); Closea ...
- 开发环境运行正常,发布服务器后提示HTTP 错误 403.14 - Forbidden
一.发布服务器后报错 今天在项目发布中遇到一件奇怪的事,开发完成的项目,发布到服务器上时 1. 发布到A服务器,一切正常 2. 发布到B服务器,提示403服务器错误 在同事电脑上重新打包发布代码,并发 ...
- POJ-2689 Prime Distance (两重筛素数,区间平移)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13961 Accepted: 3725 D ...
- 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
第一种:使用wsimport是JDK自带的工具,来生成 生成java客户端代码常使用的命令参数说明: 参数 说明 -p 定义客户端生成类的包名称 -s 指定客户端执行类的源文件存放目录 -d 指定客户 ...