北の国から

忘れたことを思い出す為の記録

STM32F3 HALでエンコーダ入力

はじめに

エンコーダのカウントをしたくなった時に割と設定とか忘れがちなのでまとめときます.

CubeMx上での設定

Pinoutタブ

基本的にエンコーダでA,B相をカウントするときはCH1とCH2を使うはずです.(それ以外知らない)

なのでCH1,CH2どちらも揃っているタイマを選びます.

左側ツリーよりTIMx(xは任意の数字.TIM1とかTIM4とかいろいろあるよね)を展開し,“Combined Channels"以外を"Disable"に設定.

その後,“Combined Channels"を"Encoder Mode"に設定します.


設定すると右側のICの絵で対応しているピンが緑に変わります.

CH1はA相,CH2はB相に繋ぎます.(当然ですが逆だと値も逆になります)

Configuratinタブ

“Control"欄のTIMx(さっき設定したタイマ)を開き,"Parameter Settings"タブへ行くと,エンコーダ入力に関する諸設定ができるようになっているはずです.

僕はいつも

Period : 65535 (16bitカウンタの最大値)

Encoder Mode :Encoder Mode TI1 and TI2 (4逓倍)

の部分だけ変更しています.

プログラム上での扱い

エンコーダカウントの開始

HAL_TIM_Encoder_Start(&htimx,TIM_CHANNEL_ALL);

エンコーダカウントの停止

HAL_TIM_Encoder_Stop(&htimx,TIM_CHANNEL_ALL);

カウント値の読み込み(iは適当な変数とする)

i = TIMx -> CNT;

このようにするとエンコーダの値を取得できます.

もしかしたらもっといい値の読み方あるかもしれないので知ってる方、教えてください…

追記

値取得用関数の定義

毎回TIMx->CNTで読み込むのは見た目気持ち悪い&ぱっと見わかりにくいので

int getTIMxCNT(){
   return TIMx->CNT;
}

(xは適宜変える)
とか定義しておけば少し見やすく、わかりやすくなりますね.

nucleoを割ってフリスクにいれた話(雑ver)

はじめに

皆さんはnucleoというstm32の評価ボードをご存知でしょうか.

いくつか種類があって,ピン数でnulceo32とかnucleo64とかに分別されます.

nulceoボードには専用の書き込み回路のst-linkが内蔵されており,nucleo64ボードではそれば分離できるようになっています.

今回は分離したst-linkをFRISKケースに閉じ込めた話です.

写真等は手元にないので後々記載します.

きっかけ

先週の木曜日(2017/3/23)にあった「関東春ロボコン」に行った際,

出展されていたSTMicroelectronicsさんからnucleo64 STM32F411REボードのサンプルをいただきました.

以前から私はSTM32を扱っていたのですが,書き込みにはdiscoveryボード内蔵のst-linkを用いていました(これは分離不可)

小さいst-linkが欲しかったのでこれは良い機会だと思い、帰って早速割ってみることにしました.

ついでにfriskケースに入れちゃいました.

出来たのはこんなやつです.

準備

準備するものは,

  • nulceoボード
  • はんだごて
  • 好きなコネクタ
  • ヤスリ
  • friskケース
  • ドリル(3キリ)
  • 3mmLED(赤1,緑1)

です.

nulceoへの加工

まずはnucleoからst-linkを分離します.気合で割ります.

割れたらバリをやすった後に余計なピンを取り除きます.



そのままのサイズだとfriskケースに入らないので,基板を切ります.

両側5mmずつくらいなら切っても問題ないはずです.

切ったらまたバリを取りましょう.



SWD部分に好きなコネクタをつけます.

私はピンヘッダをつけました.

なるべく横から端子が出るようにしたほうがかっこいいです.



friskケースに入れるとLEDが見えなくなるので取り除きます.

これで一旦終了です.

friskケースの加工と組付け

friskケース内部の壁は取り除きます.

friskケースの側面にちょうどよく穴を開け,mini-B端子とSWDのコネクタが見えるようにします.

また,ケース上部に3キリでLEDを出す穴を2つ開けます.

ケース内にst-linkを入れ、両面テープ等で固定します.

開けた穴に3mmのを埋め込み,パッドにハンダ付けします.

1番パッドに赤のカソード,2番にアノード

3番に緑のカソード,4番にアノードをつけます.

LEDをホットボンドで固定し,フタを閉めて完成です.

終わりに

作り方を忘れないようにささっと書きました.

あとで詳しく編集し直します.(画像とか)

秋月に売っているSTM32チップ周辺の接続について

はじめに

秋月電子で売っているstmチップには2つ種類があります.

stm32f303k8t6

stm32f042k6t6

どちらにもnucleo32ボードが存在するので,初めて触る方はそっちを勝ったほうがいいと思います.

今回はチップを扱う場合に周辺のピンを今の僕がどうしているかを述べていきます.

基本的にstが公表しているnucleoの回路図を参考にしています.

パッケージ

f303もf042もどちらもLQFP32というパッケージです.

ブレッドボード等で扱う場合は変換基板を用いています.

この変換器版は裏面がSMDのユニバーサル基板となっているので色々と便利です.

各ピンの処理

未使用ピンの処理

未使用のピンは NC としています.

VDDピンの処理

1,17ピンがVDDとなります.

このマイコンへの供給電圧は3.3Vですので,レギュレータ等で3.3Vを作って入れてやります.

VDDはそれぞれVSSとの間に0.1uFのコンデンサを挟んでいます(パスコン)

VDDAピンの処理

5ピンがVDDAです.

nucleoのデータシートではインダクタ等を挟んでいますがぼくの場合怠慢のためにそのままVDDとつないでいます.

VSS

特に無し.

強いて言えばモーター系統とは電源を分離する.

NRST

4ピンがNRSTです.

NRSTはリセットピンで,0Vになるとリセットします . 僕はスイッチを接続し,リセットスイッチを設けています.

また、SWDの5ピンへと接続します.

SWD関係

23,24ピンがSWD用のピンです.

23ピン : SWDIO : SWDの3ピン

24ピン : SWDCLK : SWDの4ピン

また,書き込みを行う際は電源を投入してからします.

BOOT0

31ピンがBOOT0です.

特殊な用事がないならばBOOT0は10kΩ挟んでVSSで良いと思います.

クロック

2,3ピンが外部クロック用のピンです. 私は外部でクロックを準備するのがだるかったので主に内部クロックを用いています.

SWD用のピンのconfig

名称
1 VDD_TARGET
2 SWCLK
3 GND
4 SWDIO
5 NRST
6 SWO

上の表のようになっています.

しかし,私はSWOは無視して1-5ピンを接続しています.

最後に

st-link等で書き込む際は、マイコン側に電源を供給しておかないと書き込めないので注意しましょう.

nucleoボードならusbから電源を供給してくれるので楽です.

では.