两轮差速驱动的机器人运动控制程序框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014695839/article/details/81137574

这段时间在实验室做一个两轮差速驱动的机器人,控制机器人运动的程序框架在此记录一下。

机器人的两个轮子分别由两个直流电机驱动,电机上带有编码器,可以测量轮子的转速和计算机器人的行程。机器人电机的控制由STM32来完成,STM32要根据上位机发送的命令控制机器人完成前进、后退和转弯等动作。STM32上实现的机器人控制的程序框架如下:

​
//wheels.c

#include "wheels.h"

//左轮剩余运动时间
uint16_t WHEELS_RestTimeLeft;
//右轮剩余运动时间
uint16_t WHEELS_RestTimeRight;

//左轮目标速度
float WHEELS_TargetSpeedLeft;
//右轮目标速度
float WHEELS_TargetSpeedRight;

//左轮速度
float WHEELS_CurrentSpeedLeft;
//右轮速度
float WHEELS_CurrentSpeedRight;

void WHEELS_Init()
{
	//========================直流电机配置==============================
    
	/*定时器配置PWM*/
	

	//=========================编码器配置===============================

	/*定时器配置为编码器模式*/
	
	//=========================初始化变量==============================
	WHEELS_RestTimeLeft = 0;
	WHEELS_RestTimeRight = 0;
	WHEELS_TargetSpeedLeft = 0;
	WHEELS_TargetSpeedRight = 0;
	WHEELS_CurrentSpeedLeft = 0;
	WHEELS_CurrentSpeedRight = 0;
}

void WHEELS_DriveLeft(float speed, uint16_t msec)
{
	WHEELS_RestTimeLeft = msec;
	WHEELS_TargetSpeedLeft = speed;
}

void WHEELS_DriveRight(float speed, uint16_t msec)
{
	WHEELS_RestTimeRight = msec;
	WHEELS_TargetSpeedRight = speed;
}


//函数1ms调用一次
void WHEELS_Run()
{
	//=========================左轮===============================
	if(WHEELS_RestTimeLeft > 0)
	{
		WHEELS_RestTimeLeft --;
	}
	else
	{
		WHEELS_TargetSpeedLeft = 0;
	}
	
	/*计算当前速度WHEELS_CurrentSpeedLeft*/
	
	
	/*根据当前速度和目标速度的误差重新设置占空比*/ 
	
	
	
	//=========================右轮===============================
	if(WHEELS_RestTimeRight > 0)
	{
		WHEELS_RestTimeRight --;
	}
	else
	{
		WHEELS_TargetSpeedRight = 0;
	}
	
	/*计算当前速度WHEELS_CurrentSpeedRight*/
	
	
	/*根据当前速度和目标速度的误差重新设置占空比*/ 
	
}

​

WHEEL_Init函数:机器人的电机由STM32定时器的PWM控制,编码器通过定时器的编码器模式进行计数,因此WHEEL_Init函数对需要用到的定时器进行配置,并且初始化相关的变量。

WHEELS_DriveLeft / WHEELS_DriveRight函数:这两个函数可以在任意时刻调用,调用后机器人轮子以speed(参数)的线速度运动msec(参数)毫秒。在mesc毫秒内再次调用这个函数,可让机器人持续运动。

WHEELS_Run函数:这个函数需要1毫秒调用一次,有两个功能,一个功能是检测电机运动时长是否达到目标时长;另一个功能是检测轮子的当前的速度,然后调整轮子的速度至目标速度。

猜你喜欢

转载自blog.csdn.net/u014695839/article/details/81137574
今日推荐