摘 要: 本文介紹了使用16位單片機SPCE061A設計的一個盲人導向系統的過程。在硬件電路設計過程中,采用了PIN公司的PNI-11096芯片組模塊進行導向,選擇了一款SPLC501的點陣式LCD顯示屏進行數據顯示。該系統還可以外接其他功能模塊,在導航系統、盲人拐杖、汽車內置設備等諸多領域有著廣泛的應用。
關鍵詞: 16位單片機SPCE061A 盲人導向系統 數據校正
1.引言
盲人導向儀是為盲人指引方向的重要儀器,也可作為指南針,而指南針是航海航行的重要儀器,也是人們外出旅行、考察的必備工具。本方案使用16位單片機實現系統和SPLC501液晶模組,可以實現圖形及文字顯示當前方向,語音播報方向,方向校正,顯示日期、時間,有秒表、鬧鐘、語音報時等功能。
2.系統結構及其功能
2.1系統結構
盲人導向儀系統框圖如圖1所示,該系統以16位單片機SPCE061A為數據處理核心,外擴SPLC501液晶模組,利用電子導向模組得到與正北方向沿順時針方向的夾角,在液晶屏上顯示角度信息。
2.2各模塊功能以及硬件實現
2.2.1電子導向模塊
如圖2所示,電子導向模組由兩個磁性傳感器SEN-S65和一個驅動芯片PNI-11096構成。磁性傳感器SEN-S65里面包含一個LR振蕩電路,當磁性傳感器SEN-S65與地球磁感線平行方向夾角發生變化時,LR振蕩電路的磁感應系數也會發生變化。驅動芯片PNI-11096通過磁性傳感器SEN-S65磁感應系數的變化可以計算出磁性傳感器與地球磁感線之間的夾角,驅動芯片PNI-11096最多可以連接三個磁性傳感器SEN-S65,這三個磁性傳感器SEN-S65方向互為垂直,這樣就可以測量在三維方向上與地球磁感線的夾角,從而得到當前的三維方向。只要電子導向模組得到水平方向上與地球磁感線的夾角就可以測得方向了,因此驅動芯片PNI-11096上使用了兩個磁性傳感器SEN-S65。
電子導向模組采用SPI接口輸入與輸出,16位單片機使用I/O口模擬SPI接口與電子導向模組通訊。電子導向模組在每個時鐘周期的上升沿,鎖存數據。
2.2.2液晶顯示模塊
液晶顯示模塊采用的SPLC501型圖形點陣式液晶顯示器。液晶顯示器(LCD)具有顯示信息豐富,功耗低,體積小,重量輕,超薄,無輻射等許多其他顯示器無法比擬的優點,被廣泛應用于微處理器控制的智能儀表、儀器和低功耗電子產品中。LCD可分為段位式、字符式和點陣式。其中,段位式LCD和字符式LCD只能用于字符和數字的簡單顯示,不能滿足圖形曲線和漢字顯示的要求。本文中所采用的MG12864型點陣式液晶顯示器不僅可以顯示字符和數字,而且可以顯示各種圖形、曲線與漢字,并且可以具有實現屏幕上下左右滾動、反轉、閃爍、動畫等功能。
2.2.3 SPCE061A核心處理模塊
本系統采用SPCE061A開發板作為數據處理核心,通過向電子導向模組發送不同的命令字,得到X軸和Y軸磁性傳感器的測量值,經過計算可以得到電子導向模組與正北方向的順時針夾角。并將處理后的數據在SPLC501液晶模組上進行顯示。
3.系統的軟件實現
3.1電子導向模塊的軟件實現
電子導向模塊的軟件實現主要由PNI11096驅動程序和導向功能程序兩部分組成。
PNI11096驅動程序PNI_Driver主要是用來模擬SPI時序完成對PNI11096的控制及讀取數據,16位單片機SPCE061A是通過I/O口模擬SPI接口與電子導向模組通信。PNI11096驅動程序包括兩個函數,PNI11096初始化函數F_PNI_11096_Init PNI,PNI11096讀取函數F_PNI_11096_Read。PNI11096驅動程序函數PNI_Driver的程序流程如圖3所示。
導向功能程序主要是用來實現命令的發送與接收、數據校正、圖形顯示,以及方向數值顯示。電子導向模塊在接收到系統發送的命令字后,根據命令讀取x和y軸的數據,然后將得到的x和y軸的值進行校正,根據校正后的值進行進一步計算,將得到的結果返回系統。導向功能程序的核心部分在于誤差的校正。
在理想狀態下,X軸測量數據與Y軸測量數據變化范圍都應是-32768—32767之間,X軸數據與Y軸數據組成的坐標剛好構成一個正圓形,但實際測量中,X軸測量數據與Y軸測量數據最大值或最小值均達不到-32768—32767這個范圍,則導致這兩個數據組成坐標構成的圖形成為一個中心不在原點的橢圓形。通過計算x軸和y軸的偏移量和測量數據的極大極小值,為了得到準確的方向值我們必須對電子導向模組返回的數據進行校正,將橢圓調整為正圓形,圖4(a)和圖4(b)為顯示了測量坐標圖在校正前后的對比情況。
從電子導向模組得到X軸方向和Y軸方向測量數據經過較正后,根據公式angle=atan(y/x)就可以計算出電子導向模組與正北方向的順時針夾角了。還有一個問題是要根據角度所在的不同的象限,對求得的角度值加以修正。角度值修正程序的示意性代碼如下所示:
Ratio=yRevise/xRevise;
if(角度值小于0)
{
Ratio=0 - Ratio;
使用反正玄函數計算角度值;
}
else if(角度值在第一象限)
{
return 360 - Angle;
}
else if(角度值在第二象限))
{
return 180 + Angle;
}
else if(角度值在第三象限))
{
return 180 - Angle;
}
else (角度值在第四象限))
{
return Angle;
}
3.2液晶顯示模塊的軟件實現
液晶顯示模塊SPLC501的驅動程序由5個部分組成,分別為底層驅動程序文件SPLC501Driver_IO.inc、SPLC501Driver_IO.asm;用戶API 功能接口函數文件SPLC501User.h、SPLC501User.c、DataOSforLCD.asm。各文件的主要功能如下。
SPLC501Driver_IO.inc:該文件為底層驅動程序的頭文件,主要對使用到的寄存器(如端口控制寄存器等)進行定義,還對SPCE061A與SPLC501液晶顯示模組的接口進行配置;用戶可以根據自已的需求來配置此文件,但要使端口的分配符合實際硬件的接線。
SPLC501Driver_IO.asm:該文件為底層驅動程序,負責與SPLC501液晶顯示模組進行數據傳輸的任務,主要包括端口初始化、寫控制指令、寫數據、讀數據等函數;這些函數僅供SPLC501User.c調用,不建議用戶在應用程序中調用這些函數。
SPLC501User.h:該文件為用戶API功能函數文件的頭文件,主要對一些記住符進行定義,以及配置LCD的一些設置,另外該文件里還對SPLC501User.c中的函數作了外部聲明,用戶需要使用LCD的API功能函數時,需要把該文件包含在用戶的C文件中。
SPLC501User.c:文件中定義了針對LCD顯示的各種API功能函數。
DataOSforLCD.asm:該文件中提供了一些供API功能函數調用的數據處理子程序,主要完成顯示效果的疊加、畫圓偏差量的計算等。
3.3 SPCE061A核心處理模塊的軟件實現
SPCE061A核心處理模塊主要由鍵盤掃描程序和系統主程序兩部分組成。
鍵盤掃描程序先通過調用Key_Init()函數對鍵盤進行初始化,然后通過函數Key_Scan()對鍵盤進行掃描,若發現有按鍵按下,則使用Key_GetValue()函數獲得按鍵值,并保存下來供系統調用。
程序運行后首先初始化各個硬件模塊,校正指南針模組,然后程序進入主循環,不停地讀取指南針模組的方向并顯示,同時進行按鍵掃描,根據按鍵進入相應的功能模塊。主程序流程圖如圖5所示。
4.結語
本文利用16位單片機SPCE061A強大的處理能力,配合電子導向模組設計了一個語音播報盲人導向儀,此系統可以完成圖形及文字顯示當前方向,語音播報方向,方向校正,顯示日期、時間,有秒表、鬧鐘、語音報時等功能,對開發一款功能豐富的盲人導向儀系統,有一定的參考價值。語音播報盲人導向儀可以快速添加到各種產品中,作為成熟系統的子模塊,其應用在導航系統、盲人拐杖、汽車內置設備等諸多領域。
參考文獻:
[1]嵌入式微處理器SPCE3200原理及應用[M].凌陽科技有限公司資料,2007,08.
[2]61板課程設計指導書[M].凌陽科技有限公司資料,2005,10.
[3]61板畢業設計指導書[M].凌陽科技有限公司資料,2004,02.