第一章前言
本系統(tǒng)是基于PIC單片機為主控制器的聲音引導系統(tǒng),主要由可移動聲源,信號分析處理電路,無線數據傳輸模塊,液晶顯示模塊等部分組成。本設計采用PIC單片機作為核心器件,音頻脈沖信號由單片機控制產生,發(fā)聲移動平臺用PMMA(Acrylic)制作,平臺的移動由直流減速電機完成,用ASSP芯片MMC-1和L298來實現(xiàn)電機的控制,用語音接收電路采集信號,并對信號進行處理后通過無線數據傳輸,實現(xiàn)可移動聲源的智能控制。同時應用數碼管顯示平均速度。
第二章方案設計與論證
總體方案架構:
對于聲源的定位有多種辦法,比如測量接收端的幅值,聲音測距,測量兩個接收點的時間差等。我們首先選用的即時測量幅值的方案。但在實際測量過程中發(fā)現(xiàn)此方案不僅受環(huán)境影響極大,而且在聲音距離大于50厘米后經過盡可能的放大后變化仍然達不到單片機最小采樣的精度5mV(10位精度ad),因此放棄了此方案。使用聲音測距的方案在經過實際測試后發(fā)現(xiàn)由于聲波存在相位的問題,對定位精度影響很大,返回的數據亦呈現(xiàn)出一個正弦變化的函數關系,同時,在聲源行進過程中的影響也是很大,所以也放棄了此方案。最終我們采用了計算兩點時間差值的方法,在考慮相位的情況下,取每次高電平的中點作為有效數據點。聲源產生的信號如下:
經不斷測試,在脈沖信號階段最佳的頻率為4kHz,接收的信號最穩(wěn)定,抗干擾最強。
一個周期為50ms,在前25ms內產生脈沖信號,在后25ms持續(xù)低電平。如果三個接收點接收低電平的持續(xù)時間均超過10ms,則可視為一個新周期的開始。
可移動聲源的最大速度為16cm/s,則每一個處理周期為50ms,此段時間之前聲源移動的最大距離 = 16cm/s×0.05s = 0.8cm<1cm,可見此精度足以滿足誤差為1cm的系統(tǒng)需求。
舉例,三個聲源某一時刻可能接收到的聲音信號,經比較輸出后波形如下:
因此只要檢測首次出現(xiàn)高電平的時間差dT1和dT2即可判斷聲源是否到達OX或者OY軸。
2.1主控芯片的選擇
方案一
采用51系列單片機進行控制。此方案的優(yōu)點是成本很低,為保證為系統(tǒng)設計的總體構架對時間要求很高,需要不斷的計算出高電平的中間值,為保證系統(tǒng)能按需求進行正常工作,單片機的處理速度必須考慮的一個問題。雖然51系列單片機支持最高晶振頻率為24MHz,但此時穩(wěn)定性會相應下降,此外51系列單片機IO資源均較少,對其他功能的擴展限制很大。此外,本方案還需同時處理無線數據發(fā)送接收,產生聲音信號,系統(tǒng)計時,與MMC-1芯片通信,pid電機掉接等任務,限于51系列單片機處理速度因此放棄了此方案。
方案二
采用PIC系列單片機進行控制。此方案優(yōu)點是PIC是RISC結構內核,而且PIC單片機是四分頻的,而51系列單片機是12分頻的,所以指令速度比51單片機快得多,因此在同樣晶振下有著更快的處理運算速度,因此非常適合處理采集的聲音測量值。雖然PIC單片機比51系列單片機成本高一些,但就整體而言卻有著更高的性價比。因此最終采用PIC單片機。
2.2聲源系統(tǒng)方案
方案一
用蜂鳴器作為發(fā)聲器件,用高耐壓、大電流達林頓管ULN2003進行功率放大 ,此電路結構簡單,易于控制,價格低廉,功耗低。但在實際測試中發(fā)現(xiàn)由于發(fā)出聲音相對較弱,因此外界極容易造成干擾,處理數據時精度達不到所需要求,因此放棄使用蜂鳴器。
方案二
用揚聲器作為發(fā)聲器件,用TDA2822進行功率放大,此電路能夠得到比蜂鳴器更強的音頻信號,雖然功率有些大,但能產生足夠的振幅,干擾相對較小,因此選擇此方案。
2.3移動平臺系統(tǒng)方案
方案一
購買普通玩具小車改裝成移動平臺,玩具小車一般由兩個直流電機組成,前輪用一個控制方向,后輪用一個控制速度
方案二
購買有機玻璃等材料自己制作移動平臺、采用兩個步進電機分別控制左右兩個輪子,用一個萬向輪作支撐。
方案三
仍購買有機玻璃等材料自己制作移動平臺采用兩個直流減速電機分別控制左右兩個輪子,用一個萬向輪作支撐。
以上三種方案中,方案一是常見的平臺移動控制方法,但是由于玩具小車轉向的角度很難控制,而且電機容易卡死,可能造成電機燒毀,加上題目中要求可移動生源轉直角彎,此方案很難做到。方案二雖然采用步進電機左右輪分開控制的策略,而且能夠精確控制轉速和計算路程,但一般小型步進電機產生的力矩較小,難以達到要求。方案三中只要直流減速電機安裝較好,其控制就能達到較高的精度,對于負載較多的移動平臺而言,此方案最為實用。
2.4聲音接收方案
方案一
購買集成好的拾音器模塊,這種方法能有效采集到音頻信號,但是集成模塊價格較為昂貴,性價比不高,有大材小用之嫌,因此不用。
方案二
用駐極體話筒和晶體管制作簡單的音頻采集放大電路。此方法成本低,功耗小,外圍器件少,電路簡單,而音質也較佳為。經綜合考慮,我們決定采用此方案。
2.5顯示方案
方案一
LCD12864進行背光顯示,此方案能夠實時顯示能容豐富、清晰,顯示信息容量大,但是此液晶功耗大(開啟背光時12864接近500mA),而且需要安裝面積大,占用I/O資源較多,價格較為昂貴,因此不采用。
方案二
用數碼管進行顯示,控制簡單,亮度大,價格低廉,在較強的光線下也能顯示清晰的數據,所以選擇數碼管進行顯示。[!--empirenews.page--]
2.6 無線方案
采用NRF905為主控芯片的無線通信模塊,通信頻率高,傳輸速度較快,能夠勝任本系統(tǒng)要求的任務。
第三章硬件電路設計
3.1音頻信號發(fā)生電路的設計
我們采用用TDA2822對音頻信號進行功率放大,該芯片性價比很高。揚聲器的頻率直接由單片機給出,單片機輸出的脈沖信號通過揚聲器反映出來。具體電路圖見附圖1。
3.2電機控制電路設計
本題必須采用組委會提供的電機控制ASSP芯片(型號MMC-1)實現(xiàn)可移動聲源的運動。MMC-1為多通道兩相四線式步進電機/直流電機控制芯片,基于十六位通用的MCU固化專用程序實現(xiàn)。通過USAT或SPI串行接口,為主控CPU擴展專用電機控制功能。在此次比賽中由于硬件資源有限,而整個系統(tǒng)對主控CPU的性能有要求很高,如電機驅動與音頻信號都會用到PWM,51單片機沒有PWM,而PIC單片機也只有兩路PWM,為了提高性價比,這款芯片很有必要!整個電機驅動電路請見附圖2、附圖3、附圖4、附圖5。
3.3音頻信號接收電路
為了降低小車的功耗,減少作品成本,以三極管為基本放大環(huán)節(jié)的話筒功放電路,外圍元件少,制作簡單,音質卻出乎意料的好。其主要特點是效率高、耗電省,靜態(tài)工作電流典型值只有6mA左右,具體電路如圖所示。該電路輸出端的信號不能直接給單片機,由于環(huán)境中不確定的噪聲很多,所以必須濾波,我們選取帶通濾波,其中中心頻率為:F=1/2<<<<<<<<<<<<<<<<<<<<<<<<<π R C
由于環(huán)境中的干擾的頻率大多分布在2KHZ以下,于是便要求音頻信號頻率要在它之上,在測試中發(fā)現(xiàn)并不是頻率越高越好,隨著頻率升高,音頻信號的響度也隨著降低,響度太低也會使信號的檢測變困難,經過測試發(fā)現(xiàn)聲音引導系統(tǒng)最佳頻率是4KHZ。由于采用相位比較算法,單片機得到的理想值是一個數字信號,通過電壓比較器將輸出的信號通過電壓比較,輸出方波信號。這樣可以使得干擾基本上消失,而且控制也相對比較簡單,更值得一提的是,通過比較器的可調比較電壓,可以在不同的環(huán)境下通過調節(jié)比較器的比較電壓,達到抗干擾的目的。具體的濾波比較電路請見附圖六、附圖七。
3.4測速電路設計
本聲源移動平臺采用雙電機差速控制,由于是差速控制,兩電機轉速不一定一樣,所以要通過測定兩個電機的轉速來確定,最簡單的算法是取平均值。性價比最高的一種方法是通過光電管配合自制的光電碼盤來實現(xiàn)。光電管通過電壓比較器使得當光電管處于光電碼盤黑白上時輸出高低電平信號,再通過單片機計數、運算的出速度值,還可以算出路程。
V=相鄰碼盤距離/通過相鄰碼盤所用的時間
S=V*T
第四章軟件設計
4.1 總體構架分析:
所有數據采集、處理以及計算均在聲音接收部分完成,在處理完成后通過無線模塊發(fā)送給聲源,聲源根據接收到的命令采取不同的控制策略。此外聲源部分和聲音接收部分均采用AvrX操作系統(tǒng),同時進行多個操作,保證了系統(tǒng)系統(tǒng)運行的實時性。
聲源部分:
Task1: 產生系統(tǒng)所需的聲音信號。
Task2:電機速度檢測,與MMC-1電機驅動芯片進行通信,構成電機速度的閉環(huán)控制。
Task3:記錄系統(tǒng)運行時間,并時時顯示速度。
Task4:無線數據通信,時時接收控制指令。
聲音接收部分:
Task1:信號的接受和處理
Task2:對接受的信號進行計算,產生不同的控制命令。
Task3:對更新的控制命令通過無線模塊發(fā)送到移動聲源。
4.2 PID電機調速的設計:
因為實現(xiàn)本題必須實用精確控制,因此必須采用閉環(huán)的控制系統(tǒng),對雙電機進行精確控制以達到精度控制要求。而此系統(tǒng)中同時要求電機進行前進和后退,因此需采用位置式PID控制。
經過不斷的測試,比例,積分,微分常數目前調出的最佳參數如下:
Kp: 1.6 Ki: 2.1 Kd:1.4 具體部分代碼參見附錄。[!--empirenews.page--]
第五章調試及結果分析
5.1音頻信號采集模塊調試
次數 |
聲源離接收器的距離/cm |
波形是否有變化 |
1 |
10 |
是 |
2 |
50 |
是 |
3 |
100 |
是 |
4 |
150 |
不定 |
5 |
200 |
否 |
5.2路程測量測試
次數 |
測試距離(cm) |
實際距離(cm) |
誤差計算 |
1 |
45 |
47 |
4.44% |
2 |
50 |
51 |
2.00% |
3 |
55 |
57 |
5.18% |
4 |
60 |
59 |
1.67% |
調試儀器:20MHz雙蹤示波器、信號發(fā)生器、數字萬用表、秒表、米尺等
5.3結果分析
經測試,在外界干擾不是太強的情況下,可移動聲源能夠通過接收器方傳回的數據精確地定位,精度在1—3cm.
PID調試部分代碼:
// define difference : the difference between the latest data and the previous data
// define U0 : the PWM to send to the moto
int main (void)
{
······ // Omitted the previous code
int P = 0 , D = 0 ;
tcount++ ;
CarState.E0 = BitNum ;
if ( CarState.E0 == CarState.E1 ) if ( CarState.E0 == 0 ) FlagD = 0 ;
else if ( CarState.E0 < CarState.E1 ) FlagD = -1 ;
else if ( CarState.E0 > CarState.E1 ) FlagD = 1 ;
P = CarState.E0 * Kp ;
D = Kd * KdS * ( CarState.E0 + 3*CarState.E1 - 3*CarState.E2 - CarState.E3 ) ;
if ( D < - 30 * KdS ) D = -30*KdS ;
else if ( D > 30*KdS ) D = 30*KdS ;
if ( D != 0 ) D_old = D ;
if ( D_old < -10 ) D_old++ ;
else if ( D_old > 10 ) D_old-- ;
if ( (CarState.E0 > -3)&&(CarState.E0 < 3) ) S = 0 ;
else if ( ( FlagD == -1) && ( CarState.E0 <= -1 ) )
if ( S > ( BitNum * BitNum * 20 * KsS ) ) S-- ;
else if ( ( FlagD == -1) && ( CarState.E0 >= -1 ) ) S = 0 ; //
else if ( ( FlagD == 1 ) && ( CarState.E0 <= 1 ) ) S = 0 ; //
else if ( ( FlagD == 1 ) && ( CarState.E0 >= 1 ) )
if ( S < ( BitNum * BitNum * 20 * KsS) ) S++ ; //
u8_pwm_a = U0 + P + ( D_old / KdS )+ ( S / KsS ); // ;
······ // Omitted the following code
}