- 六足机器人主程序main.c
六足机器人主程序main.c__________点击查看代码
`
#include "stm32f10x_lib.h"
#include "stm32f10x_init.h"
#include "spider.h"
#include "spidertrack.h"
#include "camera.h"
#include "gps.h"
#ifndef RxBuffersize
#define RxBufferSize 5000
#endif
SPIDER MySpider;
SPIDER TmpSpider;
TRACKBUFFER MyTrackBuf;
CAMERA MyCamera;
GPS MyGPS;
extern vu8 RxBuffer[];
extern vu16 RxCounter ;
extern vu8 USART3_RXNE_DIS_FLAG ;
extern vu8 WiFiBuffer[];
extern vu8 wificount;
vu8 wifircv = 0;
void CntIncwithCheck(vu8* cnt)
{
*cnt++;
if(*cnt >= 100)
{
*cnt = 0;
}
}
int main(void)
{
u16 i = 0;
double height = 30.0;
u16 counter = 0;
u16 tmp = 0;
u16 angle = 0;
SPDRStructInit(&MySpider);
CameInit(&MyCamera);
GPSInit(&MyGPS);
Stm32f10x_Configuration(&MySpider);
TIM8_Configuration(&MyCamera);
Stm32f10x_Initialization();
SPDRChangeHeight(&MySpider, height);
TRACK_CreateAngle(&MySpider, &(MyTrackBuf.Trck));
TRACK_TransAngleToPulse(&MyTrackBuf,0,1);
SPDRRenovateAllData_S(&MySpider, MyTrackBuf.JointPulse[0]);
SPDRRenovateAllData_H(&MySpider);
Delay(1000);
for(i=0; i<20; i++)
{
height += 2.0;
SPDRChangeHeight(&MySpider, height);
TRACK_CreateAngle(&MySpider, &(MyTrackBuf.Trck));
TRACK_TransAngleToPulse(&MyTrackBuf,0,1);
SPDRRenovateAllData_S(&MySpider, MyTrackBuf.JointPulse[0]);
SPDRRenovateAllData_H(&MySpider);
Delay(100);
}
height = 0.0;
TmpSpider = MySpider;
TRACK_TurnRightStep(&MySpider, &TmpSpider, &MyTrackBuf);
MySpider = TmpSpider;
TRACK_TurnLeftStep(&MySpider, &TmpSpider, &MyTrackBuf);
MySpider = TmpSpider;
TRACK_StraightStep(&MySpider, &TmpSpider, &MyTrackBuf);
Delay(1000);
TRACK_TurnRight(&MySpider, &MyTrackBuf);
Delay(100);
TRACK_TurnLeft(&MySpider, &MyTrackBuf);
Delay(100);
TRACK_Straight(&MySpider, &MyTrackBuf);
Delay(100);
TRACK_Straight(&MySpider, &MyTrackBuf);
Delay(100);
TRACK_TurnRight(&MySpider, &MyTrackBuf);
Delay(100);
TRACK_TurnLeft(&MySpider, &MyTrackBuf);
SFTMRStart(10000);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
while(1)
{
if(1 == SFTMRCheck())
{
if(USART3_RXNE_DIS_FLAG == 1)
{
for(counter=0; counter<RxBufferSize; counter++)
{
GPSJudge(&MyGPS,RxBuffer[counter]);
}
USART_SendData(USART1, '#');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
for(counter=0; counter<11; counter++)
{
if(counter == 1)
{
USART_SendData(USART1, 0x30);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
}
USART_SendData(USART1, MyGPS.GPSLatitude[counter]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
}
USART_SendData(USART1, '$');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
USART_SendData(USART1, '#');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
for(counter=0; counter<12; counter++)
{
USART_SendData(USART1, MyGPS.GPSLongitude[counter]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
}
USART_SendData(USART1, '$');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{}
USART3_RXNE_DIS_FLAG = 0;
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
}
SFTMRStart(10000);
}
if(wifircv != wificount)
{
if(WiFiBuffer[wifircv] == 'H')
{
CntIncwithCheck(&wifircv);
angle = 0;
for(tmp=1; tmp<4; tmp++)
{
angle = angle * 10 + ( WiFiBuffer[wifircv] - 0x30 );
CntIncwithCheck(&wifircv);
}
CameMoveHorizontal(&MyCamera,angle);
angle = 0;
}
else if(WiFiBuffer[tmp] == 'V')
{
CntIncwithCheck(&wifircv);
angle = 0;
for(tmp=1; tmp<4; tmp++)
{
angle = angle * 10 + ( WiFiBuffer[wifircv] - 0x30 );
CntIncwithCheck(&wifircv);
}
CameMoveVertical(&MyCamera,angle);
angle = 0;
}
else if(WiFiBuffer[tmp] == 'S')
{
CntIncwithCheck(&wifircv);
angle = 0;
for(tmp=1; tmp<4; tmp++)
{
angle = angle * 10 + ( WiFiBuffer[wifircv] - 0x30 );
CntIncwithCheck(&wifircv);
}
switch(angle)
{
case 0x01:
TRACK_Straight(&MySpider, &MyTrackBuf);
break;
case 0x02:
TRACK_TurnLeft(&MySpider, &MyTrackBuf);
break;
case 0x03:
TRACK_TurnRight(&MySpider, &MyTrackBuf);
break;
case 0x04:
break;
default:
break;
}
angle = 0;
}
else
{
CntIncwithCheck(&wifircv);
}
}
}
}
#ifdef DEBUG
void assert_failed(u8* file, u32 line)
{
while (1)
{
}
}
#endif
`
- 六足机器人的十八个电机(自由度)的定义 spider.c和spider.h
六足机器人的基础数据自定义spider.c__________点击查看代码
#include "spider.h"
#include "stm32f10x_init.h"
void SPDRStructInit(SPIDER* spdr)
{
spdr->Spdr_State = SPDR_STAT_NONE;
spdr->Spdr_Height = 30.0;
spdr->Right_Front_Leg.Height = spdr->Spdr_Height;
spdr->Right_Front_Leg.Length = 140.0;
spdr->Right_Front_Leg.anglenear = 90.0;
spdr->Right_Front_Leg.Joint_Far = 540;
spdr->Right_Front_Leg.Joint_Mid = 540;
spdr->Right_Front_Leg.Joint_Near = 540;
spdr->Right_Middle_Leg.Height = spdr->Spdr_Height;
spdr->Right_Middle_Leg.Length = 140.0;
spdr->Right_Middle_Leg.anglenear = 90.0;
spdr->Right_Middle_Leg.Joint_Far = 540;
spdr->Right_Middle_Leg.Joint_Mid = 540;
spdr->Right_Middle_Leg.Joint_Near = 540;
spdr->Right_Back_Leg.Height = spdr->Spdr_Height;
spdr->Right_Back_Leg.Length = 120.0;
spdr->Right_Back_Leg.anglenear = 90.0;
spdr->Right_Back_Leg.Joint_Far = 540;
spdr->Right_Back_Leg.Joint_Mid = 540;
spdr->Right_Back_Leg.Joint_Near = 540;
spdr->Left_Front_Leg.Height = spdr->Spdr_Height;
spdr->Left_Front_Leg.Length = 140.0;
spdr->Left_Front_Leg.anglenear = 90.0;
spdr->Left_Front_Leg.Joint_Far = 540;
spdr->Left_Front_Leg.Joint_Mid = 540;
spdr->Left_Front_Leg.Joint_Near = 540;
spdr->Left_Middle_Leg.Height = spdr->Spdr_Height;
spdr->Left_Middle_Leg.Length = 140.0;
spdr->Left_Middle_Leg.anglenear = 90.0;
spdr->Left_Middle_Leg.Joint_Far = 540;
spdr->Left_Middle_Leg.Joint_Mid = 540;
spdr->Left_Middle_Leg.Joint_Near = 540;
spdr->Left_Back_Leg.Height = spdr->Spdr_Height;
spdr->Left_Back_Leg.Length = 120.0;
spdr->Left_Back_Leg.anglenear = 90.0;
spdr->Left_Back_Leg.Joint_Far = 540;
spdr->Left_Back_Leg.Joint_Mid = 540;
spdr->Left_Back_Leg.Joint_Near = 540;
}
void SPDRChangeHeight(SPIDER *spdr,double newheight)
{
spdr->Spdr_Height = newheight;
spdr->Right_Front_Leg.Height = newheight;
spdr->Right_Middle_Leg.Height = newheight;
spdr->Right_Back_Leg.Height = newheight;
spdr->Left_Front_Leg.Height = newheight;
spdr->Left_Middle_Leg.Height = newheight;
spdr->Left_Back_Leg.Height = newheight;
}
void SPDRRenovateAllData_H(SPIDER* spdr)
{
TIM_RFLJfarRenovate(spdr->Right_Front_Leg.Joint_Far);
TIM_RFLJmidRenovate(spdr->Right_Front_Leg.Joint_Mid);
TIM_RFLJnearRenovate(spdr->Right_Front_Leg.Joint_Near);
TIM_RMLJfarRenovate(spdr->Right_Middle_Leg.Joint_Far);
TIM_RMLJmidRenovate(spdr->Right_Middle_Leg.Joint_Mid);
TIM_RMLJnearRenovate(spdr->Right_Middle_Leg.Joint_Near);
TIM_RBLJfarRenovate(spdr->Right_Back_Leg.Joint_Far);
TIM_RBLJmidRenovate(spdr->Right_Back_Leg.Joint_Mid);
TIM_RBLJnearRenovate(spdr->Right_Back_Leg.Joint_Near);
TIM_LFLJfarRenovate(spdr->Left_Front_Leg.Joint_Far);
TIM_LFLJmidRenovate(spdr->Left_Front_Leg.Joint_Mid);
TIM_LFLJnearRenovate(spdr->Left_Front_Leg.Joint_Near);
TIM_LMLJfarRenovate(spdr->Left_Middle_Leg.Joint_Far);
TIM_LMLJmidRenovate(spdr->Left_Middle_Leg.Joint_Mid);
TIM_LMLJnearRenovate(spdr->Left_Middle_Leg.Joint_Near);
TIM_LBLJfarRenovate(spdr->Left_Back_Leg.Joint_Far);
TIM_LBLJmidRenovate(spdr->Left_Back_Leg.Joint_Mid);
TIM_LBLJnearRenovate(spdr->Left_Back_Leg.Joint_Near);
}
void SPDRRenovateAllData_S(SPIDER* spdr,u16* array)
{
spdr->Right_Front_Leg.Joint_Far = array[0];
spdr->Right_Front_Leg.Joint_Mid = array[1];
spdr->Right_Front_Leg.Joint_Near = array[2];
spdr->Right_Middle_Leg.Joint_Far = array[3];
spdr->Right_Middle_Leg.Joint_Mid = array[4];
spdr->Right_Middle_Leg.Joint_Near= array[5];
spdr->Right_Back_Leg.Joint_Far = array[6];
spdr->Right_Back_Leg.Joint_Mid = array[7];
spdr->Right_Back_Leg.Joint_Near = array[8];
spdr->Left_Front_Leg.Joint_Far = array[9];
spdr->Left_Front_Leg.Joint_Mid = array[10];
spdr->Left_Front_Leg.Joint_Near = array[11];
spdr->Left_Middle_Leg.Joint_Far = array[12];
spdr->Left_Middle_Leg.Joint_Mid = array[13];
spdr->Left_Middle_Leg.Joint_Near = array[14];
spdr->Left_Back_Leg.Joint_Far = array[15];
spdr->Left_Back_Leg.Joint_Mid = array[16];
spdr->Left_Back_Leg.Joint_Near = array[17];
}
六足机器人的基础数据自定义spider.h__________点击查看代码
#ifndef __SPIDER_H
#define __SPIDER_H
#include "stm32f10x_lib.h"
typedef enum
{
SPDR_STAT_NONE,
SPDR_STAT_STANDUP,
SPDR_STAT_WALKSTRAIGHT,
SPDR_STAT_TURNLEFT,
SPDR_STAT_TURNRIGHT,
SPDR_STAT_DRAW
}SPIDER_State;
typedef struct
{
u16 Joint_Far;
u16 Joint_Mid;
u16 Joint_Near;
double Length;
double Height;
double anglenear;
}SPIDER_Leg;
typedef struct
{
SPIDER_Leg Right_Front_Leg;
SPIDER_Leg Right_Middle_Leg;
SPIDER_Leg Right_Back_Leg;
SPIDER_Leg Left_Front_Leg;
SPIDER_Leg Left_Middle_Leg;
SPIDER_Leg Left_Back_Leg;
SPIDER_State Spdr_State;
double Spdr_Height;
void (*Spdr_Action)();
}SPIDER;
void SPDRStructInit(SPIDER* spdr);
void SPDRChangeHeight(SPIDER *spdr,double newheight);
void SPDRIdle(void);
void SPDRWalkStraight(void);
void SPDRTurnLeft(void);
void SPDRTurnRight(void);
void SPDRDrawLine(u16 length);
void SPDRRenovateAllData_S(SPIDER* spdr,u16* array);
void SPDRRenovateAllData_H(SPIDER* spdr);
void SPDRPrepareTurnLeft(SPIDER* spdr);
#endif
3. 六足步态程序spidertrack.c和spidertrack.h
六足步态程序spidertrack.c__________点击查看代码
#include "spidertrack.h"
#include "stm32f10x_lib.h"
#include <math.h>
#include "stm32f10x_init.h"
#define COMPUTEEDGE(A,b,c) (sqrt((b) * (b) + (c) * (c) - 2 * (b) * (c) * cos(A)))
#define COMPUTEANGLE(a,b,c) (acos(((b) * (b) + (c) * (c) - (a) * (a)) / (2 * (b) * (c))))
#define RFLZEROOFFSET (PI / 4 + (atan(1/3))/2)
#define RBLZEROOFFSET (PI / 4 + (atan(1/3))/2)
#define LFLZEROOFFSET (PI / 4 + (atan(1/3))/2)
#define LBLZEROOFFSET (PI / 4 + (atan(1/3))/2)
void TRACK_CreateAngle(SPIDER* spdr, TRACK* trck)
{
TRACK_LengthToAngle(spdr->Right_Front_Leg.Height, spdr->Right_Front_Leg.Length,
&(trck->jointangle[0]), &(trck->jointangle[1]));
trck->jointangle[2] = spdr->Right_Front_Leg.anglenear;
TRACK_LengthToAngle(spdr->Right_Middle_Leg.Height, spdr->Right_Middle_Leg.Length,
&(trck->jointangle[3]), &(trck->jointangle[4]));
trck->jointangle[5] = spdr->Right_Middle_Leg.anglenear;
TRACK_LengthToAngle(spdr->Right_Back_Leg.Height, spdr->Right_Back_Leg.Length,
&(trck->jointangle[6]), &(trck->jointangle[7]));
trck->jointangle[8] = spdr->Right_Back_Leg.anglenear;
TRACK_LengthToAngle(spdr->Left_Front_Leg.Height, spdr->Left_Front_Leg.Length,
&(trck->jointangle[9]), &(trck->jointangle[10]));
trck->jointangle[9] = 180 - trck->jointangle[9];
trck->jointangle[10] = 180 - trck->jointangle[10];
trck->jointangle[11] = spdr->Left_Front_Leg.anglenear;
TRACK_LengthToAngle(spdr->Left_Middle_Leg.Height, spdr->Left_Middle_Leg.Length,
&(trck->jointangle[12]), &(trck->jointangle[13]));
trck->jointangle[12] = 180 - trck->jointangle[12];
trck->jointangle[13] = 180 - trck->jointangle[13];
trck->jointangle[14] = spdr->Left_Middle_Leg.anglenear;
TRACK_LengthToAngle(spdr->Left_Back_Leg.Height, spdr->Left_Back_Leg.Length,
&(trck->jointangle[15]), &(trck->jointangle[16]));
trck->jointangle[15] = 180 - trck->jointangle[15];
trck->jointangle[16] = 180 - trck->jointangle[16];
trck->jointangle[17] = spdr->Left_Back_Leg.anglenear;
}
void TRACK_LengthToAngle(double height, double length, double* anglefar, double* anglemid)
{
double th1bar,th2bar;
double f1,f2;
double det;
double dth1,dth2;
double epsilon=0.1;
th1bar=-100*PI/180;
th2bar=135*PI/180;
f1=120*sin(th1bar)+85*sin(th2bar)+height;
f2=120*cos(th1bar)+85*cos(th2bar)+length;
while(f1>epsilon||f2>epsilon)
{
det=10200*(sin(th1bar)*cos(th2bar)-cos(th1bar)*sin(th2bar));
dth1=85/det*(sin(th2bar)*f1+cos(th2bar)*f2);
dth2=-120/det*(sin(th1bar)*f1+cos(th1bar)*f2);
th1bar+=dth1;
th2bar+=dth2;
f1=120*sin(th1bar)+85*sin(th2bar)+height;
f2=120*cos(th1bar)+85*cos(th2bar)+length;
}
*anglefar = (th2bar-th1bar)*180/PI-180;
*anglemid = th2bar*180/PI - 45;
}
void TRACK_TransAngleToPulse(TRACKBUFFER* trckbuf,u16 cnt,u8 type)
{
u8 i = 0;
switch(type)
{
case 1:
for(i=0; i<18; i++)
{
trckbuf->JointPulse[cnt][i] = ceil(trckbuf->Trck.jointangle[i] * 4 + 180);
}
break;
case 2:
for(i=0; i<18; i++)
{
trckbuf->JointPulseTLP[cnt][i] = ceil(trckbuf->Trck.jointangle[i] * 4 + 180);
}
break;
case 3:
for(i=0; i<18; i++)
{
trckbuf->JointPulseTL[cnt][i] = ceil(trckbuf->Trck.jointangle[i] * 4 + 180);
}
break;
case 4:
for(i=0; i<18; i++)
{
trckbuf->JointPulseTR[cnt][i] = ceil(trckbuf->Trck.jointangle[i] * 4 + 180);
}
default:
break;
}
}
void TRACK_StraightStepVerticalA(SPIDER* spdr, double legheight)
{
spdr->Right_Middle_Leg.Height = legheight;
spdr->Left_Front_Leg.Height = legheight;
spdr->Left_Back_Leg.Height = legheight;
}
void TRACK_StraightStepHorzontalA(SPIDER* spdr, double steplength)
{
double oldangle = spdr->Right_Middle_Leg.anglenear;
double oldlength = spdr->Right_Middle_Leg.Length;
double newlength = 0.0;
double newangle = 0.0;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = (PI - newangle) * 180 / PI;
spdr->Right_Middle_Leg.Length = newlength;
spdr->Right_Middle_Leg.anglenear = newangle;
oldangle = spdr->Left_Front_Leg.anglenear;
oldlength = spdr->Left_Front_Leg.Length;
oldangle = oldangle * PI / 180 ;
oldangle = PI - (oldangle + LFLZEROOFFSET);
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = (newangle - LFLZEROOFFSET) * 180 / PI;
spdr->Left_Front_Leg.anglenear = newangle;
spdr->Left_Front_Leg.Length = newlength;
oldangle = spdr->Left_Back_Leg.anglenear;
oldlength = spdr->Left_Back_Leg.Length;
oldangle = oldangle * PI / 180;
oldangle = PI - oldangle + LBLZEROOFFSET;
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = (newangle + LBLZEROOFFSET) * 180 / PI;
spdr->Left_Back_Leg.anglenear = newangle;
spdr->Left_Back_Leg.Length = newlength;
}
void TRACK_StraightStepVerticalB(SPIDER* spdr, double legheight)
{
spdr->Left_Middle_Leg.Height = legheight;
spdr->Right_Front_Leg.Height = legheight;
spdr->Right_Back_Leg.Height = legheight;
}
void TRACK_StraightStepHorzontalB(SPIDER* spdr, double steplength)
{
double oldangle = spdr->Right_Front_Leg.anglenear;
double oldlength = spdr->Right_Front_Leg.Length;
double newlength = 0.0;
double newangle = 0.0;
oldangle = oldangle * PI / 180 - RFLZEROOFFSET;
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = PI - newangle;
newangle = (newangle + RFLZEROOFFSET) * 180 / PI ;
spdr->Right_Front_Leg.Length = newlength;
spdr->Right_Front_Leg.anglenear = newangle;
oldangle = spdr->Right_Back_Leg.anglenear;
oldlength = spdr->Left_Back_Leg.Length;
oldangle = oldangle * PI / 180 + RBLZEROOFFSET;
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = PI - newangle;
newangle = (newangle - RBLZEROOFFSET) * 180 / PI;
spdr->Right_Back_Leg.anglenear = newangle;
spdr->Left_Back_Leg.Length = newlength;
oldangle = spdr->Left_Middle_Leg.anglenear;
oldlength = spdr->Left_Middle_Leg.Length;
oldangle = PI - oldangle * PI / 180;
newlength = COMPUTEEDGE(oldangle, oldlength, steplength);
newangle = COMPUTEANGLE(oldlength, newlength, steplength);
newangle = newangle * 180 / PI;
spdr->Left_Middle_Leg.anglenear = newangle;
spdr->Left_Middle_Leg.Length = newlength;
}
void TRACK_StraightStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf)
{
volatile SPIDER tmpspdr;
double legheight = spdr->Spdr_Height;
double steplength = 0.0;
double tmp[6] = {0};
u16 i = 0;
u16 cnt = 0;
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_StraightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
tmpspdr = *spdr;
for(i=0; i<5; i++)
{
steplength += 1.0;
TRACK_StraightStepHorzontalB(spdr, steplength);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_StraightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_StraightStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
tmp[0] = (spdr->Right_Front_Leg.anglenear - tmpspdr.Right_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Right_Back_Leg.anglenear - tmpspdr.Right_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Left_Middle_Leg.anglenear - tmpspdr.Left_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Right_Front_Leg.Length - tmpspdr.Right_Front_Leg.Length) / 10;
tmp[4] = (spdr->Right_Back_Leg.Length - tmpspdr.Right_Back_Leg.Length) / 10;
tmp[5] = (spdr->Left_Middle_Leg.Length - tmpspdr.Left_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Right_Front_Leg.anglenear -= tmp[0];
spdr->Right_Back_Leg.anglenear -= tmp[1];
spdr->Left_Middle_Leg.anglenear -= tmp[2];
spdr->Right_Front_Leg.Length -= tmp[3];
spdr->Right_Back_Leg.Length -= tmp[4];
spdr->Left_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
tmpspdr = *spdr;
steplength = 0.0;
for(i=0; i<5; i++)
{
steplength += 1.0;
TRACK_StraightStepHorzontalA(spdr, steplength);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_StraightStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_StraightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
tmp[0] = (spdr->Left_Front_Leg.anglenear - tmpspdr.Left_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Left_Back_Leg.anglenear - tmpspdr.Left_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Right_Middle_Leg.anglenear - tmpspdr.Right_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Left_Front_Leg.Length - tmpspdr.Left_Front_Leg.Length) / 10;
tmp[4] = (spdr->Left_Back_Leg.Length - tmpspdr.Left_Back_Leg.Length) / 10;
tmp[5] = (spdr->Right_Middle_Leg.Length - tmpspdr.Right_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Left_Front_Leg.anglenear -= tmp[0];
spdr->Left_Back_Leg.anglenear -= tmp[1];
spdr->Right_Middle_Leg.anglenear -= tmp[2];
spdr->Left_Front_Leg.Length -= tmp[3];
spdr->Left_Back_Leg.Length -= tmp[4];
spdr->Right_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_StraightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 1);
cnt++;
}
}
void TRACK_Straight(SPIDER* spdr, TRACKBUFFER* trckbuf)
{
u16 i = 0;
for(i=0; i<STEPCOUNTER; i++)
{
SPDRRenovateAllData_S(spdr, trckbuf->JointPulse[i]);
SPDRRenovateAllData_H(spdr);
Delay(40);
}
}
void TRACK_TurnLeftStepVerticalA(SPIDER* spdr, double legheight)
{
spdr->Right_Middle_Leg.Height = legheight;
spdr->Left_Front_Leg.Height = legheight;
spdr->Left_Back_Leg.Height = legheight;
}
void TRACK_TurnLeftStepHorzontalA(SPIDER* spdr)
{
double oldlength = spdr->Right_Middle_Leg.Length;
double oldangle = spdr->Right_Middle_Leg.anglenear;
double newlength = 0.0;
double newangle = 0.0;
newlength = COMPUTEEDGE(PI/12, 65.0, 65.0+oldlength);
newangle = COMPUTEANGLE(65.0+oldlength, newlength, 65.0);
newangle -= (PI / 2);
newangle = (PI - newangle) * 180 / PI;
spdr->Right_Middle_Leg.Length = newlength;
spdr->Right_Middle_Leg.anglenear = newangle;
oldlength = spdr->Left_Front_Leg.Length;
oldangle = spdr->Left_Front_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, oldlength+85.0, 85.0);
newangle = COMPUTEANGLE(oldlength+85.0, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle + newangle) * 180 / PI;
spdr->Left_Front_Leg.Length = newlength;
spdr->Left_Front_Leg.anglenear = newangle;
oldlength = spdr->Left_Back_Leg.Length;
oldangle = spdr->Left_Back_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, 85.0, 85.0+oldlength);
newangle = COMPUTEANGLE(85.0+oldlength, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle + newangle) * 180 / PI;
spdr->Left_Back_Leg.Length = newlength;
spdr->Left_Back_Leg.anglenear = newangle;
}
void TRACK_TurnLeftStepVerticalB(SPIDER* spdr, double legheight)
{
spdr->Left_Middle_Leg.Height = legheight;
spdr->Right_Front_Leg.Height = legheight;
spdr->Right_Back_Leg.Height = legheight;
}
void TRACK_TurnLeftStepHorzontalB(SPIDER* spdr)
{
double oldlength = spdr->Left_Middle_Leg.Length;
double oldangle = spdr->Left_Middle_Leg.anglenear;
double newlength = 0.0;
double newangle = 0.0;
newlength = COMPUTEEDGE(PI/12, 65.0, 65.0+oldlength);
newangle = COMPUTEANGLE(65.0+oldlength, newlength, 65.0);
newangle -= (PI / 2);
newangle = (PI - newangle) * 180 / PI;
spdr->Left_Middle_Leg.Length = newlength;
spdr->Left_Middle_Leg.anglenear = newangle;
oldlength = spdr->Right_Front_Leg.Length;
oldangle = spdr->Right_Front_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, oldlength+85.0, 85.0);
newangle = COMPUTEANGLE(oldlength+85.0, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle + newangle) * 180 / PI;
spdr->Right_Front_Leg.Length = newlength;
spdr->Right_Front_Leg.anglenear = newangle;
oldlength = spdr->Right_Back_Leg.Length;
oldangle = spdr->Right_Back_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, 85.0, 85.0+oldlength);
newangle = COMPUTEANGLE(85.0+oldlength, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle + newangle) * 180 / PI;
spdr->Right_Back_Leg.Length = newlength;
spdr->Right_Back_Leg.anglenear = newangle;
}
void TRACK_TurnLeftStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf)
{
double legheight = spdr->Spdr_Height;
double tmp[6] = {0};
u16 i = 0;
u16 cnt = 0;
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnLeftStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
TRACK_TurnLeftStepHorzontalB(spdr);
tmp[0] = (spdr->Right_Front_Leg.anglenear - original->Right_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Right_Back_Leg.anglenear - original->Right_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Left_Middle_Leg.anglenear - original->Left_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Right_Front_Leg.Length - original->Right_Front_Leg.Length) / 10;
tmp[4] = (spdr->Right_Back_Leg.Length - original->Right_Back_Leg.Length) / 10;
tmp[5] = (spdr->Left_Middle_Leg.Length - original->Left_Middle_Leg.Length) / 10;
spdr->Right_Front_Leg.anglenear = original->Right_Front_Leg.anglenear;
spdr->Right_Back_Leg.anglenear = original->Right_Back_Leg.anglenear;
spdr->Left_Middle_Leg.anglenear = original->Left_Middle_Leg.anglenear;
spdr->Right_Front_Leg.Length = original->Right_Front_Leg.Length;
spdr->Right_Back_Leg.Length = original->Right_Back_Leg.Length;
spdr->Left_Middle_Leg.Length = original->Left_Middle_Leg.Length;
for(i=0; i<10; i++)
{
spdr->Right_Front_Leg.anglenear += tmp[0];
spdr->Right_Back_Leg.anglenear += tmp[1];
spdr->Left_Middle_Leg.anglenear += tmp[2];
spdr->Right_Front_Leg.Length += tmp[3];
spdr->Right_Back_Leg.Length += tmp[4];
spdr->Left_Middle_Leg.Length += tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnLeftStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnLeftStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
tmp[0] = (spdr->Right_Front_Leg.anglenear - original->Right_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Right_Back_Leg.anglenear - original->Right_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Left_Middle_Leg.anglenear - original->Left_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Right_Front_Leg.Length - original->Right_Front_Leg.Length) / 10;
tmp[4] = (spdr->Right_Back_Leg.Length - original->Right_Back_Leg.Length) / 10;
tmp[5] = (spdr->Left_Middle_Leg.Length - original->Left_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Right_Front_Leg.anglenear -= tmp[0];
spdr->Right_Back_Leg.anglenear -= tmp[1];
spdr->Left_Middle_Leg.anglenear -= tmp[2];
spdr->Right_Front_Leg.Length -= tmp[3];
spdr->Right_Back_Leg.Length -= tmp[4];
spdr->Left_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
TRACK_TurnLeftStepHorzontalA(spdr);
tmp[0] = (spdr->Left_Front_Leg.anglenear - original->Left_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Left_Back_Leg.anglenear - original->Left_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Right_Middle_Leg.anglenear - original->Right_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Left_Front_Leg.Length - original->Left_Front_Leg.Length) / 10;
tmp[4] = (spdr->Left_Back_Leg.Length - original->Left_Back_Leg.Length) / 10;
tmp[5] = (spdr->Right_Middle_Leg.Length - original->Right_Middle_Leg.Length) / 10;
spdr->Left_Front_Leg.anglenear = original->Left_Front_Leg.anglenear;
spdr->Left_Back_Leg.anglenear = original->Left_Back_Leg.anglenear;
spdr->Right_Middle_Leg.anglenear = original->Right_Middle_Leg.anglenear;
spdr->Left_Front_Leg.Length = original->Left_Front_Leg.Length;
spdr->Left_Back_Leg.Length = original->Left_Back_Leg.Length;
spdr->Right_Middle_Leg.Length = original->Right_Middle_Leg.Length;
for(i=0; i<10; i++)
{
spdr->Left_Front_Leg.anglenear += tmp[0];
spdr->Left_Back_Leg.anglenear += tmp[1];
spdr->Right_Middle_Leg.anglenear += tmp[2];
spdr->Left_Front_Leg.Length += tmp[3];
spdr->Left_Back_Leg.Length += tmp[4];
spdr->Right_Middle_Leg.Length += tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnLeftStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnLeftStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
tmp[0] = (spdr->Left_Front_Leg.anglenear - original->Left_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Left_Back_Leg.anglenear - original->Left_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Right_Middle_Leg.anglenear - original->Right_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Left_Front_Leg.Length - original->Left_Front_Leg.Length) / 10;
tmp[4] = (spdr->Left_Back_Leg.Length - original->Left_Back_Leg.Length) / 10;
tmp[5] = (spdr->Right_Middle_Leg.Length - original->Right_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Left_Front_Leg.anglenear -= tmp[0];
spdr->Left_Back_Leg.anglenear -= tmp[1];
spdr->Right_Middle_Leg.anglenear -= tmp[2];
spdr->Left_Front_Leg.Length -= tmp[3];
spdr->Left_Back_Leg.Length -= tmp[4];
spdr->Right_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnLeftStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 3);
cnt++;
}
}
void TRACK_TurnLeft(SPIDER* spdr, TRACKBUFFER* trckbuf)
{
u16 i = 0;
for(i=0; i<STEPLEFTCNT; i++)
{
SPDRRenovateAllData_S(spdr, trckbuf->JointPulseTL[i]);
SPDRRenovateAllData_H(spdr);
Delay(50);
}
}
void TRACK_TurnRight(SPIDER* spdr, TRACKBUFFER* trckbuf)
{
u16 i = 0;
for(i=0; i<STEPRIGHTCNT; i++)
{
SPDRRenovateAllData_S(spdr, trckbuf->JointPulseTR[i]);
SPDRRenovateAllData_H(spdr);
Delay(50);
}
}
void TRACK_TurnRightStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf)
{
double legheight = spdr->Spdr_Height;
double tmp[6] = {0};
u16 i = 0;
u16 cnt = 0;
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnRightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
TRACK_TurnRightStepHorzontalB(spdr);
tmp[0] = (spdr->Right_Front_Leg.anglenear - original->Right_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Right_Back_Leg.anglenear - original->Right_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Left_Middle_Leg.anglenear - original->Left_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Right_Front_Leg.Length - original->Right_Front_Leg.Length) / 10;
tmp[4] = (spdr->Right_Back_Leg.Length - original->Right_Back_Leg.Length) / 10;
tmp[5] = (spdr->Left_Middle_Leg.Length - original->Left_Middle_Leg.Length) / 10;
spdr->Right_Front_Leg.anglenear = original->Right_Front_Leg.anglenear;
spdr->Right_Back_Leg.anglenear = original->Right_Back_Leg.anglenear;
spdr->Left_Middle_Leg.anglenear = original->Left_Middle_Leg.anglenear;
spdr->Right_Front_Leg.Length = original->Right_Front_Leg.Length;
spdr->Right_Back_Leg.Length = original->Right_Back_Leg.Length;
spdr->Left_Middle_Leg.Length = original->Left_Middle_Leg.Length;
for(i=0; i<10; i++)
{
spdr->Right_Front_Leg.anglenear += tmp[0];
spdr->Right_Back_Leg.anglenear += tmp[1];
spdr->Left_Middle_Leg.anglenear += tmp[2];
spdr->Right_Front_Leg.Length += tmp[3];
spdr->Right_Back_Leg.Length += tmp[4];
spdr->Left_Middle_Leg.Length += tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnRightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnRightStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
tmp[0] = (spdr->Right_Front_Leg.anglenear - original->Right_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Right_Back_Leg.anglenear - original->Right_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Left_Middle_Leg.anglenear - original->Left_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Right_Front_Leg.Length - original->Right_Front_Leg.Length) / 10;
tmp[4] = (spdr->Right_Back_Leg.Length - original->Right_Back_Leg.Length) / 10;
tmp[5] = (spdr->Left_Middle_Leg.Length - original->Left_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Right_Front_Leg.anglenear -= tmp[0];
spdr->Right_Back_Leg.anglenear -= tmp[1];
spdr->Left_Middle_Leg.anglenear -= tmp[2];
spdr->Right_Front_Leg.Length -= tmp[3];
spdr->Right_Back_Leg.Length -= tmp[4];
spdr->Left_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
TRACK_TurnRightStepHorzontalA(spdr);
tmp[0] = (spdr->Left_Front_Leg.anglenear - original->Left_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Left_Back_Leg.anglenear - original->Left_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Right_Middle_Leg.anglenear - original->Right_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Left_Front_Leg.Length - original->Left_Front_Leg.Length) / 10;
tmp[4] = (spdr->Left_Back_Leg.Length - original->Left_Back_Leg.Length) / 10;
tmp[5] = (spdr->Right_Middle_Leg.Length - original->Right_Middle_Leg.Length) / 10;
spdr->Left_Front_Leg.anglenear = original->Left_Front_Leg.anglenear;
spdr->Left_Back_Leg.anglenear = original->Left_Back_Leg.anglenear;
spdr->Right_Middle_Leg.anglenear = original->Right_Middle_Leg.anglenear;
spdr->Left_Front_Leg.Length = original->Left_Front_Leg.Length;
spdr->Left_Back_Leg.Length = original->Left_Back_Leg.Length;
spdr->Right_Middle_Leg.Length = original->Right_Middle_Leg.Length;
for(i=0; i<10; i++)
{
spdr->Left_Front_Leg.anglenear += tmp[0];
spdr->Left_Back_Leg.anglenear += tmp[1];
spdr->Right_Middle_Leg.anglenear += tmp[2];
spdr->Left_Front_Leg.Length += tmp[3];
spdr->Left_Back_Leg.Length += tmp[4];
spdr->Right_Middle_Leg.Length += tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnRightStepVerticalB(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
for(i=0; i<10; i++)
{
legheight -= 5.0;
TRACK_TurnRightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
tmp[0] = (spdr->Left_Front_Leg.anglenear - original->Left_Front_Leg.anglenear) / 10;
tmp[1] = (spdr->Left_Back_Leg.anglenear - original->Left_Back_Leg.anglenear) / 10;
tmp[2] = (spdr->Right_Middle_Leg.anglenear - original->Right_Middle_Leg.anglenear) / 10;
tmp[3] = (spdr->Left_Front_Leg.Length - original->Left_Front_Leg.Length) / 10;
tmp[4] = (spdr->Left_Back_Leg.Length - original->Left_Back_Leg.Length) / 10;
tmp[5] = (spdr->Right_Middle_Leg.Length - original->Right_Middle_Leg.Length) / 10;
for(i=0; i<10; i++)
{
spdr->Left_Front_Leg.anglenear -= tmp[0];
spdr->Left_Back_Leg.anglenear -= tmp[1];
spdr->Right_Middle_Leg.anglenear -= tmp[2];
spdr->Left_Front_Leg.Length -= tmp[3];
spdr->Left_Back_Leg.Length -= tmp[4];
spdr->Right_Middle_Leg.Length -= tmp[5];
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
for(i=0; i<10; i++)
{
legheight += 5.0;
TRACK_TurnRightStepVerticalA(spdr, legheight);
TRACK_CreateAngle(spdr, &(trckbuf->Trck));
TRACK_TransAngleToPulse(trckbuf, cnt, 4);
cnt++;
}
}
void TRACK_TurnRightStepVerticalA(SPIDER* spdr, double legheight)
{
spdr->Right_Middle_Leg.Height = legheight;
spdr->Left_Front_Leg.Height = legheight;
spdr->Left_Back_Leg.Height = legheight;
}
void TRACK_TurnRightStepHorzontalA(SPIDER* spdr)
{
double oldlength = spdr->Right_Middle_Leg.Length;
double oldangle = spdr->Right_Middle_Leg.anglenear;
double newlength = 0.0;
double newangle = 0.0;
newlength = COMPUTEEDGE(PI/12, 65.0, 65.0+oldlength);
newangle = COMPUTEANGLE(65.0+oldlength, newlength, 65.0);
newangle -= (PI / 2);
newangle = newangle * 180 / PI;
spdr->Right_Middle_Leg.Length = newlength;
spdr->Right_Middle_Leg.anglenear = newangle;
oldlength = spdr->Left_Front_Leg.Length;
oldangle = spdr->Left_Front_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, oldlength+85.0, 85.0);
newangle = COMPUTEANGLE(oldlength+85.0, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle - newangle) * 180 / PI;
spdr->Left_Front_Leg.Length = newlength;
spdr->Left_Front_Leg.anglenear = newangle;
oldlength = spdr->Left_Back_Leg.Length;
oldangle = spdr->Left_Back_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, 85.0, 85.0+oldlength);
newangle = COMPUTEANGLE(85.0+oldlength, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle - newangle) * 180 / PI;
spdr->Left_Back_Leg.Length = newlength;
spdr->Left_Back_Leg.anglenear = newangle;
}
void TRACK_TurnRightStepVerticalB(SPIDER* spdr, double legheight)
{
spdr->Left_Middle_Leg.Height = legheight;
spdr->Right_Front_Leg.Height = legheight;
spdr->Right_Back_Leg.Height = legheight;
}
void TRACK_TurnRightStepHorzontalB(SPIDER* spdr)
{
double oldlength = spdr->Left_Middle_Leg.Length;
double oldangle = spdr->Left_Middle_Leg.anglenear;
double newlength = 0.0;
double newangle = 0.0;
newlength = COMPUTEEDGE(PI/12, 65.0, 65.0+oldlength);
newangle = COMPUTEANGLE(65.0+oldlength, newlength, 65.0);
newangle -= (PI / 2);
newangle = newangle * 180 / PI;
spdr->Left_Middle_Leg.Length = newlength;
spdr->Left_Middle_Leg.anglenear = newangle;
oldlength = spdr->Right_Front_Leg.Length;
oldangle = spdr->Right_Front_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, oldlength+85.0, 85.0);
newangle = COMPUTEANGLE(oldlength+85.0, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle - newangle) * 180 / PI;
spdr->Right_Front_Leg.Length = newlength;
spdr->Right_Front_Leg.anglenear = newangle;
oldlength = spdr->Right_Back_Leg.Length;
oldangle = spdr->Right_Back_Leg.anglenear;
oldangle = oldangle * PI / 180;
newlength = COMPUTEEDGE(PI/12, 85.0, 85.0+oldlength);
newangle = COMPUTEANGLE(85.0+oldlength, 85.0, newlength);
newangle = PI - newangle;
newangle = (oldangle - newangle) * 180 / PI;
spdr->Right_Back_Leg.Length = newlength;
spdr->Right_Back_Leg.anglenear = newangle;
}
六足步态程序spidertrack.h__________点击查看代码
#ifndef __SPIDERTRACK_H
#define __SPIDERTRACK_H
#include "stm32f10x_lib.h"
#include "spider.h"
#define PI 3.14156
#define STEPCOUNTER 90
#define STEPLEFTCNT 100
#define STEPRIGHTCNT 100
typedef struct
{
double jointangle[18];
}TRACK;
typedef struct
{
TRACK Trck;
u16 JointPulse[STEPCOUNTER][18];
u16 JointPulseTLP[10][18];
u16 JointPulseTL[STEPLEFTCNT][18];
u16 JointPulseTR[STEPRIGHTCNT][18];
}TRACKBUFFER;
void TRACK_LengthToAngle(double height, double length, double* anglefar, double* anglemid);
void TRACK_CreateAngle(SPIDER* spdr, TRACK* trck);
void TRACK_TransAngleToPulse(TRACKBUFFER* trckbuf,u16 cnt,u8 type);
void TRACK_Straight(SPIDER* spdr, TRACKBUFFER* trckbuf);
void TRACK_StraightStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf);
void TRACK_StraightStepVerticalA(SPIDER* spdr, double legheight);
void TRACK_StraightStepHorzontalA(SPIDER* spdr, double steplength);
void TRACK_StraightStepVerticalB(SPIDER* spdr, double legheight);
void TRACK_StraightStepHorzontalB(SPIDER* spdr, double steplength);
void TRACK_TurnLeft(SPIDER* spdr, TRACKBUFFER* trckbuf);
void TRACK_TurnLeftStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf);
void TRACK_TurnLeftStepVerticalA(SPIDER* spdr, double legheight);
void TRACK_TurnLeftStepHorzontalA(SPIDER* spdr);
void TRACK_TurnLeftStepVerticalB(SPIDER* spdr, double legheight);
void TRACK_TurnLeftStepHorzontalB(SPIDER* spdr);
void TRACK_TurnRight(SPIDER* spdr, TRACKBUFFER* trckbuf);
void TRACK_TurnRightStep(SPIDER* spdr, SPIDER* original, TRACKBUFFER* trckbuf);
void TRACK_TurnRightStepVerticalA(SPIDER* spdr, double legheight);
void TRACK_TurnRightStepHorzontalA(SPIDER* spdr);
void TRACK_TurnRightStepVerticalB(SPIDER* spdr, double legheight);
void TRACK_TurnRightStepHorzontalB(SPIDER* spdr);
#endif
- 外设数据初始化stm32f10x_init.c 和 stm32f10x_init.h
外设数据初始化stm32f10x_init.c__________点击查看代码
#include "stm32f10x_init.h"
typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;
#define TIM8_HON_OFFSET ((u16)(0 * 4))
#define TIM8_VER_OFFSET ((u16)(7 * 4))
#define RFLJF_OFFSET ((u16)(0 * 4))
#define RFLJM_OFFSET ((u16)(6 * 4))
#define RFLJN_OFFSET ((u16)(3 * 4))
#define RMLJF_OFFSET ((u16)(15 * 4))
#define RMLJM_OFFSET ((u16)(4 * 4))
#define RMLJN_OFFSET ((u16)(10 * 4))
#define RBLJF_OFFSET ((u16)(0 * 4))
#define RBLJM_OFFSET ((u16)(0 * 4))
#define RBLJN_OFFSET ((u16)(0 * 4))
#define LFLJF_OFFSET ((u16)(0 * 4))
#define LFLJM_OFFSET ((u16)(0 * 4))
#define LFLJN_OFFSET ((u16)(3 * 4))
#define LMLJF_OFFSET ((u16)(0 * 4))
#define LMLJM_OFFSET ((u16)(0 * 4))
#define LMLJN_OFFSET ((u16)(8 * 4))
#define LBLJF_OFFSET ((u16)(0 * 4))
#define LBLJM_OFFSET ((u16)(0 * 4))
#define LBLJN_OFFSET ((u16)(0 * 4))
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
ErrorStatus HSEStartUpStatus;
static vu32 TimingDelay = 0;
static SOFTTIMER SoftTimer = {0};
void Stm32f10x_Configuration(SPIDER* spdr)
{
RCC_Configuration();
GPIO_Configuration();
SysTick_Configuration();
USART1_Configuration();
USART3_Configuration();
TIM1_Configuration(spdr);
TIM2_Configuration(spdr);
TIM3_Configuration(spdr);
TIM4_Configuration(spdr);
TIM5_Configuration(spdr);
}
void Stm32f10x_Initialization(void)
{
SysTick_CounterCmd(SysTick_Counter_Enable);
}
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG |
RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);
}
void USART1_Configuration(void)
{
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART3_Configuration(void)
{
USART_InitStructure.USART_BaudRate = 4800;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3, &USART_InitStructure);
USART_Cmd(USART3, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void SysTick_Configuration(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_SetReload(9000);
SysTick_ITConfig(ENABLE);
}
void Delay(u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
if(SoftTimer.start == 1)
{
SoftTimer.nTime--;
if(SoftTimer.nTime == 0)
{
SoftTimer.start = 0;
SoftTimer.flag = 1;
}
}
}
void SFTMRStart(u32 nTime)
{
SoftTimer.nTime = nTime;
SoftTimer.start = 1;
}
u8 SFTMRCheck(void)
{
return SoftTimer.flag;
}
void TIM8_Configuration(CAMERA* came)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = came->Horizontal + TIM8_HON_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM8, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = came->Vertical + TIM8_VER_OFFSET;
TIM_OC2Init(TIM8, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM8, ENABLE);
TIM_Cmd(TIM8, ENABLE);
TIM_CtrlPWMOutputs(TIM8, ENABLE);
}
void TIM8_HorizontalRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + TIM8_HON_OFFSET;
TIM_OC1Init(TIM8, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
}
void TIM8_VerticalRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + TIM8_VER_OFFSET;
TIM_OC2Init(TIM8, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
}
void TIM1_Configuration(SPIDER* spdr)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Front_Leg.Joint_Far + RFLJF_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Front_Leg.Joint_Mid + RFLJM_OFFSET;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Front_Leg.Joint_Near + RFLJN_OFFSET;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Middle_Leg.Joint_Far - RMLJF_OFFSET;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
void TIM2_Configuration(SPIDER* spdr)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Middle_Leg.Joint_Mid + RMLJM_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Middle_Leg.Joint_Near + RMLJN_OFFSET;
TIM_OC4Init(TIM2, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
void TIM3_Configuration(SPIDER* spdr)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Back_Leg.Joint_Far + RBLJF_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Back_Leg.Joint_Mid + RBLJM_OFFSET;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Right_Back_Leg.Joint_Near + RBLJN_OFFSET;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Front_Leg.Joint_Far + LFLJF_OFFSET;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void TIM4_Configuration(SPIDER* spdr)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Front_Leg.Joint_Mid + LFLJM_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Front_Leg.Joint_Near - LFLJN_OFFSET;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Middle_Leg.Joint_Far + LMLJF_OFFSET;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Middle_Leg.Joint_Mid + LMLJM_OFFSET;
TIM_OC4Init(TIM4, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE);
}
void TIM5_Configuration(SPIDER* spdr)
{
TIM_TimeBaseStructure.TIM_Period = 7200;
TIM_TimeBaseStructure.TIM_Prescaler = 200;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Middle_Leg.Joint_Near + LMLJN_OFFSET;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM5, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Back_Leg.Joint_Far + LBLJF_OFFSET;
TIM_OC2Init(TIM5, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Back_Leg.Joint_Mid + LBLJM_OFFSET;
TIM_OC3Init(TIM5, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM5, TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = spdr->Left_Back_Leg.Joint_Near + LBLJN_OFFSET;
TIM_OC4Init(TIM5, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM5, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM5, ENABLE);
TIM_Cmd(TIM5, ENABLE);
}
void TIM_RFLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RFLJF_OFFSET;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
}
void TIM_RFLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RFLJM_OFFSET;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
}
void TIM_RFLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RFLJN_OFFSET;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
}
void TIM_RMLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data - RMLJF_OFFSET;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
}
void TIM_RMLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RMLJM_OFFSET;
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
}
void TIM_RMLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RMLJN_OFFSET;
TIM_OC4Init(TIM2, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
}
void TIM_RBLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RBLJF_OFFSET;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
}
void TIM_RBLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RBLJM_OFFSET;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
}
void TIM_RBLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + RBLJN_OFFSET;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
}
void TIM_LFLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LFLJF_OFFSET;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
}
void TIM_LFLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LFLJM_OFFSET;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
}
void TIM_LFLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data - LFLJN_OFFSET;
TIM_OC2Init(TIM4, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
}
void TIM_LMLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LMLJF_OFFSET;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
}
void TIM_LMLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LMLJM_OFFSET;
TIM_OC4Init(TIM4, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
}
void TIM_LMLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LMLJN_OFFSET;
TIM_OC1Init(TIM5, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
}
void TIM_LBLJfarRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LBLJF_OFFSET;
TIM_OC2Init(TIM5, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);
}
void TIM_LBLJmidRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LBLJM_OFFSET;
TIM_OC3Init(TIM5, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM5, TIM_OCPreload_Enable);
}
void TIM_LBLJnearRenovate(u16 data)
{
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = data + LBLJN_OFFSET;
TIM_OC4Init(TIM5, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM5, TIM_OCPreload_Enable);
}
外设数据初始化stm32f10x_init.h__________点击查看代码
#ifndef __STM32F10X_INIT_H
#define __STM32F10X_INIT_H
#include "stm32f10x_lib.h"
#include "spider.h"
#include "camera.h"
typedef struct
{
vu32 nTime;
vu8 start;
vu8 flag;
}SOFTTIMER;
void SFTMRStart(u32 nTime);
u8 SFTMRCheck(void);
void Stm32f10x_Configuration(SPIDER* spdr);
void Stm32f10x_Initialization(void);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART1_Configuration(void);
void USART3_Configuration(void);
void SysTick_Configuration(void);
void TimingDelay_Decrement(void);
void Delay(u32 nTime);
void TIM1_Configuration(SPIDER* spdr);
void TIM2_Configuration(SPIDER* spdr);
void TIM3_Configuration(SPIDER* spdr);
void TIM4_Configuration(SPIDER* spdr);
void TIM5_Configuration(SPIDER* spdr);
void TIM8_Configuration(CAMERA* came);
void TIM8_HorizontalRenovate(u16 data);
void TIM8_VerticalRenovate(u16 data);
void TIM_RFLJfarRenovate(u16 data);
void TIM_RFLJmidRenovate(u16 data);
void TIM_RFLJnearRenovate(u16 data);
void TIM_RMLJfarRenovate(u16 data);
void TIM_RMLJmidRenovate(u16 data);
void TIM_RMLJnearRenovate(u16 data);
void TIM_RBLJfarRenovate(u16 data);
void TIM_RBLJmidRenovate(u16 data);
void TIM_RBLJnearRenovate(u16 data);
void TIM_LFLJfarRenovate(u16 data);
void TIM_LFLJmidRenovate(u16 data);
void TIM_LFLJnearRenovate(u16 data);
void TIM_LMLJfarRenovate(u16 data);
void TIM_LMLJmidRenovate(u16 data);
void TIM_LMLJnearRenovate(u16 data);
void TIM_LBLJfarRenovate(u16 data);
void TIM_LBLJmidRenovate(u16 data);
void TIM_LBLJnearRenovate(u16 data);
#endif
- STM32中断函数的模板文件stm32f10x_it.c和stm32f10x_it.h
STM32中断函数的模板文件stm32f10x_it.c__________点击查看代码
#include "stm32f10x_it.h"
#include "gps.h"
#ifndef RxBuffersize
#define RxBufferSize 5000
#endif
vu8 WiFiBuffer[100] = {0};
vu8 wificount = 0;
vu8 RxBuffer[RxBufferSize];
vu16 RxCounter = 0;
vu8 USART3_RXNE_DIS_FLAG = 0;
extern GPS MyGPS;
void NMIException(void)
{
}
void HardFaultException(void)
{
while (1)
{
}
}
void MemManageException(void)
{
while (1)
{
}
}
void BusFaultException(void)
{
while (1)
{
}
}
void UsageFaultException(void)
{
while (1)
{
}
}
void DebugMonitor(void)
{
}
void SVCHandler(void)
{
}
void PendSVC(void)
{
}
void SysTickHandler(void)
{
TimingDelay_Decrement();
}
void WWDG_IRQHandler(void)
{
}
void PVD_IRQHandler(void)
{
}
void TAMPER_IRQHandler(void)
{
}
void RTC_IRQHandler(void)
{
}
void FLASH_IRQHandler(void)
{
}
void RCC_IRQHandler(void)
{
}
void EXTI0_IRQHandler(void)
{
}
void EXTI1_IRQHandler(void)
{
}
void EXTI2_IRQHandler(void)
{
}
void EXTI3_IRQHandler(void)
{
}
void EXTI4_IRQHandler(void)
{
}
void DMA1_Channel1_IRQHandler(void)
{
}
void DMA1_Channel2_IRQHandler(void)
{
}
void DMA1_Channel3_IRQHandler(void)
{
}
void DMA1_Channel4_IRQHandler(void)
{
}
void DMA1_Channel5_IRQHandler(void)
{
}
void DMA1_Channel6_IRQHandler(void)
{
}
void DMA1_Channel7_IRQHandler(void)
{
}
void ADC1_2_IRQHandler(void)
{
}
void USB_HP_CAN_TX_IRQHandler(void)
{
}
void USB_LP_CAN_RX0_IRQHandler(void)
{
}
void CAN_RX1_IRQHandler(void)
{
}
void CAN_SCE_IRQHandler(void)
{
}
void EXTI9_5_IRQHandler(void)
{
}
void TIM1_BRK_IRQHandler(void)
{
}
void TIM1_UP_IRQHandler(void)
{
}
void TIM1_TRG_COM_IRQHandler(void)
{
}
void TIM1_CC_IRQHandler(void)
{
}
void TIM2_IRQHandler(void)
{
}
void TIM3_IRQHandler(void)
{
}
void TIM4_IRQHandler(void)
{
}
void I2C1_EV_IRQHandler(void)
{
}
void I2C1_ER_IRQHandler(void)
{
}
void I2C2_EV_IRQHandler(void)
{
}
void I2C2_ER_IRQHandler(void)
{
}
void SPI1_IRQHandler(void)
{
}
void SPI2_IRQHandler(void)
{
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
WiFiBuffer[wificount] = USART_ReceiveData(USART1);
wificount ++;
if(wificount >= 100)
{
wificount = 0;
}
}
}
void USART2_IRQHandler(void)
{
}
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
RxBuffer[RxCounter++] = USART_ReceiveData(USART3);
if(RxCounter >= RxBufferSize)
{
USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
RxCounter = 0;
USART3_RXNE_DIS_FLAG = 1;
}
}
}
void EXTI15_10_IRQHandler(void)
{
}
void RTCAlarm_IRQHandler(void)
{
}
void USBWakeUp_IRQHandler(void)
{
}
void TIM8_BRK_IRQHandler(void)
{
}
void TIM8_UP_IRQHandler(void)
{
}
void TIM8_TRG_COM_IRQHandler(void)
{
}
void TIM8_CC_IRQHandler(void)
{
}
void ADC3_IRQHandler(void)
{
}
void FSMC_IRQHandler(void)
{
}
void SDIO_IRQHandler(void)
{
}
void TIM5_IRQHandler(void)
{
}
void SPI3_IRQHandler(void)
{
}
void UART4_IRQHandler(void)
{
}
void UART5_IRQHandler(void)
{
}
void TIM6_IRQHandler(void)
{
}
void TIM7_IRQHandler(void)
{
}
void DMA2_Channel1_IRQHandler(void)
{
}
void DMA2_Channel2_IRQHandler(void)
{
}
void DMA2_Channel3_IRQHandler(void)
{
}
void DMA2_Channel4_5_IRQHandler(void)
{
}
STM32中断函数的模板文件stm32f10x_it.h__________点击查看代码
#ifndef __STM32F10x_IT_H
#define __STM32F10x_IT_H
#include "stm32f10x_lib.h"
#include "stm32f10x_init.h"
void NMIException(void);
void HardFaultException(void);
void MemManageException(void);
void BusFaultException(void);
void UsageFaultException(void);
void DebugMonitor(void);
void SVCHandler(void);
void PendSVC(void);
void SysTickHandler(void);
void WWDG_IRQHandler(void);
void PVD_IRQHandler(void);
void TAMPER_IRQHandler(void);
void RTC_IRQHandler(void);
void FLASH_IRQHandler(void);
void RCC_IRQHandler(void);
void EXTI0_IRQHandler(void);
void EXTI1_IRQHandler(void);
void EXTI2_IRQHandler(void);
void EXTI3_IRQHandler(void);
void EXTI4_IRQHandler(void);
void DMA1_Channel1_IRQHandler(void);
void DMA1_Channel2_IRQHandler(void);
void DMA1_Channel3_IRQHandler(void);
void DMA1_Channel4_IRQHandler(void);
void DMA1_Channel5_IRQHandler(void);
void DMA1_Channel6_IRQHandler(void);
void DMA1_Channel7_IRQHandler(void);
void ADC1_2_IRQHandler(void);
void USB_HP_CAN_TX_IRQHandler(void);
void USB_LP_CAN_RX0_IRQHandler(void);
void CAN_RX1_IRQHandler(void);
void CAN_SCE_IRQHandler(void);
void EXTI9_5_IRQHandler(void);
void TIM1_BRK_IRQHandler(void);
void TIM1_UP_IRQHandler(void);
void TIM1_TRG_COM_IRQHandler(void);
void TIM1_CC_IRQHandler(void);
void TIM2_IRQHandler(void);
void TIM3_IRQHandler(void);
void TIM4_IRQHandler(void);
void I2C1_EV_IRQHandler(void);
void I2C1_ER_IRQHandler(void);
void I2C2_EV_IRQHandler(void);
void I2C2_ER_IRQHandler(void);
void SPI1_IRQHandler(void);
void SPI2_IRQHandler(void);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
void EXTI15_10_IRQHandler(void);
void RTCAlarm_IRQHandler(void);
void USBWakeUp_IRQHandler(void);
void TIM8_BRK_IRQHandler(void);
void TIM8_UP_IRQHandler(void);
void TIM8_TRG_COM_IRQHandler(void);
void TIM8_CC_IRQHandler(void);
void ADC3_IRQHandler(void);
void FSMC_IRQHandler(void);
void SDIO_IRQHandler(void);
void TIM5_IRQHandler(void);
void SPI3_IRQHandler(void);
void UART4_IRQHandler(void);
void UART5_IRQHandler(void);
void TIM6_IRQHandler(void);
void TIM7_IRQHandler(void);
void DMA2_Channel1_IRQHandler(void);
void DMA2_Channel2_IRQHandler(void);
void DMA2_Channel3_IRQHandler(void);
void DMA2_Channel4_5_IRQHandler(void);
#endif
- 六足机器人外设头文件STM32F10x_conf.h
外设头文件STM32F10x_conf.h__________点击查看代码
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
* File Name : stm32f10x_conf.h
* Author : MCD Application Team
* Version : V2.0.3
* Date : 09/22/2008
* Description : Library configuration file.
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CONF_H
#define __STM32F10x_CONF_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_type.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Uncomment the line below to compile the library in DEBUG mode, this will expanse
the "assert_param" macro in the firmware library code (see "Exported macro"
section below) */
/* #define DEBUG 1*/
/* Comment the line below to disable the specific peripheral inclusion */
/************************************* ADC ************************************/
#define _ADC
#define _ADC1
#define _ADC2
#define _ADC3
/************************************* BKP ************************************/
#define _BKP
/************************************* CAN ************************************/
#define _CAN
/************************************* CRC ************************************/
#define _CRC
/************************************* DAC ************************************/
#define _DAC
/************************************* DBGMCU *********************************/
#define _DBGMCU
/************************************* DMA ************************************/
#define _DMA
#define _DMA1_Channel1
#define _DMA1_Channel2
#define _DMA1_Channel3
#define _DMA1_Channel4
#define _DMA1_Channel5
#define _DMA1_Channel6
#define _DMA1_Channel7
#define _DMA2_Channel1
#define _DMA2_Channel2
#define _DMA2_Channel3
#define _DMA2_Channel4
#define _DMA2_Channel5
/************************************* EXTI ***********************************/
#define _EXTI
/************************************* FLASH and Option Bytes *****************/
#define _FLASH
/* Uncomment the line below to enable FLASH program/erase/protections functions,
otherwise only FLASH configuration (latency, prefetch, half cycle) functions
are enabled */
/* #define _FLASH_PROG */
/************************************* FSMC ***********************************/
#define _FSMC
/************************************* GPIO ***********************************/
#define _GPIO
#define _GPIOA
#define _GPIOB
#define _GPIOC
#define _GPIOD
#define _GPIOE
#define _GPIOF
#define _GPIOG
#define _AFIO
/************************************* I2C ************************************/
#define _I2C
#define _I2C1
#define _I2C2
/************************************* IWDG ***********************************/
#define _IWDG
/************************************* NVIC ***********************************/
#define _NVIC
/************************************* PWR ************************************/
#define _PWR
/************************************* RCC ************************************/
#define _RCC
/************************************* RTC ************************************/
#define _RTC
/************************************* SDIO ***********************************/
#define _SDIO
/************************************* SPI ************************************/
#define _SPI
#define _SPI1
#define _SPI2
#define _SPI3
/************************************* SysTick ********************************/
#define _SysTick
/************************************* TIM ************************************/
#define _TIM
#define _TIM1
#define _TIM2
#define _TIM3
#define _TIM4
#define _TIM5
#define _TIM6
#define _TIM7
#define _TIM8
/************************************* USART **********************************/
#define _USART
#define _USART1
#define _USART2
#define _USART3
#define _UART4
#define _UART5
/************************************* WWDG ***********************************/
#define _WWDG
/* In the following line adjust the value of External High Speed oscillator (HSE)
used in your application */
#define HSE_Value ((u32)8000000) /* Value of the External oscillator in Hz*/
/* In the following line adjust the External High Speed oscillator (HSE) Startup
Timeout value */
#define HSEStartUp_TimeOut ((u16)0x0500) /* Time out for HSE start up */
/* Exported macro ------------------------------------------------------------*/
#ifdef DEBUG
/*******************************************************************************
* Macro Name : assert_param
* Description : The assert_param macro is used for function's parameters check.
* It is used only if the library is compiled in DEBUG mode.
* Input : - expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* Return : None
*******************************************************************************/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(u8* file, u32 line);
#else
#define assert_param(expr) ((void)0)
#endif /* DEBUG */
#endif /* __STM32F10x_CONF_H */
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
- GPS定位程序gps.c和GPS定位程序gps.h
GPS定位程序gps.c__________点击查看代码
#include "gps.h"
void GPGGA(GPS* gps,u8 tmp);
void GPRMC(GPS* gps,u8 tmp);
void GPVTG(GPS* gps,u8 tmp);
void GPGSA(GPS* gps,u8 tmp);
void GPSInit(GPS* gps)
{
int i = 0;
gps->Info.ReceivingF = 0;
gps->Info.EndF = 0;
gps->Info.GGAF = 0;
gps->Info.GSAF = 0;
gps->Info.RMCF = 0;
gps->Info.VTGF = 0;
for(i=0; i<13; i++)
{
gps->GPSLongitude[i] = 0;
}
for(i=0; i<12; i++)
{
gps->GPSLatitude[i] = 0;
}
for(i=0; i<9; i++)
{
gps->GPSTime[i] = 0;
}
}
u8 GPSJudge(GPS* gps,u8 tmp)
{
if(tmp == '$')
{
gps->Info.Command = 0;
gps->Info.ReceivingF = 1;
gps->Info.Bytes_counter = 0;
gps->Info.Segment = 0;
return 0;
}
if(gps->Info.ReceivingF)
{
if(tmp == ',')
{
gps->Info.Segment += 1;
gps->Info.Bytes_counter = 0;
return 0;
}
if(tmp == '*')
{
gps->Info.ReceivingF = 0;
gps->Info.EndF = 1;
return 0;
}
if(gps->Info.Segment == 0)
{
if(gps->Info.Bytes_counter == 3)
{
switch(tmp)
{
case 'G':
gps->Info.Command = 1;
gps->Info.GGAF = 1;
break;
case 'M':
gps->Info.Command = 2;
gps->Info.RMCF =1;
break;
case 'T':
gps->Info.Command = 3;
gps->Info.VTGF = 1;
break;
case 'S':
break;
default:
gps->Info.Command = 0;
gps->Info.ReceivingF = 0;
break;
}
}
if(gps->Info.Bytes_counter == 4)
{
if(gps->Info.Command == 0 && tmp == 'A')
{
gps->Info.Command = 4;
gps->Info.GSAF = 1;
}
}
}
else
{
switch(gps->Info.Command)
{
case 1:
GPGGA(gps,tmp);
break;
case 2:
GPRMC(gps,tmp);
break;
case 3:
GPVTG(gps,tmp);
break;
case 4:
GPGSA(gps,tmp);
break;
default:
break;
}
}
gps->Info.Bytes_counter += 1;
}
gps->Info.NewByteF = 0;
return 0;
}
void GPGGA(GPS* gps,u8 tmp)
{
switch(gps->Info.Segment)
{
case 1:
if(gps->Info.Bytes_counter == 2 || gps->Info.Bytes_counter == 5)
{
gps->GPSTime[gps->Info.Bytes_counter] = ':';
gps->Info.Bytes_counter += 1;
}
if(gps->Info.Bytes_counter < 8)
{
gps->GPSTime[gps->Info.Bytes_counter] = tmp;
}
gps->GPSTime[8] = '\0';
break;
case 2:
if(gps->Info.Bytes_counter == 3)
{
gps->GPSLatitude[gps->Info.Bytes_counter] = '.';
gps->Info.Bytes_counter += 1;
gps->GPSLatitude[11] = '\0';
}
if(gps->Info.Bytes_counter == 0)
{
gps->Info.Bytes_counter += 1;
}
gps->GPSLatitude[gps->Info.Bytes_counter] = tmp;
break;
case 3:
gps->GPSLatitude[0] = tmp;
break;
case 4:
if(gps->Info.Bytes_counter == 4)
{
gps->GPSLongitude[gps->Info.Bytes_counter] = '.';
gps->Info.Bytes_counter += 1;
gps->GPSLongitude[12] = '\0';
}
if(gps->Info.Bytes_counter == 0)
{
gps->Info.Bytes_counter += 1;
}
gps->GPSLongitude[gps->Info.Bytes_counter] = tmp;
break;
case 5:
gps->GPSLongitude[0] = tmp;
break;
case 6:
gps->GPSQuality = tmp;
break;
case 7:
if(gps->Info.Bytes_counter < 2)
{
gps->GPSSatellite[gps->Info.Bytes_counter] = tmp;
gps->GPSSatellite[2] = '\0';
}
break;
case 9:
if(gps->Info.Bytes_counter < 7)
{
gps->GPSElevation[gps->Info.Bytes_counter] = tmp;
gps->GPSElevation[gps->Info.Bytes_counter + 1] = '\0';
}
break;
default:
break;
}
}
void GPRMC(GPS* gps,u8 tmp)
{
switch(gps->Info.Segment)
{
case 9:
if(gps->Info.Bytes_counter < 2)
{
gps->GSPdate[6 + gps->Info.Bytes_counter] = tmp;
}
if(gps->Info.Bytes_counter > 1 && gps->Info.Bytes_counter < 4)
{
gps->GSPdate[1 + gps->Info.Bytes_counter] = tmp;
gps->GSPdate[5] = '-';
}
if(gps->Info.Bytes_counter > 3 && gps->Info.Bytes_counter < 6)
{
gps->GSPdate[gps->Info.Bytes_counter - 4] = tmp;
gps->GSPdate[2] = '-';
gps->GSPdate[2] = '\0';
}
break;
default:
break;
}
}
void GPVTG(GPS* gps,u8 tmp)
{
switch(gps->Info.Segment)
{
case 7:
if(gps->Info.Bytes_counter < 7)
{
gps->GPSSpeed[gps->Info.Bytes_counter] = tmp;
gps->GPSSpeed[gps->Info.Bytes_counter + 1] = '$';
gps->GPSSpeed[gps->Info.Bytes_counter + 2] = '"';
gps->GPSSpeed[gps->Info.Bytes_counter + 3] = '/';
gps->GPSSpeed[gps->Info.Bytes_counter + 4] = '#';
gps->GPSSpeed[gps->Info.Bytes_counter + 5] = '\0';
}
break;
default:
break;
}
}
void GPGSA(GPS* gps,u8 tmp)
{
switch(gps->Info.Segment)
{
case 2:
gps->GPSStatus = tmp;
break;
default:
break;
}
}
GPS定位程序gps.h__________点击查看代码
#ifndef __GPS_H
#define __GPS_H
#include "stm32f10x_lib.h"
typedef struct
{
u8 Segment;
u8 Bytes_counter;
u8 Command;
u8 NewByteF;
u8 ReceivingF;
u8 EndF;
u8 RMCF;
u8 GGAF;
u8 VTGF;
u8 GSAF;
}GPSInfo;
typedef struct
{
u8 GPSTime[9];
u8 GPSLongitude[13];
u8 GPSLatitude[12];
u8 GPSWarn;
u8 GPSQuality;
u8 GPSStatus;
u8 GPSElevation[8];
u8 GPSSatellite[3];
u8 GPSSpeed[10];
u8 GSPdate[9];
GPSInfo Info;
}GPS;
void GPSInit(GPS* gps);
u8 GPSJudge(GPS* gps,u8 tmp);
#endif
8. 摄像机camera.c和camera.h
摄像机camera.c__________点击查看代码
#include "camera.h"
#include "stm32f10x_init.h"
void CameInit(CAMERA* came)
{
came->Horizontal = 540;
came->Vertical = 540;
came->Speed = 30;
}
void CameMoveHorizontal(CAMERA* came, u8 angle)
{
u16 olddat = 0;
u16 newdat = 0;
newdat = 180 + angle * 4;
olddat = came->Horizontal;
if(newdat > olddat)
{
while((olddat + 10) < newdat)
{
olddat += 10;
TIM8_HorizontalRenovate(olddat);
Delay(came->Speed);
}
}
else
{
while((olddat - 10) > newdat)
{
olddat -= 10;
TIM8_HorizontalRenovate(olddat);
Delay(came->Speed);
}
}
came->Horizontal = newdat;
Delay(came->Speed);
TIM8_HorizontalRenovate(came->Horizontal);
}
void CameMoveVertical(CAMERA* came, u8 angle)
{
u16 olddat = 0;
u16 newdat = 0;
newdat = 180 + angle * 4;
olddat = came->Vertical;
if(newdat > olddat)
{
while((olddat + 10) < newdat)
{
olddat += 10;
TIM8_VerticalRenovate(olddat);
Delay(came->Speed);
}
}
else
{
while((olddat - 10) > newdat)
{
olddat -= 10;
TIM8_VerticalRenovate(olddat);
Delay(came->Speed);
}
}
came->Vertical = newdat;
Delay(came->Speed);
TIM8_VerticalRenovate(came->Vertical);
}
摄像机camera.h__________点击查看代码
#ifndef __CAMERA_H
#define __CAMERA_H
#include "stm32f10x_lib.h"
typedef struct
{
u16 Horizontal;
u16 Vertical;
u32 Speed;
}CAMERA;
void CameInit(CAMERA* came);
void CameMoveHorizontal(CAMERA* came, u8 angle);
void CameMoveVertical(CAMERA* came, u8 angle);
#endif
- 六足机器人所有的关键数据和设置引脚
关键数据和设置引脚__________点击查看代码
最远腿长度120mm
th1bar=joint_far(按弧度存储double)
中间腿长度85mm
th2bar=joint_mid(按弧度存储double)
初值 th1bar = -100度
th2bar = 135度
关节面朝前为前方
编码顺序为
左前 右前
4 1
5 2
6 3
黄线朝内
<1>
TIM1-CH1 PE09(最外面) sevo1
TIM1-CH2 PE11(中间) sevo2
TIM1-CH3 PE13(最里面) sevo3
<2>
TIM1-CH4 PE14 (最外面) sevo4
TIM2-CH3 PB10 (中间) sevo5
TIM2-CH4 PB11 (最里面) sevo6
<3>
TIM3-CH1 PC06 (最外面) sevo7
(PA06)(PB04)-RECONFIG
TIM3-CH2 PC07 (中间) sevo8
(PA07)(PB05)-RECONFIG
TIM3-CH3 PC08 (最里面) Sevo9
(PB00)-RECONFIG
<4>
TIM3-CH4 PC09(最外面) Sevo10
(PB01)-RECONFIG
TIM4-CH1 PD12(中间) Sevo11
TIM4-CH2 PD13(最里面) Sevo12
<5>
TIM4-CH3 PD14(最外面) Sevo13
TIM4-CH4 PD15(中间) Sevo14
TIM5-CH1 PA00(最里面) Sevo15
<6>
TIM5-CH2 PA01(最外面) Sevo16
TIM5-CH3 PA02(中间) Sevo17
TIM5-CH4 PA03(最里面) Sevo18
calculation:
弧度
0 2.5% 7200 180
45 5.0% 7200 360
90 7.5% 7200 540
135 10.0% 7200 720
180 12.5% 7200 900
=================camera===========================
TIM8 CH1 (PC06)
TIM8 CH2 (PC07)
=================camera===========================
=PB0
=PB1
=PE9
=PE11
=PE13
=PE14
=PB10
=PB11
=PD12
=PD13
=PD14
=PD15
=PC6
=PC7
PC8
PC9
PA8
=PA9
=PA10
PA11
PA15
PB3
=PB4
=PB5
PB6
PB7
PB8
PB9
=PA0
=PA1
=PA2
=PA3
PA7
PA6
PD08
PD09
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步