基于STM32F的曼徹斯特電壓/電流編譯碼系統(tǒng)設(shè)計(jì)
4 軟件設(shè)計(jì)
軟件流程如圖6所示。系統(tǒng)初始化包括時(shí)鐘初始化、定時(shí)器初始化、DMA初始化等。如果一次性連續(xù)編碼的數(shù)據(jù)最比較大時(shí),應(yīng)將這罩的DMA緩沖區(qū)設(shè)置為雙緩沖,為每個(gè)用到的DMA通道開(kāi)辟兩個(gè)緩沖區(qū)。當(dāng)DMA使用其中的一個(gè)緩沖區(qū)時(shí),MCU調(diào)用編碼或者譯碼算法來(lái)對(duì)另外一個(gè)緩沖區(qū)進(jìn)行讀寫操作;當(dāng)DMA數(shù)據(jù)傳輸完畢的時(shí)候,發(fā)生一個(gè)DMA傳輸結(jié)束中斷,在中斷服務(wù)程序里切換到另外一個(gè)緩沖區(qū),并將編碼算法或者譯碼算法標(biāo)志位置位。當(dāng)主程序查詢到標(biāo)志位置位后,MCU調(diào)用編碼或者譯碼算法來(lái)對(duì)DMA先前指向的緩沖區(qū)進(jìn)行處理(填充數(shù)據(jù)或者取數(shù)據(jù))。當(dāng)然,如一次性編碼或者譯碼的數(shù)據(jù)不是很多時(shí),我們只需一個(gè)緩沖區(qū)就夠了。
因?yàn)镃PU處理數(shù)據(jù)的速度要高于編碼的速率,所以CPU可以空出時(shí)間來(lái)做其他的事情,時(shí)間的長(zhǎng)短依賴于緩沖區(qū)的大小和編碼的速率,等到主程序中查詢到編碼或者譯碼標(biāo)志位置位了再去執(zhí)行編碼或者譯碼算法對(duì)數(shù)據(jù)進(jìn)行處理,這樣就提高了CPU的工作效率。在實(shí)時(shí)性要求不高的應(yīng)用中,不再需要一個(gè)專門的CPU去處理編碼或者譯碼。
5 方案驗(yàn)證
本方案已在汽車加速度傳感器模擬系統(tǒng)中得到了驗(yàn)證,這里以某款加速度傳感器的曼徹斯特編碼協(xié)議為例,其數(shù)據(jù)幀格式為一幀數(shù)據(jù)為19位包括:2個(gè)起始位、2個(gè)類別位、10個(gè)數(shù)據(jù)位、5個(gè)CRC效驗(yàn)位。
5.1 編碼方案驗(yàn)證
對(duì)圖4所示電路的T1點(diǎn)測(cè)量曼徹斯特電壓編碼的波形,電流編碼的波形通過(guò)測(cè)量T2、T3問(wèn)的壓降來(lái)間接測(cè)量。
對(duì)一幀數(shù)據(jù)0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1連續(xù)編碼,幀之間延時(shí)6μs,編碼速率400kb/s,編碼波形如圖7所示。
5.2 譯碼方案驗(yàn)證
通過(guò)對(duì)某真實(shí)傳感器輸出的曼徹斯特電流碼進(jìn)行捕獲譯碼,得到其ID信息,譯碼數(shù)據(jù)如圖8所示。ID正確,譯碼成功。
結(jié)語(yǔ)
該沒(méi)計(jì)方案可以方便地實(shí)現(xiàn)曼徹斯特電壓、電流編碼譯碼,實(shí)現(xiàn)方法靈活、可靠,適用于各種類型的曼徹斯特編碼譯碼應(yīng)用領(lǐng)域。目前,本設(shè)計(jì)方案已經(jīng)成功地應(yīng)用在汽車加速度傳感器模擬系統(tǒng)中。
評(píng)論