198 lines
6.7 KiB
C
198 lines
6.7 KiB
C
#include "system.h"
|
||
|
||
//Robot software fails to flag bits
|
||
//机器人软件失能标志位
|
||
u8 Flag_Stop=1;
|
||
|
||
//The ADC value is variable in segments, depending on the number of car models. Currently there are 6 car models
|
||
//ADC值分段变量,取决于小车型号数量,目前有6种小车型号
|
||
int Divisor_Mode;
|
||
|
||
// Robot type variable
|
||
//机器人型号变量
|
||
//0=Mec_Car,1=Omni_Car,2=Akm_Car,3=Diff_Car,4=FourWheel_Car,5=Tank_Car
|
||
u8 Car_Mode=4;
|
||
|
||
//Servo control PWM value, Ackerman car special
|
||
//舵机控制PWM值,阿克曼小车专用
|
||
int Servo = SERVO_INIT;
|
||
|
||
//Default speed of remote control car, unit: mm/s
|
||
//遥控小车的默认速度,单位:mm/s
|
||
float RC_Velocity=500;
|
||
|
||
//Vehicle three-axis target moving speed, unit: m/s
|
||
//小车三轴目标运动速度,单位:m/s
|
||
float Move_X, Move_Y, Move_Z;
|
||
|
||
//PID parameters of Speed control
|
||
//速度控制PID参数
|
||
float Velocity_KP=300,Velocity_KI=800;
|
||
|
||
//Smooth control of intermediate variables, dedicated to omni-directional moving cars
|
||
//平滑控制中间变量,全向移动小车专用
|
||
Smooth_Control smooth_control;
|
||
|
||
//The parameter structure of the motor
|
||
//电机的参数结构体
|
||
Motor_parameter MOTOR_A,MOTOR_B,MOTOR_C,MOTOR_D;
|
||
|
||
/************ 小车型号相关变量 **************************/
|
||
/************ Variables related to car model ************/
|
||
//Encoder accuracy
|
||
//编码器精度
|
||
float Encoder_precision;
|
||
//Wheel circumference, unit: m
|
||
//轮子周长,单位:m
|
||
float Wheel_perimeter;
|
||
//Drive wheel base, unit: m
|
||
//主动轮轮距,单位:m
|
||
float Wheel_spacing;
|
||
//The wheelbase of the front and rear axles of the trolley, unit: m
|
||
//小车前后轴的轴距,单位:m
|
||
float Axle_spacing;
|
||
//All-directional wheel turning radius, unit: m
|
||
//全向轮转弯半径,单位:m
|
||
float Omni_turn_radiaus;
|
||
/************ 小车型号相关变量 **************************/
|
||
/************ Variables related to car model ************/
|
||
|
||
//PS2 controller, Bluetooth APP, aircraft model controller, CAN communication, serial port 1, serial port 5 communication control flag bit.
|
||
//These 6 flag bits are all 0 by default, representing the serial port 3 control mode
|
||
//PS2手柄、蓝牙APP、航模手柄、CAN通信、串口1、串口5通信控制标志位。这6个标志位默认都为0,代表串口3控制模式
|
||
u8 PS2_ON_Flag=0, APP_ON_Flag=0, Remote_ON_Flag=0, CAN_ON_Flag=0, Usart1_ON_Flag, Usart5_ON_Flag;
|
||
|
||
//Bluetooth remote control associated flag bits
|
||
//蓝牙遥控相关的标志位
|
||
u8 Flag_Left, Flag_Right, Flag_Direction=0, Turn_Flag;
|
||
|
||
//Sends the parameter's flag bit to the Bluetooth APP
|
||
//向蓝牙APP发送参数的标志位
|
||
u8 PID_Send;
|
||
|
||
//The PS2 gamepad controls related variables
|
||
//PS2手柄控制相关变量
|
||
float PS2_LX,PS2_LY,PS2_RX,PS2_RY,PS2_KEY;
|
||
|
||
//Self-check the relevant flag variables
|
||
//自检相关标志变量
|
||
int Check=0, Checking=0, Checked=0, CheckCount=0, CheckPhrase1=0, CheckPhrase2=0;
|
||
|
||
//Check the result code
|
||
//自检结果代码
|
||
long int ErrorCode=0;
|
||
|
||
void systemInit(void)
|
||
{
|
||
|
||
// //Interrupt priority group setti ng
|
||
// //中断优先级分组设置
|
||
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
|
||
//
|
||
// //Delay function initialization
|
||
// //延时函数初始化
|
||
delay_init(168);
|
||
|
||
//Initialize the hardware interface connected to the LED lamp
|
||
//初始化与LED灯连接的硬件接口
|
||
LED_Init();
|
||
|
||
//Initialize the hardware interface connected to the buzzer
|
||
//初始化与蜂鸣器连接的硬件接口
|
||
Buzzer_Init();
|
||
|
||
//Initialize the hardware interface connected to the enable switch
|
||
//初始化与使能开关连接的硬件接口
|
||
Enable_Pin();
|
||
|
||
//Initialize the hardware interface connected to the OLED display
|
||
//初始化与OLED显示屏连接的硬件接口
|
||
OLED_Init();
|
||
|
||
//Initialize the hardware interface connected to the user's key
|
||
//初始化与用户按键连接的硬件接口
|
||
KEY_Init();
|
||
|
||
//Serial port 1 initialization, communication baud rate 115200,
|
||
//can be used to communicate with ROS terminal
|
||
//串口1初始化,通信波特率115200,可用于与ROS端通信
|
||
uart1_init(115200);
|
||
|
||
//Serial port 2 initialization, communication baud rate 9600,
|
||
//used to communicate with Bluetooth APP terminal
|
||
//串口2初始化,通信波特率9600,用于与蓝牙APP端通信
|
||
uart2_init(9600);
|
||
|
||
//Serial port 3 is initialized and the baud rate is 115200.
|
||
//Serial port 3 is the default port used to communicate with ROS terminal
|
||
//串口3初始化,通信波特率115200,串口3为默认用于与ROS端通信的串口
|
||
uart3_init(115200);
|
||
|
||
//Serial port 5 initialization, communication baud rate 115200,
|
||
//can be used to communicate with ROS terminal
|
||
//串口5初始化,通信波特率115200,可用于与ROS端通信
|
||
uart5_init(115200);
|
||
|
||
//ADC pin initialization, used to read the battery voltage and potentiometer gear,
|
||
//potentiometer gear determines the car after the boot of the car model
|
||
//ADC引脚初始化,用于读取电池电压与电位器档位,电位器档位决定小车开机后的小车适配型号
|
||
Adc_Init();
|
||
Adc_POWER_Init();
|
||
|
||
//Initialize the CAN communication interface
|
||
//CAN通信接口初始化
|
||
CAN1_Mode_Init(1,7,6,3,0);
|
||
|
||
//According to the tap position of the potentiometer, determine which type of car needs to be matched,
|
||
//and then initialize the corresponding parameters
|
||
//根据电位器的档位判断需要适配的是哪一种型号的小车,然后进行对应的参数初始化
|
||
Robot_Select();
|
||
|
||
//Encoder A is initialized to read the real time speed of motor C
|
||
//编码器A初始化,用于读取电机C的实时速度
|
||
Encoder_Init_TIM2();
|
||
//Encoder B is initialized to read the real time speed of motor D
|
||
//编码器B初始化,用于读取电机D的实时速度
|
||
Encoder_Init_TIM3();
|
||
//Encoder C is initialized to read the real time speed of motor B
|
||
//编码器C初始化,用于读取电机B的实时速度
|
||
Encoder_Init_TIM4();
|
||
//Encoder D is initialized to read the real time speed of motor A
|
||
//编码器D初始化,用于读取电机A的实时速度
|
||
Encoder_Init_TIM5();
|
||
|
||
//定时器12用作舵机的PWM接口
|
||
TIM12_SERVO_Init(9999,84-1); //APB1的时钟频率为84M , 频率=84M/((9999+1)*(83+1))=100Hz
|
||
|
||
//普通小车默认定时器8用作航模接口
|
||
// TIM8_SERVO_Init(9999,168-1);//APB2的时钟频率为168M , 频率=168M/((9999+1)*(167+1))=100Hz
|
||
//Initialize the model remote control interface
|
||
//初始化航模遥控接口
|
||
TIM8_Cap_Init(9999,168-1); //高级定时器TIM8的时钟频率为168M
|
||
|
||
//Initialize motor speed control and, for controlling motor speed, PWM frequency 10kHz
|
||
//初始化电机速度控制以及,用于控制电机速度,PWM频率10KHZ
|
||
//APB2时钟频率为168M,满PWM为16799,频率=168M/((16799+1)*(0+1))=10k
|
||
TIM1_PWM_Init(16799,0);
|
||
TIM9_PWM_Init(16799,0);
|
||
TIM10_PWM_Init(16799,0);
|
||
TIM11_PWM_Init(16799,0);
|
||
|
||
//IIC initialization for MPU6050
|
||
//IIC初始化,用于MPU6050
|
||
I2C_GPIOInit();
|
||
|
||
//MPU6050 is initialized to read the vehicle's three-axis attitude,
|
||
//three-axis angular velocity and three-axis acceleration information
|
||
//MPU6050 初始化,用于读取小车三轴姿态、三轴角速度、三轴加速度信息
|
||
MPU6050_initialize();
|
||
|
||
//Initialize the hardware interface to the PS2 controller
|
||
//初始化与PS2手柄连接的硬件接口
|
||
PS2_Init();
|
||
|
||
//PS2 gamepad configuration is initialized and configured in analog mode
|
||
//PS2手柄配置初始化,配置为模拟量模式
|
||
PS2_SetInit();
|
||
}
|