便宜了一个十分简单易学的小四轴,只用到了两个芯片和700行代码。
那本来是一个用于大四轴的飞控项目,由荷兰开发者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
若是你认为那篇文章很有用,欢送点赞、存眷、转发、保藏~
我会持续更新优良的开源项目!
发表评论