標題:
STM32F103舵機+電機控制機器人程序
[打印本頁]
作者:
MaxWell_nice
時間:
2019-7-13 16:20
標題:
STM32F103舵機+電機控制機器人程序
本人自己寫的程序,之前參加比賽用的,不懂就問
單片機源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "string.h"
volatile u8 aRxBuffer[100]={0};
volatile u8 RxCounter=0;
volatile u8 ReceiveState=0;
volatile u8 aRxBuffer2[100]={0};
volatile u8 RxCounter2=0;
volatile u8 ReceiveState2=0;
char flag=0;
float a=0;
float b=0;
float c=0;
float d=0;
u16 m[2]={0};
char timeflag=0;
int x=0;
int main(void)
{
u16 time1,time2;
int i=0;
delay_init(); //延時函數(shù)初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
uart1_init(9600); //串口初始化為115200
uart3_init(9600);
LED_Init(); //LED端口初始化
TIM3_PWM_Init(2879,0); //不分頻。PWM頻率=72000000/900=80Khz
TIM_SetCompare1(TIM3,0);
TIM_SetCompare2(TIM3,0);
while(1)
{
if(flag==1)
{
delay_ms(120);
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
if(a>=1500) a--;
}
if(flag==2)
{
delay_ms(time1);
TIM_SetCompare1(TIM3,m[0]);
//TIM_SetCompare2(TIM3,m[1]);
if(m[0]>=1500) m[0]--;
}
if(flag==3)
{
//delay_ms(8000);
TIM_SetCompare1(TIM3,2735);
TIM_SetCompare2(TIM3,2735);
for(x=0;x<=7;x++)
{
delay_ms(1000);
}
TIM_SetCompare1(TIM3,0);
TIM_SetCompare2(TIM3,0);
flag=0;
}
if(timeflag==1)
{
timeflag=0;
TIM_SetCompare2(TIM3,m[1]);
if(m[1]>=1500) m[1]--;
//printf("111");
}
if( ReceiveState == 1) //電腦調(diào)試
{
for(i=0;i<=8;i++)
{
if((aRxBuffer[i]==0x4d)&&(aRxBuffer[i+1]==0x4d))
{
if(aRxBuffer[i+8]==0x00)
{
flag=0;
TIM_ITConfig(TIM5,TIM_IT_Update,DISABLE );
m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
TIM_SetCompare1(TIM3,m[0]);
TIM_SetCompare2(TIM3,m[1]);
PBout(13)=aRxBuffer[i+4];
PBout(14)=aRxBuffer[i+7];
a=((float)m[0])/2879;
b=((float)m[1])/2879;
printf("%.2f%% : %.2f%%",a*100,b*100);
break;
}
if(aRxBuffer[i+8]==0x01)
{
m[0]=(aRxBuffer[i+3]<<8)+(aRxBuffer[i+2]);
m[1]=(aRxBuffer[i+6]<<8)+(aRxBuffer[i+5]);
PBout(13)=aRxBuffer[i+4];
PBout(14)=aRxBuffer[i+7];
flag=2;
time1=aRxBuffer[i+9];
time2=((u16)aRxBuffer[i+10])*100;
printf("time1 = %d",time1);
printf("time2 = %d",time2);
TIM_SetCompare1(TIM3,m[0]);
TIM_SetCompare2(TIM3,m[1]);
TIM5_Int_Init(time2,7199);
break;
}
}
}
memset((void *)aRxBuffer,0,100);
ReceiveState=0;
RxCounter=0;
}
if(ReceiveState2 == 1)
{
printf("ok");
if(aRxBuffer2[0]==0xFF)
{
if(aRxBuffer2[1]==0xaa) //前進
{
flag=0;
a=2159;
b=2101;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)2159)/2879;
d=((float)2101)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[2]==0xaa) //左轉(zhuǎn)
{
flag=0;
a=1958;
b=1987;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)1958)/2879;
d=((float)1987)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[3]==0xaa) //右轉(zhuǎn)
{
flag=0;
a=2159;
b=1958;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)2159)/2879;
d=((float)1958)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[4]==0xaa) //切割運動
{
flag=3;
PBout(13)=1;
PBout(14)=1;
}
if(aRxBuffer2[5]==0xaa) //停
{
flag=0;
a=0;
b=0;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)0)/2879;
d=((float)0)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[6]==0xaa) //一級加速
{
flag=0;
a=2447;
b=2447;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)2447)/2879;
d=((float)2447)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[7]==0xaa) //二級加速
{
flag=0;
a=2245;
b=2303;
TIM_SetCompare1(TIM3,a);
TIM_SetCompare2(TIM3,b);
PBout(13)=1;
PBout(14)=1;
c=((float)2245)/2879;
d=((float)2303)/2879;
printf("%.2f%% : %.2f%%",c*100,d*100);
}
if(aRxBuffer2[8]==0xaa) //螺旋運動
{
flag=1;
a=2361;
b=2303;
PBout(13)=1;
PBout(14)=1;
}
}
memset((void *)aRxBuffer2,0,100);
ReceiveState2=0;
RxCounter2=0;
}
}
}
復制代碼
所有資料51hei提供下載:
下位機程序.7z
(196.57 KB, 下載次數(shù): 38)
2019-7-14 01:14 上傳
點擊文件名下載附件
不懂再問
下載積分: 黑幣 -5
作者:
admin
時間:
2019-7-14 01:15
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
xiaozhong1314
時間:
2019-7-14 09:20
沒注釋,有點懵
作者:
jzyhxf
時間:
2019-7-15 14:33
其他部分代碼呢
作者:
MaxWell_nice
時間:
2019-10-11 23:12
jzyhxf 發(fā)表于 2019-7-15 14:33
其他部分代碼呢
可以加我qq問,這個上傳的比較水,不好意思,961109198
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1