📄 driver.c
字号:
#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 + -