0%

所谓电路仿真,是指对设计出的电路的实际功能进行模拟。为了最大程度确保电路在实际工程中符合预期,在如今EDA如此发达的时代几乎几乎每个电路设计的流程里面都会用仿真,采用计算机仿真也成了硬件设计的必备技能之一。下面在这里简单介绍一些常用的仿真软件以及使用。由于在RM里硬件的考察主要为超级电容模块的制作,也就是功率硬件的方向,因此这里的仿真将更加侧重于功率电源方向。

SPICE原理仿真

SPICE(Simulation Program with Integrated Circuit Emphasis)为一个早期开源的电路原理仿真的软件,后续衍生出不少的版本。这些版本也由一些半导体厂/电子厂直接开发而来,例如Candence的PSpice,Ti公司版本的PSpice以及用于模拟电路仿真的Tina-Ti,目前我们课堂上用过的NI的Multisim,ADI公司版本的LTSpice,还有开源版本的ngspice(Kicad内置的仿真软件即为这个)

就我个人而言,比较常用的是LTSpice和Tina-Ti,这两个软件可以免费使用,并且LTSpice仿真的速度极快,一般小型的电路10ms的仿真基本上秒出结果。两者均可以进行稳态/瞬态仿真,幅频相频响应仿真,对于目前能接触到的绝大部分电路均可使用。同时SPICE仿真也可以导入厂商给出的IC模型,可参考LTspice 入门教程3 导入仿真模型,对于官方库内不存在的元件也能手动添加参与仿真

阅读全文 »

本文基于RoboMaster比赛的需求编写的电控入门,其中难免存在错漏之处,后续会持续补充完善

电控简介

电控在RoboMaster里面主要的工作是完成机器人的硬件设计与接线,以及底层软件(或者我们一般指的是单片机上运行的软件)设计。硬件部分主要设计单片机主控电路板、用于接线接口的电路板、功率部分的超级电容相关的电路板,以及各个各种硬件模块间的接线。软件方面下至处理机器人中各种传感器数据的读取、各种执行器的输出、模块间的通信,上至信号处理算法,控制算法等设计。电控组在RoboMaster里面起到承接软硬件之间的作用,负责的工作也比较广,所需能力需要较为全面。

本文旨在给出一篇尽可能完整全面的指南,但对于具体全部技能和知识的掌握不要求全面,多数人在某些技能上能够做到一定深度已经可以是合格的电控成员

基础理论

阅读全文 »

比赛的意义?

首先所有竞技性比赛的最直接目标肯定是要赢,没有这一点失去了比赛的竞技性了。而赢的意义在于展现团队的技术实力,借助比赛的契机让其他人认可团队成员备赛所付出的努力。对于团队中个人发展,这个比赛最重要的意义是能够在这里学到东西并且得到认可,这些东西包括了技术,包括了对问题的分析解决能力,更包括了对于技术极致的追求。当然更现实的意义是这个比赛获奖可以评优保研加分,不过我认为这些好处对于在这个比赛里学到的东西和遇到的人来说只是最低级的那部分罢了。如果格局再放大一些,RoboMaster本身就要为社会尤其是DJI提供所认可的人才,填补大学教育在这方面的空白。
简而言之,RoboMaster对于个人发展的意义就在于锻炼学习的机会,在此基础上寻求来自其他人与社会的认可。

关于开源

在技术类的比赛中非常容易出现技术垄断的现象,在RoboMaster里面体现为一个团队掌握的技术不公开并借此在比赛中占据优势的现象,除此之外也不利于比赛本身以及各个参赛队之间技术水平的发展,以及新队伍加入到竞赛的过程。这就是比赛官方希望通过鼓励开源解决的问题,各个队伍公开技术资料交流参考,对于弱势队伍的研发的困难程度也有所降低,而反过来也可以倒逼强势队伍做出更多新技术。
但是许多开源很多时候仅仅是公开代码或图纸,在这个比赛里开源的参考意义是在于核心的设计的思想和过程,只看结果的话不一定有实际的指导意义。这也是区分所谓的“抄”与“不抄”的区别。对于开源正确的态度从来都是思考如何把它完整融入到我的设计之中,或者说我的设计最后和开源的设计有什么区别或者改进,而不是不加思考地使用一些即抄即用地开源。

队伍传承

阅读全文 »

导入PCB

通过ODB++文件导入

Altium Designer的菜单下的导出项中选ODB++,导出的层包括所有铜层(对于双面板只需要导出Top Layer和Bottom Layer即可,阻焊层可选)以及PCB外形,在HFSS 3D Layout的导入菜单中选择ODB++,选在刚才导出的整个文件夹即可完成导入。

这种导入方式过孔和层叠几乎不用做太大修改,故推荐使用

通过Gerber文件导入

阅读全文 »

MOSFET模型

按照现实来看,市场中大部分大功率MOSFET都是N沟道增强型,因此在下文中没有特别指明的情况下都以N沟道增强型为模型讨论。
理想状态下,功率MOSFET的模型是非常简单的。栅极呈高阻态(等同于浮空),当在源极和栅极之间加上大于阈值电压Vgs的电压,MOSFET将完全导通。若该电压小于阈值电压Vgs,那么MOSFET将完全截止。因此这种模型等效于电压控制的开关。

但是实际上现实中MOSFET远比上述模型复杂得多,带寄生参数的MOSFET的电路模型应该是这样的

一个明显不同的地方是在三个输入极间均存在电容,在源漏之间还有一个体二极管。单论静态特性特性而言栅极到其他极间也有漏电电阻,关断后存在极小的漏电流,而导通后也存在较小的源漏导通电阻,这些具体参数可以在数据手册上查到。

阅读全文 »

人一般都有十个手指因而产生了最熟悉的十进制记数,计算机的结构先天性决定了它只能用二进制的记数。于是在此基础上总有一些运算方式和数字表示与2^n挂上钩,下面将尝试解释其中某些现象背后的机理

缓冲区长度的奥妙

不论是串口缓冲区还是网络通信的缓冲区,似乎总是随便设的一个大小总是对2^n情有独钟,究其原因其实还是有的(当然不排除真的是随便给的缓冲区长度)。如256或者1024等长度写成二进制其最高位总是为1,这就可以让擅长二进制位判断的硬件去根据缓冲区元素索引判断是否溢出。

当然最典型的还是利用其特性简化运算。例如在环形缓冲区中通常会有求余的操作,因为这样可以让指针在到达末尾处返回0。不巧的是,在早期的平台中指令集里面是没有求余操作的单个指令(当然现在都有)。即使不考虑性能这种为了求余而多增加一段程序也是不太优雅的,于是有人提出了替代求余的方案:如果我们将缓冲区的长度设定为256,那么索引值对256求余实际上等价于把索引值的第9个二进制位置零,于是我们可以采用一条与指令完成求余。这种巧妙的处理方法被作为一种习惯流传,至今在很多缓冲区的设计中都有出现。

乘除法与移位

阅读全文 »

原本C板官方例程里已经带了用SPI读取BMI088的例程项目,但是细看数据手册后发现许多代码其实真的只是勉强能用,不论是速度还是代码风格都让我不太满意,故重新移植BMI088官方给出的驱动库。在折腾了一番之后,只能说BMI088性能上是个好东西,但是开发体验非常不好。

移植过程

按照项目下的README给出的指引,实际上我们只是需要编写读写SPI的函数与微秒延时函数即可。延时可以直接用Systick当计数器完成,而SPI通信的移植实际上比较复杂

ParametersDetails
intf_ptr_accelInterface pointer that can hold Accel device address
intf_ptr_gyroInterface pointer that can hold Gyro device address
intfI2C or SPI
readread through I2C/SPI interface
writewrite through I2C/SPI interface
delay_usdelay in microseconds
variantBMI085_VARIANT

SPI通信

阅读全文 »

简介

当我们划分滤波器时通常会将其划分为至少两类,一类是经典滤波器,即针对频域滤波的滤波器,而后一类则是现代滤波器,利用信号的统计特性进行滤波,Kalman滤波则是这种滤波中的典型代表。

Kalman滤波的基本思想是构造一个使得信号测量值与预测值误差的方差值最小的滤波器,它同时考虑了信号测量中的高斯噪声,利用给定模型进行预测并修正输出。以单个变量的滤波器为例

通过调节K的大小可以调节输出中本次和上一次值所占的比例,当K的值固定时可等效为一个简单的FIR的滤波器。但Kalman滤波器的做法是,根据前后两个量的方差大小确定其不确定性,据此可以动态调节K的值,即更加相信哪一个变量

最终目的最小化预测与实际之间的方差,在上面这个例子中预测值相当于是上一次的x值

在Kalman滤波器中,根据模型获取信号值的过程称为预测(Predict),更新方差以及a(增益)的过程称为更新(Update)。由于预测模型不符合实际过程而产生的误差噪声被称为过程噪声(Process Noise),由于测量本身产生的噪声被称为测量噪声(Measurement Noise)

原理

阅读全文 »