PICプログラム教えてください。
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGなんせC言語のプログラムが初心者なもので。
PWM信号でモータを制御しようとしていて、正逆回転がうまくいかないのです。
モータの回転方向切り替えはCW回転(オープンコレクタ)、CCW回転(0〜0.8V)となっている
のですが、どうプログラムしたらよいのでしょう?
ちなみに、ポートCからPWM信号を出力させてモータの速度を制御し、
ポートDからの信号でモータの正逆回転を制御したいのです。
どなたかご指導よろしくお願いします。
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGオープンコレクタ時の電圧は? プルアップされているなら、その抵抗がつながってる反対かわの電圧を見てみて
PICの電源と同じなら、単純に HでCW LでCCWだ。
PICの電源より低いなら、入力端子にすればCW 出力端子にしてLを出力すればCCWだ
PICの電源より高いなら、2SCタイプのトランジスタを取り付ける必要がある。
0006デフォルトの名無しさん
NGNGこれはつまり、
output_high(PIN_D0);
でCW
output_low(PIN_D0);
でCCW
ということになるのでしょうか?
※
ポートDのPIN_D0からの信号で正逆回転させる場合。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG回路図を見ていないから、それでOKとは言ってあげられない。
心配なら、常に出力はLを出しておいて、方向レジスタで切り替えたら?
0009デフォルトの名無しさん
NGNGえと既に出来上がったキットを用いてやろうとしているので・・・
では、PICを5V、0.5Aで動作させているのですが、
PICのポートDのPIN_D0から1V出力させるためには
output_high(PIN_D0);
を使えばいいのですかね?
やってみてオシロで出力を見てみたのですが、出力が確認できませんでした。
0010デフォルトの名無しさん
NGNG>>1
PICにはトライステートバッファ(Tristate=on,off,z=∞=切断=ハイインピーダンス)というのがあって、
ここをON,OFF
.|
|\|
-| >ー
|/
これが逆方向にも並列に付いていて入出力方向設定できる。
自分はアセンブラでしか書いたことないのだが、Cにもないかな。
アセンブラコードだと
TRIS PORT 0/1 (PORTはA,Bの入出力ポートでPINごとでなく、レジスタまとめて入出力方向指定。0=出力、1=入力)
これやらないと、入力側と出力側が切れていて(ハイインピーダンス)で入力も受け付けないし、出力もでない。
0011デフォルトの名無しさん
NGNG高専ロボコンか?大変だな。漏れは昨日負けてしまったよ。
0012↑訂正
NGNGこれを訂正して
>PICには入出力ポートに
~~~~~~~~~~~~~
トライステートバッファ(Tristate=on,off,z=∞=切断=ハイインピーダンス)というのがあって、
0013↑ごめんまたまた訂正
NGNGと書いたけれど、PINごとでも設定できる。
その場合は、TRISAだのTRISBだのいうレジスタがあるでしょう。
そのレジスタの8bitがそれぞれ、A,BそれぞれのPORTの8PINの入出力方向設定に対応してる。
だから、そのレジスタに各PINのon,offを考えて8bitまとめて値を入れてやれば良い。
0014↑ごめんまたまた訂正ver.2
NGNG↓
各PINの入出力方向を考えて
スマソ。
0015デフォルトの名無しさん
NGNG高専ロボコンではないです^^;
>10
入出力方向の設定はできて、ちゃんと機能することはできたのですが、
出力に設定されたPINから1Vとか、0Vを出力させることができないのです^^;
0016デフォルトの名無しさん
NGNGCの場合にはループでくくってやらなくても大丈夫なの?
何を言いたいかっていうと、一瞬しか出力が出てないんじゃないかと。。。
アセンブラはインタプリタ的だけど、Cってイベントドライブでしょう。
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGループでくくってますよ〜
PWM信号はきちんと出力されてるから、同様にしてやれば、ちゃんと出るのかと思ったのですが・・
どうもうまくいかないみたいで・・
0019デフォルトの名無しさん
NGNG電源5Vなのに1V? って事は相手はトランジスタだね?
ならば、PICの出力端子に2.2K〜5.1Kの抵抗を入れなさいな。
0020デフォルトの名無しさん
NGNG抵抗など入れないで、プログラムだけで1Vだけとか出力させることは無理でしょうか?
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGデューティ100だと約5Vの電圧で回した時と同じ角速度
デューティ50だと約2.5Vの電圧で回した時と同じ角速度
で回転したのですが・・・
これを使って、約1Vに相当するPWM波形を出力させて使うというのは間違っているのでしょうか?
0024デフォルトの名無しさん
NGNG中間の電圧というのに意味はないどころか、もし中間の電圧が出たらブリッジ貫通する可能性があるぞ
>>15 にあるように方向レジスタを使って、入力=プルアップ状態 ではダメなのか?
その時の電圧は0.6Vになると思うが?
0025デフォルトの名無しさん
NGNG今からちょっと試しにやってみます。
0026デフォルトの名無しさん
NGNGfor(i=0x001;i<=0x3FF;i++);
で合ってるのでしょうか?
0027デフォルトの名無しさん
NGNGpic の cコンパイラは知らないんだけど データバスは 8bitだから
それはあんまり良くないと思うけどね
0028デフォルトの名無しさん
NGNGしかし、PICでC言語を用いてデューティ比を設定する方法は16進数で定義するとコンパイラの説明書に書いてあり、
デューティ比を徐々に上げていく場合、26以外にどんな方法があるのでしょうか?
何かいい方法ありましたら、教えてください。
0029デフォルトの名無しさん
NGNG制御系なら俺に聞いてもいいぞ(3)
http://pc2.2ch.net/test/read.cgi/tech/1059488975/
●PIC・AVR 初心者のためのスレッド-2サイクル目●
http://science.2ch.net/test/read.cgi/kikai/1040610345/
単発スレ立てんなヴォケ!
0030デフォルトの名無しさん
NGNG普通 PIC のようなプログラムは
main()
{
初期化処理
while(1){
wait( タイマー割込フラグ を待つ);
タイマー割込みフラグを消去する
・・・この間を繰り返す・・
}
}
と無限ループを作ります。
デューティをだんだんと上げたいなら 普通はカウンタを一つ用意して
ループ中で
cnt++; とカウンタを増やします。
8ビットCPUなので8bitのカウンタを使います。
無限にINCさせれば8bit毎に0に戻るのでノコギリ波状の出力が得られます。
0031デフォルトの名無しさん
NGNGそれは一般的なマイコンでの定石だろが。
PICの場合そんなことをしてたら、PICを使う意味は無い。
(個人、零細らラベルでは価格のメリット在りとの意見はある)
PICの場合は割り込みは原則使わない。(寝てるのを起こすのみ)
ループを廻りつつ、やるべきことがあるならやるし、無いならやらないという単純なプログラムとなる。
0032デフォルトの名無しさん
NGNG? >>30 は 割り込みフラグを見るだけで 割り込みを使ってないようだけど?
0033デフォルトの名無しさん
NGNG単にタイマルーチンが書いていないだけだろ。使う使わないは別にして。
0034デフォルトの名無しさん
NGNG違う。
タイマーのタイムアップを見るのに、
割込みをかけずに、割り込みフラグを見るのは普通に使う手法だ。
0035デフォルトの名無しさん
NGNGそれじゃあ、タイムアップまでの時間が、待機ルーチンの内容で
変わっちゃうじゃないかよ。
0036デフォルトの名無しさん
NGNG数値を10進数で書くか16進数で書くかによってコンパイル結果が変わるの?
奇妙なコンパイラだこと。
0037デフォルトの名無しさん
NGNG>>1は説明不足。回路図だせ!
つーかアセンブラでやれ。
機能でPWMあるだろ。
0038デフォルトの名無しさん
NGNGおれシュミレーターで全部やってたけど。
0039sage
NGNG0040デフォルトの名無しさん
NGNG> 結論 PICは糞だった
たとえば、どんな糞? いやどんなところが糞なの?ASMかい?
でPICに代わるのはなに?
というか、使いこなせなかったのかい?
0041デフォルトの名無しさん
NGNGKは石はGOLDだが、環境が糞。
石が糞でも、ちゃんと売りさばくのが頭のいいマーケッティング。
日本のアフォー半導体屋もまなびなさい。
0042デフォルトの名無しさん
NGNGシュミレーションしなくていいところはシュミレーションできるようになっている。
0043デフォルトの名無しさん
NGNG組んでやるから
0044デフォルトの名無しさん
NGNG俺なんてプログラム以前に回路図も書けないぜ。
>>43
回路図から書いて下さいませんか?_| ̄|○ ダメポ…
0045デフォルトの名無しさん
NGNGPICはチップとしてよくできているが
AVRはCPUとしてよくできている
0046RAMほしい
NGNG0047RAMほしい
NGNGバンク2とか3とかメモリーはあまってるのに、そのメモリーを
関数に渡そうとすると、コンパイラーがメモリー不足をつげる。
値段の割りに程度の低いコンパイラーだな。
0048RAMほしい
NGNG0049デフォルトの名無しさん
NGNGその他のファイルはいっつも出来るのに。
助けてヘルプミー。なにがいけないの?
■ このスレッドは過去ログ倉庫に格納されています