⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.c

📁 LPC2129实现从SPI通讯和两个串口定时器中断
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "driver.h"
#include "uart1.h"
#include "InitDev.h"
#include  "I2cInt.h"
#include "comm.h"
    uint8 inn=1;
    int sf;			   //锁定航向方向值
	uint8 Kp,Ti,Td;
//	float T=0.1;
 //   uint8 T=0.1;	  
	int16 A,B,C;
	int speed;
	int16 U_k,U_kk=0,ek,ekk=0,ekkk=0;
	uint8 Er;
	int16 Ur;

/****************************************************************************
* 名称:travel_along(void)
* 功能:直线前进
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void travel_along()
{
	SendSpeedLR(-30,30);
}
/****************************************************************************
* 名称:turn_left(void)
* 功能:左转
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void turn_left()
{
	SendSpeedLR(30,30);
}
/****************************************************************************
* 名称:turn_right(void)
* 功能:右转
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void turn_right()
{
	SendSpeedLR(-30,-30);
}
/****************************************************************************
* 名称:stop(void)
* 功能:停止
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void stop()
{ 	
	SendSpeedLR(0,0);
}
/****************************************************************************
* 名称:travel_back(void)
* 功能:初台化硬件
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void travel_back()
{											   
	SendSpeedLR(30,-30);
}
/****************************************************************************
* 名称:go_come(void)
* 功能:往复
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void go_come(void)
{
	travel_along();
	Delay(1000);
	travel_back();
	Delay(1000);
}
/****************************************************************************
* 名称:square(void)
* 功能:走方形路线
* 入口参数:无      
* 出口参数:无
****************************************************************************/
void square(void)
{
	uint8 i=0;
	while(i<4)
	{
		travel_along();
		Delay(10000);
		turn_left();
		Delay(3000);
		i++;
	}	
}
/****************************************************************************
* 名称:SendSpeedLR(int SpeedL, int SpeedR)
* 功能:同时设置两个电机速度
* 入口参数:SpeedL   左电机速度,SpeedR 右电机速度    
* 出口参数:无
****************************************************************************/
void SendSpeedLR(int SpeedL, int SpeedR)
{
/* voyager */   	
	UART1_CS(2);
	V_set(0-SpeedL);	
 
	UART1_CS(1);
	V_set(SpeedR);
}
/****************************************************************************
* 名称:V_set(int TempSpeed)
* 功能:设置电机速度
* 入口参数:TempSpeed   要设置的速度值    
* 出口参数:无
****************************************************************************/

void V_set(int TempSpeed)
{
	uint8 chara[2]="V";

	cha_send(chara,1);
	data_send(TempSpeed);
	U1THR=0x0D;	 
	while((U1LSR&0x40)==0);  

	UART1_CS(4);

}
/****************************************************************************
* 名称:PID_set(uint8 type,uint8 pid)
* 功能:PID设置
* 入口参数:type 类型,pid 要设置的值      
* 出口参数:无
****************************************************************************/

void PID_set(uint8 type,uint8 pid)
{
	uint8 para[3];
	uint8 para_len;

	switch(type)
	{
	case 'p': 
		para[0]='P';
		para[1]='O';
		para[2]='R';
		para_len=3;
		break;
	case 'i':
		para[0]='I';
		para_len=1;
		break;
	case 'd':
		para[0]='D';
		para[1]='E';
		para[2]='R';
		para_len=3;					
	    break;
	default:
	    break;
	}
	cha_send(para,para_len);
	data_send(pid);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  

 }
/****************************************************************************
* 名称:AC_set(int acce)
* 功能:加速度设置
* 入口参数:acce 要设置的加速度值     
* 出口参数:无
****************************************************************************/

void AC_set(int acce)
{
	uint8 chara[3]="AC";
	cha_send(chara,2);
	data_send(acce);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}
/****************************************************************************
* 名称:set_SP(int mVel)
* 功能:设置最大限速 
* 入口参数: mVel:最大限速值    
* 出口参数:无
***************************************************************************/
void set_SP(int mVel)
{	 
	uint8 chara[3]="SP";
	cha_send(chara,2);
	data_send(mVel);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}
/****************************************************************************
* 名称:EEPSAV(void)
* 功能:保存设置
* 入口参数:无      
* 出口参数:无
****************************************************************************/
/**/
void EEPSAV()
{
	uint8 cha[7]="EEPSAV";
	cha_send(cha,6);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}
/****************************************************************************
* 名称:POS_control(uint8 rOra,int r,int mVel)
* 功能:位置控制
* 入口参数:rOra 模式选择,r 预定转数,mVel 允许的最大速度值      
* 出口参数:无
****************************************************************************/

void POS_control(uint8 rOra,int r,int mVel)
{	 
	uint8 chara[3];
	chara[0] = 'S';
	chara[1] = 'P';
	cha_send(chara,2);
	data_send(mVel);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
//	EEPSAV();

	chara[0]='L';
	if(rOra==1)
		chara[1]='A';
	if(rOra==2)
		chara[1]='R';
	cha_send(chara,2);
	data_send(r);
 	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  

	chara[0]='M';
	cha_send(chara,1);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}
/****************************************************************************
* 名称:Baud_set(int baud)
* 功能:设置波特率
* 入口参数:baud 波特率值      
* 出口参数:无
****************************************************************************/

void Baud_set(int baud)
{	
	uint8 chara[5]="Baud";  		
	cha_send(chara,4);
	data_send(baud);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}
/****************************************************************************
* 名称:GAC_get(void)
* 功能:获取加速度
* 入口参数:无      
* 出口参数:无
****************************************************************************/

int GAC_get()
{
	uint8 chara[4]="GAC";	
	int tempdata=0; 	
	cha_send(chara,3);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
/*	tempdata=rec_data(chara,3);				 */
	return tempdata;
 
}
/****************************************************************************
* 名称: GSP_get(void)
* 功能:获取最大速度
* 入口参数:无      
* 出口参数:无
****************************************************************************/

int GSP_get()
{
	uint8 chara[4]="GSP";
	int tempdata=0; 	
	cha_send(chara,3);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
	return tempdata;
}		
/****************************************************************************
* 名称:GPOR_get(void)
* 功能:获取比例系数
* 入口参数:无      
* 出口参数:无
****************************************************************************/

int GPOR_get()
{  	
	uint8 chara[5]="GPOR";
	int tempdata=0; 	
	cha_send(chara,4);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
	return tempdata;
}
/****************************************************************************
* 名称:GI_get(void)
* 功能:获取积分系数
* 入口参数:无      
* 出口参数:无
****************************************************************************/

int GI_get()
{
	uint8 chara[3]="GI";
	int tempdata=0; 	
	cha_send(chara,2);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
	return tempdata;
}
/****************************************************************************
* 名称:GDER_get(void)
* 功能:获取微分系
* 入口参数:无      
* 出口参数:无
****************************************************************************/

int GDER_get()
{
	uint8 chara[5]="GDER";
	int tempdata=0; 
	cha_send(chara,4);
	U1THR=0x0D;	
	while((U1LSR&0x40)==0);
	return tempdata;
}
/****************************************************************************
* 名称:POS_get(void)
* 功能:获取位置
* 入口参数:无      
* 出口参数:无
****************************************************************************/
int POS_get()
{  	
	uint8 chara[4]="POS";
	int tempdata=0; 	
	cha_send(chara,3);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
	return tempdata;

}
/****************************************************************************
* 名称:GN_vel(void)
* 功能:获取速度值
* 入口参数:无      
* 出口参数:无
****************************************************************************/
/*获取速度*/
int GN_get()
{	 	
  	uint8 chara[3]="GV";
 	int tempdata=0; 
	cha_send(chara,2);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
	return tempdata;
}
/****************************************************************************
* 名称:fconfig(void)
* 功能:恢复出厂设置,重起驱动器后生效
* 入口参数:无      
* 出口参数:无
****************************************************************************/

void fconfig()
{	
	uint8 chara[8]="fconfig";
	cha_send(chara,7);	
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
}
/****************************************************************************
* 名称:OVER(void)
* 功能:获取固定版本号
* 入口参数:无      
* 出口参数:无
****************************************************************************/

void OVER()
{
	uint8 chara[5]="0VER";
	uint8 temp;	
	IO0DIR|=0x00400000;	
	cha_send(chara,4);
	U1THR=0x0D;

	while(U1LSR&0x01!=0)
	{
		while((U0LSR&0x40)==0); 
		IO0SET=0x00400000;
		Delay(10);
		U0THR=temp;							
		Delay(10);
		IO0CLR=0x00400000;
	}
}
/****************************************************************************
* 名称:cha_send(uint8 cha[8],uint8 cha_len )
* 功能:向驱动器发送字符
* 入口参数:cha 要发送的字符,cha_len 字符长度      
* 出口参数:无
****************************************************************************/	 

void cha_send(uint8 cha[8],uint8 cha_len )
{
	uint8 i;
	for (i=0;i<cha_len;i++)
	{	
		U1THR = cha[i];	
	}	
}
/****************************************************************************
* 名称:data_send(int data)
* 功能:向驱动器发送数据
* 入口参数:data 要发送的数据      
* 出口参数:无
****************************************************************************/

void data_send(int data)
{
	uint8 i;
	uint8 tempdata[12];

	if(data > 0)
	{
		i = 0;
		while(data != 0)
		{
			tempdata[i] = 0x30 + data%10;

			i++;

			data /= 10;
		}	
	}
	else if(data < 0)
	{
		data = 0 - data;

		i = 0;
		while(data != 0)
		{
			tempdata[i] = 0x30 + data%10;

			i++;

			data /= 10;
		}
		
		tempdata[i] = '-';
		i++;	
	}
	else
	{	
		i = 0;
		tempdata[i] = '0';
		i++;
	}
	do
	{
		i--;
		U1THR = tempdata[i];				// 发送数据
		while((U1LSR&0x40)==0);
	}
	while(i>0);
}
/****************************************************************************
* 名称:rec_data(uint8 command[8],uint8 len)
* 功能:接受驱动器返回值
* 入口参数:command 要发送的指令 len 指令长度    
* 出口参数:无
****************************************************************************/

int rec_data(uint8 cha[8],uint8 cha_len)
{
/*	uint8 temp[12];
 	uint8 temp1,temp2;
	uint8 i=0;
   	IO0DIR|=0x00400000;
 */
	int tempdata=0x00000000; 	 

	cha_send(cha,cha_len);
	U1THR=0x0D;
	while((U1LSR&0x40)==0);
		UART1_CS(4);	 
	return tempdata;
}


/****************************************************************************
* 名称:GA_get(void)
* 功能:电流值读取
* 入口参数: 无    
* 出口参数:无
****************************************************************************/
void GA_get()
{

}
/****************************************************************************
* 名称:DFH(void)
* 功能:位置清零
* 入口参数: 无    
* 出口参数:无
****************************************************************************/
void DFH()
{
   uint8 chara[4]="dfh";
	cha_send(chara,3);	
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  
}	
/****************************************************************************
* 名称:PosModeInit(void)
* 功能:驱动器位置模式初始化
* 入口参数: 无    
* 出口参数:无
****************************************************************************/
void PosModeInit(void)
{
   uint8 chara[4]="LA0";
	cha_send(chara,3);	
	U1THR=0x0D;
	chara[0]='M';
	cha_send(chara,1);
	U1THR=0x0D;
	while( (U1LSR&0x40)==0 );  	
}
/****************************************************************************
* 名称:encres(void)
* 功能:设置合适的编码器分辨率
* 入口参数: 无    
* 出口参数:无
***************************************************************************/
void set_ENCRES(struct DATA_BUF *com_pk)
{   
   uint8 cha[7]="ENCRES";
   int temp,temp2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -