|
PIC32MZ (PWM + フィルタ)式アンプ
WAVプレーヤ
|
|
2021.08.07 PIC情報交換会資料 |
|
YS電子工作デザイン http://www.ys-labo.com/ 斎藤 |
|
YS電子工作ショップ http://ys-labo.shop-pro.jp/ |
1. |
概要 |
|
1.1 諸元、性能
・ SDカードの中にあるWAVファイルを(PWM + フィルタ)のアンプで再生にするプレーヤ
・ 再生可能なWAVファイルは 1. チャンネル数: モノラル/ステレオ、 2. データ幅: 8/16ビット、 3. サンプリング周波数: 8KHz~48KHz
・ OC(Output Compare、旧CCP)モジュール:入力クロック=100MHz、PWM周波数=100kHz、PWM最小デューティ=1/1000
・ ファイル名、チャンネル数、データ幅、サンプリング周波数、ファイルサイズ、などのファイル情報をUART経由で Tera Term(PC)に表示
1.2. システム構成
|
2. |
外観
全体 |
フィルタ部 拡大 |
 |
 |
|
3. |
回路図(→PDFファイル) |
4.
|
開発環境
・ Harmony v.2.04 XC32 v2.40
及び Harmony v.3 XC32 v2.40
・ PIC: PIC32MZ2048EFH100 |
5.
|
プログラム
① 押しボタンスイッチ(再生開始/停止、スキップ)の検出: 変化割込み
② PIC起動直後: SDカード内全WAVファイルにテーブル作成
③ SDカードデータの読み出し: 4096バイト x 2個によるダブルバッファ方式
④ WAVファイルオープン後、ファイルヘッダー情報解読
・ オフセット 0x00から4byte : 固定文字列 …… LIFF
・ オフセット 0x04から4バイト: ファイルサイズ (例) BA D2 06 00 → 6*16**4+13*16**3+2*16**2+11*16+10 = 447,152[byte]
・ オフセット 0x16から2バイト: チャンネル数 (例)モノラル の場合 0x0001、ステレオの場合 0x0002
・ オフセット 0x18から4バイト: サンプリングレート (例) 44 AC 00 00 → 44.1kHz
・ オフセット 0x22から2バイト: データ幅 (例) 08 00→8bit、 10 00 → 16bit
・ オフセット 0x2C以降 : サウンドデータ
⑤ サンプリング周波数(例:44.1KHz)毎の割込み処理
Duty = サンプリングの振幅 / 最大振幅 により、PWM(100KHz)のDutyを算出 → OCタイマのレジスタ値を設定
<実際のプログラム抜粋>
……
……
if(ysBit == 8) //サウンドデータが8ビットの場合
{
temp_float = (float)Buf_A[ptr_A];
Duty = temp_float / 256; //float で演算
Reg_Duty = (unsigned short int)((float)PR2 * (float)Duty); //デューティ設定用レジスタ値の演算
OC8RS = Reg_Duty;
if(MonoSte == 1)ptr_A += 1; //モノラルの場合
else ptr_A += 2; //ステレオの場合
}
else //サウンドデータが8ビット以外場合(→サウンドデータが16ビットの場合として処理)
{
temp_short = (short signed int)((Buf_A[ptr_A +1] << 8) + Buf_A[ptr_A]);
//サウンドデータ: 16bit singned short int、リトルエンディアン //Buf_A[ptr_A]:unsigned char
temp_float = (float)temp_short; //signed short int → floatに変換
Duty = (temp_float + 32768)/65536; //float で演算
Reg_Duty = (unsigned short int)((float)PR2 * (float)Duty); //デューティ設定用レジスタ値の演算
OC8RS = Reg_Duty;
if(MonoSte == 1)ptr_A += 2; //モノラルの場合
else ptr_A += 4; //ステレオの場合
} ……
……
|
|
6. |
動作結果 |
|
1. 動画 → YouTube (1080pのHD動画)
2.. Tera Term ログ全文
|
7. |
参考 |
|
7.1 WAVEフォーマット変換ソフト の紹介 |
|
・ソフト名: WAVEフォーマット変換プラス 作者: T.Yamamoto ダウンロード先: URL(Vector、 無料)
・説明&特徴
WAVEフォーマットを変換するソフトです。
8bit/16bit/24bit/32bit整数型/32bit浮動小数点数型フォーマットを相互に変換できます。
変換可能なサンプリング周波数[Hz]は次の通りです。
192000、176400、96000、88200、48000、44100、22050、11025、
8000、16000、24000、32000
モノラル⇔ステレオ変換も可能です。
なお、4bitは非対応です。
・使い方:
1. Openボタンを押して 変換元のWAVEファイルを開く。
2. 変換後のデータ幅、サンプリング周波数、チャンネル数 を選択
3. Conv.ボタンを押しファイルに名前を付けて保存

|
|
7.2 YS電子工作ラボHP での紹介 及びプロジェクトファイルダウンロード |
|
|
PIC32MZ Harmony v2.04版 |
→ URL |
PIC32MZ Harmony v3版 |
→ URL |
|
|