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