这原来是一个用于大四轴的飞控项目,由荷兰开拓者Joop Brokking公布。我为了学习和调试更加安全,才改为了小四轴。小四轴上引出了引脚,也可以当作大四轴飞控利用,只需对飞控软件代码稍作修正。
如果你会购买飞控板、电调、电机等零件,且能自己组装无人机。那这个项目可以帮你更进一步,学习到飞控的核心技能。

如果你喜好研究软件无线电,这个小四轴也可以作为你研究无线电通信旗子暗记的根本。
硬件解释开拓环境IDE:Arduino主控芯片:STM32F103C8T6姿态传感器:MPU6050遥控:利用航模遥控吸收机实现,只要可以买到支持PPM输出的遥控器和吸收机,插上去就能用。图传:直接绑上一个仿照摄像头+发射机模块就行。
设计图事理图讲解
事理分5个板块讲解,包含:STM32、MPU6050、驱动电路、供电、其他4个部分的电路。
1.STM32部分
这是主控芯片STM32的事理图,它与电路的其它部分都有联系。
STM32由LDO供电,通过IIC吸收MPU6050的姿态信息,吸收PA0口上的遥控PPM旗子暗记,输出掌握4个电机的PWM旗子暗记。除此之外,它也用仿照引脚实现了电池电压检测功能,可以掌握LED灯来显示状态,可以通过串口与电脑相连。
J1接口是下载固件时用的,下载模式时J1须要短接,正常模式下J1须要开路。
2.MPU6050部分
这是MPU6050的事理图,它通过IIC接口与STM32相连,供应姿态信息。
3.驱动电路部分
这是个中一个电动机的驱动电路,PWM4_LF_CW表示这是第四个电机旗子暗记,它可以直接输出给外部的电调模块用来掌握大四轴的无刷电机,也可以送到下图中的MOSFET上,用来掌握接在LF这个2pin口上的有刷电机。
掌握两种不同的电机,须要对代码做一些修正。
4.供电部分
这个供电部分是最主要的!
参考下图,从左到右依次是电池接口、开关、线性稳压芯片。
在画PCB过程中,电池口的正极先连接到了开关正极上,网络名称是VBAT,它与4个电动机对应的MOSFET相连,这几条连线必须要足够粗,否则电流不足。
电池负极一样平常都与铺铜区相连,也便是说电路上的所有部分都有一根很粗的导线连到了负极,以是负极不会是问题,紧张是正极要足够粗。
如果正极不足粗,可能会导致STM32的供电电压不足,程序跑飞。当你看到蓝色LED灯开始闪烁,代表飞控重启了,很有可能便是这个缘故原由。
我供应的资料里线宽是足够的,但是如果你要二次开拓,要把稳这个问题。
5.其他部分
这是一个3pin的接口,用来把航模遥控器的PPM旗子暗记运送给主控,你也可以用软件无线电来自己实现遥控。
这是一个4pin接口,可以用它往主控里烧写固件,也可以在正常利用过程中向电脑发送调试数据。
这是一个分压电路,可以得到与电池电压成正比的旗子暗记,然后给到主控的仿照输入口上,检测电池剩余电量。
这是两个LED状态指示灯,可以由主控的两个引脚掌握。飞机在翱翔过程中,用LED来显示状态非常方便。
代码
对付飞控来说,实在紧张难点还是在软件代码上,代码我做了很多减法,删除了原项目的多余部分。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////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
由于文件格式缘故原由,代码仅展示部分,须要的伙伴可以在评论区滴滴,无偿分享~
参考资料:立创开源硬件平台《YMFC开源小四轴》作者:jamesshao8
https://oshwhub.com/jamesshao8/mini-drone#P4
如果你认为这篇文章很有用,欢迎点赞、关注、转发、收藏~
我会持续更新优质的开源项目!








