资讯专栏INFORMATION COLUMN

四足机器人——舵机控制

cnTomato / 1756人阅读

摘要:延时函数初始化定时器初始化对应度对应度对应度对应度对应度驱动模块驱动程序主函数延时函数初始化初始化舵机驱动

目录

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; // sleep			pca_write(pca_mode1, newmode); // go to sleep			pca_write(pca_pre, prescale); // set the prescaler			pca_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");}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123604.html

相关文章

  • 四足机器狗——12自由度舵机狗DIY(一)

    摘要:四足仿生机器人具有高机动性,负载能力和适应能力强,可运用于物资运输抢险救援等方面,具有广阔前景。由于制作电机狗需要高昂的成本。自主设计制造一款舵机狗来学习研究四足机器狗的步态算法是一件性价比极高且很有意义的一件事。 文章目录 前言 一、初步了解四足结构 1.1.2串联机构 1.2 ...

    不知名网友 评论0 收藏0
  • 白泽四足器人Opencat程序玩法之——下载安装配置WiFi app

    摘要:导航在这里白泽四足机器人导航贴白泽四足机器人导航贴给模块烧录透传程序这个程序烧录进模块之后,它就可以接收手机指令了。然后我们去查看机器人的地址,在设置那里进行地址修改然后点击右上角的按钮就可以了连上机器人了。 导航在这里:白泽四足机器人导航贴 1.给esp8266模块烧录透传程序 这个程序烧...

    不知名网友 评论0 收藏0
  • TFmini与舵机结合的器人小车避障应用方案

    摘要:舵机接线小车避障原理小车启动后,小车开始向前运动。搭载的外部电源过重时,会影响小车车轮的摩擦力,可能两个车轮的转速不一致,导致小车并不能按照轨迹行驶。小车车轮在光滑地面有可能造成空转的现象,导致小车不能走直线。 1.试验设备及接线 1.1实验设备 • MiniQ 桌面机器人底盘showImg(https://segmentfault.com/img/bVbu59l); 底盘直...

    raoyi 评论0 收藏0
  • 10. STM32——PWM 控制舵机(超声波感应开盖垃圾桶)

    摘要:中央对齐模式向上计数时当时通道为无效电平,否则为有效电平向下计数时一旦通道为有效电平,否则为无效电平。一般来说,舵机接收的信号频率为,即周期为。 STM32——P...

    jasperyang 评论0 收藏0
  • STM32CubeMX笔记(9)--定时器生成PWM特定波形,控制舵机转动

    摘要:只能在度到度之间运动,超过范围,舵机轻则齿轮打坏,重则烧坏内部电路舵机能度转动能控制转速。相关定时器的参数设置定时器为例编写相关的函数文件相关函数开启添加定时器的通道和通道的生成开启使能函数,放置于到中的用户代码区。 ...

    darryrzhong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<