完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
今天介绍一个小玩意是一个开源小四轴。
我考虑过基于之前做的stm32飞控来做一个小四轴,对于新手来说比较安全,然后就上网找一样芯片的小四轴看看能不能在不画板子情况下,把软件移植上去。后来我找到了这一款小四轴。它的主要部件stm32f103c8t6和mpu6050和我的stm32飞控是一模一样的。我的stm32飞控还多了一些传感器,但是那些额外的传感器并不是必须的。传感器里面只有陀螺仪是必须的,加速度计也比较重要,这些都是由mpu6050实现的,而这个小四轴正好也用了这个传感器芯片,其实mpu6050早在ymfc-al里就用上了。 而且,这个小四轴还有一个优点,它是机架和飞控板分体的,也就是说,万一哪天我连硬件也想做了,我也可以用我自己的飞控小板子,只保留它的机架+电机+螺旋桨部分,pcb和smt我可以自己找嘉立创搞定。 不过,nrf24l01和我习惯用的无线模块不一样,之前用的都是专用遥控器配套的接收机,输出ppm或者pwm波,nrf24l01有点像串口透传模块,我接触的不多,只是用过,代码不熟悉。需要慢慢对接。 (其实我在github上找到一个第三方爱好者改的ymfc-3d,姿态传感器用了mpu6050(本来是l3g4200),无线芯片用了nrf24l01,我过段时间看看能否直接用吧。) 用nrf24l01还有一个好玩的地方,我之前做的portapack蓝牙解调,其实也可以改一改来解nrf24l01,因为他们都是fsk调制的,而且我找的解码btle的那个开源项目里本来就带nrf24l01的解码了,也就是说我有可能直接用portapack来解小四轴遥控器命令,当然用portapack发命令给小四轴也是可能的,这个发射不是简单的重放,而是想发什么命令就发什么。 其实我以前用hackrf重放过nrf24l01,可以重放控制的,说明这个模块确实是比较简单的。 重放攻击演示视频:https://v.youku.com/v_show/id_XMTU4MjY5ODM5Mg==.html 不过我拿到手后碰到一个问题,它的遥控器是右手油门的,貌似左手油门的卖光了,我很不习惯。 后来我想到个办法,把遥控器像下面这样反着拿,然后改了改遥控器程序,就当熟悉它的开发环境了。 它的开发环境是keil,下载器是jlink,串口只用来输出调试信息(printf),不下载固件。跟着卖家教程也挺方便,唯一我不习惯的地方是不跨平台,必须用windows,而且在ubuntu下,代码注释也是乱码。 这里贴一些我自己改的代码,由于不是我写的,所以我只能贴一部分。 我下载了左手油门的代码,然后在/HAL/remote.c文件里,把1000+adc值都改为了2000-adc就行了,另外我根据传感输出,改了一下 //原代码 Remote.thr = (uint16_t)(0.25f*ADC_ConvertedValue[1])+1000 + offset.thr;//油门 last_thr = Remote.thr = Remote.thr*0.25f + 0.75f*last_thr; Remote.pitch = 1000 + (uint16_t)(0.25f*ADC_ConvertedValue[3]) + offset.pitch;// last_pitch = Remote.pitch = Remote.pitch*0.25f + 0.75f*last_pitch; Remote.yaw = 1000 + (uint16_t)(0.25f*ADC_ConvertedValue[0]) + offset.yaw;//方向 last_yaw = Remote.yaw = Remote.yaw*0.25f + 0.75f*last_yaw; Remote.roll = 1000 +(uint16_t)(0.25f*ADC_ConvertedValue[2]) + offset.roll;//副翼 last_roll = Remote.roll = Remote.roll*0.25f + 0.75f*last_roll; //我反过来拿遥控器时要做的修改 Remote.thr = 2000 - (uint16_t)(0.25f*ADC_ConvertedValue[1]) + offset.thr;//油门 last_thr = Remote.thr = Remote.thr*0.25f + 0.75f*last_thr; Remote.pitch = 2000 - (uint16_t)(0.25f*ADC_ConvertedValue[3]) + offset.pitch;// last_pitch = Remote.pitch = Remote.pitch*0.25f + 0.75f*last_pitch; Remote.yaw = 2000 - (uint16_t)(0.25f*ADC_ConvertedValue[0]) + offset.yaw;//方向 last_yaw = Remote.yaw = Remote.yaw*0.25f + 0.75f*last_yaw; Remote.roll = 2000 - (uint16_t)(0.25f*ADC_ConvertedValue[2]) + offset.roll;//副翼 last_roll = Remote.roll = Remote.roll*0.25f + 0.75f*last_roll; 我实际的飞行体验:起飞基本上保持离地20~30cm(可能充电没冲足,因为一直没显示充满,但是我不敢冲太久,怕鼓包),另外自动回中的遥感不太好操作,很容易一个动作导致过度修正,我还是习惯航模遥控器。 前段时间,热心模友NEXT,给了我一个小四轴,也是基于stm32c8t6+mpu6050,接收机使用了ppm接收机rx2a,而不是nrf24l01,飞机上面已经烧录了他改写的ymfc-32飞控代码(主要是引脚不同)。 我拿到手后飞了一下,发现效果还挺好。 视频:https://www.bilibili.com/video/BV19K4y1t7cx yaw轴解锁与标准代码不同,是他自己改了解锁方式。 另外roll轴pitch轴交换的问题是因为小飞机上的箭头方向不是正前方,要以mpu6050上的小点为准。 飞了这个小四轴,更加坚定了我的信心。接下来就是照着红色小飞机的原理图画板子了。不过由于生产电机麻烦,我还是不打算生产一整个Pcb飞机,而是继续用前面说的小飞控板+小机架的方式。 小四轴飞控板子生产好了,发现几个问题: 1.pb2没拉低,这样无法用串口下载程序到stm32里,哪怕boot0跳线帽插上去也是不行的,所以我就用白色飞线解决了这个问题,就可以拉低了。 2.开关关机后,电机还会转,这是因为我电机的正极直接从电池上引出,而不是接在开关上,这样开关控制不了电机电源,mos上只要有一个小干扰就会打开电机。 3.只接u***线,没接电池时,电机也能转,这个不算大问题,但是一般小四轴都不是这样的。我发现LDO的vout会反向给vin供电,所以我串接了一个二极管解决了这个问题。(实际没增加二极管,只是调整了电机正极和二极管的顺序就行了) 4.我发现有时候stm32接电池时会跑飞,u***供电时不会,后来发现是因为接电池时要用LDO同时给单片机和遥控接收机的3.3v供电,用u***时这个3.3v是电脑u***口提供的。LDO的供电电流不够。后来我把遥控接收机直接接电池正极就解决了这个问题。 5.飞机一切测试正常就是飞不起来,跟两个因素有关,一个是飞机太重(用原来的飞控就只能离地10cm,不能真的飞到任意高度),另一个是我代码里的pwm波范围是0~2000ms(周期4000ms),最大只用到50%占空比。我打算先换一体飞控降低重量,再考虑改代码。 6.我还做了一些修改,比如电机电源线加粗,另外零件尽量使用嘉立创库里的(可以降低打样成本)。 下面的电源部分修改,解决了第2点和第3点的问题。 然后我又打了5个板子,但是这5个板子下单的时候,我来不及改接收机部分了(第4点问题),所以接收机供电我还是飞线接到电池上的。整机做出来比较轻,基本能解决第5点问题,请看后面的视频。 这是首次试飞视频:https://www.bilibili.com/video/BV185411Y7Xf 可以看到飞机油门开启后,能离地10cm左右,这是没增加最大占空比的情况下就能实现的,说明减轻重量确实有帮助。 但是我后来还是提高了最大占空比,我修改了pwm范围为0~3000ms(4000ms周期)这样最大占空比是75%就能完全飞起来了。 关于接收机,我后来测试了几种情况,如果我直接焊接在原来设计的位置,确实stm32还是会跑飞。如果我把正负极都接电池附近,那就完全没问题。但是如果我把正极接电池,负极接原来位置。stm32虽然不会跑飞,但是感觉飞机好像不太听话,感觉地如果不直接连电池负极会有干扰,虽然我设计的地最终也是接在电池负极的,但是经过电路板上别的元器件了。所以下一版本,我会直接把正负极尽量靠近电池。 另外,下一个版本还会修改电机孔大小,现在大小刚合适放电机,不能赛那个橡皮圈,这样必须要打胶固定有点麻烦。下一版本会加大这个孔。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:13 , Processed in 0.954839 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号