No.1
- 回答日時:
>どなたか簡単で良いので教えてください。
まず「ATmega168」の入出力ポートに、何をどう繋いだか提示して下さい。
「ATmega168」は「汎用マイコン」ですから、入出力ポートに何をどう繋いだかは、組み立てた本人(つまり質問者さん)にしか判りません。
次に「GWServo S03T 2BB MG」と「ATmega168の入出力ポート」のスペックを提示して下さい。
「ATmega168」の入出力ポートに「GWServo S03T 2BB MG」を繋いだとしても、動くかどうかは判りません。
入出力ポートの電流・電圧が、モーターが必要とする電流・電圧に満たない場合、正しいタイミングでパルスを送り出しても、電流・電圧不足でモーターは動きません。
例えば、モーターが6Vを要求しているのに、マイコンの入出力ポートが3.5Vしか出力出来ないなら、モーターはピクリとも動かないでしょう。
その場合は、モーターとマイコンの間に「別系統の電源を持つ、モーター制御回路」が要ります。
「モーター制御回路」は「マイコンから入力した信号に従って、モーターが駆動するに充分な電流・電圧の信号をモーターに出力する」と言う、増幅回路のような物になるでしょう。
もちろん、モーター制御回路とマイコンが「どう繋がっているか」は作った本人(つまり質問者さん)にしか判りません。
なので「どういうプログラムを書けば良いかは、組み立てした本人にしか判らないので、回答したくても回答できない。回答は不可能」です。
貴方の複数の質問が連続でスルーされていたのは「回答が不可能だから」です。
質問の仕方が悪くてすいませんでした。自分でも色々いじくっていはいるのですがなかなかうまくいかずにいらいらしていたのかもしれません。増幅回路も考えています。それで挑戦してみます。回路はというと3端子レギュレータで5Vに落とした電圧をATmega168につなぎ動作させ、その5VとGNDそしてATmega168のPINB0からパルスを送るというそんな回路です。少し落ち着いてみます。ありがとうございました。
No.2
- 回答日時:
お急ぎのようですが、サーボの動作を確かめたいだけならスイッチ入力など不要で、90度曲げて数秒後に戻すプログラムを作ればよいだけです。
もし、それさえもプログラムで作れないのであれば基本的なプログラムのアルゴリズムが作れないレベルなのでプログラムの勉強をされたほうが良いと思います。こちらが教えても理解できるレベルに達していない可能性が高いです。
理解レベルを知りたいので逆に質問しますが、GWServo(GWS Servo?) S03T 2BBMGサーボを90度曲げるにはどんな信号を出せば良いか分かりますか?なるべく正確に答えてください。
まずサーボモータには3つの線があり、1に5V、2にGND、3にPWM信号を送る必要がある。そしてPWMは20ms間隔の信号でパルスを送る。確か1.5msくらいで中間だったかな、1ms出力したら19ms出力を停止する。2msなら18msのように20msの間隔を守って動かす。ということはわかります。ただdelayで間隔を作るのかと考えていたので、それ以外のコマンドがあるのかは知りません。サーボ制御についてはこれくらいしか知識がありません。
No.3
- 回答日時:
こんにちは。
先日の http://okwave.jp/qa4943054.html の続きですよね。RC用のサーボモータを制御するために必要な回路と、制御信号の仕様は前回の回答で書いたリンク先にあるとおりです。
> スイッチを押したら90度曲がり、スイッチを離したら90度戻るというプログラム
基本的な枠組みだけ書きます。
<< メイン関数 >>
I/Oポートを初期化する。
PWM出力に使うタイマを初期化する。
タイマ動作を開始する。
while(1){
スイッチの状態をチェックする。
スイッチが押されている場合
PWMのHレベル信号を90度相当の時間になるようカウンタをセットする。
スイッチが押されていない場合
PWMのHレベル信号を0度相当の時間になるようカウンタをセットする。
}
上記について、分からない部分をまたご質問ください。
協力してくれてほんとにありがとうございます。なんだか他力本願の自分が情けなく思えてきました。自分は確かに出力設定とdelayくらいしかわかっていないのだと思います。スイッチでLEDをチカチカさせることが出来、次はサーボモータが出来るかなといった感じで始めたので、少し早すぎるのでしょうか?基本的な枠組みありがとうございました。ですが初期化とかチェックとか日本語だとイメージしづらいころでもあります。確かにわかあるのはスイッチが押されているか押されていないかはif文だなというくらいです・・・
No.4
- 回答日時:
>まずサーボモータには3つの線があり、1に5V、2にGND、3にPWM信号を送る必要がある。
そしてPWM は20ms間隔の信号でパルスを送る。確か1.5msくらいで中間だったかな、1ms出力したら19ms出力を停止する。2msなら18msのように 20msの間隔を守って動かす。ということはわかります。これは合ってますね。
>ただdelayで間隔を作るのかと考えていたので、それ以外のコマンドがあるのかは知りません。サーボ制御についてはこれくらいしか知識がありません。
それは知識不足ですね。タイマを理解することが必要です。特にタイマを使ったPWM信号の生成の仕組みを理解しないと話しになりません。
>で、少し早すぎるのでしょうか?基本的な枠組みありがとうございました。ですが初期化とかチェックとか日本語だとイメージしづらいころでもあります。確かにわかあるのはスイッチが押されているか押されていないかはif文だなというくらいです・・・
うーん。C言語のプログラムの勉強がぜんぜん足りません。
Interestさんの書かれた基本的な枠組みからプログラムコードが浮かばないようなら、まずC言語の勉強をしてください。
WindowsでC言語の学習が出来ます。
「環境の準備」
http://journal.mycom.co.jp/articles/2008/06/17/C …
「苦しんで覚えるC言語」
http://homepage3.nifty.com/mmgames/c_guide/
>スイッチでLEDをチカチカさせることが出来、次はサーボモータが出来るかなといった感じで始めたので、少し早すぎるのでしょうか?
はい早すぎると思います。
例えば、SWを1回押したらLEDをON、もう一度押したらLEDをOFFという制御は出来ますか?
それか、SWをダブルクリックしたときのみLEDをONにするとか。これらのプログラムが浮かばないなら勉強不足で、サーボを制御するのはまだ早いです。
No.5ベストアンサー
- 回答日時:
> スイッチでLEDをチカチカさせることが出来、次はサーボモータが出来る
> かなといった感じで始めたので、少し早すぎるのでしょうか?
私はそれで充分準備ができていると思います。今必要なのはPWM信号を発生させるためのタイマの使い方という組み込み系特有の知識であって、Windows上で動く一般的なC言語の知識ではありません。したがって、ポインタや構造体など理解していなくても関係ありません。(後で必要になるとは思いますが。)
> 増幅回路も考えています。
RCサーボを制御するのに増幅回路は不要です。また、ダブルクリックは考えない方が良いと思います。
> 初期化とかチェックとか日本語だとイメージしづらいころでもあります。
ではもう少し具体的に書いてみます。
■ I/Oポートを初期化する。
スイッチが接続されるポート(端子)を入力ポートに設定する。
RCサーボ制御信号が接続されるポート(端子)を出力ポートに設定する。
■ PWM出力に使うタイマを初期化する。
■ タイマ動作を開始する。
■ PWMのHレベル信号を0度 / 90度相当の時間になるようカウンタをセットする。
ここを参照。これが分かれば今回の問題が解決します。英語なのでがんばってください。
http://mil.ufl.edu/~achamber/servoPWMfaq.html
http://avrbasiccode.wikispaces.com/Atmega168
■ スイッチの状態をチェックする。
スイッチが接続されたポートの状態を読み出す。
通常は、スイッチが押されていれば1、押されていなければ0ですね。
必要な処理は、以上です。
なんか本当にありがとうございます。I/Oポートは理解できています。たぶん自分が理解出来ていないのはタイマでしょうね。タイマ=delayって感じです。delay以外に何かあるのですか?
No.6
- 回答日時:
>delay以外に何かあるのですか?
組み込みマイコンの最重要部品の一つで組み込みタイマがあります。ATmega168のデータシートに書いてあるはずですが。
こちらで日本語データシートを見つけました。
http://reef.path.ne.jp/~hero/hero.htm
内部RC発信だと、クロックは8Mhzのようですね。
タイマも含めてデータシートは理解できるようになってくださいね。
で、SW制御が出来るプログラムレベルでパルス信号が作れないのも不思議です。とりあえずタイマの前にdelay()でも不正確ながらRCサーボ一個なら操れるはずですので、もし動かないならば根本的な間違いをしている可能性があります。
確認のため補足の形でソースを示してもらえますか。
(1)SW処理はいりません。
(2)周期は20ms周期です。
(3)パルスは1.5msでお願いします。
(4)無限ループで繰り返してください。
No.7
- 回答日時:
> タイマ=delayって感じです。
delay以外に何かあるのですか?Atmega168の場合、16-bit Timer/Counter を使うと次のようなことができます。
- 正確な実行タイミングで処理を実行させる(割り込みを使用)
- 正確な時間周期で信号波形を出力する (PWMモード)
- 外部信号を計測する(カウンタ)
詳しくは、AVRハードウェアマニュアルの107ページ以降を参照してください。
http://www.atmel.com/dyn/resources/prod_document …
もちろん、delayを作るためにタイマを使うこともできます。しかし、それはもったいない使い方です。今回、RCサーボを制御するために必要なPWM信号などはタイマを使うべき処理で、その具体的な使い方をソースコード付きで解説しているページを先ほどの回答で紹介しました。
タイマの使い方が理解できれば、その他のCPU内蔵周辺回路も容易に理解できるようになると思います。マイコンのプログラミングを理解する上で一番大切なところですので、諦めず取り組んでください。
No.8
- 回答日時:
#6のzwiです。
>周期の作り方がわかりません
無限ループとdelayを繰り返すだけですけど。ヘッダや初期化やF_CPUの定義は省略して有ります。
int cycleT;
int pulsT;
cycleT = 20000;
pulsT = 1500;
while(1) {
// ポートをON。ここは自分で書いてください。
_delay_us(pulsT);
// ポートをOFF。ここは自分で書いてください。
_delay_us(cycleT-pulsT);
}
このプログラムは分かりますか?
分かったらほかの部分を補完して書き込んでください。
とうとう動かすことが出来ました。今回協力いただいて本当にありがとうございます。プログラムを書きたかったんですがどうも入りきらないようで。ですが「16 bit timerで1秒を計る」に1秒計れるプログラムを書きましたのでそれを50分の一にして20msを作りました。協力いただいて本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
- ルーター・ネットワーク機器 ネットワークの機器(ルーター、スイッチ)選びについて 2 2023/03/16 22:12
- 体操・新体操 DCモーターの逆転スイッチの事ですが? 1 2022/04/09 04:37
- 電気工事士 生産設備について質問です。 100Vで動作するプレス機をスイッチを使って制御しています。制御は単純で 2 2022/10/18 22:14
- 車検・修理・メンテナンス サイドミラーをぶつけてしまい、本体にはそんな傷はないのですが、パカパカ? で手で揺らすと簡単にグラグ 4 2022/07/21 07:59
- 工学 工学にお詳しい方、どうかお助けください 3 2022/06/14 19:58
- その他(パソコン・周辺機器) ヤフオクのジャンクPCケースの電源スイッチやLED等が壊れていた場合の直し方を教えて下さい。 5 2022/12/22 21:10
- DIY・エクステリア 電子工作や工学にお詳しい方、お助けください。 5 2022/06/14 19:55
- カスタマイズ(バイク) 「MOTO LED フォグランプ用 簡単取付ハーネスキット(スイッチ付き)」 こちらの商品を使って、 2 2022/10/05 00:46
- リフォーム・リノベーション 2種の電球の調光について 1 2023/06/07 23:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLC間の信号のやりとりについて...
-
EnumとType
-
Picマイコンについて質問します...
-
PIC16F1827でPCとシリアル接続
-
8×8マトリクスLED回路・制御
-
マイコン(PIC)を使って可変抵抗...
-
C++でLEDを点灯させるプログラム
-
マイコンを動かしながら勉強したい
-
人感センサー、プログラミング...
-
<単安定マルチバイブレータ> 単...
-
C言語を用いた組込みシステム学...
-
三菱シーケンサのプログラムの...
-
圧力センサとマイコン
-
H8マイコンの端子の数字の端子...
-
シーケンスのプログラムについ...
-
ディスプレイ上で起こる2重表...
-
HyperVで仮想マシンがネットワ...
-
Cpkのk(偏り)値をExcelで出す...
-
TAとルーターの違いって?
-
ゲーミングPCでの質問です ゲー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLC間の信号のやりとりについて...
-
USBからの電源供給をコントロー...
-
C++でLEDを点灯させるプログラム
-
VBでUSBポートからの入力を制御...
-
PCのUSBバスパワーの制御
-
シーケンスのプログラムについ...
-
マイコンボード上のポートと端...
-
Picマイコンについて質問します...
-
Visual Basic 6.0のShell関数
-
ATTINY13のリセット端子は無効...
-
家電のcpu
-
H8マイコンの端子の数字の端子...
-
コンピューターでラジコン操作?
-
Webカメラの制御について
-
<単安定マルチバイブレータ> 単...
-
Visual BasicでGP-IBの通信を制...
-
PIC16F1827でPCとシリアル接続
-
EnumとType
-
picマイコンより簡単に扱えるマ...
-
MATLABでサーボモータを制御す...
おすすめ情報