四足机器人——舵机控制
目录
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");
}
四足机器人——舵机控制相关推荐
- 四足机器人——12自由度舵机狗DIY(二)
目录 一.四足机器人步态研究控制的现状 1.1目前的三种控制策略 <1>基于静态稳定的控制方法. <2>基于动力学模型的控制方法. <3>基于生物所具有的神经性调节 ...
- 第一篇----行走控制的研究现状:双足机器人四足机器人
最近打算入门双足机器人.四足机器人,通过在网上搜索,整理一份比较全面的介绍目前发展状况的资料. 需要关注的几个学术大牛人物 Marc Raibert 网站为:MIT Leg Laboratory, 网 ...
- 四足机器人|机器狗|仿生机器人|多足机器人|Adams仿真|Simulink仿真|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!
四足机器人|机器狗|仿生机器人|多足机器人|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!QQ:1096474659 基于CPG的四 ...
- Arduino白泽四足机器人——matlab逆运动学求解
基于"白泽"四足机器人足端轨迹的插值方法 目录 1 应用背景 2 模型建立 3 MATLAB对足端轨迹进行拟合插值 4 结果与分析 5 matlab逆运动学程序 1 应用背景 近年 ...
- 基于STM32与PCA9685制作四足机器人(代码开源)
前言:本文为手把手教学基于STM32的四足机器人项目--JDY-31蓝牙控制,特别地,本次项目采用的是STM32作为MCU.四足机器人的支架为3D打印件,SG90舵机驱动机器人实现姿态 ...
- 【四足机器人】学习笔记 单腿逆运动学和站立姿态控制
[四足机器人]学习笔记 单腿逆运动学和站立姿态控制 一.四足机器人单腿逆运动学原理 二.四足机器人站立姿态控制原理 近期,博主在古月居学习关于四足机器人的相关部分知识,从阳炼老师的四足机器人控制与仿真 ...
- 并联四足机器人项目开源教程(三)--- 使用webots搭建仿真环境
这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...
- [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划
关键词:trot步态,walk步态,步态规划 目录 步态基础概念介绍 TROT步态原理 TROT代码实现 WALK步态原理 WALK代码实现 引用文献: 写在前面 这篇文章介绍的是,这篇文章https ...
- 并联四足机器人项目开源教程(一)--- 机器人学导论的学习
这个是本人在大三期间做的项目 ---- 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项.接下来我会将这个机器人的控制部分所有代码进行开源,并配 ...
最新文章
- 6.python探测Web服务质量方法之pycurl模块
- 2019全国普通高校学科竞赛排行榜发布
- C 家族程序设计语言发展史
- 077_html5拖放
- EJB 3.x:生命周期和并发模型(第2部分)
- 帝国cms搜索php分页,帝国cms V7.2自定义分页(列表分页,内容分页)样式步骤
- chatbot2 RNN语言模型
- php 后台存cookie前台js中文读取cookie的办法
- vhdl8三种方式实现38译码器
- react代码编辑器 react-ace
- Kubernetes 学习总结(24)—— Kubernetes 滚动更新、蓝绿发布、金丝雀发布等发布策略详解
- 大数据可视化之MyBatis笔记(1)
- python大数据读取分析_python如何读取大数据
- beeline登录配置
- 计算机视觉实战的深度学习实战二:图像预处理
- QT生成动态链接库及调用详细步骤
- 码农饭碗不保——ChatGPT正在取代Coder
- Python 操作Excel(xlrd和xlwt)
- html a 下划线
- 小公司怎样实施大系统
热门文章
- 水平集图像分割序列——Order LBF模型
- 在c语言如何对拨码开关编程,实验四 指示灯和拨码开关实验_百度文库(15页)-原创力文档...
- 如何在电脑上安装喜马拉雅FM?
- MFC中简易屏幕保护程序的实现
- Laravel 使用 bearychat 通知你的系统异常吧
- 网狐国际U3D客户端无法连接旗舰大联盟服务解决
- 思科华为交换设备安全配置命令对比
- L2-030 冰岛人(并查集)
- php 通过坐标获取省市,通过php根据地理坐标来获取国家、省份、城市,及周边数据类...
- 重启:第六届中国开源年会 (COSCon'21) 1+N