新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 計算機接口使19世紀管風琴自行彈奏

計算機接口使19世紀管風琴自行彈奏

作者: 時間:2013-04-07 來源:網絡 收藏
電子設計

在進行電子設計時,我們大家坐下來,粗略地設計出電子結構;圖3為基本結構圖。在圖的左側,MIDI消息由外部傳入(我將在下文詳細介紹MIDI協(xié)議)。圖的右側是一個位移寄存器鏈;控制器在驅動相應的“數據”值填充位移寄存器鏈時,負責切換“時鐘”信號,然后通過“選通”信號將位移寄存器鏈的內容并行發(fā)送至電磁鐵驅動器的輸入端。

newmaker.com
圖3:電子結構我們在位移寄存器/驅動器鏈上采用了74HC595位移寄存器IC。不過,電磁鐵試驗顯示每個電磁鐵大約需要15V電源提供350mA驅動電流——超出了CMOS輸出級的提供范圍。這了滿足這個要求,我們在每個位移寄存器IC上增加了一個ULN2803A Darlington輸出級。這個芯片還具備一個保護二極管,對切斷電流時電磁鐵生成的高反激電壓進行分流,避免增加一個分立式二極管。我們在萬用板上制作了幾個驅動器電路板原型,每個可驅動16個電磁鐵。

控制器設計

盡管我們可以采取多種方法設計控制器(包括利用Arduino平臺或采用其他微控制器),但我們最終還是選擇使用賽靈思Spartan-3E入門套件,因為我在賽靈思的日常工作中用過這種開發(fā)板,對相關工具了如指掌。特別是,我知道如何使用Platform Studio SDK和ChipScope等調試工具,由于這有可能是一個現場調試項目,這樣做可節(jié)省時間。我們使用賽靈思嵌入式開發(fā)套件,開發(fā)核心組件MicroBlaze子系統(tǒng)(圖4)。

newmaker.com
圖4:MicroBlaze 子系統(tǒng)除了MIDI接口和位移寄存器接口,我們還選擇增加了串行RS-232控制端口,幫助我們調試系統(tǒng)。RS-232協(xié)議看起來有點老套,但在此類項目中,它的價值非凡。我們也增加了一些GPIO端口,用于驅動LED,讀取開關和按鈕,以便在無需使用控制端口的情況下,完成某些交互操作。

寫入MicroBlaze固件

我們已經確定系統(tǒng)的最佳輸入接口是MIDI端口。自20世紀80年代以來,樂器數字接口(MIDI)已經成為連接合成器等數控樂器與其他樂器或控制計算機的標準接口,因此,顯然我們也應當采用這種接口。MIDI將使我們取得了連接的最大靈活性。

MicroBlaze可從內部顯示整個鍵盤的狀態(tài)以及系統(tǒng)正在按壓哪些鍵——即系統(tǒng)正在為哪些電磁鐵加電。

MIDI是一種單向低速串行協(xié)議,傳輸速率為31250波特。它包含多種類型的信息,但就我們的目的而言,只有NOTE ON和NOTE OFF是重要的信息類型。每個NOTE ON信息由3個字節(jié)構成。

第一個字節(jié)是0x9n,這里的n代表通道數。
第二個字節(jié)是0至127的音符數,中間的C為第60號。
第三個字節(jié)是0至127的速度值。

NOTE OFF除第一個字節(jié)是0x8n外,其余與此非常相似。

在我們的設計中,我們決定同步聽取所有通道的信息( “omni”操作)。由于鍵盤對速度并不敏感,因此,我們可安全地忽略所有速度字節(jié)。

EDK UART IP核接收MIDI消息,然后通過FIFO,一次向MicroBlaze處理器發(fā)送一條信息。MicroBlaze可從內部顯示整個鍵盤的狀態(tài)和系統(tǒng)正在按壓哪些鍵(即系統(tǒng)正在為哪些電磁鐵加電)。固件采用一個靜態(tài)查找表,指出與這個音符相關的電磁鐵,將這個用做內部圖的索引;到達的NOTE ON消息將相應entry值設為“1”,而NOTE OFF消息將entry值設為“0”。

內部圖更新后,利用圖的全部內容更新電磁鐵寄存器;通過GPIO端口的位拆裂,MicroBlaze處理器一次將一位的圖內容寫入位移寄存器的數據輸入端,然后切換時鐘信號,移動一下位移寄存器。一旦利用圖內容對整個位移寄存器進行了更新,MicroBlaze會將一個上升沿寫入STROBE行,這能夠將位移寄存器的值拷貝至輸出寄存器,為正確的電磁鐵加電或斷電,從而產生悅耳的音樂。

我們將固件用作軟件狀態(tài)機;對于不采用實時操作系統(tǒng)的嵌入式應用而言,這可提供某些多線程應用功能,但沒有實際線程實現開銷。靜態(tài)結構數組根據當前的狀態(tài),指出系統(tǒng)針對特定事件應當采取什么措施。



評論


技術專區(qū)

關閉