標題:
第七屆工訓賽物流組小車電控程序
[打印本頁]
作者:
愛慕春妮
時間:
2021-8-6 12:50
標題:
第七屆工訓賽物流組小車電控程序
第七屆工訓賽物流組資料(小車電控程序)
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "encoder.h"
#include "motor.h"
#include "dataprocess.h"
#include "steer.h"
#include "show.h"
#include "oled.h"
#include "exti.h"
#include "DataScope_DP.h"
#include "adc.h"
#include "dma.h"
#include "steercontrol.h"
u8 Mode_All=1; //總模式標志,0,控制電機,1,控制舵機
u16 Time_Count=0; //時間計數變量
u16 Distance_F,Distance_L; //前方距離和左邊距離
u16 LocationInit_X,LocationInit_Y; //初始坐標
int Location_X,Location_Y; //當前坐標
float Yaw ; //航向角
int Encoder_Left,Encoder_Right;
int Distance_Left=0,Distance_Right=0; //用于更新坐標(單位時間內【50ms】左輪前進距離和右輪前進距離)
u8 state=1; //mode=0,停止;mode=1,直行;mode=2,右轉90度;mode =3,左轉90度;mode=4,左轉180度
u16 Voltage; //電池電壓
u16 AD_Value[2]; //電池電壓ADC轉換的結果
u8 Turn_Flag; //轉向標志,如果某一次轉向完成,則置1,反之,置0
u8 Task=2; //通過掃描二維碼得到的任務
unsigned char FSM_Status = 0; //狀態(tài)機的狀態(tài)變量
float Target1=750,Target2=750,Target3=750,Target4=750,Target5=835,Target6=750; //電機目標值
float TargetX=0.2,TargetY=0,Target_Beta=-10,Target_Alpha=0,Target_Gamma=-5; //姿態(tài)目標值,Target_Beta 1號舵機旋轉角度,Target_Alpha,云臺角度,Target_Gamma,6號舵機角度
u16 Angle1=90,Angle2=90,Angle3=90,Angle4=90,Angle5=90,Angle6=105;
int main(void)
{
u16 i;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init(); //LED初始化
OLED_Init(); //OLED初始化
uart_init(128000); //串口一初始化
// uart4_init(9600); //測距串口初始化
// uart5_init(115200); //openmv串口初始化
// AdcInit(); //電池電壓采集
// MYDMA_Config(); //DMA1采集ADC
// IIC_Init(); //=====模擬IIC初始化
// MPU6050_initialize(); //=====MPU6050初始化
// DMP_Init(); //=====初始化DMP
Encoder_Init_TIM2(); //編碼器初始化 ,右輪,為正值
Encoder_Init_TIM3(); //編碼器初始化 ,左輪,為負值
Motor_Init(); //電機控制IO口初始化
Motor_PWM_Init(7199,0); //電機pwm初始化,10KHz
TIM1_PWM_Init(9999,144); //舵機PWM初始化,50Hz,T=20ms
TIM8_PWM_Init(9999,144); //舵機PWM初始化,50Hz,T=20ms
// TIM6_Int_Init(499,7200); //50ms定時中斷
TIM7_Int_Init(99,7200); //10ms定時中斷
EXTIX_Init(); //按鍵外部中斷初始化
// EXTI_PC5_Init(); //mpu6050INT引腳中斷初始化
// SetSteer(95,90,90,90,90,105);
// delay_ms(1000);
// delay_ms(1000);
// SetSteer_PID(95,155,90,180,90,130);
while(1)
{
oled_show();
delay_ms(50);
}
while(1)
{
state =1;//直行
oled_show();
if(Location_X == 0 && Location_Y >= 200)
{
state=0;//停
break;
}
}
for(i=0;i<20;i++)
{
oled_show();
delay_ms(50);
}
while(1)
{
state = 2; //右轉90 90
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X >= 1800)
{
state =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右轉90 180
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右轉90 -90
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X <= 900)
{
state =0;
break;
}
}
while(1)
{
state = 2; //右轉90 0
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 4;//左轉180 -180
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 2; //右轉90 -90
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y >= 200 && Location_X <= 0)
{
state =0;
break;
}
}
while(1)
{
state = 3; //左轉90 -180
oled_show();
if(Turn_Flag == 1)//轉向完成
{
state = 0; //停
Turn_Flag =0;
break;
}
}
delay_ms(300);
while(1)
{
state = 1;//直行
oled_show();
if(Location_Y <= 0 && Location_X <= 0)
{
state =0;
break;
}
}
while(1)
{
Led_Flash(50000);
oled_show();
delay_ms(50);
}
}
復制代碼
代碼下載,如有錯誤,請指正:
stm32程序.7z
(313.44 KB, 下載次數: 25)
2021-8-6 16:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1