- 必要なコンポーネント
- 3Dプリントされたロボットアームの準備
- 回路図
- ロボットアーム用のLPC2148のプログラミングに関連する手順
- コーディングの説明
- プッシュボタンを使用して回転するサーボモーターを選択する
- ピックアンドプレースロボットアームの動作
ロボットアームは、魅力的なエンジニアリング作品の1つであり、人間の腕と同じように複雑なことを行うために、これらのものが傾いたりパンしたりするのを見るのは常に魅力的です。これらのロボットアームは、溶接、穴あけ、塗装などの激しい機械的作業を行う組立ラインの産業で一般的に見られます。最近、複雑な外科手術を行うために、高精度の高度なロボットアームも開発されています。したがって、このチュートリアルでは、ARM7-LPC2148マイクロコントローラーを使用して、いくつかのポテンショメーターを手動で制御してオブジェクトを選択および配置するための簡単なロボットアームを作成しましょう。
このチュートリアルでは、thingiverseの手順に従って構築された3DプリントされたロボットARMを使用します。ARMは、ロボットARMの動きに4サーボモーターを使用しています。プリンターをお持ちでない場合は、Arduinoロボットアームプロジェクト用に作成したような単純なボール紙で腕を作成することもできます。インスピレーションについては、Arduinoを使用して以前に構築したRecord and Play RoboticArmを参照することもできます。
では、プロジェクトの準備をしましょう。
必要なコンポーネント
- 3DプリンターロボットARM
- ARM7-LPC2148
- SG-90サーボモーター(4)
- 10kポテンショメータ(4)
- 押しボタン(4)
- LED(4)
- 5V(1A)DC電源アダプター
- 抵抗器(10k(4)、2.2k(4))
- ブレッドボード
- 接続線
3Dプリントされたロボットアームの準備
このチュートリアルで使用される3D印刷されたロボットアームは、Thingiverseで利用可能なEEZYbotARMによって提供された設計に従って作成されました。3Dプリントされたロボットアームを作成するための完全な手順と、ビデオを使用した組み立ての詳細は、上記の共有リンクにあります。
これは、4つのサーボモーターで組み立てた後の私の3Dプリントされたロボットアームの画像です。
回路図
次の画像は、ARMベースのロボットアームの回路接続を示しています。
プロジェクトの回路接続は簡単です。別の5VDC電源アダプターを使用してサーボモーターに電力を供給してください。ポテンショメータとプッシュボタンには、LPC2148マイクロコントローラから入手可能な3.3Vを使用できます。
ここでは、4つのポテンショメータを備えたLPC2148の4つのADCピンを使用しています。また、サーボモーターのPWMピンに接続されたLPC2148の4つのPWMピン。また、4つの押しボタンを接続して、操作するモーターを選択します。したがって、ボタンを押した後、ポテンショメータを変更してサーボモーターの位置を変更します。
LPC2148のGPIOに接続されているプッシュボタンの一端は10kの抵抗を介してプルダウンされ、他端は3.3Vに接続されています。また、4つのLEDが接続され、位置を変更するためにどのサーボモーターが選択されているかを示します。
4つのサーボモーターとLPC2148間の回路接続:
LPC2148 | サーボモーター |
P0.1 | SERVO1(PWM-オレンジ) |
P0.7 | SERVO2(PWM-オレンジ) |
P0.8 | SERVO3(PWM-オレンジ) |
P0.21 | SERVO4(PWM-オレンジ) |
4ポテンショメータとLPC2148間の回路接続:
LPC2148 | ポテンショメータのセンターピン 左ピン–LPC2148の0VGND 右ピン–LPC2148の3.3V |
P0.25 | 電位差計1 |
P0.28 | 電位差計2 |
P0.29 | 電位差計3 |
P0.30 | 電位差計4 |
LPC2148を使用した4つのLEDの回路接続:
LPC2148 | LEDアノード(すべてのLEDのカソードはGNDです) |
P1.28 | LED1(アノード) |
P1.29 | LED2(アノード) |
P1.30 | LED3(アノード) |
P1.31 | LED4(アノード) |
LPC2148を使用した4つの押しボタンの回路接続:
LPC2148 | 押しボタン(プルダウン抵抗10k付き) |
P1.17 | 押しボタン1 |
P1.18 | 押しボタン2 |
P1.19 | 押しボタン3 |
P1.20 | 押しボタン4 |
ロボットアーム用のLPC2148のプログラミングに関連する手順
このロボットアームのプログラミングを行う前に、LPC2148でPWMを生成し、ARM7-LPC2148でADCを使用する方法について知っておく必要があります。そのためには、サーボモーターとLPC2148のインターフェースに関する以前のプロジェクトとLPC2148でのADCの使用方法を参照してください。
LPC2148を使用したADC変換
サーボモーターの位置を制御するためのPWM出力を生成するためのデューティサイクル値を設定するためのADC値を提供する必要があるため。ポテンショメータのADC値を見つける必要があります。4つのサーボモーターを制御するための4つのポテンショメータがあるため、LPC2148の4つのADCチャネルが必要です。このチュートリアルでは、LPC2148にそれぞれ存在する4、1、2、3のADCチャネルのADCピン(P0.25、P0.28、P0.29、P0.30)を使用しています。
LPC2148を使用したサーボモーターのPWM信号の生成
サーボモーターの位置を制御するためのPWM信号を生成する必要があるため。PWMのデューティサイクルを設定する必要があります。ロボットアームに接続された4つのサーボモーターがあるため、LPC2148の4つのPWMチャネルが必要です。このチュートリアルでは、LPC2148にそれぞれ存在する3、2、4、5のPWMチャネルのPWMピン(P0.1、P0.7、P0.8、P0.21)を使用しています。
LPC2148への16進ファイルのプログラミングとフラッシュ
プログラムのARM7-LPC2148に我々は必要がuVisionをKEIL&フラッシュにHEXコードをLPC2148フラッシュマジックツールに必要とされています。ここでは、USBケーブルを使用してマイクロUSBポートを介してARM7スティックをプログラムします。私たちは、Keil社を使用してコードを記述し、hexファイルを作成し、HEXファイルを使用してARM7スティックにフラッシュされるフラッシュマジックを。keiluVisionとFlashMagicのインストールとその使用方法の詳細については、「ARM7 LPC2148マイクロコントローラー入門」リンクをたどり、KeiluVisionを使用してプログラムしてください。
コーディングの説明
このロボットアームプロジェクトの完全なプログラムは、チュートリアルの最後にあります。それでは、プログラミングについて詳しく見ていきましょう。
GPIO、PWM、ADCを使用するためのLPC2148のPORTの構成:
PINSEL1レジスタを使用してADCチャネルを有効にします-ピンP0.25、P0.28、P0.29、P0.30のADC0.4、ADC0.1、ADC0.2、ADC0.3。また、ピンP0.21(1 << 10)のPWM5の場合。
#define AD04(1 << 18)// P0.25のAD0.4関数を選択 #define AD01(1 << 24)// P0.28のAD0.1関数を選択 #define AD02(1 << 26)/ /P0.29のAD0.2関数を選択 #defineAD03(1 << 28)// P0.30のAD0.3関数を選択PINSEL1- = AD04 --AD01 --AD02 --AD03-(1 << 10);
PINSEL0レジスタを使用して、LPC2148のピンP0.1、P0.7、P0.8のPWMチャネルPWM3、PWM2、PWM4を有効にします。
PINSEL0 = 0x000A800A;
PINSEL2レジスタを使用して、LEDと押しボタンの接続に使用されるPORT1のすべてのピンのGPIOピン機能を有効にします。
PINSEL2 = 0x00000000;
LEDピンを出力として、押しボタンピンを入力として作成するには、IODIR1レジスタを使用します。(入力の場合は0、出力の場合は1)
IODIR1 =((0 << 17)-(0 << 18)-(0 << 19)-(0 << 20)-(1 << 28)-(1 << 29)-(1 << 30 )-(1 << 31));
ピン番号は次のように定義されていますが
#define SwitchPinNumber1 17 //(P1.17に接続) #define SwitchPinNumber2 18 //(P1.18に接続) #define SwitchPinNumber3 19 //(P1.19に接続) #define SwitchPinNumber4 20 //(P1に接続 )20)#define LedPinNumber1 28 //(P1.28に接続) #define LedPinNumber2 29 //(P1.29に接続) #define LedPinNumber3 30 //(P1.30に接続) #define LedPinNumber4 31 //(に接続P1.31)
ADC変換設定の構成
次に、ADC変換モードとADCのクロックがAD0CR_setupレジスタを使用して設定されます。
unsigned long AD0CR_setup =(CLKDIV << 8)-BURST_MODE_OFF-PowerUP; // ADCモードの設定
CLCKDIV、バーストモード、およびPowerUPは次のように定義されます。
#define CLKDIV(15-1) #define BURST_MODE_OFF(0 << 16)//オンの場合は1、オフの場合は0 #define PowerUP(1 << 21)
ADC変換用クロックの設定(CLKDIV)
これは、ADCのクロックを生成するために使用されます。4Mhz ADCクロック(ADC_CLOCK = PCLK / CLKDIV)ここで、「CLKDIV-1」が実際に使用されます。この場合、PCLK = 60mhzです。
バーストモード(ビット-16):このビットはバースト変換に使用されます。このビットが設定されている場合、ADCモジュールはSELビットで選択されたすべてのチャネル(SET)の変換を行います。このビットに0を設定すると、BURST変換が無効になります。
パワーダウンモード(ビット-21):これはADCをオンまたはオフにするために使用されます。このビットで(1)を設定すると、ADCはパワーダウンモードから抜け出し、動作可能になります。このビットをクリアすると、ADCの電源がオフになります。
PWM変換設定の構成
まず、PWMTCRレジスタを使用してPWMのカウンタをリセットして無効にし、プリスケーラ値を使用してPWMタイマープリスケールレジスタを設定します。
PWMTCR = 0x02; PWMPR = 0x1D;
次に、1サイクルのカウントの最大数を設定します。これは、Match Register 0(PWMMR0)で実行されます。20ミリ秒のPWM波なので20000あるので
PWMMR0 = 20000;
その後、マッチレジスタにデューティサイクルの値を設定した後、PWMMR4、PWMMR2、PWMMR3、PWMMR5を使用します。ここでは、0ミリ秒(Toff)の初期値を設定しています。
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
その後、PWM一致制御レジスタを設定して、一致レジスタが発生したときにカウンタをリセットします。
PWMMCR = 0x00000002; // MR0の一致時にリセット
その後、一致値の使用を有効にするためのPWMラッチイネーブルレジスタ(PWMLER)
PWMLER = 0x7C; // PWM2、PWM4、PWM4、PWM5のラッチイネーブル
PWMタイマー制御レジスタ(PWMTCR)のビットを使用してタイマーカウンターをリセットすると、PWMが有効になります。
PWMTCR = 0x09; // PWMとカウンタを有効にします
次に、PWM出力を有効にし、PWM制御レジスタ(PWMPCR)でPWMをシングルエッジ制御モードに設定します。
PWMPCR = 0x7C00; // PWM2、PWM4、PWM4、PWM5、シングルエッジ制御PWMを有効にする
プッシュボタンを使用して回転するサーボモーターを選択する
4つの異なるサーボモーターを回転させるために使用される4つのプッシュボタンがあります。1つの押しボタンを選択し、対応するポテンショメータを変更することにより、ADC値がデューティサイクルを設定し、対応するサーボモーターがその位置を変更します。押しボタンスイッチのステータスを取得するには
switchStatus1 =(IOPIN1 >> SwitchPinNumber1)&0x01;
したがって、どのスイッチ値がHIGHであるかに応じて、ADC変換が行われ、ADC(0から1023)値の変換が成功した後、(0から2045)に関してマッピングされ、デューティサイクル値が次のように書き込まれます。サーボモーターに接続された(PWMMRx)PWMピン。また、どのスイッチが押されたかを示すためにLEDがHIGHになります。以下は、最初のプッシュボタンの例です
if(switchStatus1 == 1) { IOPIN1 =(1 <
ピックアンドプレースロボットアームの動作
コードをLPC2148にアップロードした後、任意のスイッチを押し、対応するポテンショメータを変更して、ロボットアームの位置を変更します。
各スイッチとポテンショメータは、ベースの左または右の動き、上または下の動き、前方または後方の各サーボモーターの動きを制御し、次にグリッパーが動きを保持および解放します。詳細な作業ビデオを含む完全なコードを以下に示します。