豊四季 Tiny BASIC for Arduino STM32の動作テスト(1) - サーボモータの利用
(2019/02/18 内容を修正しました)
現在取り組んでいる「豊四季 Tiny BASIC for Arduino STM32」、
色々と機能が充実してきましたが、テスト不十分です。
そこで動作確認テストとして、BASICにてプログラムを色々と作成して
検証して行こうと思います。
第一弾として、PWMによるサーボーモーターの制御をやってみました。
実験として、アナログジョイスティックでサーボ―モータを自由に動かしてみます。

利用したパーツ
・サーボーモーター TOWER PRO SG90
Aliexpressで入手したものです。秋月電子やAmazonでも入手出来ます。

利用方法については秋月電子の製品紹介ページのPDFを参照参考にしました。
データシートによると、
・利用電圧 4.8V ~ 5V
・PWMのパルス 50Hz (周期 20ms)
・-90°~ 0° ~ 90°の可動域
・Duty Cycle 0.5ms ~ 1.45ms ~ 2.4ms が上記の範囲に対応
とのことです。
このサーボ―モータについえては、下記の解説が参考になると思います。
・Arduinoで学ぶ基礎からのモーター制御:
基礎からのマイコンモーター制御(6):PWMを使ったサーボモーターの制御
・アナログジョイスティック
Aliexpressで入手したものです。1個100円くらいだったと思います。
amazonを探すと同じようなものが販売されているようです。

X,Y方向のアナログ入力、ヘッドを押すとボタンのON/OFF入力が出来ます。
今回はX方向のアナログ入力のみ利用します。
ジョイスティックの操作は電圧として0~3.3Vで出力されます。
結線
BluePillボードとの接続
・SG90 BluePill
VCC(赤) => 5V
GND(茶) => GND
PWM (オレンジ) => PA8 (PWM出力)
・アナログジョイスティック BluePill
VCC => 3.3V
GND => GND
X => PB0 (アナログ入力)
アナログジョイスティックでサーボ―モータを動かすプログラム
1 'サーボモーターセイギョ
5 CLS
10 GPIO PB0,ANALOG
20 GPIO PA8,PWM
30 P=MAP(ANA(PB0),0,4095,102,491)
40 POUT PA8,P,50
45 D=MAP(P,102,491,-90,90)
47 LOCATE 0,0:?#3,D
50 GOTO 30
動作の様子
プログラムの説明
・ 10行、20行は利用するIOピン PB0、PA8の設定です。
PB0をアナログ入力、PA8をPWM出力に設定しています。
・ 30行はMAP関数を使って、
アナログジョイスティックからANA()関数で読み取ったアナログ値 0 ~ 4095(=0~3.3V)の値を
102 ~ 491 の範囲の値にスケール変換した値を変数Pに代入しています。
このPは、PWMのパルス幅でサーボ―モータの角度を指定する値です。
ジョイスティックの操作で取得する値は 0~4095 となります。
この値をサーボ―モータの -90°~ +90°に対応されば良いわけです。
一方、
-90°~ +90°は、PWMのパルス幅 0.5ms ~ 2.4ms に対応します。
更に更に、
パルス幅 0.5ms ~ 2.4ms は、PWM出力コマンド POUTの第2引数のパルス幅指定の
102 ~ 491に対応しています。
まとめると、次の対応表となります。
POUTのパルス幅の値は、20ms が 4095(=100%)なので、
0.50msは 4095*0.50/20 = 102
1.45msは 4095*1.45/20 = 297
2.40msは 4095*2.40/20 = 491
と求めています。
・ 40行のPOUTで50Hz(周期20ms)で0.50~2.40ms幅のパルスを出力しています。
POUTコマンドの書式は、
POUT 出力ピン番号, パルス幅(0:0%~4095:100%) , 周波数(Hz)
です。
パルス幅指定値をMAP関数で-90°~ 90°の範囲に変換して表示しています。
実際に動かしてみると、
モーターの消費電力が大きいため、Blue Pillボードの5Vからの電源供給では、
PS/2キーボードが不安定になったり、フリーズしたりしました。
電源を別から供給することで安定しました。
モーター制御は電源周りには注意が必要です。
« 次はSTM32ボードを積極的に使ていきたい(18) - Tiny BASIC(4) 内部RTC時刻を電池で保持 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(2) - ゲームパッドの利用 »
「arduino」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
「ARM」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- PocketGoで遊んでみる(1)(2020.03.24)
- Arduino用 MML文演奏ライブラリの作成 その1(2019.04.01)
- BluePillボードで4桁7セグLEDの制御(2019.03.21)
「STM32」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- 「Arduino STM32 リファレンス 日本語版」が2万アクセス突破!(2021.03.26)
- SPI接続フラッシュメモリモジュールを入手しました(2020.05.13)
- Arduino STM32でキャラクタ液晶ディスプレイを使う(2019.06.01)
« 次はSTM32ボードを積極的に使ていきたい(18) - Tiny BASIC(4) 内部RTC時刻を電池で保持 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(2) - ゲームパッドの利用 »

コメント