阅读量: 次  文章字数: 6.4k字  阅读时长: 22分钟

本篇文章介绍《微风四轴飞行器-硬件电路板设计》的相关内容。

前言

我曾经在大二的时候为完成数字电路实验而简单地学过一些硬件电路板设计,当时我看的是郭天祥老师的教程视频,里面有关Altium Designer 6.9软件的操作可以说是讲得非常细致,但是由于后来临近期末考试,时间较为紧迫,而且实验电路本身并不复杂,所以我只学了其中的PCB部分之后就没再深入地学习下去了。

可能是之前我还有一些PCB设计的基础,所以这次在设计Breeze微型四轴飞行器PCB的时候感觉还是比较容易上手的。我最早是在Ubuntu 14.04上用KiCad来设计硬件(因为Crazyflie 1.0四轴飞行器的PCB就是用KiCAD画的),但是后来综合考虑到KiCAD在处理复杂元器件布线以及规则约束方面的短板,所以我们最终还是决定使用功能更加强大的Altium Designer 16来重新完成对PCB的绘制工作。

概述

Breeze微型四轴飞行器硬件电路主要由五个部分组成,以下是硬件的架构图:

breeze_hardware_architecture

电机驱动模块
电机驱动模块主要负责接收主控制器发过来的PWM(脉冲宽度调制)信号来控制四轴飞行器每个有刷空心杯电机的转速。

电源管理模块
电源管理模块是四轴飞行器能量的来源,它的主要功能有:负责USB和锂电池电源的切换、管理锂电池的充放电以及对输入的电源进行降稳压操作。

传感器模块
传感器模块包括了陀螺仪、加速度计、磁力计和气压计。正是由以上这些传感器所构成的10自由度IMU(惯性测量单元)为四轴飞行器提供了绝对或相对的位置和姿态信息,使得四轴飞行器可以在运动过程中获知自身的运动状态,使其可以更好地预估自己的行为。

无线通信模块
无线通信模块根据预先制订的通信协议,在四轴飞行器和远程PC端之间建立起数据通信的桥梁,便于在PC端控制和监视飞行器的运动状态。

主控制器模块
主控制器模块是四轴飞行器的核心,它主要接收从上层传感器和无线通信模块发过来的数据,并根据不同的控制命令对姿态数据进行数学解算,最后将解算结果以PWM信号的形式发送给电机驱动模块。

软件

KiCad

kicad_logo

  • 简介

    KiCad是一款开源的电路原理图和PCB设计工具,它可以被用来设计较为简单的硬件电路板。KiCad软件不对电路板的尺寸做任何的限制,它最多可以处理32个覆铜层、14个工艺层以及4个辅助层。KiCad可以创建所有与构建PCB有关的文件,比如光绘文件、钻孔文件、元器件位置文件等。

  • 成果

    以下是我前期在Ubuntu 14.04上用KiCad软件所设计的Breeze微型四轴飞行器PCB图,由于KiCad软件不像Altium Designer那样带有各种IC封装生成的向导功能,所以当时我是边看IC的Datasheet边用KiCad的PCB库编辑功能来进行封装的绘制,这个过程很花费时间,不过也确实让我学到一些PCB封装设计方面的技巧和经验(比如根据手焊或机焊方式的不同来确定IC四周引脚的长宽度等)。最后很遗憾的是,由于我们对Breeze微型四轴飞行器的功能需求进行了较大的变更并考虑到后期PCB打板制作方面的问题,因此我们决定放弃KiCad转而使用Altium Designer来完成PCB电路板的设计工作(这也是为什么下图中的PCB没有完成的原因),但有一点我不得不说,作为一个开源且跨平台的EDA软件,KiCad真的很好上手,而且它在国外Hack界拥有非常高的人气的,毕竟CrazyfliePixhawk两大知名的开源项目都曾使用KiCad作为其PCB设计的工具。

    breeze_pcb_kicad

Altium Designer

altium_logo

  • 简介

    Altium Designer是原Protel软件开发商Altium公司推出的一款EDA(电子设计自动化)软件,它集成了原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等功能。除此之外,Altium Designer设计平台还拓宽了板级设计的传统界面,全面集成了FPGA和SOPC设计,为设计者提供了全新的一体化解决方案,提高了电路设计的质量和效率。

  • 成果

    下图所展示的就是我最终用Altium Designer所完成的Breeze微型四轴飞行器的PCB文件,该PCB采用双面布局走线、双面覆铜处理、四层电路板设计。除此之外,我对连接有直流电机器件的电源线路进行了加粗处理,以提高电流对电机的驱动能力,还有就是由于该PCB使用了陶瓷天线(下图最中间上面那个突出的长方形区域),为了减少电源层对其信号传输的干扰,我对四层电路板中的VCC和GND层进行了分割处理,即将陶瓷天线元器件下方的VCC和GND层掏空,这样电流不从陶瓷天线的底部通过,自然便可降低由电流所产生的电磁干扰。最后总结一下,Altium Designer这款EDA软件是我用过的PCB设计工具(其它有KiCad和Cadence SPB)中对初学者最友好的,原因主要得益于其美观的人机交互界面、便捷强大的设计功能和丰富的教程案例,总之,如果你是刚开始接触PCB设计的新人,我推荐你学习Altium Designer。

    breeze_pcb_altium

Cadence SPB

cadence_logo

  • 简介

    Cadance SPB是Cadence旗下用于PCB板级设计的EDA软件。Cadence SPB是一套PCB板级设计完整解决方案,涵盖了从原理图设计到PCB设计以及生产加工装配输出的整个流程。Cadence SPB包括原理图输入设计工具,元件库管理工具,PCB设计工具和一个自动/交互式的强大的布线工具。

    OrCAD
    Cadence OrCAD Capture是一款多功能的PCB原理图输入工具。OrCAD Capture作为行业标准的PCB原理图输入方式,是当今世界最流行的原理图输入工具之一,具有简单直观的用户设计界面。OrCAD Capture CIS具有功能强大的元件信息系统,可以在线和集中管理元件数据库,从而大幅提升电路设计的效率。

    Allergo
    Cadence Allegro PCB Designer是一个可扩展的,经过验证的PCB设计环境,在解决技术和方法的挑战同时,可以使设计周期可控并尽可能缩短。Allegro PCB Designer解决方案采用了基础软件加选项的配置方案,包含了与PCB设计相关的一个完整的设计流程所需的一切。

原理

电机驱动

电机驱动模块部分负责接收主控发送的PWM信号,并控制每个空心杯电机的转速。

  • 器件

    SI2302场效应管
    SI2302是N沟道增强型场效应管,它的源极和漏级接在N 型半导体上。相比于三极管,它的优点在于其完全导通的时候,源漏级电阻为毫欧级别,即它自身的耗散非常小,这使得用它作为电机驱动管是非常合适的。

    SI2302的工作原理为当施加在栅极上的正电压达到栅压的时候,由于电场的作用,此时N型半导体的源极和漏级的负电子就会被吸引出来而涌向栅极,但由于金属氧化膜的阻挡,使得电子聚集在两个N沟道之间的P型半导体中,从而形成电流,使源极和漏级之间导通。

    720有刷空心杯电机
    空心杯电机属于直流、永磁、伺服微特电机。空心杯电机在结构上突破了传统电机的转子结构,采用的是无铁芯转子。空心杯电机具有十分突出的节能、控制和拖动特性。

    Breeze微型四轴飞行器使用的是有刷空心杯电机(转子无铁芯),转速为30000转/分钟,直径为7mm,长度为20mm(简称720电机),电机轴直径为1mm。

  • 原理

    breeze_motor

    Breeze微型四轴飞行器使用的是有刷空心杯电机,所以电机的控制属于有刷直流电机控制,这相对于无刷电调来说要简单很多。只需要将信号的驱动能力增大,就可以驱动有刷电机。

    电机调速主要利用了PWM(脉冲宽度调制)原理,PWM是一种模拟控制方式,它根据相应载荷的变化来调制场效应管栅极的偏置,来实现场效应管导通时间的变化,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效地技术。

    上图中,电源和电机之间连接了一个型号为BAT54KFLM的二极管,它的功能主要是分流有刷空心杯电机在PWM工作模式下产生的反电动势尖峰。接下来,电路中使用SI2302场效应管作为电机驱动,这得益于其在完全导通的时候,源漏级电阻非常小,即当将其用作大电流负载的驱动管时,其自身的耗散非常小,因此接近全部的电流可以被用来驱动电机,使得该电路表现出了很好的驱动能力。

    最后,每个SI2302场效应管的栅极都接了一个阻值为10K欧姆的下拉电阻,目的是为了防止主控在没有给栅极发送PWM信号的时候,电机由于PWM信号不稳定而开始猛转。在栅极接一个下拉电阻,确保了场效应管的输入信号要么是高,要么是低,没有不确定的第三种状态。因此,电机也就只用两种状态,要么转,要么不转。主控输出的是PWM波形,用于控制场效应管的导通和截止,从而控制电机的转动速度。

电源管理

电源管理模块负责USB和锂电池电源的切换、管理锂电池的充放电以及对输入的电源进行降稳压操作。

  • 器件

    NUF2221W1T2
    NUF2221W1T2是带有ESD保护的USB终止器。它可以对USB电路进行保护,防止过高的输入电压对整个系统的损坏。

    MAX16054
    MAX16054是带有ESD保护的单个开关去抖以及内部闭锁电路的按键通/断控制器,可接受机械开关产生的嘈杂输入,并经过一个有工厂设置的延迟时间后产生干净的数字锁存输出。在开关通、断期间,MAX16054无接触抖动,只有对开关输入去抖后的下降沿触发时,输出状态才会改变。在输入上升沿,输出保持不变。

    BQ24075
    BQ24075芯片集成了锂电池线性充电和系统电源管理。它接受USB或锂电池的输入并且支持最大为1.5A的充电电流。其内置的动态电源管理功能可以防止在USB配置出错时出现充电崩溃的情况。

    除此之外,BQ24075还拥有强大的动态电源路径管理功能,它可以不断地监视电池充电的状态,并根据输入电流的大小,提供最佳的充电电流。这使得其能有效地减少电池充电以及放电的循环次数,提高了电池的使用寿命和工作效率。

    BQ24075有三种输入限制模式:100mA、500mA和用户自定义,这使得它能更容易地遵守不同USB的标准。

    TPS79301
    TPS79301是可调的低压差线性稳压器。它具有高电源抑制比、超低噪声、快速启动以及很好的线性负载瞬态响应等特点。TPS79301可以通过在对应的引脚连接不同阻值的电阻,来改变输出电压的大小。

  • 原理

    breeze_power_battery

    当不连接USB,而仅采用电池供电时,BQ24075对电池进行放电管理,其10号引脚输出的VCOM信号使电路中的2N7002场效应管导通,R22和R26两个电阻对电池进行分压,此时处理器开始不断地采样VBAT的值,如果VBAT的值过低,处理器就会给MAX16054发送SYSOFF信号,使其关断系统,防止因电池过放而导致的损害。

    breeze_power_nuf2221w1t2

    NUF2221W1T2在电路中的作用主要是对USB进行缓冲或保护,防止因为USB的错误导致电路系统出现意外情况。

    breeze_power_max16054

    MAX16054电路右上部分的2N7002场效应管以及10K欧姆的电阻组成了可控的下拉。VUSB连接到USB供电端,若有USB供电,则场效应管导通,从而BQ24075的SYSOFF引脚被拉低,此时BQ24075不会识别处理器间接发送过来的关机信号。保证了在使用USB进行调试的时候,不会因为此时电池电压低而出现关机的情况。

    breeze_power_bq24075

    BQ24075 充电时的参数可以通过连接不同阻值大小的电阻来确定,以下是具体的计算公式:

    快速充电电流(ISET)
    breeze_formula_1

    输入电流限制(ILIM)
    breeze_formula_2

    快速充电安全定时器(TMR)
    breeze_formula_3

    根据以上官方提供的公式和电路图中的电阻阻值,可以得出此时BQ24075的快速充电电流为740mA,输入电流限制为1.3A,安全定时器为80min左右。

    breeze_power_tps79301_vcca

    breeze_power_tps79301_vcc

    breeze_power_tps79301_guide

    TPS79301可调输出的稳压值可以通过以下计算公式得到:
    breeze_formula_4

    首先以上图中的模拟电源部分为例讲解。根据官方提供的连接关系图,可以得知上述公式中的R1和R2分别对应模拟电源部分中的R和R9,因此计算得到输出的VCCA电压为2.8V。

    同理,对于数字电源部分,当不接USB供电时,BQ24075的PGOOD引脚输出为高电平,此时公式中的R1对应于R11和R15的并联,公式中的R2对应R16。当连接USB供电并且电池充满电时,PGOOD输出低电平,此时公式中的R1对应R11,公式中的R2对应R15和R16的并联。通过计算,输出的VCC电压为3.3V。

传感器

本电路模块使用的IMU传感器包含三轴陀螺仪、三轴加速度和三轴数字罗盘。基本原理是对陀螺仪测量到的角速度进行积分得出姿态角,并使用数字罗盘测量得到偏航角、加速度传感器测量到的横滚角和俯仰角对陀螺仪的飘移进行补偿,从而得到较高精度的姿态信息。

  • 器件

    MPU6050
    MPU6050模块是InvenSense公司推出的一款低成本的6轴传感器模块,包括三轴加速度,三轴角速度。其体积小巧,用途广阔。

    MPU6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。并通过最高至400kHz的IIC接口输出测量数据,为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250,±500,±1000,±2000°/秒,加速度计可测范围为±2,±4,±8,±16g可准确追踪快速与慢速动作。

    HMC5883L
    HMC5883L模块是Honeywell公司推出的一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。

    HMC5883L包含最先进的高分辨率HMC118X系列磁阻传感器,并附带Honeywell专利的集成电路包括放大器、自动消磁驱动器、偏差校准、能使罗盘精度控制在1°~2°的12位模数转换器等。HMC5883L采用Honeywell各向异性磁阻 (AMR) 技术,这使得其拥有轴向高灵敏度和线性高精度的特点。HMC5883L传感器带有的对于正交轴低敏感性的固相结构能用于测量地球磁场的方向和大小,其测量范围从毫高斯到8高斯。除此之外,它使用IIC系列总线接口与其他器件进行数据通信。

    MS5611
    MS5611气压传感器是由MEAS(瑞士)推出的一款SPI和I²C总线接口的新一代高分辨率气压传感器,分辨率可达到10cm。该传感器模块包括一个高线性度的压力传感器和一个超低功耗的24位模数转换器(工厂校准系数)。MS5611提供了一个精确的24位数字压力值和温度值以及不同的操作模式,可以提高转换速度并优化电流消耗。高分辨率的温度输出无须额外传感器可实现气压计/温度计功能。可以与几乎任何微控制器连接。通信协议简单,无需在设备内部寄存器编程。MS5611压力传感器只有5.0毫米×3.0毫米×1.0毫米的小尺寸可以集成在移动设备中。这款传感器采用领先的MEMS技术并得益于MEAS(瑞士)十余年的成熟设计以及大批量制造经验,保证产品具有高稳定性以及非常低的压力信号滞后。

  • 原理

    breeze_sensor_mpu6050

    breeze_sensor_hmc5883l

    breeze_sensor_ms5611

    MPU6050和MS5611连接到STM32的主IIC总线上,而HMC5883L连接到MPU6050的从IIC总线上。在初始化MPU6050时,可以设置主IIC总线和从IIC总线直通,这样STM32就可以直接通过主IIC总线访问从IIC总线,从而读取HMC5883L中的数据了。

    数据更新模式采用硬件中断模式,即MPU6050和HMC5883L都有一个硬件中断引脚MPU_INT和HM_INT,这样能保证数据到来时间的准确,让CPU资源最大化利用。

无线通信

无线通信模块负责四轴飞行器与远程PC之间的数据通信。

  • 器件

    nRF51822是一个超低功耗的2.4GHz无线SoC。它集成了2.4GHz收发器、ARM Cortex-M0架构的32位CPU、闪存以及数字和模拟外设接口。它支持蓝牙低功耗和一系列专有2.4GHz通信协议,功能非常强大。

  • 原理

    breeze_wireless

    breeze_wireless_guide

    Breeze微型四轴飞行器的无线通信电路主要参考了上图的官方示例,并在原有的基础之上修改了部分GPIO引脚的功能,使其可以对电源管理模块进行监视和控制。除此之外,nRF51822芯片使用USART接口与主控STM32进行数据的交互,而且预留的SCLK和SDIO也方便之后使用J-Link的SWD模式来进行代码的下载和调试。

主控制器

主控制器模块的核心是微处理器,它负责采集传感器的数据,并根据命令对数据进行融合和计算,最后将计算好的数据发送给四轴飞行器的执行机构。

  • 器件

    STM32F103T6U6
    STM32F103T6U6是意法半导体公司推出的基于ARM Cortex-M3内核的32位高性能微处理器。它工作在72MHz的主频下,拥有32K字节的Flash和10K字节的SRAM,并且提供了增强型的I/O和外设接口,其中包含2路12位ADC、1路7通道DMA、2路16位通用定时器和1路PWM定时器。同时,STM32F103T6U6也包含标准和先进的通信接口:1路IIC和SPI总线、2路USART、1路USB和1路CAN。

    CP2102
    CP2102是高度集成的USB转UART控制器芯片,其内置了USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM及异步串行数据总线(UART),支持调制解调器全功能信号,无需任何外部的USB器件。

    CP2102与其他USB转串口电路的工作原理类似,通过驱动程序将PC的USB口虚拟成COM口以达到扩展的目的。

  • 原理

    breeze_controller_stm32f103t6u6

    如上图所示,该电路包含了STM32的最小系统:复位电路、外部时钟电路、启动模式选择电路和电源退耦电路等。查阅意法半导的官方手册可以知道,STM32系列单片机都是低电平复位。于是采用如图所示的方法,将NRST引脚连接到对应的复位电路中。该电路图中STM32外接了一个16MHz的无源晶振,通过内部倍频,STM32的系统时钟最高可达72MHz。STM32的启动模式分为三种,可以从下面的表格给出:

    breeze_table

    电路图中STM32的BOOT0引脚默认是被拉低的,即STM32默认是运行在正常工作模式下的。BOOT0和BOOT1引脚的电平都可以进行配置以满足不同的实际需求。

    电源退耦电路不仅是主控电路才需要,对于所有的数字电路和模拟电路共存的系统,电源退耦都是必不可少的。电源退耦就是将电源上的噪声电压引入到地面,让电源电压保持在一个稳定的值,从而使系统也能够稳定地工作。上图中右上角就是典型的电源退耦电路,其实现方法是在电源的正负极之间并联一大一小两个电容。

    因为电容对频率高的信号,呈现低阻性,对直流呈现高阻特性。电源上的噪声对地平面而言就是一个交流信号,交流信号能通过电容到达地平面,而电源本身是直流的,电容对它会呈现出无穷大的阻力。因此,通过示波器可以看到,加了退耦电容的电源要比没加的波形要稳定得多。

    breeze_controller_cp2102

    CP2102电路原理比较简单,它负责转换USB和RS232接口的电平,主要用于后期的代码调试中。

    breeze_controller_expansion

    扩展电路将主控制器和无线通信模块中的一些引脚引到排插上,提高了四轴飞行器的可扩展性,并方便了之后的代码下载和调试。

经验

遇到问题

  • 使用Altium Designer修改完原理图的一些电气连接,并将更改同步到PCB中的时候,软件提示有Unknown PinFailed to add class member这两种形式的错误。

  • 手动给QFN封装的中间散热焊盘添加DGND等电源网络时,软件提示有多个DRC报错,错误内容是QFN封装中间焊盘和焊盘上的多个过孔之间发生了碰撞。

  • 在给PCB正反面进行覆铜的时候,有些布局靠内部的元件焊盘并没有被覆上铜,导致DRC检查报错。

解决办法

  • 错误原因是元件网络表和对象类表发生改变(比如添加、删除元件的某个引脚),这与之前PCB中的已有内容发生冲突。解决办法是首先使用快捷键D+N+N,打开Netlist Manager,删除板子上的所有Net;接着使用快捷键D+C,打开Object Class Explorer,删除Component Classes中与项目有关的所有Class;最后选择重新从原理图中导入。

  • 错误原因是没有给QFN封装中间焊盘的过孔添加DGND等网络属性,导致DRC误报。因此解决办法是在出错变绿的地方按下Shitf+V,调出Board Insight管理器,然后在里面逐一对过孔的网络属性进行修改。

  • 错误原因是元件布局较为密集,导致没有将所有元件的焊盘都覆上铜。因此解决办法是拉大内部元件之间的空间,使其与外围的覆铜切面要尽可能的大,而对于那些实在无法与其它地层相连的覆铜,可以使用过孔的方式,将其划分到相应的电源分割层中去。

总结

经过三周左右的时间,我终于完成了Breeze微型四轴飞行器的硬件电路板设计工作。通过参考其他四轴飞行器爱好者所设计的PCB工程并成功解决硬件设计过程中所出现的一些问题,我感觉自己收获很多,当然我希望阅读本篇文章的四轴飞行器初学者或爱好者也能够从中了解到PCB设计的基本流程以及所需掌握的知识。

接下来,我会用几篇文章的篇幅来重点地讲解Breeze微型四轴飞行器的嵌入式开发工作,内容主要涉及Linux下STM32开发环境的搭建、编译和链接原理讲解、飞控算法详细剖析等,欢迎对此感兴趣的爱好者前来阅读。

留言