2015年国赛-风板控制装置

一、整体设计思路

要实现对风班的控制,难点在于获取当前风板的“状态”和寻找合适的算法来改变电机的驱动功率。可以采用MPU-6050通过姿态解析来获取风班的角度状态,并根据当前的角度信息,采用PID算法对左右的风扇的功率进行控制,从而达到改变风板角度的目的。此外,可以使用定时器来判定当前角度与目标角度的误差,若误差在一定时间内处于合理范围,则认为以达标,可以点亮LED作为光电提示。最后采用OLED显示屏显示相关数据,方便进行调试。

二、器件选型

2.1  角度获取

(1)MPU6050

MPU6050是一款由InvenSense公司生产的微电子机械系统(MEMS)传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器广泛应用于智能手机、平板电脑、可穿戴设备、无人机、机器人以及其他需要精确运动跟踪和平衡控制的场合,可以用来获取角度信息。

优点:价格便宜,MPU6050官方有相应DMP库来完成姿态解析,操作简单。

缺点:MPU6050具有动态稳定性,而无静态稳定性,稳定时效果不好。

(2)MPU60X0

MPU-60X0是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪, 3轴MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP(DigitalMotion Processor),可用 I2C 接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C 或 SPI 接口 输出一个 9 轴的信号(SPI 接口仅在 MPU-6000 可用)。MPU-60X0 也可以通过其 I2C 接口 连接非惯性的数字传感器,比如压力传感器。 MPU-60X0 对陀螺仪和加速度计分别用了三个 16 位的 ADC,将其测量的模拟量转化 为可输出的数字量。

优点:准确度更高

缺点:价格贵

综合考虑,此题角度精度要求不太高,选择MPU6050来进行角度获取。

2.2 电机选择

(1)775电机

775电机,它通常指的是一种小型直流电机,具有小型化、直流供电、多种电压选项(6V 、12V 、24V等)、易于控制等特点。

优点:价格便宜,操作简单,功率大。

缺点:没有风道,风力可能会分散。

(2)直流涡旋风扇RK12032M12B 

直流涡旋风扇RK12032M12B是一种直流轴流风扇,它通过直流电压和电磁感应来工作,将电能转化成机械能,从而带动风叶转动产生气流。这种风扇具有高风量、高静压、高可靠性和低噪音的特点,适用于需要高效冷却的多种设备和行业。

优点:自带风道,风力集中,输出功率较大。

缺点:价格较贵。

综合考虑到后续带负载可能对风力要求较高,选择直流涡旋风扇RK12032M12B 。

2.3电机驱动模块

L298N是SGS公司生产的一款通用的电机驱动模块。其内部包含4路逻辑驱动电路,有两个H桥的高电压大电流全桥驱动器,接收TTL逻辑电平信号,一个模块可同时驱动两个直流电机工作,具有反馈检测和过热自断功能。利用L298N驱动电机时,主控芯片只需通过/O口输出控制电平即可实现对电机转向的控制,编程简单,稳定性好。

2.4 器件说明

BOOM

作用

电机*2

驱动

STM32F103C8T6

主控

LED

声光提示

L298N*2

电机驱动电路

OLED

显示信息

MPU6050

获取角度

12V电源*2

供电

 

三、电路与程序设计

3.1 I/O口说明

I/O口

I/O功能

Key1(PB12)

增加目标角度

Key2(PB14)

减小目标角度

Key3(PA8)

选择角度1或角度2

Key4(PA10)

启动

Key5(PA12)

模式选择

LED (PA0)

光电提示

OLED_W_SCL(x) (PB8)

OLED时钟线

OLED_W_SDA(x) (PB9)

OLED数据线

电机1控制A(PA4)

电机控制1

电机1控制B(PA5)

电机控制2

电机1PWM(PA6)

电机PWM输出

电机2控制A(PA1)

电机控制1

电机2控制B(PA2)

电机控制2

电机2PWM(PA7)

电机PWM输出

 

3.3 关键代码

PID算法

float pid_left(float now, float target,float left_p,float left_i,float left_d)

{

//位置PID

p_err_1=target-now;

p_sum_1+=p_err_1;

p_diif_1=p_err_1-p_last_err_1;

//更新误差

p_last_err_1=p_err_1;

 

//对积分进行限制

if(p_sum_1>100){p_sum_1=100;}

if(p_sum_1<-100){p_sum_1=-100;}

 

return (make_sure1((left_p)*p_err_1+(left_i)*p_sum_1+(left_d)*p_diif_1));

}

 

最小输出

float make_sure1(float pwm)

{

if(pwm>100-min_pwm1){pwm= 100-min_pwm1;}

if(pwm<-0){pwm= -0;}

return pwm+min_pwm1;

}

 

模式改变定时

void TIM4_IRQHandler()

{

//模式0和模式2的定时

if(model==0||model==2){

//在稳定4s后,清除pid参数和min_speed

if(over_state)

{

tim4_count++;

if(tim4_count>4) //稳定了4s,回到原点

{

pid_p1=0;

pid_i1=0;

pid_d1=0;

pid_p2=0;

pid_i2=0;

pid_d2=0;

min_pwm1=0;

min_pwm2=0;

tim4_count=0;

}

}

//如果未稳定,则计数为0

else{tim4_count=0;}

}

//模式1和模式3的定时

if(model==1||model==3){

//如果稳定了

if(over_state){

tim4_count++;

//等待1s

if(tim4_count>1)

{

//进行翻转

tim4_mod=!tim4_mod;

tim4_count=0;

//看翻转了几次

model_count++;

}

}

//如果未稳定,则计数为0

else{tim4_count=0;}

 

//摆动周期设置 摆动3次

if(model==1&&model_count>3)

{ model_count=0;

model2_enable=0;

model=5; //任意一个未知数

//修改正确的pid参数 角度为f1

tim4_mod=0; //避免意外发生

pid_change(target_angle);

}

 

//摆动周期设置 摆动4次

if(model==3&&model_count>4)

{ model_count=0;

model4_enable=0;

model=5; //任意一个未知数

//修改正确的pid参数 角度为f2

tim4_mod=1; //避免意外发生

pid_huge_change(angle_two);

}

}

//防止卡在中断函数里面

TIM_ClearITPendingBit(TIM4,TIM_IT_Update);

}

四、指标完成情况

4.1 基础部分

(1) 预置风板控制角度(控制角度在45°~135°之间设定)。

完成。

(2)评委在45°~ 135°范围内设定两个角度值

基本完成,有时出现超调。

(3)显示风板实时位置的角度。风板的实时角度位置、位置变更和任务完成应有明显的声光提示。

完成。

4.2 拓展部分

(1)预置风板控制角度(控制角度在45°~135°之间设定)。

完成。

(2)在45°~135°范围内预置两个角度值

基本完成,有时出现超调。

 

 

代码下载:链接:https://pan.baidu.com/s/1JlkzzLpJersep5hHVQiiMw 
提取码:1234

 

 

 

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值