【四两拨千斤】一块八的芯片如何挽救一百多块的电路板——论数电的重要性

        本文记叙了我经历的一件趣事,有别于以往的教程类博文,这篇文章我将按照事情的发展经过叙述,大家可以跟随本文体验一把笔者所经历的跌宕起伏,同时感谢教我数电的王老师(一位难得的好老师,在我本科生涯中印象深刻)。大家一定要好好学数电啊!


事情的经过是这样的:

起初,我画了一块无人车的控制器板子,使用了一种全桥芯片来驱动直流减速电机:手册上真值表是这样描述的:

从红框中看到这个全桥的驱动很简单(事实并非如此):控制输入管脚 IN1 和 IN2,就可以控制输出管脚OUT1OUT2,实际我们不必在意第3,4行的描述,那是和过流保护相关的参数,而在我的设计中留足了余量,所以没有设计过流保护的电路。

因此,如果要实现直流电机的正反向调速的话,一个芯片需要两个PWM通道,那么我这个控制四个直流电机的控制器,就需要消耗2个四通道的定时器。

玩过单片机的同学们都知道,单片机的定时器是很宝贵的资源,尤其是我的控制器需要好几个定时器来做正交编码器计数。带PWM功能的定时器就这么多,当然是能省则省。能不能用一个定时器就实现呢?

数电知识在这里派上了用场:

对于单个电机,我用一个普通IO控制电机的正反转(极性),一个PWM通道控制占空比(电压幅值),这样四个电机只需要四个PWM通道就可控制了,正好是一个定时器的四个通道。

这么实现的?正好我的控制器中在信号部分使用了一个与非门做反相器,因此买了许多与非门芯片,所以不如就用与非门来搭建这个电路吧:

于是我用我可怜的数电知识构造了这样一个电路:

我们可以来看看真值表:

DIRx PWMx IN1 IN2
0 0 1 1
0 1 0 1
1 0 1 1
1 1 1 0

可以看到,DIRx=0时,PWMx的变化使得输出在正转(Forward)制动(Brake)之间切换,这也就实现了正向调速。同理,DIRx=1时,PWMx的变化使得输出在制动(Brake)反转(Reverse)与之间切换,实现反向调速。

毫无问题,在如此想法下我完成了原理图,花了几天功夫画好PCB发出去做了。然后等板子到了兴冲冲地取回板子焊接。全过程那叫一个行云流水水到渠成。三下五除二写好了电机的驱动代码。编译!下载!电机转了!成了!(启示:不应高兴太早,否则你就会知道什么叫残忍。)

我鬼使神差的摸了一下全桥芯片,嘶!好烫!

不应该呀,我电机明明空载运行,这电流也没有超过全桥芯片的额定电流,怎么就发烫了呢?我反复排查无果。只好回去翻芯片手册,然后我就看到了这一行:

我默默回去看了一下我的真值表,什么?我竟然在制动和启动中切换,我的脑子是怎么想的?就好像我在用1KHz的频率疯狂在油门和刹车间切换,不用说,制动消耗的能量肯定化为全桥芯片中的热量了。它,就是导致全桥发热的元凶!而我就是那个试图狂踩油门和刹车来调速的憨货。

木已成舟(指我的PCB已经焊好),难道我要重画了么?在痛苦思索了一段时间后,我又有了新的想法:

我先是列出正确的真值表(在启动与滑行之间切换):

DIRx PWMx IN1 IN2
0 0 0 0
0 1 0 1
1 0 0 0
1 1 1 0

可以看到,我使IN1=DIRx 与 PWMx,而IN2=(DIR非)与PWMx,这是一个很直观的解决办法,使用2个与门和一个非门,但是不可避免的需要修改连线,这样我这刚焊好的一百多大洋的板子就打水漂了!(我可太惨了~)

有没有不用改板子的办法?很多人会想,你在想peach?老老实实改板子长记性把!

事实上,还真的有,数电老师很说过“同一个逻辑,可以有不止一个表达式”(大概是这个意思),所以,请看:

我把两个与非门换成了与门,现在大家回去看看,是不是和修改后的真值表一模一样?

逻辑门芯片都是差不多一个样子的,某宝搜一下,很快找到的匹配的型号,买了几片,一共一块八(还包邮,我在心中乐开了花)。看样子,换上芯片就完事啦!这样,我这块一百多的板子算是保住啦。下次画板子一定要认真读手册!

……

……

……

朋友们,你们以为这就结束了吗?

我把这件事讲给一位我非常敬重的硬件大神。他问我:“你PWM的频率多少”

“1000Hz”,我答。

“调到20KHz试试”,他很快回复我。

我照做了,然后摸了摸芯片,不烫了

我:“*&……%¥#@!”

“同步续流了解一下”,他说。

有道是:“听君一席话,净省一块八”。

(怎么没有早点请教他呢?)


希望大家养成善于思考,不耻下问的习惯,记下这件小事,只为博诸君一乐。大家给个赞呗,谢谢!

发布了51 篇原创文章 · 获赞 270 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/ReadAir/article/details/105035511
今日推荐