本文主要是介绍【四两拨千斤】一块八的芯片如何挽救一百多块的电路板——论数电的重要性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文记叙了我经历的一件趣事,有别于以往的教程类博文,这篇文章我将按照事情的发展经过叙述,大家可以跟随本文体验一把笔者所经历的跌宕起伏,同时感谢教我数电的王老师(一位难得的好老师,在我本科生涯中印象深刻)。大家一定要好好学数电啊!
事情的经过是这样的:
起初,我画了一块无人车的控制器板子,使用了一种全桥芯片来驱动直流减速电机:手册上真值表是这样描述的:
从红框中看到这个全桥的驱动很简单(事实并非如此):控制输入管脚 IN1 和 IN2,就可以控制输出管脚OUT1和OUT2,实际我们不必在意第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试试”,他很快回复我。
我照做了,然后摸了摸芯片,不烫了。
我:“*&……%¥#@!”
“同步续流了解一下”,他说。
有道是:“听君一席话,净省一块八”。
(怎么没有早点请教他呢?)
希望大家养成善于思考,不耻下问的习惯,记下这件小事,只为博诸君一乐。大家给个赞呗,谢谢!
这篇关于【四两拨千斤】一块八的芯片如何挽救一百多块的电路板——论数电的重要性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!