フォト
2019年7月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

« 次はSTM32ボードを積極的に使ていきたい(18) - Tiny BASIC(4) 内部RTC時刻を電池で保持 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(2) - ゲームパッドの利用 »

2017年5月11日 (木)

豊四季 Tiny BASIC for Arduino STM32の動作テスト(1) - サーボモータの利用

(2019/02/18 内容を修正しました)

現在取り組んでいる「豊四季 Tiny BASIC for Arduino STM32」
色々と機能が充実してきましたが、テスト不十分です。

そこで動作確認テストとして、BASICにてプログラムを色々と作成して
検証して行こうと思います。

第一弾として、PWMによるサーボーモーターの制御をやってみました。
実験として、アナログジョイスティックでサーボ―モータを自由に動かしてみます。

01

利用したパーツ

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

  Dscn6601

利用方法については秋月電子の製品紹介ページの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を探すと同じようなものが販売されているようです。

Dscn6602

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に対応しています。

  まとめると、次の対応表となります。
03
   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)
  です。

・ 45~47行は画面に角度を表示しています。
   パルス幅指定値をMAP関数で-90°~ 90°の範囲に変換して表示しています。


実際に動かしてみると、
モーターの消費電力が大きいため、Blue Pillボードの5Vからの電源供給では、
PS/2キーボードが不安定になったり、フリーズしたりしました。
電源を別から供給することで安定しました。
モーター制御は電源周りには注意が必要です。

« 次はSTM32ボードを積極的に使ていきたい(18) - Tiny BASIC(4) 内部RTC時刻を電池で保持 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(2) - ゲームパッドの利用 »

arduino」カテゴリの記事

ARM」カテゴリの記事

STM32」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« 次はSTM32ボードを積極的に使ていきたい(18) - Tiny BASIC(4) 内部RTC時刻を電池で保持 | トップページ | 豊四季 Tiny BASIC for Arduino STM32の動作テスト(2) - ゲームパッドの利用 »