Skip to content

Latest commit

 

History

History
837 lines (586 loc) · 36.4 KB

microdynamics_developer_log.md

File metadata and controls

837 lines (586 loc) · 36.4 KB

MicroDynamics开发者日志

2020.05.30

作者:
maksyuki

完成:
1、完成SOPHUM_PRO_V1的pcb布局和布线。

计划:
1、将PCB设计文件发送给板厂加工。

2020.04.02

作者:
maksyuki

完成:
1、修改SOPHUM_PRO_V1的POWER部分锂电池XT30插座连接处的问题。
2、修改同样POWER部分VCC_1V5的输入端3.3nF电容的连接问题。

计划:
1、对SOPHUM_PRO_V1的POWER再次检查。
2、开始SOPHUM_PRO_V1进行布线。

2020.03.22

作者:
maksyuki

完成:
1、完成7A微型无刷电机控制器设计,焊接和测试。经测试可以支持2S锂电。
2、完成微型光流传感器板子设计。
3、完成SOPHUM_PRO_V1的原理图设计和BOM整理工作。

计划:
1、对SOPHUM_PRO_V1的POWER部分进行仿真测试。
2、开始SOPHUM_PRO_V1进行PCB布局和布线。

2019.09.25

作者:
maksyuki

完成:
1、改进了SOPHUM_PRO_1的原理图设计。
2、输出IMU和ESC板的装配图并完成ESC板的焊接,固件烧写。

计划:
1、完成IMU和ESC板子的测试,完成相应资料整理并提交到个人博客上。
2、开始设计光流传感器子板和距离传感器子板。

2019.09.01

作者:
maksyuki

完成:
1、初步完成SOPHUM_PRO_1的原理图设计。
2、完成IMU和ESC部分的DEMO板的检查,输出IMU和ESC的生产资料和BOM表。
3、IMU和ESC板子已经投厂打样并依据BOM表采购元器件,两个板子分别正式命名为sophum_imu_v1.0和sophum_esc_v1.0。

计划:
1、焊接IMU和ESC测试板并上电测试,完成相应资料整理并提交到个人博客上。
2、开始设计光流传感器子板和距离传感器子板。

2019.08.19

作者:
maksyuki

完成:
1、完成IMU子板原理图和PCB设计。
2、完成ESC子板原理图和PCB设计。

计划:
1、对IMU和ESC的设计进行检查,输出IMU和ESC的生产资料和BOM表。
2、开始设计SOPHUM_PRO_1的原理图。

2019.04.23

作者:
maksyuki

计划:
1、开始学习四层PCB的原理图设计和布线。
2、测试ESP32驱动3.5寸IPS电容触摸屏(基于LittleVGL)。
3、测试MT7288网卡(基于openWRT)。
4、测试MT7288与K210的SPI通信。

2019.01.20

作者:
maksyuki

计划:
1、开始学习相关开发板的使用方法并对板载资源进行评估。
2、开始进行Breeze Mini第二代产品的的开发工作。

2018.05.09

作者:
maksyuki

完成:
1、对IOS蓝牙APP的界面和代码进行了优化。
2、学习完相关控制算法理论,基于MPU6050和MS5611的数据设计控制律,实现控制算法。
3、编写了Breeze项目、团队介绍和Breeze Mini四轴飞行器部分的wiki。
4、在CAD设计中采用多种强度和韧度的材料进行3D打印,对设计进行了强度验证。
5、完成Breeze Mini第一代产品的包装、海绵内衬设计和打样。

计划:
1、继续完善Breeze Mini的wiki内容。
2、开展Breeze Air项目的预研工作。

2018.03.31

作者:
maksyuki

完成:
1、完成IOS蓝牙APP代码的编写,实现APP向四轴飞行器发出控制指令。
2、完成电机和电池底座CAD设计的结构验证。
3、完成MicroDynamics团队新wiki系统的搭建。
4、完成nRF51822和手机之间,nRF51822和STM32之间的通信协议的搭建与编写。

计划:
1、继续优化IOS蓝牙APP的界面和代码。
2、在CAD设计中采用多种强度和韧度的材料进行3D打印,对设计进行强度验证。
3、学习相关控制算法理论,基于MPU6050和MS5611的数据设计控制律,实现控制算法。

2018.03.19

作者:
maksyuki

完成:
1、实现将蓝牙部分代码移植到nRF51822支持的最新SDK(nRF5_SDK_12.3.0_d7731ad)和蓝牙协议栈(s130)上。
2、修改电机和电池底座的CAD设计,将原先使用的自锁结构设计换成螺栓锁定结构。
3、初步完成IOS APP的框架搭建工作。

计划:
1、使用电压表实际测试锂电池电压并与nRF通过ADC采集得到的电压比较,测试ADC转换的准确性。
2、使用nRF51822的应用定时器来定时采集ADC电压并进行电源管理部分代码和蓝牙应用之间的集成。
3、读取MPU6050和MS5611的数据并输入到Matlab中处理,设计数字滤波器并完成相应wiki的编写。

2018.03.05

作者:
maksyuki

完成:
1、完成nRF电源管理和电池电压检测部分驱动的编写和测试。
2、实现手机蓝牙测试APP和nRF之间的串口数据互传。

计划:
1、使用电压表实际测试锂电池电压并与nRF通过ADC采集得到的电压比较,测试ADC转换的准确性。
2、将蓝牙部分代码移植到nRF51822支持的最新SDK(nRF5_SDK_12.3.0_d7731ad)和蓝牙协议栈(s130)上。
3、继续改进电机和电池底座的CAD设计。

2018.03.03

作者:
maksyuki

完成:
1、完成读取MPU6050经过DMP处理后的姿态角数据。
2、完成读取MS5611补偿后的高度数据。
3、利用高级定时器TIM1实现主函数中断嵌套功能。

计划:
1、开始开发nRF电源管理部分的驱动。
2、改进电机和电池底座的设计,并完成第二次样板的3D打印。
3、读取的MS5611的温度数据正常,气压数据范围正确,但由温度和气压数据计算出高度的公式的正确性还有待测试。
4、由于通用定时器TIM2和TIM3各两个通道被用来输出PWM,所以这里使用高级定时器TIM1来产生主函数定时中断,但由于TIM1是挂在高速APB2总线(72MHz),所以产生的中断定时周期为2ms,而不是原来使用通用定时器的1ms。虽不影响使用,但还需再测试。

2018.03.01

作者:
maksyuki

完成:
1、完成breeze无人机STM主控芯片常用外设驱动(System Clock、Delay、SysTick Timer、USART和IIC)和外设模块(LED和PWM)的编写和测试工作。
2、完成Breeze无人机nRF芯片USART和GPIO部分驱动的编写,实现了STM和nRF芯片之间的串口通信。
3、完成Breeze无人机电机固定座和电池底座的机械结构设计,3D打印样板后电机固定座固定效果理想,只需做微小修改即可达到要求,电池底座尺寸合适,但厚度和高度偏大,偏高,还需进一步修改。

问题:
1、STM和nRF芯片能能分别和PC进行串口通信,但是尝试两者之间进行通信时,STM能收发数据,但是nRF只能收,不能发。

解决:
1、在尝试对Nordic官方SDK提供的例程(\nRF5_SDK_12.3.0_d7731ad\examples\peripheral\uart\pca10028\blank\arm5_no_packs\uart_pca10028.uvprojx)和艾克姆nRF51822开发板的串口例程进行修改后仍旧无法实现nRF向STM的数据传送,后来尝试上网搜索后还是无法解决。在进行JTAG调试时发现nRF在发送数据时寄存器USART0->EVENTS_ERROR被强制置1,表示发生硬件错误。最后是猜想USB转串口芯片可能会影响STM和nRF两者之间的通信,在尝试使用锂电池供电而不使用USB供电后问题解决。感觉可能是因为在测试时Breeze无人机是通过micro USB线取电,而两个芯片的串口是在直接相连后再接到CP2102上的,即实现STM和nRF串口通信时的硬件连线方式为(STM的TX和CP2102,nRF的RX相连,STM的RX和CP2102,nRF的TX相连):

DEVICE USART USART
STM TX RX
PC(CP2102) RX TX
nRF RX TX

此时当nRF向STM发送数据时,为了给Breeze无人机供电而连接的USB使得nRF和CP2102的TX相连,可能此时CP2102的TX口的电平被CP2102强制置高或置低,使得nRF串口ERROR寄存器返回错误,导致无法通信。

计划:
1、读取MPU6050经过DMP处理后的姿态角数据和MS5611的高度数据。
2、开发nRF电源管理部分的驱动。
3、改进电机和电池底座的设计。

2018.02.04

作者:
maksyuki

完成:
1、完成 「Utopia」 硬件的全部原理图开发工作。
2、完成Breeze无人机的硬件PCB打板和表贴元件的焊接工作。

计划:
1、使用J-Link的SWD模式给无人机主控烧写测试程序。
2、开始对 「Utopia」 进行PCB布局和原理图校对。

2017.11.02

作者:
maksyuki

完成:
1、完成主机Linux交叉编译环境的构建,完成Xilinx Vivado2015.4及SDK的安装,对所购买的ZYNQ-7000评估板进行简单测试并通过。
2、完成microdynamics.cc域名的申请,完成新主站的建立工作,为下一步设计网站打下基础。
3、为了能够更加专业、高效地管理收支,团队财务收支系统开始迁移到随手记上,并完成以前收支数据的导入工作。

计划:
1、开始下一代硬件项目的设计工作,内部开发代号为 「Utopia」
2、通过对评估板的学习,测试ZYNQ-7000 SOC的相关性能,并熟悉开发流程。

2017.05.17

作者:
myyerrol

完成:
1、解决了printf无法打印格式化数据的问题。
2、优化了无人机上位机调试软件,确保串口通信没有问题。

问题:
1、printf无法打印格式化数据。

解决:
1、我在Google上搜索一段时间之后,终于找到了完美的解决办法了。根据大神的解释,因为GCC工具链使用了Newlib C库,而这个库本身并不是为微控制器开发的,所以当我们使用OS依赖的函数时(比如printf),我们就会面对一些Stubs(Stubs被称为操作系统提供的系统调用函数)。微控制器本身没有OS,所以这些函数会由于dead-end而出现编译错误。为了解决这个问题,我们需要自己重新实现一些系统调用函数,其中最重要的是_write()、_read()和_sbrk()。_write()函数负责写字符串到stdout和stderr中去,_read()则是从stdin中读取数据,_sbrk()主要是为那些需要知道动态内存是否与堆栈相冲突的malloc相关函数提供服务。很明显,只要在_read()和_write()函数中实现我们自己的比特发送和接收函数,我们就可以调用printf()函数来发送格式化字符串流到USART中去。以下是具体的代码:

#include <errno.h>
#include <sys/unistd.h>

void USART_PutChar(u8 ch)
{
    USART_SendData(USART1, (u8)ch);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}

u8 USART_GetChar(void)
{
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    return (u8)USART_ReceiveData(USART1);
}

int _read(int file, char *ptr, int len)
{
    int i;
    int num = 0;
    char ch;

    switch (file)
    {
        case STDIN_FILENO:
        {
            for (i = 0; i < len; i++)
            {
                ch = USART_GetChar();
                *ptr++ = ch;
                num++;
            }
            break;
        }
        default:
        {
            errno = EBADF;
            return -1;
        }
    }

    return num;
}

int _write(int file, char *ptr, int len)
{
    int i;

    switch (file)
    {
        case STDOUT_FILENO:
        {
            for (i = 0; i < len; i++)
            {
                USART_PutChar(*ptr++ & (u16)0x01FF);
            }
            break;
        }
        case STDERR_FILENO:
        {
            for (i = 0; i < len; i++)
            {
                USART_PutChar(*ptr++ & (u16)0x01FF);
            }
            break;
        }
        default:
        {
            errno = EBADF;
            return -1;
        }
    }

    return len;
}

计划:
1、使用printf函数来调试串口通信部分代码。
2、继续优化上位机调试软件。

2017.05.10

作者:
myyerrol

完成:
1、使用Qt完成了无人机的上位机调试界面,使其能在PC上远程控制无人机并显示一些数据。
2、自定义了串口的通信协议,并用代码将其成功地实现了出来。

问题:
1、之前我在解决系统库调用问题的时候,在编译选项中曾添加过--specs=rdimon.specs参数,但是后来我发现,只要代码中出现了printf函数,程序在运行的时候就会在printf处阻塞无法继续执行。而且现在为了调试方便,printf函数也需要实现。

解决:
1、我重新在Google上搜索了一下,发现使用--specs=rdimon.specs参数时,STM32进入了半主机模式,这个时候程序会使用主机的一些I/O函数来完成数据的显示,而问题可能就出在这里。我参考了GNU ARM官方提供的手册,发现可以使用--specs=nosys.specs参数来指定不使用STM32的半主机模式,编译之后,程序果然可以正常地运行,但printf函数依然没有办法打印出格式化的数据。由于时间缘故,关于printf的问题我在下次的日志中进行解决。

计划:
1、解决printf无法打印格式化数据的问题。
2、优化无人机上位机调试界面。
3、将OpenCV和CUDA代码嵌入到无人机上位机调试软件中去。

2017.05.03

作者:
myyerrol

完成:
1、重构完剩余飞控的代码。
2、焊接好无人机的扩展板,方便图传安装和J-Link调试。

计划:
1、学习USB转NRF24L01模块的使用方法。
2、根据无人机的NRF24L01通信协议,并结合USB转NRF24L01模块提供的Demo,在PC上编写通信程序来遥控无人机。

2017.04.27

作者:
myyerrol

完成:
1、重构飞控的EEPROM、Flash、IIC、SPI等驱动。
2、添加IO和Timer驱动。
3、添加Motor模块。
4、格式化之前修改的所有代码。

问题:
1、在Ubuntu上使用串口软件打开无人机/dev/ttyUSB0的时候,STM32总是立即停止程序的运行,而断开串口连接之后,STM32中的程序又能正常的工作。

解决:
1、我使用J-Link和GDB进行调试,发现只要一打开串口,就会产生一个SIGINT中断信号。后来我又在Windows上测试了一下,发现串口打开没有问题,接着我给另外一块STM32开发板烧写了跟飞控中相同的代码,发现竟然可以使用。根据以上情况,我分析代码肯定是没有问题的,问题就出在硬件USB转串口的那部分。因为无人机的STM32可以支持串口ISP下载程序,所以CP2102的DTR和RTS是与STM32的相关引脚连在一起的,这样就可以通过软件选择BOOT的方式来使STM32进入系统串口烧写模式。我推测Ubuntu打开串口的时候,可能会影响CP2102的DTR和RTS引脚电平,从而使得STM32立即进入下载模式而中断了Flash中程序的运行。目前我的解决办法是在Ubuntu上使用VirtualBox搭建Windows虚拟机,然后在Windows虚拟机中使用串口软件来间接地使用STM32的串口调试功能。

计划:
1、继续重构剩余的模块和算法部分代码。
2、编写Ubuntu下的NRF24L01通信代码。

2017.04.20

作者:
myyerrol

完成:
1、优化Makefile编译的指令。
2、重构飞控NVIC和USART驱动部分的代码。

问题:
1、在无人机初始化各种底层驱动和外设模块的时候,总是在某些函数里面发生阻塞的情况。

解决:
1、根据一段时间的调试,我发现问题主要出在printf函数上。在嵌入式开发过程中,为了能获取变量的值以方便调试,常用的做法是将printf函数的底层部分用串口发送函数进行重写,使得与调试有关的变量值可以在串口端显示出来。但是因为Windows和Linux的系统调用是不一样的,所以在Windows下可以使用的printf函数在Linux运行就会出现问题。解决办法是使用Linux下标准的I/O函数来封装STM32串口发送函数就可以了。

计划:
1、加快速度继续重构飞控剩余驱动和模块部分的代码。
2、理解飞控算法部分的代码。

2017.04.06

作者:
myyerrol

完成:
1、完成对Ubuntu下飞控开发环境的配置。
2、学习了链接脚本的基本知识。

问题:
1、使用make all命令进行编译、链接的时候,编译器报错:undefined reference to `_sbrk'
2、在解决完问题1后再次编译整个工程,编译器报错:undefined reference to `end'

解决:
1、在Google上搜索了一番,找到了解决方法。报错的原因是没有在链接的时候指定系统调用syscalls,因此只需要在链接参数中添加specs选项就可以:

arm-none-eabi-gcc --specs=rdimon.specs $(OTHER_LINK_OPTIONS)

2、出现这个问题的原因主要是end符号没有被定义在堆的起始部分。解决方法是修改链接脚本文件,在BSS段后面添加如下的内容即可:

. = ALIGN(4);
end = . ;

计划:
1、继续学习飞控代码,其中要重点理解2.4G无线通讯协议。
2、准备接下来对MyCrazyfile无人机的焊接工作。

2017.04.13

作者:
myyerrol

完成:
1、优化Makefile编译的指令。
2、重构飞控电池和LED模块部分的代码。
3、重构飞控延迟和时钟驱动部分的代码。

总结:
1、在焊接某个芯片的时候,一定要把芯片的引脚和PCB上的一一对应起来,不能出现大的偏差。如果出现引脚焊错的情况,要及时地对其进行修复。
2、在编写嵌入式代码的时候一定要遵守代码规范,保证代码的质量。

计划:
1、继续重构飞控其他部分的代码。
2、思考如何将摄像头模块安放到无人机上。

2017.04.04

作者:
myyerrol

完成:
1、完成了无人机部分电路模块的硬件调试工作。
2、实践并总结了硬件电路焊接的相关经验。

问题:
1、在Ubuntu下使用J-Link的SWD模式给无人机主控烧写范例程序时,总是在init阶段报错,无法继续进行下去。可是我后来又尝试着给STM32最小系统板和Crazepony无人机烧写程序,均没有出现问题。

解决:
1、根据错误信息,我首先对QFN封装的STM32F103T6U6芯片进行了全方位的检查,发现Boot0引脚和旁边的NRST引脚直接短路连接在了一起。改正这个错误后,问题还是没有得到解决。此时,有两种可能性。一种是芯片供电电压不对,另一种就比较悲催了,那就是芯片已被焊坏,无法修复。我首先验证了第一种情况,这一测还真把我吓了一跳,给芯片供电的数字电源电压竟然高达5V,已经超过了STM32F103T6U6芯片手册中所允许的最大4V的限制,我又测了一下模拟电源的电压,发现正常,那么造成数字电压不为3.3V的唯一解释就是管理数字电源的TPS79301低压差线性稳压器电路出现了问题。后来,我对该降压电路进行了仔细的检查,发现有个虚焊。补焊后,问题依然存在,随后我更换了TPS79301芯片,电压过高的问题终于得到了解决,可是STM32F103T6U6的初始化问题依然存在,我想唯一的可能就是主控芯片已坏。至于坏掉的原因,我认为有两种:一种是我当初选择用吹风机来焊接芯片,操作时缺乏经验,使得芯片因为温度过高而坏。另一种则是由于刚才的电压过高问题,导致芯片出现了不可逆的损坏。

总结:
1、在对整个硬件系统进行焊接的时候,一定要先根据模块功能对焊接顺序进行确定,这一点十分重要!以MyCrazyfile无人机为例,应该先完成对电源电路的焊接工作。因为电源是其他电路模块运行的基础,而且电源的种类有很多(数字、模拟、USB、电池等)。如果电源出现问题,那对整个系统的损害是非常严重的(就像我上面遇到的问题)!电源部分焊接完成并且测试没有问题之后,应该紧接着焊接主控部分,要确保范例程序可以烧写到其中。在保证前面两个电路模块绝对没有出现问题之后,就可以根据具体功能需求,完成对剩下电路的的焊接工作了。
2、在焊接某个具体电路模块的时候,要遵守先焊IC,再焊电阻、电容等常规贴片元器件,最后焊接开关、USB或接线端子类的器件的顺序。
3、如果焊错了某个元件,在拆焊的时候一定要提高警惕!不要用电烙铁长时间加热焊盘,而且在使用吸锡器吸走焊盘上焊锡的时候,一定要小心!由于其强大的吸力,有很大的可能会导致焊盘直接从PCB板上剥落,和焊锡一起被吸入到吸锡器中。如果出现了这种情况,我想任何人也都没有办法帮你去解决。我就两次遇到了此种情况。如果幸运的话,你可以使用焊锡搭焊或者飞线的方式来补救,但不要期求每次你都能有这么好的运气。所以,在第一次焊接的时候就要仔细、认真,如果真出现了焊错的情况,推荐使用吸锡线或者杜邦线来将多余的焊锡刮走,这样做会安全很多。
4、在焊接QFN或LPCC形式的封装时,推荐直接使用刀型或马蹄形的可调温电烙铁来焊接。如果QFN封装中间的矩形散热焊盘有连接到电路中的GND、AGND或者DNGD时,也优先使用电烙铁而不是吹风机。具体的焊接过程如下:先分别在IC引脚和PCB焊盘上涂上适量的焊锡膏,并用电烙铁的拖焊方式给IC和PCB焊盘都上上足够的锡(对于散热焊盘接地的情况,请在相应的位置上上少量的锡,而且一定要刮平)。然后,给上过锡的PCB焊盘在涂上适量的焊锡膏,用镊子小心、仔细地把芯片的引脚和PCB焊盘匹配起来。接着给电烙铁上锡,使用拖焊的方式完成芯片四周的焊接。特别要注意:QFN封装四周露在外面的焊点非常小,如果一次没能都拖焊上,多拖几次就行了。

计划:
1、继续将之前开发的飞控程序移植到Ubuntu上。
2、开始制定无人机的数据通信协议。
3、最后重新再对MyCrazyfile无人机进行一次焊接。

2017.03.29

作者:
myyerrol

完成:
1、完成了无人机元器件的焊接工作。

计划:
1、对焊接完成的无人机进行基本的测试。
2、开始将原来使用Keil编写的飞控代码移植到Linux上。
3、继续学习开源飞控算法。

2017.03.19

作者:
myyerrol

完成:
1、学会Makefile并成功在Ubuntu上搭建了STM32嵌入式软件开发环境。
2、完成了无人机基本的元器件焊接。

问题:
1、在焊接贴片电阻和电容的时候,总是会出现焊锡过多而呈球形粘连在焊盘边缘的情况。

解决:
1、更换了头更尖的锡焊枪,并注意用湿海绵来擦除焊枪头上过多的焊锡。

计划:
1、学习如何焊接QFN形式的封装,并尝试在无人机上进行实际的操作。
2、完成无人机剩余外围接口元件的焊接,并预留电源接口给将来需要搭载的摄像头模块。
3、继续学习其他开源飞控。
4、尝试在Ubuntu上配置并测试图传模块。

2017.03.12

作者:
myyerrol

完成:
1、根据DRC重新对元器件进行了正确且合理的布局。
2、完成了对所有信号层网络的布线工作。
3、完成了对中间层VCC和GND的电源分割。
4、对信号层的模拟地和数字地进行了双面覆铜并添加过孔。
5、改正了所有DRC检查时出现的违反规则的设计。
6、最后对所有焊盘进行了补泪滴的操作。

问题:
1、在手动给QFN封装的中间散热焊盘添加DGND网络时,出现多个DRC报错,错误内容是中间焊盘和焊盘上的多个过孔之间发生了碰撞。
2、在覆铜的时候,有些布局靠内部的元件焊盘并没有被覆上铜,导致在DRC检查时报错。

解决:
1、经过在Google上的搜索之后,我找到了问题的原因和解决办法。错误原因是没有给过孔添加同样的DGND网络,导致DRC误报。解决办法是在出错变绿的地方按下Shitf+V,调出Board Insight管理器,然后在里面逐一对过孔的网络属性进行修改。
2、解决办法是拉大内部元件之间的空间,使其与外围的覆铜切面要尽可能的大。对于那些实在无法与其他地层相连的覆铜,可以使用过孔的方式,将其划分到相应的电源分割层中去。

计划:
1、认真、仔细地完成无人机PCB板的焊接和调试工作。
2、在Ubuntu上搭建嵌入式软件开发环境,并学习基本的软件编译和烧写方法。
3、学习其他开源飞控的代码,并根据自己无人机的硬件,对其代码进行适当的重构。

2017.03.05

作者:
myyerrol

完成:
1、确定了Breeze无人机各模块的原理图和元器件的具体型号、封装。
2、制作了团队的原理图和PCB模板文件。
3、完成了对元件库和封装库的绘制工作。
4、绘制了各模块的原理图并通过了ERC检查。
5、绘制Breeze无人机的PCB外轮廓并对PCB的层数等参数进行了相应的配置。
6、完成元器件封装在PCB上的合理布局。

问题:
1、使用Altium Designer修改完原理图的一些电气连接,并将更改同步到PCB中的时候,出现Unknown PinFailed to add class member形式的错误。
2、我在完成对所有封装的布局后,发现有两个贴片的单刀双掷开关是卧式的,而我不小心把它们布到了紧邻排插的旁边。而如果要修改这两个开关的布局又会引起连锁反应,导致其他元件封装的位置也要修改,非常费时费力。

解决:
1、我上网查了不少解决方法,但基本上都要新建个PCB文件才能解决,但这样会导致要放弃自己之前已完成的封装布局,而重新布局费时又劳神。最后,经过不断地搜索,我终于找到了完美解决的办法。
(1)、使用快捷键D+N+N,打开Netlist Manager,删除板子上的所有Net。
(2)、使用快捷键D+C,打开Object Class Explorer,删除Component Classes中与项目有关的所有Class。
(3)、选择重新从原理图中导入就没有问题了。
2、我后来选择更改原理图,直接将原来的两个单刀双掷开关改为一个双刀双掷开关,而且这次在器件选型的时候采用立式2mm的贴片封装。这样,在不对其他器件封装位置做出修改的情况下,只要将新的开关封装放置到原先那两个的位置上就可以了。

计划:
1、在一周内完成对Breeze无人机PCB的全部布线工作。
2、根据原理图,完成对无人机PCB板的焊接。
3、开始搭建嵌入式软件开发环境,并尝试烧写一些示例代码。

2017.02.22

作者:
myyerrol

完成:
1、完成MyCrazyfile无人机的打板工作。
2、购买了足够的元器件。

计划:
1、学习MyCrazyfile无人机的PCB工程并在它的基础上做一定的修改。
2、尽可能快地完成MyCrazyfile无人机的焊接工作。

2017.01.21

作者:
myyerrol

完成:
1、学习了天嵌E8开发板的相关开发资料。
2、收集了一些其他微型四轴飞行器的资料。

计划:
1、尽快将固件烧写到天嵌E8开发板中,学会基本的ARM配置过程。
2、根据E8实际运行的效果和之前Phenox2的相关资料,最终确定整个硬件设计方案。

2017.01.15

作者:
myyerrol

完成:
1、配置了Cadence 16.6 EDA开发工具。
2、搭建了Git版本控制系统。

计划:
1、学习Cadence的基本使用,掌握原理图和PCB的制作方法。
2、阅读《ARM Contrex-A8 硬件设计DIY》,制定详细的设计方案。

2016.10.26

作者:
maksyuki

完成:
1、完成利用主定时器实现中断嵌套功能部分代码的编写。
2、完成整机飞控代码中涉及到姿态和油门控制的部分,经过简单测试Breeze可以保持一个基本的姿态稳定和定高悬停。

说明:
1、Breeze基本上实现了稳定控制,代码按照驱动级、外设级和算法级进行了分类,便于修改和维护。在实际测试过程中发现机体遇到障碍物时会出现电机座断裂和断桨的情况,这说明在机械强度设计上还需要考虑更多。比如采用和Tiny Whoop类似的涵道支架设计,这样可以在保持外形美观的情况下有效减少断桨的情况。另外可以参考crazyfile橡胶电池座的设计来减少底座断裂的情况。

计划:
1、优化飞控代码的结构并添加必要的注释和说明。
2、实现一键起飞、定高,一键降落的功能。对于姿态解算部分采用卡尔曼滤波算法来代替原来的Mahony互补滤波算法,以达到更高的解算精度。
3、在STM32上构建FreeRTOS,并在FreeRTOS上完整移植飞控算法。

2016.10.19

作者:
maksyuki

完成:
1、完成油门数据的接收和转换计算部分代码的编写。
2、完成整机飞控代码中关于硬件驱动初始化部分相关函数的整理、重写和测试。

问题:
1、在进行相关硬件驱动初始化测试的过程中,发现程序运行到MS5611_WaitBaroInitOffset()函数处出现死循环的情况。结合串口输出和软件debug最终发现是其中调用的计时函数micros()由于没有开启系统定时器SysTick中断来累加计数得到确定的时间,导致micros()一直返回0。另外同时出现delay_us()和delay_ms()函数同时使用SysTick计数和micros()函数冲突进而导致延时不稳定的情况。

解决:
1、这里采用外接晶振并通过PLL倍频到72Mz来取代原先的内部时钟信号,作为整个系统的时钟源。按照STM32所提供的技术参考手册上的配置方式配置并开启SysTick定时中断。delay_us()和delay_ms()函数不再采用SysTick定时器作为定时标准,这里直接采用定时中断累加实现。

计划:
1、开始着手测试利用主定时器实现中断嵌套功能部分的代码。
2、进行IMU数据的标定和姿态融合算法的测试。

2016.10.08

作者:
maksyuki

完成:
1、完成Breeze飞行控制部分代码的编写。

计划:
1、尽快实现通信中有关油门数据的发送和转换部分的代码。
2、进行Breeze整机飞控代码的测试。

2016.09.19

作者:
myyerrol

完成:
1、搞定Breeze四轴电机、传感器和电源等模块的PCB布线。
2、修复原理图中的一些错误。

问题:
1、在进行PCB布线的时候,我发现KiCad自带的自动布线功能实在是非常有限,而自己使用手工布线问题又非常多。比如信号线的拐弯处成锐角或直角、板子的过孔过多等。

解决:
1、经过一段时间的网上搜索,我终于找到了解决方案。问题的解法就是使用KiCad带有的交互式布线功能(这个功能需要先开启对OpenGL的支持)。这种布线模式最大的好处就是可以在布线的时候通过挤压其他导线来自动地处理它们之间的位置关系,从而极大地减少了因导线交叉而使用过孔的问题。而且整条导线根据拐弯处被划分成若干条线段,这样有利于对布线的角度进行精确的修改。

计划:
1、尽快完成对PCB剩余模块的布线。
2、拆分原先的原理图,并按照模块进行划分。

2016.09.12

作者:
myyerrol

完成:
1、搞定部分模块的布局问题。
2、修改元件安全间隔为0.15毫米。

问题:
1、在对Breeze无人机进行完第二次PCB布局后,我发现无论我怎样放置模块,都很难将元器件彼此分开。这会导致在布线的时候,PCB上没有足够的空间来走线。

解决:
1、适当地在PCB的背面布一部分的元器件模块。

计划:
1、完成Breeze无人机剩下模块的布局。
2、尽快进行双面的PCB布线。

2016.08.28

作者:
maksyuki

完成:
1、完成Breeze无人机飞控算法中所有底层驱动模块的编写并用库函数重写了SPI驱动。
2、实现了NRF24L01无线系统模块的编写,无人机和遥控器可以进行匹配并传送数据

问题:
1、在我编写完系统主时钟驱动模块后,想测试一下在系统中断存在的情况下PWM输出驱动电机的情况。结果发现电机在输入值都是10的情况下出现嘶嘶声。开始还觉得是电池电压不够造成的,后来经过多次的烧写和在线调试,发现PWM输出值的范围是100~999。

计划:
1、实现系统传感器(IMU、气压计)的初始化操作。
2、优化先前编写的代码。

2016.08.23

作者:
myyerrol

完成:
1、完成Breeze无人机元器件和封装库的设计与配置。
2、画完Breeze无人机原理图。

问题:
1、在画原理图的时候,我发现整个系统中存在着很多不同功能的电源。这些电源分布在机体的各处,与很多IC都存在关系。我想这个需要花一些时间来弄明白,因为这对之后PCB中的电源设计是至关重要的。

计划:
1、搞定原理图中的电源关系。
2、开始着手设计PCB的布局,并尽快完成最后总体的布线工作。

2016.08.13

作者:
maksyuki

完成:
1、完成飞控算法中相关寄存器的配置和驱动的编写。
2、对于STM32中SPI、IIC总线和PWM驱动进行了相关的测试。

计划:
1、实现DMA驱动的编写并实现无人机LED灯语的设计和编程。

2016.08.12

作者:
myyerrol

完成:
1、配置完成STM32开发环境。
2、完善STM32开发模板。

计划:
1、搜集与PCB设计相关的书籍或资料,开始学习PCB的设计。
2、参考Crazypony的PCB,保持功能不变,只修改外观设计。

2016.07.24

作者:
maksyuki

计划:
1、深入了解开源飞控算法中关于高度融合部分的代码,进而实现Breeze沿Z轴方向的定高悬停。
2、从整体上把握开源飞控算法在任务调度、执行方面的实现。

2016.07.22

作者:
myyerrol

完成:
1、已将串口协议整合到Breeze无人机飞行控制站中。
2、简化图形界面。

计划:
1、配置STM32开发环境。
2、将通信协议添加到STM32代码中。

2016.07.06-07.12

作者:
myyerrol

完成:
1、搞定了团队开发风格指南。
2、完成了Breeze无人机飞行控制站的基础界面设计。

计划:
1、配置并优化界面。
2、学习无人机通信协议,尽快把协议整合到Breeze无人机飞行控制站中。

2016.07.06

作者:
maksyuki

完成:
1、经过讨论后完成了团队标志的初步设计工作。
2、制定了暑假Breeze无人机嵌入式部分算法设计的开发计划。

计划:
1、通过相关书籍和网络来学习STM32开发的基本知识和流程。
2、进一步学习并掌握以PID为基础的控制算法,熟悉无人机飞行相关知识。

2016.07.05

作者:
myyerrol

完成:
1、完成MicroDynamics团队整体项目的规划工作。
2、确定了GitHub团队组织仓库的基本管理方案。

计划:
1、尽快在接下来的几天内完成团队的开发风格指南。
2、学习Qt界面编程,编写出简单的项目界面。