基于STM32F407四旋翼无人机(一)

第一次写博客,可能有很多地方写的不好,请大家见谅,这次想分享一下毕业做的一个毕业设计《基于STM32F407四旋翼无人机控制系统》的一些过程。我会最开始的模块程序编写来较为详细的讲解。
刚开始先说一下飞控都用到了那些知识和选用了哪些模块选择STM32F407作为飞控的主控芯片,在此飞控开发中用到了IIC通信,串口通信,使用的是匿名飞控的上位机进行查看姿态数据和控制数据。硬件的选型为MPU6050模块,MS5611气压计和AK8975磁力计,遥控器使用的为福斯I6X的和配套的10通接收机。
接下来就开始说一下无人机的一些基础知识,因为在大学的时候大二就开始接触无人机了,常用的飞控比如PIX或者APM,基本都在玩四旋翼或者六旋翼,个人觉得如果有空或者有能力可以去扒一下pix的代码去看一下,虽然代码量很多,但是耐心看的话还是有很大收获的。
(一)无人机术语
1、解锁:无人机准备飞行前进行解锁之后才可飞行。
2、加锁:无人机降落后进行加锁,防止误操作造成的安全隐患。
3、罗盘:飞控上的电子指南针,也可指磁力计。
4、电调:电子调速计,可以驱动无刷电机。
5、UBEC电源模块:一个可以将12-16V转为5V的电源转换器
(二)无人机装配
1、电池:电池为聚合物锂电池,单芯下限电压3.7V(1S表示一个电芯),上限电压是4.2V,有点与没电之间只差0.5V。
2、电调:电调全称电子调速器,电调种类非常多,有双向电调(用于车船、坦克等)、飞机电调、多轴电调等等,电调对应使用的电机类型不同,也分无刷电调和有刷电调。上面说到,有刷电机转动时可以不用电调,但并不意味着:用有刷电机做模型飞机可以不用电调,如果没有电调,就无法控制电机工作时的转速。多轴电调均为单向电调, 电调分带UBEC和不带UBEC,UBEC输出一般5V左右为飞控或者接收机供电。
3、无刷电机:是指没有碳刷的电机 ,一般我们都可以在电机身上看到有比如1400kv的标识,电机的KV值越高,意味着转速越高;提供的扭力越小。电机的KV值越低,意味着转速比较低;提供的扭力越大。
电机转速(空载)=KV值X电压
如KV1400的电机在12V电压下它的转速是16800转/分钟。
4、桨叶:再买桨叶的时候我们都会看到有1047或者8045的标识,拿8045来说,80是指80英寸长(80 * 25.4mm =2032mm ),45是螺距(螺距是指螺旋桨旋转一周在轴向移动的距离)。
5.BB响电池报警器:可以显示此时电池的总电压和每个电芯的电压,并且可以设置报警电压。
(三)无人机原理结构组成
1、ROLL:横滚,将机体绕X轴旋转;
2、PITCH:俯仰,将物体绕Y轴旋转;
3、YAW:航向,将物体绕Z轴旋转;在这里插入图片描述
4、各种机型桨叶的安装方向和顺序:在这里插入图片描述

(四)无人机各项检查
1、首先检查螺丝和螺旋桨是否牢固,电机轴有无变形,检查机架是否牢固,电池是否固定好,检查桨叶方向是否正确,有时候起飞的侧翻一般有三种情况,第一种是最常见的桨叶装反或者方向有误,第二种是飞控放置不水平,第三种是姿态矫正有误。
2、检查各个插头连接是否完好,焊接部分是否松动,电池电量是否充足。(最好是上电前对加速度计、陀螺仪和磁力计进行一个校准)上电后观察各个电子设备有无不正常发热现象,观察各个指示灯是否正常。
3,飞行前合一轻微推动油门,观察各个电机工作是否正常,检查桨叶转向是否正确,起飞后进行前后左右飞行,观察无人机飞行是否正常,检查遥控器舵量是否正确(若舵量有误则需要校准电调行程,不同的电调有不同的校准方法)。

下一次开始对于各个模块进行一些讲解,并且有获取数据的代码供参考!!!

### STM32F407 四旋翼无人机飞控代码示例 对于基于STM32F407四旋翼无人机飞控系统,通常会涉及到多个模块的设计与集成,包括但不限于IMU数据采集、PID控制算法实现以及PWM信号输出用于电机驱动。这里提供段简化版的飞控程序框架作为参考[^1]。 #### 初始化配置 ```c #include "stm32f4xx_hal.h" // 定义定时器句柄和其他必要变量... TIM_HandleTypeDef htim_pwm; ADC_ChannelConfTypeDef sConfig; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM_PWM_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); // 设置系统时钟 MX_GPIO_Init(); // GPIO初始化 MX_TIM_PWM_Init(); // PWM定时器初始化 while (1){ /* 主循环 */ } } ``` #### IMU 数据读取 为了获取飞行状态信息,需要连接并读取来自惯性测量单元(IMU)的数据。这部分可以通过IIC/SPI接口完成,并利用相应的库函数处理原始传感数据。 ```c uint8_t imu_read_data(uint8_t reg_addr,uint8_t *data_buffer,int length){ // 实现具体通信协议下的寄存器访问逻辑... } float get_acceleration_x(){ uint8_t buffer[2]; imu_read_data(ACCEL_X_REG_ADDR,&buffer,sizeof(buffer)); return ((int16_t)(buffer[1]<<8 | buffer[0]))*SENSORS_GRAVITY_STANDARD/ACC_SENSITIVITY_2G; } ``` #### PID 控制器设计 针对姿态角(俯仰、滚转、偏航),分别构建独立的PID调节器来调整各轴方向上的平衡度。 ```c typedef struct { float Kp,Ki,Kd; float prev_error; float integral; }pid_controller_t; void pid_init(pid_controller_t *controller,float kp,float ki,float kd){ controller->Kp=kp; controller->Ki=ki; controller->Kd=kd; controller->prev_error=0; controller->integral=0; } float pid_compute(pid_controller_t *controller,float setpoint,float process_variable,float dt){ float error=setpoint-process_variable; controller->integral+=error*dt; float derivative=(error-controller->prev_error)/dt; float output=controller->Kp*error+ controller->Ki*controller->integral+ controller->Kd*derivative; controller->prev_error=error; return output; } ``` #### 电机驱动部分 最后步就是根据计算得到的姿态校正值转换成合适的PWM占空比发送给各个电调,从而精确调控螺旋桨转速。 ```c #define MOTOR_MIN_THROTTLE 1000 #define MOTOR_MAX_THROTTLE 2000 void update_motor_throttle(float throttle[],const float base_throttle,pid_controller_t controllers[]){ for(int i=0;i<4;++i){ int pwm_value=MOTOR_MIN_THROTTLE+(MOTOR_MAX_THROTTLE-MOTOR_MIN_THROTTLE)*throttle[i]/base_throttle; __HAL_TIM_SET_COMPARE(&htim_pwm,i+1,pwm_value); } } ``` 上述代码片段展示了如何围绕STM32F407搭建套基本功能完备的四旋翼无人机飞控平台。当然这只是个起点,在实际项目中还需要考虑更多细节问题如电源管理、异常检测机制等[^3]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值