在很多人眼里,主控板有着密密麻麻的芯片引脚与PCB走线,看起来非常难的样子。其实恰恰相反,主控板的设计有着其特有的设计规律,其实说白了就像搭积木,在满足单片机最小系统的条件下,需要哪些功能,只需要增添相对应的电路模块即可,也可称为模块化设计思想。
本文我将从三个层次来介绍用于机器人主控板的设计思想。分别为:
根基,主控板最基础部分的设计和原理;
枝干,主控板功能模块的扩展与设计思路;
树叶,主控板中功能模块具体电路参数的计算。
我将以一棵大树的层次结构为模型,带领大家走进电路设计的乐趣。
根 基
这里的根基表示的是单片机最小系统,是单片机可以正常执行程序的最简工作环境。如果没有这些的话,单片机是无法运行程序的。
最小系统的组成包括,电源电路,时钟电路,复位电路。大多数芯片的最小系统需要包含以上三种电路,而有的芯片却可以不使用外部时钟,其芯片内部可以通过RC振荡器为程序运行提供时钟基准。
根基之电源电路。以STM32系列单片机为例,其工作电压在2.0V~3.6V,通常会使用3.3V电源供电。
假设我们使用5V电源为电路板提供电源,这样就需要将5V转换成3.3V为单片机供电。考虑到单片机需要工作在低纹波的电源环境下,这里选择了线性降压电源(LDO)。明确了设计目的,下面就需要进行方案选择了。
需要做的事:使用那款LDO芯片将5V电压降低到3.3V电压,且满足功率需求。能够实现这几项需要的方案,非常多,下面我简单列举了几款常用芯片。
细细分析上面的表格中参数,发现不同芯片有着不同的最大输出电流。这时可根据单片机内部资源使用情况来计算最大工作电流(在单片机手册可以查找到),来进行方案选取。确定了单片机最大工作电流后,需要扩大3倍来选取电源芯片。
至此,已经确定好了电源芯片方案,但是如何进行电路连接呢?如何设计能减少干扰呢?对于电路如何连接,一般在芯片手册前几页会给出典型应用电路。这里我以AMS1117-3.3为例进行介绍。
下图来自芯片手册中的典型应用电路模块。一般情况下,按照数据手册中的电路连接,就可以正常使用。为了提高系统的稳定性,我们还可以对电路稍加修改。比如,在电源输入口增加磁珠来抑制电源线上的高频干扰信号。在输入输出端增加滤波去耦电容,以保证输出电源的纯净,和瞬态响应能力。
根基之复位电路。相信很多人和我一样,从接触51单片机时就开始疑惑复位电路的工作原理,由于对模拟电路理解的不够透彻,而不能给出正确答案,当别人问起时,吞吞吐吐说不出个所以然来。对于复位电路,这里给出两种不同的解释,欢迎大家批评指正。
对于低电平复位的单片机来说,其复位电路如下图所示:
复位电路解释一:首先,明确电容器具有通交隔直的能力。而交流电的定义为非直流电都为交流电,而直流电的定义是大小方向不随时间变化。
那可以这样理解:在电路上电瞬间,电压从零变化到VCC此时电容两端电压在不断变化应该归属于交流电,这个变化过程是需要时间的。在这段时间内电容处于导通状态,RST引脚电压接近于GND(低电平)。满足单片机复位要求。具体参数可通过RC电路进行计算。通常使用0.1uf和10K电阻进行单片机复位。
复位电路解释二:从电容充电曲线理解.电容在充电时,两端电压曲线如下图仿真图所示,电压缓慢爬升,当IO口电压低于0.8V时,单片机就会认为IO口电平为低电平,则图中复位电路使用参数可提供288us低电平时间,足够满足单片机进行复位。
根基之时钟电路。对于单片机来说时钟就像心跳一般,在时钟信号的基准下,有规律的执行者代码。时钟电路大同小异,这里以无源晶振为例。
如上图所示,为时钟电路,其中两个22pf电容为起振电容,1M电阻为环路反馈电阻。采用8MHZ晶振,经STM32内部PLL锁相环,进行倍频可达到72MHZ,后经过分频电路进行分频为各外设提供时钟。
单片机最小系统主要由这三部分,作为控制器的根基,是必须要有的。无论多么复杂的功能都需要基于此进行拓展,下面介绍如何拓展主控板的功能。
枝 干
这里的枝干指的是以最小系统为根基引申出来的各个功能模块。和大树一样,枝干在满足自身生长的条件下可多可少。这里简要介绍两个扩展功能,以展示控制器中“枝干”的设计过程。
新增枝干---温度检测功能:
这里想用单片机实现一个简单的温度计功能,可用于机器人中电机温度检测,也可以称为需求。这时我们需要做的就是选用哪种方法去实现温度检测。如果你学过51单片机,可能会想到DS18B20这款单总线温度传感器,好这里可以把它作为一种备选方案。还有没有其他的???我喜欢列表,画图去将脑海中的想法展现在纸面上,这里列表看看我脑中能够列出多少种方案。
看吧,随便一列就能够列出5个备选方案,实际中远远不止这些。为了使文章更加丰满,介绍更多的基础电路设计,这里以负温度系数热敏电阻作为实现本次任务的传感器。
负温度系数热敏电阻的阻值会随着环境温度的升高而降低。对于型号为MF52 10K ±1%的热敏电阻,其阻值随温度变化的曲线如下图所示。在-40~70之间其阻值的线性度非常好,完全可以使用一次函数式(y=ax+b)来拟合这段曲线,然后根据电阻值去反推环境温度。
问题推进到现在,测量温度的需求,已经演变成了如何测量热敏电阻阻值的需求。说道电阻,应该能够想起最基本的欧姆定律吧!
通过上式,我们就可以通过检测热敏电阻两端电压来确定热敏电阻阻值。
电压法测量热敏电阻阻值:这种办法比较简单,在产品中应用的也较多。使用电阻R1与热敏电阻串联,然后使用单片机ADC功能读取VF1点电压,后反推出热敏电阻阻值,进而计算出当前所测试温度。
其计算公式为:
电路中的R1需要选取一个合适的数值。选取过大,NTC两端电压变化范围就会变得很窄,为后期的数据出来带来不便。
如下图所示,为R1分别选取了10K,55K,100K三个阻值时,VF1随温度变化曲线。从图中可以看出当R1=10K时,VF1的范围很宽,并且温度在0度到45度范围内变化时,VF1具有很好的线性度。
相比而言当R1选取55K和100K时,VF1的表现就没有那么好了。
这样我们就在单片机最小系统上添加了测量温度的功能。在整个设计过程中,我们只仅仅使用到了单片机的一个ADC口,其余都应属于模拟电路知识。按照这个思维,我们可以实现很多功能,比如你想要给控制器添加WIFI功能,通过分析也许你连原理图都不用改,只需要购买个具有UART的WIFI模块就能够实现,就是这么简单。
新增枝干---电路电流检测功能:
在控制器设计中难免会涉及到检测电流,用于电路过流保护,或电机相电流检测。这里想用单片机检测电机某相电流,来实现电机的FOC控制,也可以称为需求。
电流检测方案有多种可供选择,比如采样电阻,霍尔电流传感器,罗氏线圈。这里我选择了电阻对电机相电流采样。
一般检流电阻的值都比较小,比如0.005欧姆。当流过10A电流时,电阻两端压差仅为50mv,这样就不会对电路造成影响,但是会带来一个问题,直接使用单片机ADC读取时,无法准确读取到数据。通常的做法是将电压放大后,再使用单片机读取。
电路设计到这里,从刚开始的电流检测需求,已经推进到采样电压信号的放大需求。这时想到的必然是使用运放对采样电压放大。
如下图所示,选取了运放构成的减法电路(差分放大电路),来放大电压信号。具体的电路计算后文详细介绍。
这样又在单片机最小系统上添加了电流检测功能。在整个设计过程中,只仅仅使用到了单片机的一个ADC口。
枝干部分就先列举两例,在这种思维的指引下,你可以尝试着实现其他功能,比如实现一个数据显示功能,实现CAN通信,实现4-20ma信号处理。好好想想,看看有多少种可用的解决方案。
树 叶
树叶指的是以最小系统为根基引申出来的各个功能模块中的具体电路参数。这里的设计需要根据选定的最终方案来详细计算电路中阻容等每个元件的值和具体器件选型。
现在以上文中电流检测电路为例,来介绍如何计算电路参数。
上图中的电路原型为减法电路(也称差分放大电路),如下图所示
根据模电基础知识,其输出电压表达式为:,其中为差分放大器的放大倍数。
假设系统中需要将信号放大5倍,这时应该等于5。这里的取值可就多了,比如100欧姆和500欧姆,1K欧姆和5K欧姆,10K欧姆和50K欧姆。这么多种组合,到底哪个组合比较好呢?在我看来在保证功耗允许的情况下,阻值越小越好。100欧姆就比1K欧姆好,1K欧姆就比10K欧姆好。
电机的三相电流波形是相位相差120度的正弦波,如下图所示。在电流检测过程中信号有半个周期为负值。对单电源供电的运放,位于负半轴的电流值是无效的,无法进行放大。此时就需要对电流波形进行偏移,使得整个周期的电流波形都位于正半轴以上。
为了解决这个问题,只需要在下图RB处添加直流偏移电压Vref,输出电流形就会向Y轴正方向偏移Vref。
此时,输出电压表达式为(可根据叠加原理推导):
下图所示,将一个30mv正弦信号放大5倍并偏移1.65V后的电流波形。
至此,我们已经计算出了电路中的电阻参数,当Ra=1K时,Rb=5K这个组合是比较好的。因为STM32单片机ADC引脚最大输出电压为3.3V,通常对电流波形偏移Vref=1.65V即可满足要求。
主控板的设计就这样简单,明确需求,方案选取,计算参数,简单三步即可实现你想要的功能。这里我为大家准备了大量素材,大家可添加小编领取。
评论
查看更多