我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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 舵机控制的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l 定时器时间测量

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 使用处理器内部硬件定 ...

  2. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  3. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  4. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  5. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  6. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  7. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  8. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  9. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

随机推荐

  1. ACM-ICPC 2018 徐州赛区网络预赛H Ryuji doesn't want to study(树状数组)题解

    题意:给你数组a,有两个操作 1 l r,计算l到r的答案:a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r] (L is the length of [ l, r ] that ...

  2. BZOJ 3992 【SDOI2015】 序列统计

    题目链接:序列统计 我来复习板子了……这道题也是我写的第一发求原根啊? 求原根方法: 从小到大依次枚举原根.设当前枚举的原根为\(x\),模数为\(p\),\(p-1\)的质因数分别为\(p_1,p_ ...

  3. Java中关于Arrays.asList()的操作

    我们可以通过Arrays.asList() 产生一个List,但是要记住,我们通过Arrays.asList产生的list是基于一个固定大小的数组的, 仅支持那些不会改变数组大小的操作.所以我们在使用 ...

  4. python json 文件读写

    import json test_dict = {,,,} print(test_dict) print(type(test_dict))#字典 #dumps 将数据转换成字符串 json_str = ...

  5. Jmeter性能测试 对服务器使用资源进行监控之ServerAgent插件使用

    百度云盘友情赞助地址如下: 链接:https://pan.baidu.com/s/1cpAeOcfFX8kss1eo79UD9g 密码:b8o7 在windows上或者linux上打开服务 用Jmet ...

  6. MongoDB(课时19 数据删除)

    3.4.4 删除数据 在MongoDB里面删除数据使用“remove()”.但是这个函数有两个可选项: 删除条件:满足条件的数据被删除. 只删除一个数据:设置为true或者是1表示只删除一个. 范例: ...

  7. Qt5_Oracle

    1.编译驱动: 1.1.源码路径:F:\ZC_software_installDir\Qt5.3.2_vs2010\5.3\Src\qtbase\src\plugins\sqldrivers\ 里面有 ...

  8. Android Toast.makeText用法

    Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.下面用一个实例来看看如何使用Toast ...

  9. php file_get_contents计时读取一个文件/页面 防止读取不到内容

    php file_get_contents计时读取一个文件/页面 防止读取不到内容 $url = 'http://www.baidu.com/index.php'; $opts = array( 'h ...

  10. LeetCode--108--将有序数组转化为二叉搜索树

    问题描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10 ...