goo blog サービス終了のお知らせ 

寝ても覚めてもPSoC

電子工作とマイコンをやりはじめました。
ど素人ですので配信する情報の取り扱いには十分注意してください。

サーボ8ch制御[GWS S03T]

2009年06月12日 | PSoC
PSoCでサーボモーターを制御してみよう!目指せ、二足歩行ロボ!!
って事で、ちょこちょことやってましたが、とりあえず形になったのでアップします。

PWMを3つ使ってサーボモーターを8chまで制御できます。(サーボ入手の関係で6chまでしか試していませんけど...)

いろいろググると、サーボは20ms周期でそのうち2.5msまでのパルス幅で回転角度を決定するモーターらしい。
※センターは1.5ms

という事は20ms-2.5msの17.5msは使われていない。その空いている時間に他のサーボを制御すれば、少ないリソースでたくさんサーボを扱えるという。
なるほど~、つまり20ms/2.5ms=8で8chはいけそう。LEDのダイナミック点灯みたいですね。

↑次の周期でCH:0ってなってますが、CH:1の間違いです。

以下が使用したGWS S03Tの情報(データシートより抜粋)です。
■GWS S03T
・Operating voltage : DC4.8V - 7.5V Max.
・Operating temperature : -20°C ~ +60°C
・Pulse width range (Frame time : 16-23 ms)
 Max : 2.1 ms
 Min : 0.9 ms
・Horn position (rotate angle)
PulseW Horn position
 0.8 ms Safety zone for CW
 0.9 ms +60 degrees ± 10° CW
 1.5 ms 0 degree(center position)
 2.1 ms -60 degree ± 10° CCW
 2.2 ms Safety zone for CCW

PSoCの制御ですが、とりあえずRow_Outputが4つまでなので、PWM1つにサーボ4つを受け持たせ、全体の管理用として一つのPWMを使用しました。これでPWMは3つ使用します。(なんか無駄なような気がする...)
各サーボへの信号の動的切り替え(Row_Output)は DCB**OU レジスタを直接書き換えました。他に良い方法があれば教えてください。
たぶん、絶対もっとスマートな方法があると思います...

実際に歩かせるには、まだまだかかりそうです。電源や歩行シーケンスやフレームなど。
ゆっくりやっていこうと思いますが、ちょっと手を出すのが早かったかな~?!と思う今日この頃です。トホホ...

プロジェクトです。
デザイナ: 5.0
デバイス: CY8C29466
コンパイラ: Hi-Tech C
PSoC_ServoCtrl.lzh