ENGLISH 简体中文 日本語 한국어  


アプリケーションノート4148

MAXQ3210を使用した圧電トーン生成

要約:マイクロコントローラのMAXQ3210は、圧電ホーンドライバを内蔵し、固定周波数で高音量ホーンを駆動します。このアプリケーションノートは、可変周波数のトーンをソフトウェアで生成することができるように、ホーンドライバのフィードバック要素を変更する方法について示します。

はじめに

圧電ブザーまたはスピーカは、電圧が印加されたときにわずかに歪む圧電水晶片を使用し、電気信号を音に変換します。この水晶片は、スピーカコーンまたはパネルに接続され、急速に変化する電圧が印加されると高速で振動します。この振動が、空中に音波を発生し、電圧波形の周波数に基づく周波数でトーンを生成します。

初期のコンピュータや電子ゲームは、単一のピッチトーンからサイレン音および白色雑音まで、圧電スピーカが生成可能なあらゆるタイプの音を使用しました。PCの音生成テクノロジは、これらの初期のものから長足の進歩を遂げています。今日、複数チャネル、ディジタル音および音楽、およびMIDI音楽シンセサイザシステムがシステムに追加されている場合でも、このシンプルな圧電スピーカはまだ役に立ちます。カーアラーム、煙感知器、POS端末、小型電子玩具/ゲーム、およびその他多くのアプリケーションは、圧電音生成に依存して、単純音、高デシベル警報音、および効果音を作成します。

スピーカを駆動するためのハードウェア変更

圧電スピーカのハードウェアをシステムに追加することは、非常に簡単です。

単一出力周波数のみが必要なアプリケーションでは、特定の可聴周波数で振動するように最適化された圧電ホーンを使用することができます。フィードバックネットワークとインバータを追加することによって、ホーンは、スイッチオンされると、その共鳴周波数で自己発振します。これらのタイプのネットワークは、多くの場合、煙検知器、一酸化炭素センサ、およびセキュリティシステムにおける高デシベル警報音を生成するために使用されます。

マキシムのMAXQ3210マイクロコントローラは、このタイプの圧電スピーカのドライブ回路(図1)を内蔵しています。ソフトウェアインタフェースは、非常にシンプルで、ホーンのオン/オフを切り替える単一の制御ビットで構成されます。出力トーンの周波数と音量は、圧電スピーカとフィードバックネットワーク部品によって完全に決定されます。

Figure 1. Piezoelectric horn-drive circuit for the MAXQ3210 microcontroller.
図1. MAXQ3210マイクロコントローラの圧電ホーンドライブ回路

ソフトウェア制御によって、ホーンのオン/オフを迅速に切り替えると、さまざまなクリック、チャープ、およびその他の効果音を作成することができますが、出力周波数は常に同じままです。異なる出力周波数は、どのような方法で生成することができるでしょうか?

出力周波数を変更するには、自動フィードバックループを削除し、ポート端子からじかにホーン出力を制御する必要があります。ディジタルスピーカは、固定電圧とグランド間でオン/オフを切り替えるように設計されており、マイクロコントローラのディジタルI/O端子からじかに駆動することができます。圧電スピーカのサイズと意図されたデシベル出力に応じて、特化されたドライバ回路またはICが、高音量を生成するために、圧電スピーカの端子で高電圧を処理するか、または大電流をスピーカに供給する必要がある場合があります。これらの場合、マイクロコントローラのI/O端子は、スピーカのオン/オフと出力周波数の設定を行うために使用されます。これらのI/O端子は、圧電素子をじかに駆動しません。

また、MAXQ3210は、スピーカの複数の出力周波数を生成するためにも使用することができます。フィードバック入力端子は単に、デバイス上の他のポート端子の1つに接続されます。内蔵のホーンインバータがポート端子で駆動される周波数に応じて増大することができる限り、適切なレートでポート端子を切り替えることによって、任意の希望するトーンを生成することができます。

:このアプリケーションノートのソースコードは、ダウンロード(ZIP, 4.5kB)から入手可能です。

基本的な音楽シンセサイザ

シンプルな楽音を生成するには、スピーカは、一定時間、オンに切り替えられた後、同じ時間だけオフにされる必要があります。音の周波数は、次の式で求められます。
出力周波数 = 1/(ハイ期間 + ロー期間)
特定の長さの時間、音を生成するには、駆動する完全サイクルの数を次のように計算します。
サイクル数 = 音持続時間 × 出力周波数
中央ハ(Middle C)から始まる基本ピアノ音階の周波数は、1例となります。これらの周波数は、音符「中央ハの上のイ音」が440Hzと等価となるようにチューニングされます。表1に示された値は、近似値です。

表1. 音符と近似音周波数
Note Frequency (Hz)
Middle C 261
C sharp/D flat 277
D 294
D sharp/E flat 311
E 330
F 349
F sharp/G flat 370
G 392
G sharp/A flat 415
A 440
A sharp/B flat 466
B 494
C (next octave up) 523

適切な周波数においてMAXQ3210のポート端子のオン/オフを切り替える最もシンプルな方法は、ソフトウェアループを使用することです。内側のループの遅延は、3.57MHz (typ)のマイクロコントローラのシングルサイクル命令実行を使用して計算されます。
   move    HRNC, #1          ; Turn the piezoelectric horn driver on.

;; Play Middle C for one second.

   move    LC[1], #261       ; Outer loop counter = 261 cycles (1s * 261Hz)
middleC:
   move    PO0.0, #1         ; Switch output high.
   move    LC[0], #6839      ; Half period : (1/261Hz) / (1/3.57MHz) / 2
   djnz    LC[0], $          ; Decrement and jump, if not zero, to current 
                             ;    instruction.
   move    PO0.0, #0         ; Switch output low.
   move    LC[0], #6839      ; Half period : (1/261Hz) / (1/3.57MHz) / 2
   djnz    LC[0], $          ; Decrement and jump if not zero to current 
                             ;    instruction.
   djnz    LC[1], middleC    ; Decrement and jump, if not zero, to top of loop.
出力周波数(生成された音符に対応)は、ループカウンタLC[0]にロードされた値を変更することによって変更されます。音符の持続時間は、ループカウンタLC[1]にロードされた値を変更することによって変更されます。このコード片をシンプルなマクロ内にラップしていくつかの定数を定義することによって、容易に音楽の小片を再生するコードを作成することができます。
#define NOTE_C     261
#define NOTE_C_SH  277
#define NOTE_D_FL  277
#define NOTE_D     294
#define NOTE_D_SH  311
#define NOTE_E_FL  311
#define NOTE_E     330
#define NOTE_F     349
#define NOTE_F_SH  370
#define NOTE_G_FL  370
#define NOTE_G     392

#define EIGHTH     1       ; 120 beats per minute, 4/4 time
#define QUARTER    2       ; 120 beats per minute, 4/4 time
#define QUARTERDOT 3       ; 120 beats per minute, 4/4 time
#define HALF       4       ; 120 beats per minute, 4/4 time
#define WHOLE      8       ; 120 beats per minute, 4/4 time

 

play macro note, duration
local L1, L2
   move    HRNC,  #1
   move    LC[1], #(note * duration / 8)
L1:
   move    PO0.0, #1         ; Switch output high.
   move    LC[0], #(1785000 / note)
   djnz    LC[0], $          ; Decrement and jump, if not zero, to current 
                             ;    instruction.
   move    PO0.0, #0         ; Switch output low.
   move    LC[0], #(1785000 / note)
   djnz    LC[0], $          ; Decrement and jump, if not zero, to current 
                             ;    instruction.
   djnz    LC[1], L1         ; Decrement and jump, if not zero, to top of loop.
   move    HRNC,  #1
   move    LC[1], #50        ; 50ms of silence
L2:
   move    LC[0], #3570      ; 1ms (inner loop)  
   djnz    LC[0], $
   djnz    LC[1], L2
endm


;; First 8 bars of Beethoven's "Ode to Joy"

   play    NOTE_E,     QUARTER
   play    NOTE_E,     QUARTER
   play    NOTE_F,     QUARTER
   play    NOTE_G,     QUARTER

   play    NOTE_G,     QUARTER
   play    NOTE_F,     QUARTER
   play    NOTE_E,     QUARTER
   play    NOTE_D,     QUARTER

   play    NOTE_C,     QUARTER
   play    NOTE_C,     QUARTER
   play    NOTE_D,     QUARTER
   play    NOTE_E,     QUARTER

   play    NOTE_E,     QUARTERDOT
   play    NOTE_D,     EIGHTH
   play    NOTE_D,     HALF

   play    NOTE_E,     QUARTER
   play    NOTE_E,     QUARTER
   play    NOTE_F,     QUARTER
   play    NOTE_G,     QUARTER

   play    NOTE_G,     QUARTER
   play    NOTE_F,     QUARTER
   play    NOTE_E,     QUARTER
   play    NOTE_D,     QUARTER




   play    NOTE_C,     QUARTER
   play    NOTE_C,     QUARTER
   play    NOTE_D,     QUARTER
   play    NOTE_E,     QUARTER

   play    NOTE_D,     QUARTERDOT
   play    NOTE_C,     EIGHTH
   play    NOTE_C,     HALF
この例に必要なコードスペース量を削減することができます。(展開されていないコードマクロの代わりに)単にサブルーチンを使用し、音符値の表をルックアップします。基本原則は同じままです。

タイマー駆動の音楽合成

上記のコードは、たどるには十分シンプルですが、マイクロコントローラがトーン生成にそのすべての時間を使用する必要があります。音楽グリーティングカードなどの一部の単純なアプリケーションの場合、マイクロコントローラのこの単独使用は、受け入れることができます。しかし、より複雑なアプリケーションの場合、マイクロコントローラが他の操作を行う間、バックグラウンドでトーンを再生する必要があります。この二元的役割を実行するには、マイクロコントローラは、特定の音符の持続時間の間、ポート端子のオン/オフを絶えず切り替えるタスクから解放される必要があります。

MAXQ3210は、カウンタ/タイマー機能を内蔵しています。1つのモードでは、このタイマーは、ポート端子において特定周波数の出力波形を生成することができます。このモードを使用してタイマー出力端子をフィードバック入力に接続することによって、マイクロコントローラは単に、タイマーを音符の開始時に起動し、音符の終了時に停止します。

また、タイマーは、音符自身の持続時間を制御するために使用することもできます。MAXQ3210は、このタスクに最適な追加の長期間タイマーを備えています。各音符間隔の開始時に割込みを生成することによって、このタイマーは音符のコード済みのルックアップ表を進むことができるため、より少ないスペースでより長い音楽片をエンコードすることが可能です。

結論

圧電トーン生成は、楽音、アラート、およびその他の効果音を作成するために数多くのアプリケーションで使用されています。MAXQ3210などの圧電ホーンドライバを内蔵したマイクロコントローラを使用することによって、最小のハードウェアおよびソフトウェアオーバヘッドで、圧電トーンを生成することができます。内蔵のプログラマブルタイマーによって、ほとんどのトーン生成がバックグラウンドで発生することができるため、マイクロコントローラを解放してメインアプリケーションに集中させることができます。


フィードバックをお寄せください。
内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。—マキシムはお客様からいただく訂正、提案を元に改善していきます。 このページを評価し、フィードバックを送信する。


自動アップデート
お客様が関心のある分野でアプリケーションノートが新規に掲載された際に自動通知Eメールの受信を希望する場合は、EE-Mail™にご登録ください。



その他の情報  APP 4148: May 22, 2008
MAXQ3210 電圧レギュレータ、圧電ホーンドライバ、およびコンパレータ内蔵、マイクロコントローラ フルデータシート
(PDF, 480kB)
無料
サンプル
 

ダウンロード、PDFフォーマットダウンロード、PDFフォーマット (28kB)
 AN4148, AN 4148, APP4148, Appnote4148, Appnote 4148


      プライバシーポリシー    法的お知らせ

      Copyright © 2008 by Maxim Integrated Products, Dallas Semiconductor