【四兩撥千斤】一塊八的芯片如何挽救一百多塊的電路板——論數電的重要性

        本文記敘了我經歷的一件趣事,有別於以往的教程類博文,這篇文章我將按照事情的發展經過敘述,大家可以跟隨本文體驗一把筆者所經歷的跌宕起伏,同時感謝教我數電的王老師(一位難得的好老師,在我本科生涯中印象深刻)。大家一定要好好學數電啊!


事情的經過是這樣的:

起初,我畫了一塊無人車的控制器板子,使用了一種全橋芯片來驅動直流減速電機:手冊上真值表是這樣描述的:

從紅框中看到這個全橋的驅動很簡單(事實並非如此):控制輸入管腳 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試試”,他很快回復我。

我照做了,然後摸了摸芯片,不燙了

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

“同步續流了解一下”,他說。

 

 

有道是:“聽君一席話,淨省一塊八”。

(怎麼沒有早點請教他呢?)


希望大家養成善於思考,不恥下問的習慣,記下這件小事,只爲博諸君一樂。大家給個讚唄,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章