readme.md 3.46 KB
Newer Older
杉下大河's avatar
杉下大河 committed
1
2
# EmbeddedANC-STM32F767
このシステムは組み込み用開発ボードNUCLEO STM32F767にANC機能を組み込んだ試作品である。
3
またWikiにはその他試作に利用したボードのメモ書きと開発を中止した理由を掲載している。場合によってはSTM32である必要がないため、一度目を通して貰えるとありがたい。詳しくは[こちらの表へ](https://docs.google.com/spreadsheets/d/1e_AQLcVY6XZZWhbgB6uQjdyvwzy65i8kzc3xhQriih8/edit?usp=sharing)へ。
杉下大河's avatar
杉下大河 committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24


## システム構成
||||
|:----|:----|:----|
|ボード|NUCLEO-STM32F767ZI|https://www.st.com/en/evaluation-tools/nucleo-f767zi.html?ecmp=tt9470_gl_link_feb2019&rt=db&id=DB3171#resource|
|テキストエディタ|VisualStudioCode(Arduino環境)|https://qiita.com/mmt/items/7dd1a2f312334a6cd600|
|IDE|ArduinoIDE| |
|ライブラリ|Arduino_Core_STM32|https://github.com/stm32duino/Arduino_Core_STM32|
| |ArduinoSTL|https://github.com/mike-matera/ArduinoSTL|
||SMSIS|https://arm-software.github.io/CMSIS_5/General/html/index.html|

# NUCLEO STM32F767採用理由
- RAMが512kbyteもあり、容量が大きくなりなすいオーディオデータとフィルタを格納できるため
- FPUを搭載しており、対応ライブラリで書くことで高速な実数計算が可能になるため
- ベースはArduino言語で書け、複雑な設定はHALライブラリにアクセスすることで補えるため
- もしArduino言語では設定できない部分があってもSTM純正のCUBE IDEならば簡単に設定でき、応用が効きやすいため
- 安い

# 回路
以下にポート表を示す
杉下大河's avatar
杉下大河 committed
25

杉下大河's avatar
杉下大河 committed
26
27
28
29
30
31
32
33
34
35
|対応ピン|ポート名|目的|
|:----|:----|:----|
|PB1|A6|audioInErrPin|
|PC2|A7|audioInRefPin|
|PB2|D27|biasPin|
|PA4|A13|audioOutPin|

## テキストで簡単回路図
外部から入ってきた生の信号をADCで変換し、767内部でLMSを適応している。ADCに入力するため交流に7500Hz程度のローパスフィルタをかけた後(ADCは3.3V_MAXなので)+1.65Vバイアスをかけているが、本来ならオペアンプやトランジスタで構成すべき回路である(電圧レベルが落ちるため)

杉下大河's avatar
杉下大河 committed
36
37
![IMG_0265](/uploads/97c6494d3035407e5bbe1b2b14ebe0cf/IMG_0265.JPG)

杉下大河's avatar
杉下大河 committed
38
39
40
41
- F767-A6pin <= [+バイアス1.65V,D27,10kΩ*2] <= [簡易ローパスフィルタ7500Hz(0.1μF,220Ω)] <=audioInErr
- F767-A7pin <= [+バイアス1.65V,D27,10kΩ*2] <= [簡易ローパスフィルタ7500Hz(0.1μF,220Ω)] <=audioInRef
- F767-A13 => [十分な容量のコンデンサ] => audioOut

杉下大河's avatar
杉下大河 committed
42
43
44
45
46
47
48
49
50
51
52
53
## ファイルリスト
|ファイル名|目的|
|:----|:----|
|ANCcontroller.cpp|ANCの実装|
|ANCcontroller.h|ANCの定義|
|array.h|ArduinoSTLに存在していない(名前が同じ)ため別名で実装|
|ext_arm_lms_norm_f32.cpp|SMSISのLMSを2マイクANCに改変した実装|
|ext_arm_lms_norm_f32.h|SMSISのLMSを2マイクANCに改変した定義|
|readme.md|りどみ|
|STM32F767_ANC_IMC.ino|メインファイル|
|ws.code-workspace|VScodeのWorkspace|

杉下大河's avatar
杉下大河 committed
54
55
56
57
58
59
60
# 何が出来ているのか
二次経路及びハウリング経路の補正を行っていない、2マイク運用ANCにて正弦波のノイズキャンセルを確認したが、Cancel後の波形のRMSが0に近づくに従ってフィルタが発散してしまう。ただし、このバグは正規化LMSアルゴリズムの欠陥なので修正可能

# TODOリスト
- 2次経路の補正を加えたANCを実装する
- IMCフィードバックも実装する
- 回路をオペアンプに置き換える