查看: 1338|回复: 19

2个芯片,700行代码,搞定一个四轴飞行器

[复制链接]

369

主题

410

帖子

1168

积分

金牌飞友

Rank: 6Rank: 6

积分
1168
飞币
757
注册时间
2017-7-6
发表于 2023-3-5 12:56:04 | 显示全部楼层 |阅读模式
自制了一个非常简单易学的小四轴,只用到了两个芯片700行代码

2个芯片,700行代码,搞定一个四轴飞行器-1.jpg

这原本是一个用于大四轴的飞控项目,由荷兰开发者Joop Brokking公布。我为了学习和调试更加安全,才改为了小四轴。小四轴上引出了引脚,也可以当作大四轴飞控使用,只需对飞控软件代码稍作修改。

2个芯片,700行代码,搞定一个四轴飞行器-2.jpg

如果你会购买飞控板、电调、电机等零件,且能自己组装无人机。那这个项目可以帮你更进一步,学习到飞控的核心技术
如果你喜欢研究软件无线电,这个小四轴也可以作为你研究无线电通信信号的基础


硬件说明


  • 开发环境IDE:Arduino
  • 主控芯片:STM32F103C8T6
  • 姿态传感器:MPU6050


  • 遥控:使用航模遥控接收机实现,只要可以买到支持PPM输出的遥控器和接收机,插上去就能用。
  • 图传:直接绑上一个模拟摄像头+发射机模块就行。


设计图

2个芯片,700行代码,搞定一个四轴飞行器-3.jpg


2个芯片,700行代码,搞定一个四轴飞行器-4.jpg



原理图讲解

原理分5个板块讲解,包含:STM32、MPU6050、驱动电路、供电、其他4个部分的电路。
1.STM32部分
这是主控芯片STM32的原理图,它与电路的其它部分都有联系。
STM32由LDO供电,通过IIC接收MPU6050的姿态信息,接收PA0口上的遥控PPM信号,输出控制4个电机的PWM信号。除此之外,它也用模拟引脚实现了电池电压检测功能,可以控制LED灯来显示状态,可以通过串口与电脑相连。
J1接口是下载固件时用的,下载模式时J1需要短接,正常模式下J1需要开路。

2个芯片,700行代码,搞定一个四轴飞行器-5.jpg



2.MPU6050部分
这是MPU6050的原理图,它通过IIC接口与STM32相连,提供姿态信息。

2个芯片,700行代码,搞定一个四轴飞行器-6.jpg



3.驱动电路部分
这是其中一个电动机的驱动电路,PWM4_LF_CW表示这是第四个电机信号它可以直接输出给外部的电调模块用来控制大四轴的无刷电机,也可以送到下图中的MOSFET上,用来控制接在LF这个2pin口上的有刷电机。
控制两种不同的电机,需要对代码做一些修改。

2个芯片,700行代码,搞定一个四轴飞行器-7.jpg



4.供电部分
这个供电部分是最重要的!参考下图,从左到右依次是电池接口、开关、线性稳压芯片。

2个芯片,700行代码,搞定一个四轴飞行器-8.jpg

在画PCB过程中,电池口的正极先连接到了开关正极上,网络名称是VBAT,它与4个电动机对应的MOSFET相连,这几条连线必须要足够粗,否则电流不够。
电池负极一般都与铺铜区相连,也就是说电路上的所有部分都有一根很粗的导线连到了负极,所以负极不会是问题,主要是正极要足够粗
如果正极不够粗,可能会导致STM32的供电电压不够,程序跑飞。当你看到蓝色LED灯开始闪烁,代表飞控重启了,很有可能就是这个原因。
我提供的资料里线宽是足够的,但是如果你要二次开发,要注意这个问题。




5.其他部分
这是一个3pin的接口,用来把航模遥控器的PPM信号输送给主控,你也可以用软件无线电来自己实现遥控。

2个芯片,700行代码,搞定一个四轴飞行器-9.jpg

这是一个4pin接口,可以用它往主控里烧写固件,也可以在正常使用过程中向电脑发送调试数据。

2个芯片,700行代码,搞定一个四轴飞行器-10.jpg

这是一个分压电路,可以获得与电池电压成正比的信号,然后给到主控的模拟输入口上,检测电池剩余电量。

2个芯片,700行代码,搞定一个四轴飞行器-11.jpg

这是两个LED状态指示灯,可以由主控的两个引脚控制。飞机在飞行过程中,用LED来显示状态非常方便。

2个芯片,700行代码,搞定一个四轴飞行器-12.jpg



代码

对于飞控来说,其实主要难点还是在软件代码上,代码我做了很多减法,删除了原项目的多余部分。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////These functions handle the red and green LEDs. The LEDs on the flip 32 are inverted. That is why a Flip32 test is needed.///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void red_led(int8_t level) {if (flip32)digitalWrite(PB4, !level); //If a Flip32 is used invert the output.else digitalWrite(PB4, level); //When using the BluePill the output should not be inverted.}void green_led(int8_t level) {if (flip32)digitalWrite(PB3, !level); //If a Flip32 is used invert the output.else digitalWrite(PB3, level); //When using the BluePill the output should not be inverted.}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////In this part the error LED signal is generated.///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void error_signal(void) {if (error >= 100) red_led(HIGH); //When the error is 100 the LED is always on.else if (error_timer < millis()) { //If the error_timer value is smaller that the millis() function.error_timer = millis() + 250; //Set the next error_timer interval at 250ms.if (error > 0 && error_counter > error + 3) error_counter = 0; //If there is an error to report and the error_counter > error +3 reset the error.if (error_counter < error && error_led == 0 && error > 0) { //If the error flash sequence isn't finisched (error_counter < error) and the LED is off.red_led(HIGH); //Turn the LED on.error_led = 1; //Set the LED flag to indicate that the LED is on.}else { //If the error flash sequence isn't finisched (error_counter < error) and the LED is on.red_led(LOW); //Turn the LED off.error_counter++; //Increment the error_counter variable by 1 to keep trach of the flashe由于文件格式原因,代码仅展示部分,需要的伙伴可以在评论区滴滴,无偿分享~
<hr>参考资料:立创开源硬件平台《YMFC开源小四轴》作者:jamesshao8
https://oshwhub.com/jamesshao8/mini-drone#P4
如果你认为这篇文章很有用,欢迎点赞、关注、转发、收藏~
我会持续更新优质的开源项目!

42

主题

869

帖子

1730

积分

金牌飞友

Rank: 6Rank: 6

积分
1730
飞币
857
注册时间
2017-8-9
发表于 2023-3-5 13:04:17 | 显示全部楼层
转发了

46

主题

809

帖子

1606

积分

金牌飞友

Rank: 6Rank: 6

积分
1606
飞币
795
注册时间
2017-8-23
发表于 2023-3-5 13:17:28 | 显示全部楼层
软件哪里有啊

28

主题

807

帖子

1600

积分

金牌飞友

Rank: 6Rank: 6

积分
1600
飞币
791
注册时间
2017-9-25
发表于 2023-3-5 13:32:23 | 显示全部楼层
你在钓鱼!,

40

主题

853

帖子

1685

积分

金牌飞友

Rank: 6Rank: 6

积分
1685
飞币
826
注册时间
2017-9-8
发表于 2023-3-5 13:41:54 | 显示全部楼层
转发了

45

主题

821

帖子

1623

积分

金牌飞友

Rank: 6Rank: 6

积分
1623
飞币
801
注册时间
2017-9-21
发表于 2023-3-5 13:52:28 | 显示全部楼层
转发了

33

主题

842

帖子

1667

积分

金牌飞友

Rank: 6Rank: 6

积分
1667
飞币
816
注册时间
2017-9-28
发表于 2023-3-5 14:05:53 | 显示全部楼层
转发了

58

主题

826

帖子

1649

积分

金牌飞友

Rank: 6Rank: 6

积分
1649
飞币
821
注册时间
2017-8-21
发表于 2023-3-5 14:18:32 | 显示全部楼层
转发了

45

主题

860

帖子

1704

积分

金牌飞友

Rank: 6Rank: 6

积分
1704
飞币
842
注册时间
2017-8-23
发表于 2023-3-5 14:27:00 | 显示全部楼层
转发了

38

主题

835

帖子

1649

积分

金牌飞友

Rank: 6Rank: 6

积分
1649
飞币
812
注册时间
2017-8-14
发表于 2023-3-5 14:34:38 | 显示全部楼层
求代码

54

主题

837

帖子

1689

积分

金牌飞友

Rank: 6Rank: 6

积分
1689
飞币
839
注册时间
2017-8-23
发表于 2023-3-5 14:40:12 | 显示全部楼层
32好像比51好学一些?相对已经入门单片机来说

35

主题

871

帖子

1723

积分

金牌飞友

Rank: 6Rank: 6

积分
1723
飞币
850
注册时间
2017-9-3
发表于 2023-3-5 14:48:51 | 显示全部楼层
2个芯片,700行代码,搞定一个四轴飞行器…………

44

主题

873

帖子

1746

积分

金牌飞友

Rank: 6Rank: 6

积分
1746
飞币
863
注册时间
2017-8-15
发表于 2023-3-5 15:01:05 | 显示全部楼层
转发了

43

主题

802

帖子

1585

积分

金牌飞友

Rank: 6Rank: 6

积分
1585
飞币
781
注册时间
2017-9-27
发表于 2023-3-5 15:08:51 | 显示全部楼层
PA0是wakeup,PB10、PB11才是接陀螺仪的IIC的吧?

51

主题

858

帖子

1707

积分

金牌飞友

Rank: 6Rank: 6

积分
1707
飞币
850
注册时间
2017-8-18
发表于 2023-3-5 15:19:33 | 显示全部楼层
滴滴

40

主题

794

帖子

1569

积分

金牌飞友

Rank: 6Rank: 6

积分
1569
飞币
762
注册时间
2017-9-23
发表于 2023-3-5 15:32:22 | 显示全部楼层
程序用了好多 if 判断[捂脸]

39

主题

819

帖子

1609

积分

金牌飞友

Rank: 6Rank: 6

积分
1609
飞币
788
注册时间
2017-9-25
发表于 2023-3-5 15:46:30 | 显示全部楼层

54

主题

809

帖子

1626

积分

金牌飞友

Rank: 6Rank: 6

积分
1626
飞币
815
注册时间
2017-8-14
发表于 2023-3-5 15:53:40 | 显示全部楼层
转发了

46

主题

775

帖子

1551

积分

金牌飞友

Rank: 6Rank: 6

积分
1551
飞币
768
注册时间
2017-9-14
发表于 2023-3-5 15:58:52 | 显示全部楼层
转发了

53

主题

840

帖子

1688

积分

金牌飞友

Rank: 6Rank: 6

积分
1688
飞币
846
注册时间
2017-8-18
发表于 2023-3-5 16:07:34 | 显示全部楼层
求全代码,我pcb都设计好了[流泪]就剩打板子和飞控代码了
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表