学校的课设,历时五周,总算做出了一点东西,现在给大家分享一下,也算给这个课设做一个最后的总结,第一次写,写得可能不好,请大家谅解。
先说一下课设所用的器材吧,本次设计主要用到了两个无刷直流电机,两块STM32F407ZGT6的板子,两个超声波模块和一个OLED显示屏。
本次设计所用超声波模块型号为HC-SR04,和HY-SRF05
至于为什么会用两个不同型号的超声波模块,嗯。。。。因为设计做到后面才发现要用到两个超声波模块,然后再到淘宝上买已经来不及了,只能去实验室借一块过来,实验室借的是HC-SR04,我自己买的是HY-SRF05,不过,超声波模块的型号是否一样是不影响实验结果的,因为所有的超声波模块它们的原理都一样,给trig引脚一个大于10us的TTL脉冲,超声波模块自动会循环发出8个40KHz的脉冲,这里我是给它一个PWM波,(之前找资料的时候发现有一些是直接给trig引脚一个大于10us的高电平,这个方法我试过,不过没有成功。)然后用输入捕获去获取echo引脚的高电平时间,获取的高电平时间可以在串口助手上看到。HY-SRF05型号的超声波模块虽然有5个引脚,但实验时真正用到的引脚实际只有4个,和HC-SR04一样,HY-SRF05多出来的那个OUT引脚资料上是显示可以当报警模块使用。
0.96寸OLED屏
下面是设计所用无刷直流电机的图,左边那两个大铁盒子是24V的电源,用来驱动BLD-120A驱动器工作的
电机驱动器,型号为BLD-120A
接下来说一下方案吧,因为做的是超声波定位,所以最终我们要得到的是所测目标的坐标,超声波模块只能得到距离,所以我们要想个办法把距离转换成坐标。
欲确定平面某一物品C(X,Y)的坐标,如图所示。A、B为两个超声波模块,a、b为超声波模块的距离。已知A(0,0)、B(C,0)。则有:
cos∠ A= (bb+cc-a*a)/(2bc)
A=arcos ∠A
X=bcos ∠A,Y=bsin ∠A
故只要用测出a、b的长度,便可以确定该物品的位置。
即我们固定两个超声波模块的位置,这就是我们要用到两个电机的原因,因为超声波模块的测量角度只有15度,要想测量整个平面的位置坐标,我们就要让超声波模块能够360度转起来,电机的作用就是这个,组装的时候我们在电机的轴上固定一块木板,然后将超声波模块固定在木板上,这样,装置的模型就出来了。
下面给大家说一下程序吧,设计总共用了两块STM32F4的板子,一块用来控制两个电机的转动,一块用来控制两个超声波模块和OLED屏,这里说一下控制超声波模块的程序,两路PWM波和两路输入捕获以及主程序。
两路PWM波程序
void TIM14_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1Per