AVRのATmega168とサーボモータの GWServo S03T 2BBMG を買ってWinAVRでプログラミングしようと思っています。とりあえず動かしたいと思っているので、スイッチを押したら90度曲がり、スイッチを離したら90度戻るというプログラムを書きたいです。どなたか簡単で良いので教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

> スイッチで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ですね。

必要な処理は、以上です。
    • good
    • 0
この回答へのお礼

なんか本当にありがとうございます。I/Oポートは理解できています。たぶん自分が理解出来ていないのはタイマでしょうね。タイマ=delayって感じです。delay以外に何かあるのですか?

お礼日時:2009/05/13 22:52

#6のzwiです。


>周期の作り方がわかりません

無限ループとdelayを繰り返すだけですけど。ヘッダや初期化やF_CPUの定義は省略して有ります。
int cycleT;
int pulsT;
cycleT = 20000;
pulsT = 1500;
while(1) {
// ポートをON。ここは自分で書いてください。
_delay_us(pulsT);
// ポートをOFF。ここは自分で書いてください。
_delay_us(cycleT-pulsT);
}
このプログラムは分かりますか?
分かったらほかの部分を補完して書き込んでください。
    • good
    • 0
この回答へのお礼

とうとう動かすことが出来ました。今回協力いただいて本当にありがとうございます。プログラムを書きたかったんですがどうも入りきらないようで。ですが「16 bit timerで1秒を計る」に1秒計れるプログラムを書きましたのでそれを50分の一にして20msを作りました。協力いただいて本当にありがとうございました。

お礼日時:2009/05/17 14:23

> タイマ=delayって感じです。

delay以外に何かあるのですか?

Atmega168の場合、16-bit Timer/Counter を使うと次のようなことができます。

- 正確な実行タイミングで処理を実行させる(割り込みを使用)
- 正確な時間周期で信号波形を出力する (PWMモード)
- 外部信号を計測する(カウンタ)
詳しくは、AVRハードウェアマニュアルの107ページ以降を参照してください。
http://www.atmel.com/dyn/resources/prod_document …

もちろん、delayを作るためにタイマを使うこともできます。しかし、それはもったいない使い方です。今回、RCサーボを制御するために必要なPWM信号などはタイマを使うべき処理で、その具体的な使い方をソースコード付きで解説しているページを先ほどの回答で紹介しました。

タイマの使い方が理解できれば、その他のCPU内蔵周辺回路も容易に理解できるようになると思います。マイコンのプログラミングを理解する上で一番大切なところですので、諦めず取り組んでください。
    • good
    • 0
この回答へのお礼

16ビットカウンター勉強してみます

お礼日時:2009/05/16 13:30

>delay以外に何かあるのですか?


組み込みマイコンの最重要部品の一つで組み込みタイマがあります。ATmega168のデータシートに書いてあるはずですが。

こちらで日本語データシートを見つけました。
http://reef.path.ne.jp/~hero/hero.htm
内部RC発信だと、クロックは8Mhzのようですね。
タイマも含めてデータシートは理解できるようになってくださいね。

で、SW制御が出来るプログラムレベルでパルス信号が作れないのも不思議です。とりあえずタイマの前にdelay()でも不正確ながらRCサーボ一個なら操れるはずですので、もし動かないならば根本的な間違いをしている可能性があります。
確認のため補足の形でソースを示してもらえますか。
(1)SW処理はいりません。
(2)周期は20ms周期です。
(3)パルスは1.5msでお願いします。
(4)無限ループで繰り返してください。

この回答への補足

周期の作り方がわかりません

補足日時:2009/05/16 13:28
    • good
    • 0

>まずサーボモータには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にするとか。これらのプログラムが浮かばないなら勉強不足で、サーボを制御するのはまだ早いです。
    • good
    • 0
この回答へのお礼

出してもらった問題はわかりますね。自分がわからないのはたぶんタイマだと思います。タイマ=delayって感じです。

お礼日時:2009/05/13 22:55

こんにちは。

先日の http://okwave.jp/qa4943054.html の続きですよね。

RC用のサーボモータを制御するために必要な回路と、制御信号の仕様は前回の回答で書いたリンク先にあるとおりです。

> スイッチを押したら90度曲がり、スイッチを離したら90度戻るというプログラム

基本的な枠組みだけ書きます。

<< メイン関数 >>
 I/Oポートを初期化する。
 PWM出力に使うタイマを初期化する。
 タイマ動作を開始する。
 while(1){
   スイッチの状態をチェックする。
   スイッチが押されている場合
     PWMのHレベル信号を90度相当の時間になるようカウンタをセットする。
   スイッチが押されていない場合
     PWMのHレベル信号を0度相当の時間になるようカウンタをセットする。
 }

上記について、分からない部分をまたご質問ください。
    • good
    • 0
この回答へのお礼

協力してくれてほんとにありがとうございます。なんだか他力本願の自分が情けなく思えてきました。自分は確かに出力設定とdelayくらいしかわかっていないのだと思います。スイッチでLEDをチカチカさせることが出来、次はサーボモータが出来るかなといった感じで始めたので、少し早すぎるのでしょうか?基本的な枠組みありがとうございました。ですが初期化とかチェックとか日本語だとイメージしづらいころでもあります。確かにわかあるのはスイッチが押されているか押されていないかはif文だなというくらいです・・・

お礼日時:2009/05/13 01:24

お急ぎのようですが、サーボの動作を確かめたいだけならスイッチ入力など不要で、90度曲げて数秒後に戻すプログラムを作ればよいだけです。


もし、それさえもプログラムで作れないのであれば基本的なプログラムのアルゴリズムが作れないレベルなのでプログラムの勉強をされたほうが良いと思います。こちらが教えても理解できるレベルに達していない可能性が高いです。

理解レベルを知りたいので逆に質問しますが、GWServo(GWS Servo?) S03T 2BBMGサーボを90度曲げるにはどんな信号を出せば良いか分かりますか?なるべく正確に答えてください。
    • good
    • 0
この回答へのお礼

まずサーボモータには3つの線があり、1に5V、2にGND、3にPWM信号を送る必要がある。そしてPWMは20ms間隔の信号でパルスを送る。確か1.5msくらいで中間だったかな、1ms出力したら19ms出力を停止する。2msなら18msのように20msの間隔を守って動かす。ということはわかります。ただdelayで間隔を作るのかと考えていたので、それ以外のコマンドがあるのかは知りません。サーボ制御についてはこれくらいしか知識がありません。

お礼日時:2009/05/13 01:16

>どなたか簡単で良いので教えてください。



まず「ATmega168」の入出力ポートに、何をどう繋いだか提示して下さい。

「ATmega168」は「汎用マイコン」ですから、入出力ポートに何をどう繋いだかは、組み立てた本人(つまり質問者さん)にしか判りません。

次に「GWServo S03T 2BB MG」と「ATmega168の入出力ポート」のスペックを提示して下さい。

「ATmega168」の入出力ポートに「GWServo S03T 2BB MG」を繋いだとしても、動くかどうかは判りません。

入出力ポートの電流・電圧が、モーターが必要とする電流・電圧に満たない場合、正しいタイミングでパルスを送り出しても、電流・電圧不足でモーターは動きません。

例えば、モーターが6Vを要求しているのに、マイコンの入出力ポートが3.5Vしか出力出来ないなら、モーターはピクリとも動かないでしょう。

その場合は、モーターとマイコンの間に「別系統の電源を持つ、モーター制御回路」が要ります。

「モーター制御回路」は「マイコンから入力した信号に従って、モーターが駆動するに充分な電流・電圧の信号をモーターに出力する」と言う、増幅回路のような物になるでしょう。

もちろん、モーター制御回路とマイコンが「どう繋がっているか」は作った本人(つまり質問者さん)にしか判りません。

なので「どういうプログラムを書けば良いかは、組み立てした本人にしか判らないので、回答したくても回答できない。回答は不可能」です。

貴方の複数の質問が連続でスルーされていたのは「回答が不可能だから」です。
    • good
    • 0
この回答へのお礼

質問の仕方が悪くてすいませんでした。自分でも色々いじくっていはいるのですがなかなかうまくいかずにいらいらしていたのかもしれません。増幅回路も考えています。それで挑戦してみます。回路はというと3端子レギュレータで5Vに落とした電圧をATmega168につなぎ動作させ、その5VとGNDそしてATmega168のPINB0からパルスを送るというそんな回路です。少し落ち着いてみます。ありがとうございました。

お礼日時:2009/05/13 01:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QニンテンドーDSliteの入荷情報

都内(江東区)に住んでます。
都内の店舗で「ニンテンドーDSlite」の入荷情報をご存知でしたら教えてください。
よろしくお願いいたします。

Aベストアンサー

神奈川県内のおもちゃ売場に勤務しています。
DSライトは、発売日と18日(土)と26日(日)に入荷して抽選販売を行いました。
毎週販売している状態が続いているので、また来週の週末も入荷するかな?と思っています。
ぜひ金曜日にでも近所のゲーム取り扱い店に問い合わせてみてください。

QATmega168で20msの周期のパルスを出したい

ATmega168で GWServo S03T 2BBMG と書かれているサーボモータをとにかく動かしたいのですが、そもそも20msを出す計算方法がわかりません。というか GWServo S03T 2BBMG は20msで動かすものなのですか?1.6msとか色々あるかあらごちゃごちゃです。とりあえず、パルスをだして見たいのですが、そのプログラムを教えていただけないでしょうか?お願いします。

Aベストアンサー

混乱しているみたいですが、そもそもATmega168は何Mhzで動いていますか?
それで、タイマの使い方が分からないんでしょうか?
>サーボの話は別質問で。

Qフォーゼドライバーの再入荷情報を教えて下さい!!

フォーゼドライバーの再入荷情報が知りたいのですが、トイザらスやインターネットなど、問い合わせ・確認を常にしているのですが、入荷未定や売り切れなどばかりです。
なんとか子供のために手に入れたいのですが、オークションでは定価よりも高くなっており、嫁が購入を反対しております。夜中並んででもいいので手にれたいです。
情報お願いします。ちなみに私は愛知県名古屋市に住んでおります。

Aベストアンサー

狙い目はオモチャを扱っている「西友」です。

新聞をとっていればチラシに出る時があります。

我が家は東京ですが先週15個のみ入荷がありました、でも普通に並んで買えましたよ・・・定価で・・・

明日(23日)はアクセルスイッチが入りますのでまた並びます・・・(笑い)

お互い大変ですね・・・でももう少し待てば普通になりそうな気がしますよ・・・

何かの参考になれば幸いです。

Qサーボモータの制御

駄文で失礼いたします。

現在、二つのサーボモータ(一つは縦軸用、もう一つは横軸用)を動作させてペンを動かしているのですが、縦方向・横方向の移動はできるのですが、斜め移動が上手くいきません。
最終的には、ペンで曲線などを描きたいんですが、うまくプログラムできません。
プログラミングに詳しい方、ご教授頂けないでしょうか?
現状は、C言語でRS-232Cを通して信号を送っています。
お願い致します。

Aベストアンサー

斜めに描画できない、というのは縦軸を動かしたときの横軸の移動量を計算する方法が分からないんですね。

古典的な直線描画法に、DDAという方法があります。任意のx1,y1-x2,y2間を埋める座標を、整数演算だけで求める手法です。参考URLを見て下さい。

整数演算ではなく、浮動小数点で求めたいならもっと簡単です。
縦軸か横軸、どちらかを一定数(1座標ずつとか)ずらしながら、対応するもう一方の座標をsin()かcos()で求めます。
三角関数の基本ですから、xが分かればyを、yが分かればxを求めるのは簡単ですよね?
#wikipediaへのリンクも張っておきます。

円の描画も、三角関数で半径rから任意の角度(0-360まで)のxy座標を求めてプロットするだけですから、簡単です。

参考URL:http://homepage2.nifty.com/kasayan/basic/graphic2.htm, http://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0

斜めに描画できない、というのは縦軸を動かしたときの横軸の移動量を計算する方法が分からないんですね。

古典的な直線描画法に、DDAという方法があります。任意のx1,y1-x2,y2間を埋める座標を、整数演算だけで求める手法です。参考URLを見て下さい。

整数演算ではなく、浮動小数点で求めたいならもっと簡単です。
縦軸か横軸、どちらかを一定数(1座標ずつとか)ずらしながら、対応するもう一方の座標をsin()かcos()で求めます。
三角関数の基本ですから、xが分かればyを、yが分かればxを求めるのは簡単...続きを読む

QDSLite入荷情報

クリスマスや正月は忙しくて暇がなかったのですが、今頃になってDSLiteが欲しくなりました。
それで電機屋やらゲーム屋やらを探し回ったのですがやはりどこも品切れ状態。
ネットで買うという手もありますがそれだと定価で買えなかったり、色々面倒なのでお店で購入したいです。
今札幌にいるのですが何処か手に入りやすい所などはないですか?
もしくはいつ入荷するなどの情報があれば宜しくお願いします。

Aベストアンサー

gooより、価格.comというところで聞いたほうが良いかもしれません。
ちょうど札幌の情報が載っていたので、URL載せておきます!

参考URL:http://bbs.kakaku.com/bbs/20502010105/#5863265

QAVRでサーボモータの制御プログラム

ATmega168を購入してWinAVRでプログラムを書いています。GWServoのS03T 2BBMGと書かれているサーボモーターを動かそうとしています。パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですがまったく制御できません。どういうプログラムを組めばいいのでしょうか?AVRに外部の発信子はつけていません。ATmega168に内蔵されている発振子でしています。というかそれでいいのでしょうか?ごちゃごちゃですが、何か動かすためのアドバイスをください。お願いします。

Aベストアンサー

こんにちは。まずは話を整理して、一つずつ解決していきいましょう。

> どういうプログラムを組めばいいのでしょうか?

GWServoは、RC用のサーボモータですよね。RCサーボモータの動作原理はすでにご存じだと思いますが、念のため。
【TekuRobo工作室/ソフトウェア編/ラジコンサーボモータを動かす】
http://homepage1.nifty.com/rikiya/software/112servo1.htm

> モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?

そういう意味ではないと思いますよ。回路図も上記リンク先を参照してください。ラジコンサーボモータの端子の並び方は(現在は)各社とも同じ並び方ですので、2番ピンに6V(5VでもOK)500mA程度を供給できるようにしましょう。ただ動かすだけなら電流はもっと少なくて良いでしょう。(トルクの大きなサーボだと、ロック時に平気で 1A程度食ったりしますが。)

> パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですが

delay使うのは悪いやり方です。というのは、今後RWSPさんがプログラムの処理内容を増やしていったときに、サーボモータを制御するPWM信号を正しいタイミングで生成できなくなるからです。具体的には、シリアル通信やボタンの押し下げ制御、複数のサーボモータを同時に制御するなど、処理内容が増えてくるとdelayを使ったのでは約20ms周期のサーボ制御信号時間を管理できなくなります。管理できなくなると、サーボモータが動作中に、ビビッ、ビビッ、と振動します。

時間を正確に管理するためには、ATmega168の内蔵周辺回路にあるタイマモジュール(8-bit Timer/Counter0 または 16-bit Timer/Counter1)を使用します。このモジュールの詳細はATmega168のハードウェアマニュアル
http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf
を参照してください。

こんにちは。まずは話を整理して、一つずつ解決していきいましょう。

> どういうプログラムを組めばいいのでしょうか?

GWServoは、RC用のサーボモータですよね。RCサーボモータの動作原理はすでにご存じだと思いますが、念のため。
【TekuRobo工作室/ソフトウェア編/ラジコンサーボモータを動かす】
http://homepage1.nifty.com/rikiya/software/112servo1.htm

> モータードライブ用の回路ということはトランジスタで電圧を上げるということでしょうか?

そういう意味ではないと思いますよ。回路...続きを読む

QWiiの入荷情報について

いままで買いに行く機会がなく、休みに入ったのでWiiを買いに行きたいと思っています。
しかし、今朝開店前のヤマダ電機で並んでみましたが入荷なしとのことでした。
明日トイザラスで入荷するという噂も聞きますが、まず今年中に出荷はあるのでしょうか。
また、大阪市近郊で販売予定のチラシが入っているような店があれば情報の提供お願いします。

Aベストアンサー

トイザらスの販売予定は1月1日のようですので年内の入荷はないみたいです。ヤマダ電機は、開店前の入荷よりも15:00ごろもしくはお昼過ぎごろの入荷(販売?)が多いみたいです。地店舗によっても異なるとは思いますが、ヤマダ電機はDSやWiiの入荷予定日がゲームコーナーの入り口のところに書いてありました。しかし、書いてある日以外にも毎日(週に何度か?)数台ずつ販売しているような気がします。いつも販売時は、「在庫なし、予約はできません」のポップが貼ってありますが、その横に貼ってあった、「Wii完売しました」のポップがはがされています。いつもと様子が違っていたら、一度店員さんに在庫の確認をしてみるといいと思います。それと、ヤマダ電機の場合は、昼ごろ行ってみる価値はあると思います。もしかしたら初売り用に在庫を確保している可能性もあるのでご注意を。

QAVRのサーボ制御で困っています。

AVRマイコンを用いてサーボを8個制御するプログラムをC言語で作っています。使っているマイコンはATmega64LでサーボはフタバのS3003、AVRstudio4.17とAVR-GCCを用いてコンパイルやシュミレートをしています。

プログラムはサーボを8個動かすために
タイマ2の比較一致割り込みで2.5msの周期をつくり
タイマ0の比較一致割り込みで0.5ms~2.5msのパルスをつくり
main関数でサーボの角度を制御するというものです。サーボ8個の角度の保持にはグローバル変数を用いています。

「サーボ初期位置→サーボ2個移動して固定」はうまくいくんですが「サーボ初期位置→※サーボ2個移動→さらに他のサーボ2個移動→はじめに動かしたサーボ2個を初期位置へ」というプログラムを書いたら、なぜか※をつけた「サーボ2個移動」の部分が実行されずその次の行動から実行されてしまいます。これはAVRに書き込んで確認したもので、シュミレータで確認するためにwait()などの待つ処理を除いてシュミレートしてみたのですが、「サーボ2個移動」の2行を飛ばして実行してしまっています。

具体的に飛ばされている部分は後述のソースコードのdo{・・・}while(1);の中の
servopos[FR_LEG]=31;
servopos[RL_LEG]=31;
で、do{・・・}while(1);の無限ループはservopos[FR_JOINT]=70;からservopos[RL_LEG]=94;を無限ループしています。

電気回路、C言語ともに初心者なので見当がつかず、いろいろ試したり調べてみてもわかりませんでした。

質問は「なぜこのようにプログラムを数行飛ばして実行してしまっているのか」です。ソースコードの指摘をしていただけると有り難いです。

ソースコード
#include <avr/io.h>
#include <avr/interrupt.h>

#define RL_JOINT 0
#define FR_JOINT 1
#define FL_LEG 2
#define RL_LEG 3
#define FL_JOINT 4
#define RR_JOINT 5
#define RR_LEG 6
#define FR_LEG 7

uint8_t phase=0;
uint8_t servopos[8]={94,94,94,94,94,94,94,94};

/*
void wait(uint16_t w){
while(w--){
volatile uint16_t i=200;
while(i--);
}
}
*/

ISR(TIMER2_COMP_vect){
PORTC=0x00;
TCNT0=0;
}

ISR(TIMER0_COMP_vect){
PORTC |= (1<<phase);
OCR0 = servopos[phase];
phase++;
if(phase>7){phase=0;}
}

int main( void ){
//ポート設定
DDRC=0xFF;
PORTC=0x00;
//タイマ0設定
OCR0 = 94;
TCCR0 |= (1<<WGM01)|(1<<CS02)|(1<<CS00);
TIMSK |= (1<<OCIE0);
//タイマ2設定
OCR2 = 79;
TCCR2 |= (1<<WGM21)|(1<<CS22);
TIMSK |= (1<<OCIE2);
// 全体割り込み許可
sei();

do{
// wait(10000);
servopos[FR_LEG]=31;
servopos[RL_LEG]=31;
//wait(1000);
servopos[FR_JOINT]=70;
servopos[RL_JOINT]=70;
//wait(1000);
servopos[FR_LEG]=94;
servopos[RL_LEG]=94;
}while(1);

}

AVRマイコンを用いてサーボを8個制御するプログラムをC言語で作っています。使っているマイコンはATmega64LでサーボはフタバのS3003、AVRstudio4.17とAVR-GCCを用いてコンパイルやシュミレートをしています。

プログラムはサーボを8個動かすために
タイマ2の比較一致割り込みで2.5msの周期をつくり
タイマ0の比較一致割り込みで0.5ms~2.5msのパルスをつくり
main関数でサーボの角度を制御するというものです。サーボ8個の角度の保持にはグローバル変数を用いています。

「サーボ初期位置→サーボ2個移動...続きを読む

Aベストアンサー

こんにちは。

servopos[FR_LEG]=31;   // ←1
servopos[RL_LEG]=31;
<中略>
servopos[FR_LEG]=94;   // ←2
servopos[RL_LEG]=94;

1の処理の後、その変数を使う事なく2の処理で新しい値(94)をセットしているため、コンパイラ君が
「ん?もしかして1の処理って要らないんじゃね?」
と気を利かせて、1を削除したと思われます。
処理1にも意味があるんだよ、という事をvolatileというキーワードで教えてあげればよいと思います。

Qこんなスイッチに交換するのは

こんなスイッチに交換するのは自分できますか?
http://www2.panasonic.biz/es/densetsu/haisen/switch_concent/switch/switch02.html
してもらうならどちらでできますか いくらくらい

Aベストアンサー

質問者さんが電気工事士免状を持っているなら、ご自分でできます。
持っていないなら、電気工事店を呼んでください。

費用は、材料費のほかに、手間賃と出張料で 2,000円から 5,000円ぐらい覚悟しておいてください。

Qモータの制御

永久磁石同期モータを速度制御をする場合
 電流制御をマイナーループとした制御系を構成するとします。このとき、電流制御系のサンプリング間隔が速度制御系よりも短いサンプリング間隔で電流制御をすると思います。この場合、アルゴリズム(C言語でのプログラム)はどのようにしたらよいのでしょうか?
マイナーループの電流指令の生成の部分がよくわかりません。
説明がわかりにく部分があるかもしれませんがよろしくお願いします。

Aベストアンサー

マイコンの場合などは2つのタイマーを使って実現すると思います。
例えば、速度制御は1秒間隔、電流制御は0.1秒間隔とか。

擬似的には時刻判定を使えばいいと思います。
ただ、時刻を要求すると現在時刻でなく、プログラム開始時刻を返すものもあるので
注意が必要です。
他のプログラムによって実行が一時とまることもあるのでこの辺の注意も必要です。


人気Q&Aランキング

おすすめ情報