サーボドライバ

はじめに

 サーボドライバは、サーボモータを制御するためのモジュールです。
 サーボモーターは、主にGWS S03T 2BBMGとHSR-5980SGを使用します。
 それぞれのパルス幅の範囲は,1.5ms±0.8ms(A08),1.5ms±0.5ms(A04)となっており,パルスの周期は20msなっています.
 

注意点

 サーボドライバのアドレス設定は,基本アドレスの0x06に4bitDIPスイッチの値を4回左シフトした値を足したものになります.
 
>例)Address = 0b0000 0110(基本アドレス:0x06) + xxxx(4bitDIPスイッチの値)  0000
4bitDIPスイッチの値が0b0010の場合,0b0010 << 4 = 0b0010 0000となるため,
サーボドライバのアドレス = 0b0000 0110 + 0b0010 0000 = 0b0010 0110 = 0x26となる.
下にDIPスイッチがOFFの場合の画像を記載します.

回路

 ・回路図

 回路図はBSch3Vで作成しました.ファイル名は,servo2012.CE3となっています.下に回路図を記載します.

 ・回路の説明

 上に書いたように,サーボのパルスの周期は20msであるため,1つのサーボにつき2.5msを割り当てることで,1つのPWM端子で8つのサーボを制御できる.
PWM信号の分配器には,74HC238を使用します.常にG1にPWMを,G2A,Bは0の状態にします.そして,A,B,Cの組み合わせによって,Y0~Y7のどこに信号を流すかを決定します.
詳しくは74HC238のデータシートを見てください.

基板

 基板図は,mbe(Minimal Board Editor) を使用して作成しました.ファイル名は,servo2012.mb3となっています.

 ・表面

 

 ・裏面

 

 プログラム

 ・概要

 サーボドライバのプログラムは,高速PWM制御,flash memoryの読み込みとマスターからのコマンドとデータの受信を主に行っている.
以下にそれぞれの項目についてまとめる.

 ・高速PWM制御(ATmega168)

 TCNT1は0からICR1の値になるまでカウントする.つまり,ICR1によって,パルス幅を設定するということです. 
(今回はICR1の値を50000に設定して,TCNT1は0~50000までカウントされます)

そして,OCR1Aの値によってOC1AのON,OFFを決めます.
OCR1Aの値または,ICR1の値とTCNT1の値が同じになった時に,OC1Aをセットまたはクリアします.
OC1Aがセットかクリアどちらの状態で始まるのかはCOM1Aで決めます.
(今回はセットされた状態から始めるので,COM01Aの値は0b10です。【非反転動作】)

 WGM1では波形生成種別を設定する※データシートに表が載ってます.
(今回はICRをTOP値とする高速PWM制御をするのでWGM1 3~0は0b1110に設定してください)

COM01AやWGM1はTCCR1AとTCCR1Bの中にあります.(データシートに書いてあります)

 ・flash memoryの読み込み

 flash memoryへの読み込みを行うには,まずavr/pgmspace.hをインクルードします.
 

 

ċ
servo2012.CE3
(62k)
Robo Kirarin,
2012/06/09 1:42
ċ
servo2012.mb3
(97k)
Robo Kirarin,
2012/06/09 1:42
ċ
ユーザー不明,
2013/09/14 5:09
Comments