■メモ

■STM32 NucleoボードのADCを使う

22_232_1nuadc.jpg
前回Lチカを行ったNucleoボードですが、今度はエフェクターのパラメータ変更を想定してADC(アナログ・デジタル・コンバータ)を使ってみます。アナログ電圧値をデジタル数値に変換することにより、ポット(可変抵抗)をどれだけ回転させたか取得できます。

実際の運用ではバックグラウンドで自動的に複数ポットの値を取得し続ける必要が出てくると思いますので、DMA(Direct Memory Access)を利用します。DMAとは、CPUを介さずデータ転送できるというよくわからないけど便利な機能らしいです。



Nucleoボード(NUCLEO-F303RE)とポットとの接続は下記の通りです。ポットは抵抗値5kΩ以上でBカーブのものがよいでしょう。

ポットの1番ピン→NucleoボードのGND
ポットの2番ピン→NucleoボードのA0
ポットの3番ピン→Nucleoボードの3V3(5Vと間違えないように!)

ポットは1つですが、2チャネル分セットアップしていきます。ソフトの基本操作については前回記事をご参照ください。変更する箇所を記載していますが、ソフトのバージョンによりデフォルト値が違うかもしれませんので、スクリーンショットも確認した方がよいだろうと思います。



<STM32CubeMX(5.0.0) Pinout & Configurationタブ>
左側列のAnalog→ADC1を開く

・中央列上側 Mode
 IN1 : IN1 Single-ended
 IN2 : IN2 Single-ended
 →右側IC画像の14番ピン(PA0)と15番ピン(PA1)が自動的に切り替わる

・中央列下側 Configuration→Parameter Settingsタブ
22_232_2nuadcss1.png
Clock Prescaler : Syncronous clock mode divided by 4
Continuous Conversion Mode : Enabled
DMA Continous Request : Enabled
Number Of Conversion : 2
 →Scan Conversion Mode がEnableに切り替わり、Rank 2 が追加される
Rank 1 Sampling Time : 19.5 Cycles
Rank 2 Channel : Channel 2
Rank 2 Sampling Time : 19.5 Cycles

・中央列下側 Configuration→DMA Settingsタブ
22_232_3nuadcss2.png
Addボタンで行が追加される
 DMA Request : ADC1
 Mode : Circular ※Normalの場合ADC値取得が1回だけとなる



<TrueSTUDIO(9.1.0)>
main.cに2箇所追加記載する

/* USER CODE BEGIN 0 */の下 ADC値を格納する配列を定義
uint16_t adcValue[2];

/* USER CODE BEGIN 2 */の下 ADC値取得開始
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcValue, 2);

デバッグ画面で一時停止中adcValueにマウスカーソルを合わせると、取得したADC値が確認できます。
22_232_4nuadcss3.png
ポットのシャフトを動かし、再開と一時停止をするとadcValue[0]が0~4095の間で変化します。ポットの2番ピンをNucleoボードのA1につないだ場合は、adcValue[1]が変化します。細かい設定はまた別の機会に見直すとして、とりあえず値を取得できているようなのでOKでしょう。



<補足情報>
・設定したチャネル数のADC値取得後に何かしらの処理を行う場合、/* USER CODE BEGIN 4 */の下に以下のように記載する
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc){
// 処理
}

・ADC値取得を中止する場合は下記関数を使う
HAL_ADC_Stop_DMA(&hadc1);



<参考ページ>
STM32でADCをやってみる2(DMAを使ったレギュラ変換) - ガレスタさんのDIY日記
STM32マイコンでADCを使ってみる話 - JP7FKFの備忘録

■タグ : マイコン

■STM32 NucleoボードのLチカ

22_231_1nu.jpg
将来的にデジタル信号処理を行うことを考えると、32ビットマイコンを使いこなすことが必要になってくると思います。今回STM32 Nucleoボードを購入したので、ボード上のLEDの点滅(Lチカ)までの手順をメモしておきます。

使用したNucleoボード:NUCLEO-F303RE(STM32F303RE搭載) ※miniBタイプのUSBケーブルが必要



<開発環境>
下記2つのソフトをインストールします。
TrueSTUDIO for STM32 9.1.0
STM32CubeMX 5.0.0 ※Java Runtime Environmentが必要

TrueSTUDIOはProバージョンが無料になったのが最近なので、SW4STM32というソフトの方が利用者が多いかもしれません。Mbedというブラウザで動くプログラミング環境もありますが、デバッグを考えると物足りなくなりそうなので採用しませんでした。

※STM32CubeMXのバージョン5.0.0に合わせて内容を修正しました。(2018年12月12日追記)



<Lチカまでの手順>
1) TrueSTUDIOを起動
2) ワークスペース指定ダイアログが出てくるので作業に使うフォルダを指定し、TrueSTUDIOを終了
  ※全角文字やスペースが入らないようにする
3) STM32CubeMXを起動
4) New ProjectのACCESS TO BOARD SELECTORボタンを押し、使用するボードを選択
  ※情報が自動更新される場合あり
5) Pinout & Configurationが表示されるがそのまま(LEDが繋がっているPA5ピンがGPIO_Outputに設定済)
6) Project ManagerのProjectを以下のように入力した後、右上のあたりGENERATE CODEボタンを押す
  Project Name:プロジェクト名を入力
  Project Location:2)で指定したTrueSTUDIOのワークスペースフォルダを選択
  ToolChain / IDE:TrueSTUDIO
  ※ファームウェアをダウンロードするか聞かれたらYesを選択
7) コード生成終了後Open Projectを選択するとTrueSTUDIOが起動する
8) プロジェクト・エクスプローラー(左列)からSrcフォルダ内main.cを開く
9) 110行目あたり「/* USER CODE BEGIN 3 */」の下に以下の記述を追加する
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
10) プロジェクト→プロジェクトのビルド(または金槌のボタン)
11) Nucleoボードを接続
12) 実行→デバッグ(または虫と矢印のボタン) 画面が切り替わる 
  ※ST-LINKを更新するよう指示が出る場合あり
13) 再開ボタンを押すとNucleoボードのLEDが点滅 終了ボタンで前の画面に戻る

■タグ : マイコン

■Raspberry Pi でのCS4272使用方法

Raspberry Pi(RPi)で音声信号向けのADCとDACを使う場合、最も手軽に使用できるICはWM8731だと思います。今回はさらなるノイズ低減を期待して、CS4272というICを試しました。



CS4272を使ったオーディオカードにTeensy Super Audio Board(SAB)というものがあり、KiCAD files and some test codeから回路図や使用ガイド等がダウンロードできます。このSABのデバイスドライバを利用するわけですが、カーネルビルドというやや面倒な作業をしないとドライバを使えるようになりません。→「rpi-update」コマンドで簡単に利用できるようになったようです。(2018年5月21日追記)

RPi公式サイト記事Kernel buildingのLocal buildingの通りに操作を行っていきます。

[1]
$ sudo apt-get install git bc
↓SAB用のカーネルソースをコピー
$ git clone --depth=1 https://github.com/whollender/linux

[2a] RPi 1, 0 の場合
$ cd linux
$ KERNEL=kernel
$ make bcmrpi_defconfig
↓ビルド開始、RPi0で14時間程度かかる
$ make zImage modules dtbs

[2b] RPi 2, 3 の場合
$ cd linux
$ KERNEL=kernel7
$ make bcm2709_defconfig
↓ビルド開始、RPi3で3時間程度かかる
$ make -j4 zImage modules dtbs

[3]
$ sudo make modules_install
$ sudo cp arch/arm/boot/dts/*.dtb /boot/
$ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
$ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
$ sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

そして再起動すると/boot/overlaysディレクトリにsuperaudioboard.dtboというファイルができています。続いて/boot/config.txtを編集します。
$ sudo nano /boot/config.txt
 以下の2行の#を外す
  #dtparam=i2c_arm=on
  #dtparam=i2s=on
 最後に以下の1行を追加
  dtoverlay=superaudioboard

再起動後、lsmodコマンドでSABドライバのモジュールが確認できる…はずですが、読み込まれていないことがわかります。モジュール情報をmodinfoコマンドで確認するとvermagic:4.9.59+という記載が出てきますが、ビルドしたカーネルのバージョン(リリース番号)をuname -r コマンドで確認すると4.9.80+となっています。強制的にモジュールを読み込ませようとしてみます。
$ sudo modprobe -f snd-soc-superaudioboard
Exec format errorというのが出てきてダメでした。

バージョン情報を編集して再ビルドするという方法を行います。参考ページ→Linux 4 Tegraにv4l2loopbackモジュールを入れる時の注意点
$ sudo nano linux/include/generated/utsrelease.h
#define UTS_RELEASE "4.9.80+"という記載があるので、4.9.80+を4.9.59+(RPi 2, 3の場合は4.9.80-v7+→4.9.59-v7+)へ変更した後、もう一度[2a](または[2b])と[3]をやり直し再起動します。一度ビルドしているので早く終わります(未確認ですが、RPi3で1時間未満)。
※後から確認すると、再ビルド後のバージョンは4.9.80+でした。どこか記憶違いをしている部分があるかもしれません。



RPiとCS4272との接続は下図です。SABと同じように24.576MHzの水晶発振子と39pFのコンデンサを使います。
22_216_1cs.png

aplay -l コマンドでサウンドカードの確認ができます。接続が正しければ、CS4272がSABとして認識されているはずです。音量等の調節はalsamixerコマンドでできます(hキーでヘルプ表示)。今後特に問題が出てこなければ、自作デジタルエフェクターRasPd3に採用する予定です。→FILT+とVCOMピンが0Vになるという問題が解決できず、ボツになりました。(2018年5月7日追記)

■タグ : RaspberryPi

■Raspberry Pi zero 設定メモ

SSH接続とファイル操作ができるようになるまでの自分用設定メモです(太字表記はコマンド)。
Raspberry Pi 3, Raspberry Pi zero W の設定メモはこちら
※Raspberry PiやRaspbianの仕様変更によりうまくいかなくなる可能性があります。



Raspbian Stretch Liteダウンロード、Win32 Disk ImagerでmicroSDカードに書き込み
/boot/ ディレクトリに ssh という名前のファイルを置いておく



データ通信できるmicroUSBケーブルをPCと接続するだけで通信可能(OTGモード)
WindowsからTera Termで raspberrypi.local にSSH接続
参考ページ→ノートパソコンだけで raspberry pi zero をセットアップする方法

<インターネット接続>
参考ページ→SSH接続で raspberry pi zero の設定を行う1(インターネットに接続する)

<IPアドレス固定>
$ ifconfig (usb0 の inet addr: を確認)
$ sudo nano /etc/dhcpcd.conf
以下を追記(割り当てられたアドレスが192.168.137.99の場合)
interface usb0
static ip_address=192.168.137.99
static routers=192.168.137.1
static domain_name_servers=192.168.137.1

再起動後、WindowsからTera Termで固定したIPアドレスにSSH接続



<アップデート>
$ sudo apt-get update
$ sudo apt-get upgrade

<初期設定>
$ sudo raspi-config
Change User Password
Boot Options > Desktop / CLI > Console Autologin
Localisation Options > Change Timezone > asia > tokyo
※Pure Dataと相性が悪そうなので日本語表示しない

<ルートパスワード変更>
$ sudo passwd root

<Samba設定>
$ sudo apt-get install samba
$ sudo nano /etc/samba/smb.conf
Samba設定参考サイト→ツール・ラボ » 第14回 Raspberry Piのファイルサーバ設定をする
※プログラムが実行可能なように、ファイルのパーミッションも0775にしておく
Sambaのユーザ登録
$ sudo smbpasswd -a pi

Windowsのエクスプローラーのアドレスに\\raspberrypi\piを入力、ユーザー名・パスワードを入れアクセス

■タグ : RaspberryPi

■Raspberry Pi 3, Raspberry Pi zero W 設定メモ

SSH接続とファイル操作ができるようになるまでの自分用設定メモです(太字表記はコマンド)。
Raspberry Pi zero の設定メモはこちら
※Raspberry PiやRaspbianの仕様変更によりうまくいかなくなる可能性があります。最終更新:2018年2月1日



Raspbian Stretch Liteダウンロード、Win32 Disk ImagerでmicroSDカードに書き込み
/boot/ ディレクトリに ssh という名前のファイルと、以下の内容の wpa_supplicant.conf という無線LAN設定ファイルを置いておく
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
psk="password"
}

起動後、WindowsからTera Termで raspberrypi.local にSSH接続(ユーザー名 pi パスワード raspberry)

無線LANのパスワードをわかりにくくする場合、以下の操作をしておく
$ sudo bash -c 'wpa_passphrase "SSID" "password" >> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
すでに記載がある「network={…}」や「#psk="password"」を消去

<IPアドレス固定>
$ sudo nano /etc/dhcpcd.conf
以下を追記(ルーターのアドレスが192.168.10.1の場合)
interface wlan0
static ip_address=192.168.10.99/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

再起動後、WindowsからTera Termで固定したIPアドレスにSSH接続
※コピー・ペーストはAltキー
※キーボードの↑↓キーで前に使ったコマンドを呼び出せて便利
自動ログイン参考サイト→自動ログインする方法



<アップデート>
$ sudo apt-get update
$ sudo apt-get upgrade

<初期設定>
$ sudo raspi-config
Change User Password
Boot Options > Desktop / CLI > Console Autologin
Localisation Options > Change Timezone > asia > tokyo
※Pure Dataと相性が悪そうなので日本語表示しない

<ルートパスワード変更>
$ sudo passwd root

<Samba設定>
$ sudo apt-get install samba
$ sudo nano /etc/samba/smb.conf
Samba設定参考サイト→ツール・ラボ » 第14回 Raspberry Piのファイルサーバ設定をする
※プログラムが実行可能なように、ファイルのパーミッションも0775にしておく
Sambaのユーザ登録
$ sudo smbpasswd -a pi

Windowsのエクスプローラーのアドレスに\\raspberrypi\piを入力、ユーザー名・パスワードを入れアクセス

■タグ : RaspberryPi

管理人

ブログ内検索

メールフォーム

当ブログに関するお問い合わせはこちらからお願いします。 ※FAQ(よくある質問)もお読みください。

お名前
メールアドレス
件名
本文

アクセスカウンター