readme.md 2.9 KB
Newer Older
杉下大河's avatar
杉下大河 committed
1
2
# EmbeddedANC-STM32F767
このシステムは組み込み用開発ボードNUCLEO STM32F767にANC機能を組み込んだ試作品である。
杉下大河's avatar
杉下大河 committed
3
またWikiにはその他試作に利用したボードのメモ書きと開発を中止した理由を掲載している。場合によってはSTM32である必要がないため、一度目を通して貰えるとありがたい。詳しくは[Wiki](https://gl.cvd.morson.space/taiga.sugishita/EmbeddedANC-STM32F767/wikis/home)へ。
杉下大河'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
36
37
38
39
40
41
42
43
44
45
46
|対応ピン|ポート名|目的|
|:----|:----|:----|
|PB1|A6|audioInErrPin|
|PC2|A7|audioInRefPin|
|PB2|D27|biasPin|
|PA4|A13|audioOutPin|

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

- 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

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

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