目录

1、51定时器控制单个舵机

2、51定时器控制多路舵机

3、stm32控制舵机

4、pca9685驱动模块


1、51定时器控制单个舵机

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分,总间隔为2ms,比如说180度伺服角度,对应的关系如下。

void main(void)
{InitTimer0();  //定时器0初始化EA = 1;           //开总中断while(1)      //大循环{  Servo0PwmDuty = 500;       //脉冲宽度在500微秒,对应-90°DelayMs(1000);        //延时1秒Servo0PwmDuty = 1000;    //脉冲宽度在1000微秒,对应-45°DelayMs(1000);Servo0PwmDuty = 1500;DelayMs(1000);Servo0PwmDuty = 2000;DelayMs(1000);Servo0PwmDuty = 2500;DelayMs(1000);}
}

2、51定时器控制多路舵机

void main(void)
{uint8 i;InitTimer0();  //定时器0初始化EA = 1;           //开总中断while(1)      //大循环{  for(i = 0;i<8;i++)ServoPwmDuty[i] = 500;     //脉冲宽度在500微秒,对应-90°DelayMs(1000);                    //延时1秒for(i = 0;i<8;i++)ServoPwmDuty[i] = 1000;      //脉冲宽度在1000微秒,对应-45°DelayMs(1000);for(i = 0;i<8;i++)ServoPwmDuty[i] = 1500;       //脉冲宽度在1500微秒,对应0°DelayMs(1000);                 //延时1秒for(i = 0;i<8;i++)ServoPwmDuty[i] = 2000;      //脉冲宽度在2000微秒,对应45°DelayMs(1000);for(i = 0;i<8;i++)ServoPwmDuty[i] = 2500;        //脉冲宽度在2500微秒,对应90°DelayMs(1000);                    //延时1秒}
}

3、stm32控制舵机

PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形.

pwm的占空比,就是指高电平保持的时间,与该pwm时钟周期时间之比。

在应用中就是通过调节pwm占空比来控制,也就是一个周期中高电平所占的百分比来控制舵机的转角的。

在代码中要特别注意的是时基结构体的TIM_Period(自动重装载寄存器值,简称arr)和TIM_Prescaler(预分频寄存器值,简称psc),因为这两个决定了输出PWM信号的周期。具体的周期计算公式为:周期=(arr+1)*(psc+1)/CLK。其中CLK为计数器的时钟频率,我的是72MHZ,也就是72000000。最后计算结果单位为秒,结果为0.02s,也就是20ms。这样的配置就是为了让输出的PWM信号达到前面说到的舵机要求的20ms周期。

int main(void)
{int delay_time;delay_init(); //延时函数初始化TIM_Init(); //定时器初始化while(1){delay_ms(1000);TIM_SetCompare1(TIM1, 175); //对应180度delay_ms(1000);TIM_SetCompare1(TIM1, 180); //对应135度delay_ms(1000);TIM_SetCompare1(TIM1, 185); //对应90度delay_ms(1000);TIM_SetCompare1(TIM1, 190); //对应45度delay_ms(1000);TIM_SetCompare1(TIM1, 195); //对应0度}
}

4、pca9685驱动模块

stm32驱动程序:

#include "pca9685.h"
#include "myiic.h"
#include "delay.h"
#include "math.h"void pca_write(u8 adrr,u8 data)
{ IIC_Start();IIC_Send_Byte(pca_adrr);IIC_Wait_Ack();IIC_Send_Byte(adrr);IIC_Wait_Ack();IIC_Send_Byte(data);IIC_Wait_Ack();IIC_Stop();
}u8 pca_read(u8 adrr)
{u8 data;IIC_Start();IIC_Send_Byte(pca_adrr);IIC_Wait_Ack();IIC_Send_Byte(adrr);IIC_Wait_Ack();IIC_Start();IIC_Send_Byte(pca_adrr|0x01);IIC_Wait_Ack();data=IIC_Read_Byte(0);IIC_Stop();return data;
}void pca_setfreq(float freq)
{u8 prescale,oldmode,newmode;double prescaleval;freq *= 0.92; prescaleval = 25000000;prescaleval /= 4096;prescaleval /= freq;prescaleval -= 1;prescale =floor(prescaleval + 0.5f);oldmode = pca_read(pca_mode1);newmode = (oldmode&0x7F) | 0x10; // sleeppca_write(pca_mode1, newmode); // go to sleeppca_write(pca_pre, prescale); // set the prescalerpca_write(pca_mode1, oldmode);delay_ms(2);pca_write(pca_mode1, oldmode | 0xa1);
}
void pca_setpwm(u8 num, u32 on, u32 off)
{pca_write(LED0_ON_L+4*num,on);pca_write(LED0_ON_H+4*num,on>>8);pca_write(LED0_OFF_L+4*num,off);pca_write(LED0_OFF_H+4*num,off>>8);
}
void Servo_Init(float hz,u8 angle)
{u32 off=0;                    IIC_Init();pca_write(pca_mode1,0x0);pca_setfreq(hz);              off=(u32)(145+angle*2.4);pca_setpwm(0,0,off);pca_setpwm(1,0,off);pca_setpwm(2,0,off);pca_setpwm(3,0,off);pca_setpwm(4,0,off);pca_setpwm(5,0,off);pca_setpwm(6,0,off);pca_setpwm(7,0,off);pca_setpwm(8,0,off);pca_setpwm(9,0,off);pca_setpwm(10,0,off);pca_setpwm(11,0,off);pca_setpwm(12,0,off);pca_setpwm(13,0,off);pca_setpwm(14,0,off);pca_setpwm(15,0,off);delay_ms(500);
}
void Servo_angle(u8 num,u8 angle)
{u32 off = 0;off = (u32)(158+angle*2.2);pca_setpwm(num,0,off);
}

stm32主函数:

int main(void)
{   delay_init();//延时函数初始化Servo_Init(50,90);//初始化舵机驱动delay_ms(1000);uart_init(9600);Servo_angle(0,90);printf("this is a drill");
}

四足机器人——舵机控制相关推荐

  1. 四足机器人——12自由度舵机狗DIY(二)

    目录 一.四足机器人步态研究控制的现状 1.1目前的三种控制策略 <1>基于静态稳定的控制方法. <2>基于动力学模型的控制方法. <3>基于生物所具有的神经性调节 ...

  2. 第一篇----行走控制的研究现状:双足机器人四足机器人

    最近打算入门双足机器人.四足机器人,通过在网上搜索,整理一份比较全面的介绍目前发展状况的资料. 需要关注的几个学术大牛人物 Marc Raibert 网站为:MIT Leg Laboratory, 网 ...

  3. 四足机器人|机器狗|仿生机器人|多足机器人|Adams仿真|Simulink仿真|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!

    四足机器人|机器狗|仿生机器人|多足机器人|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!QQ:1096474659 基于CPG的四 ...

  4. Arduino白泽四足机器人——matlab逆运动学求解

    基于"白泽"四足机器人足端轨迹的插值方法 目录 1 应用背景 2 模型建立 3 MATLAB对足端轨迹进行拟合插值 4 结果与分析 5 matlab逆运动学程序 1 应用背景 近年 ...

  5. 基于STM32与PCA9685制作四足机器人(代码开源)

            前言:本文为手把手教学基于STM32的四足机器人项目--JDY-31蓝牙控制,特别地,本次项目采用的是STM32作为MCU.四足机器人的支架为3D打印件,SG90舵机驱动机器人实现姿态 ...

  6. 【四足机器人】学习笔记 单腿逆运动学和站立姿态控制

    [四足机器人]学习笔记 单腿逆运动学和站立姿态控制 一.四足机器人单腿逆运动学原理 二.四足机器人站立姿态控制原理 近期,博主在古月居学习关于四足机器人的相关部分知识,从阳炼老师的四足机器人控制与仿真 ...

  7. 并联四足机器人项目开源教程(三)--- 使用webots搭建仿真环境

    这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...

  8. [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

    关键词:trot步态,walk步态,步态规划 目录 步态基础概念介绍 TROT步态原理 TROT代码实现 WALK步态原理 WALK代码实现 引用文献: 写在前面 这篇文章介绍的是,这篇文章https ...

  9. 并联四足机器人项目开源教程(一)--- 机器人学导论的学习

    这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...

最新文章

  1. 6.python探测Web服务质量方法之pycurl模块
  2. 2019全国普通高校学科竞赛排行榜发布
  3. C 家族程序设计语言发展史
  4. 077_html5拖放
  5. EJB 3.x:生命周期和并发模型(第2部分)
  6. 帝国cms搜索php分页,帝国cms V7.2自定义分页(列表分页,内容分页)样式步骤
  7. chatbot2 RNN语言模型
  8. php 后台存cookie前台js中文读取cookie的办法
  9. vhdl8三种方式实现38译码器
  10. react代码编辑器 react-ace
  11. Kubernetes 学习总结(24)—— Kubernetes 滚动更新、蓝绿发布、金丝雀发布等发布策略详解
  12. 大数据可视化之MyBatis笔记(1)
  13. python大数据读取分析_python如何读取大数据
  14. beeline登录配置
  15. 计算机视觉实战的深度学习实战二:图像预处理
  16. QT生成动态链接库及调用详细步骤
  17. 码农饭碗不保——ChatGPT正在取代Coder
  18. Python 操作Excel(xlrd和xlwt)
  19. html a 下划线
  20. 小公司怎样实施大系统

热门文章

  1. 水平集图像分割序列——Order LBF模型
  2. 在c语言如何对拨码开关编程,实验四 指示灯和拨码开关实验_百度文库(15页)-原创力文档...
  3. 如何在电脑上安装喜马拉雅FM?
  4. MFC中简易屏幕保护程序的实现
  5. Laravel 使用 bearychat 通知你的系统异常吧
  6. 网狐国际U3D客户端无法连接旗舰大联盟服务解决
  7. 思科华为交换设备安全配置命令对比
  8. L2-030 冰岛人(并查集)
  9. php 通过坐标获取省市,通过php根据地理坐标来获取国家、省份、城市,及周边数据类...
  10. 重启:第六届中国开源年会 (COSCon'21) 1+N