本文記敘了我經歷的一件趣事,有別於以往的教程類博文,這篇文章我將按照事情的發展經過敘述,大家可以跟隨本文體驗一把筆者所經歷的跌宕起伏,同時感謝教我數電的王老師(一位難得的好老師,在我本科生涯中印象深刻)。大家一定要好好學數電啊!
事情的經過是這樣的:
起初,我畫了一塊無人車的控制器板子,使用了一種全橋芯片來驅動直流減速電機:手冊上真值表是這樣描述的:
從紅框中看到這個全橋的驅動很簡單(事實並非如此):控制輸入管腳 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試試”,他很快回復我。
我照做了,然後摸了摸芯片,不燙了。
我:“*&……%¥#@!”
“同步續流了解一下”,他說。
有道是:“聽君一席話,淨省一塊八”。
(怎麼沒有早點請教他呢?)
希望大家養成善於思考,不恥下問的習慣,記下這件小事,只爲博諸君一樂。大家給個讚唄,謝謝!