最近在調(diào)一個MSP430單片機控制電機并測速度的電路。整個電路從設計制作到調(diào)試成功,花了將近四天時間,中間Bug多多,不過最后都一并解決了。
廢話不多說,直接進入主題,先說說我這個系統(tǒng)。下面Figure 1是MSP430主控制部分,用的芯片是MSP430G2553單片機(11、12號引腳是反過來滴),第一個是Pro Download接口,顧名思義,就是程序下載口,我用的MSP430G系列的launchPad 開發(fā)板連接到我設計的板子上的,通過這幾個接口利用launchPad 即可下載程序,為了方便布線,我打亂了這幾個接口的順序。PWM1和PWM2接口是連接到H橋的兩個接口,這里使用了G2553的定時器A1產(chǎn)生PWM。CAP_P12是光電對管連接到比較強后輸入到單片機的一個捕獲接口,因為這里可以用定時器A0的捕獲接口,使用定時器的捕獲功能,可以使得程序設計更為簡單。整個系統(tǒng)利用了兩個定時器,并結(jié)合中斷,使得整個系統(tǒng)都處于休眠狀態(tài),功耗可以做得比較低(但由于電機和12864的存在,這里的低功耗程序設計顯得毫無意義額)。另外還有一個12864的串行外部接口(SPI)三根線。
再放一個三線控制13864的圖。由于MSP4302xx系列是3.3V的器件,這里用到了一個245芯片來轉(zhuǎn)換電平電壓(CS和SCLK的順序反了,后來布線的時候改的)。初學者往往會遇到一個問題,就是為什么我的12864的滑動變阻器調(diào)了,12864的亮度都不變呢,我在這里只提一點:注意你的復位引腳的電平。
H橋電路太常見,百度出來一抓一大把。
至于H橋原理神馬的,我就不在這里多說了。不懂就百度吧,實際上學過三極管的,稍微靜下心來分析一個,都可以看得懂的。下面是一個比較器的電路,用的是光電對管發(fā)射信號,經(jīng)黑線反射以后PHOTO上產(chǎn)生一定的電壓值,做電路的時候?qū)崪y LM358的輸入電壓高達0.6V(哈哈,其實也不高…),右邊的LM358構(gòu)成一個比較器,VCC為5V電壓,經(jīng)10K和50歐姆電阻分壓以后LM358的2號引腳的電壓大致為0.5V<0.6V,滿足電路設計要求。后加一個1K電阻保護后級單片機(哈哈,這個電阻方便了我后面的濾波)下面說說問題所在吧。
調(diào)試的時候發(fā)現(xiàn)了一個非常糾結(jié)的問題。數(shù)據(jù)總是莫名其妙地顯示200轉(zhuǎn)/s甚至是1000轉(zhuǎn)每秒,實際上,我這個電機的轉(zhuǎn)動速度最大也就110轉(zhuǎn)每秒,這些個數(shù)據(jù)顯然都是錯誤的。反復檢查定時器的捕獲程序,檢查了好幾遍,加上有寫了一年的430單片機程序的經(jīng)驗,對這個G2553的內(nèi)部寄存器相當熟悉,反復分析,100%確定程序沒有任何問題。那么問題在哪里呢?后來分析了一段代碼。
這個函數(shù)是將捕獲到的定時器的脈沖計數(shù)值送到12864的一個中間轉(zhuǎn)換函數(shù),temp顯示的轉(zhuǎn)速,由于CPU 時鐘用的1MHz,電機那里有四個黑帶,所以實際的轉(zhuǎn)速應該是250000/tempData,得到這個數(shù)據(jù)后轉(zhuǎn)換成ASCII碼,再送到12864顯示。問題出現(xiàn)在這里,12864顯示數(shù)據(jù)1000+,說明temp = 1000+,比實際的數(shù)據(jù)100+大了10倍。那么也就意味著tempData的數(shù)據(jù)比實際的真實數(shù)據(jù)小了10倍,也就是說定時器兩次捕獲時間的間隔比常規(guī)的要小很多,為什么會小了那么多倍呢。