SSブログ
English Version

最初の目標は・・ 2005年01月01日(データ復活版) [PIC]

 2週間位前に秋月さんからPICプログラマを購入し、PICにはまってます。
 PIC12F629でLED8個を点灯する回路を作成しアセンブラの組み方も大体わかりました。
 まずはラジコンのスピードコントローラを作ってみたいと思ってます。
ニックネーム さと at 10:46 | Comment(14) | TrackBack(0) | 日記
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

さと

以下Googleのキャッシュから復活したコメント内容です
--------------------------------------------------

この記事へのコメント
初めまして、私もPICいじってます。
http://yasuu.paslog.jp/
http://www.netlaputa.ne.jp/~yasuu/
よろしく。
Posted by 石川 at 2005年01月04日 02:06

--------------------------------------------------

はじめまして。
超有名人のtokoさんとお知り合いなんですね。
私はまずは受信機からの信号でモータドライブしようと思ってます。
一応ソフトは出来上がりシミュレータで動作確認しようと思っている
ところです。

 timer0の割込みで32段階のPWM出力(880Hz)し、timer1
で受信機からの制御信号幅をカウントしています。
 制御信号幅のカウントは割込みの影響を受けないように/T1Gを
使っています。
 受信機からの信号は/TG1に使うには論理が逆なのでPIC内臓
のコンパレータを使って反転します。

 ソフトはいいとして実際にハードを組む時には流石にオシロがない
と辛いなぁ〜と思っています。

Posted by さと at 2005年01月06日 02:01

--------------------------------------------------

 UNIONの受信機からの信号を入力してようやくPWD出力(64段階に拡張)までできました。
 入力信号のパルス幅の最大値/最少値は最初にスティックを最大→最少に動作させることで設定するようにしています。

 土曜日に秋月で「USB接続 12ビット2chオシロ「Stingray」を購入したお蔭で当初心配していたハードに入れてからの確認もすんなり行きました^^

Posted by さと at 2005年01月10日 17:11


--------------------------------------------------

PWT出力信号の先に土曜日に秋葉を探して買ってきたMOSFET(IRFD120)をつないでモータを付けたら面白いように回りました^^
FETはON抵抗が0.27Ωと若干高めですがニッカド7.2Vで480モータをフルスロットルで暫く回してもほの暖かい程度の発熱でしたので問題ないと思います。5Vのレギュレータを小型の物にしPICをフラットパッケージにすれば実用出来るのではないかと思います。
Posted by さと at 2005年01月10日 22:13

--------------------------------------------------

ん〜、やはりFETの0.27Ωの抵抗は大きすぎるみたいでユニオンの5Aのスピコンと比較したらフルスロットルでのモーターのパワーの差がかなりありました。もっと低抵抗のFEPを探さなと・・・
コンパレータ入力がまだ一個あまっているのでオートカット機能も付けてみたい思います。
Posted by さと at 2005年01月15日 01:40

--------------------------------------------------

素晴らしい!。
ご自分で開発されてるんですね、すごい!。
スロットルのピーク出力についてはプログラムの組み方も関係します。toko氏のHPにヒントがあります。
Posted by 石川 at 2005年02月04日 00:14

--------------------------------------------------

 フルスロットルではデューティー100%にしているのでやはりFETのON抵抗の問題だと思います。

 PWM制御でのデューティー比を制御するために独自の固定小数点演算等、全てアセンブラで組んでいましたが、開発効率が悪いためPICのコンパイラについてちょっと調べてみました。(アセンブラで組むこと自体の楽しさは十分あるのですが)

freeで使えるものはGNU系では

  http://www.gnupic.org/

にいくつかありますがコンパイルしたコードがイマイチで使えそうなものではJAL(CではなくPascal系の独自言語)が一番まともでした。
 今回Forth系のコンパイラは評価していません。Forthは以前(CP/M80上で^^;)使ったこともあるのですが、やはりCの方が好きなので・・

 JALを使おうかと決めかけましたが、更に調べたところ商用コンパイラで評価用として只で使えるものがあることがわかりました。

 商用コンパイラのfree版としてHI−TECHのPICC Light

 http://www.htsoft.com/products/PICClite.php

とBKDのCC5X

 http://www.bknd.com/cc5x/index.shtml

があり、これらは流石にかなりまともなコードを吐き出すので使って見ようかという気になります(でもアセンブラで書いたコードの9割程度の速度ですが、開発効率は10倍近くになるので) 個人的にはCC5Xの方が好ましく思いましたが只で使う場合の制限がキツイのでPICC Lightを使うことにしました。(こちらはほぼ無制限に使えるので)

Posted by さと at 2005年02月11日 02:19

--------------------------------------------------

初めまして、自分もPICでスピードコントローラを作りたいと思っています。

ここの書き込みも参考にさせてもらってプログラムは一応完成し現在LEDを点灯させて動作テスト中なのですが、あるポイントで動きが安定しません(ブレーキとアクセルが行ったり来たりします)。

たぶん信号幅計測中にTMR0の割り込みが入るせいだと思うのですが、計測中の割り込みを禁止するとPWM出力が全体的に不安定に・・・難しいですね・・・
また参考にさせてもらいたいと思いますので更新楽しみにしています。
よろしくお願いします。

Posted by ふる at 2005年03月03日 00:27

--------------------------------------------------

ふるさん、はじめまして。

 PWMでタイマー割り込みを使っている場合、受信機からのパルス幅をソフトカウントすると、どうしても割り込みの影響は避けがたいはずです。

 最初の方に書いたように/T1Gを使ってハードカウントすれば、解像度も上がりますし、ソフト的なタイミングも余裕シャクシャクですよ。(1ポート余分にI/Oが必要になりますが)

 他にはPICでのテレビゲーム制作の例のように割り込みを一切使わずにソフトだけで多重処理(タイマー待ちでNOPを入れるべきすき間に他の処理コードを詰め込んで処理する)手も無くはないですがこれはかなり骨の折れる作業だと思います。
Posted by さと at 2005年03月05日 02:03

返信ありがとうございます。
実はここの書き込みにあった「/T1Gを使って」という所にヒントがあるような気がしてずっと調べていました。
自分が持っている参考書にはTMR1GEビットについて載っていなかったので存在すら知らなかったのでのす。
「GP4とTMR1ONビットのANDでカウントアップをハード的に止める事が出来るのかな」という所までなんとなく解ったのですが正しいでしょうか??
Posted by ふる at 2005年03月05日 10:31

Timer1はTMR1GE=1にすることで/T1G入力によりカウント条件をゲート制御できます。
具体的には/T1Gがlowの時だけカウントアップできます。しかし受信機からの信号幅をカウントするためにhighの状態でカウントアップするようにしなければならないでの受信機からの信号を反転する必要があります。
 反転するためには受信機からの信号を一旦、コンパレータのマイナス側で受けて内部リファレンス値(2.5V前後に設定)との比較結果をGP2/COUTに出力するようにします。この出力信号を/T1Gに入れます。

PICのマニュアルは本家のMicrochipホームページからダウンロードできます(英語ですが・・^^;)
日本Microchipのホームページには16F8Xだけ日本語マニュアルがありました(他の型のマニュアルも積極的に日本語化して欲しいところではありますが)
Posted by さと at 2005年03月05日 13:16

--------------------------------------------------

詳しい説明ありがとうございます。
データシートの「Timer1 is on if T1G pin is low」て言う所ですね、そうすると信号をコンパレータで反転する必要があるのか〜。
トランジスタを使ってハード的に反転するのもありかな?
でもこう英語のデータシートって意味が解ってから見ると納得って感じですね、遅いか!!
今回スピードコントローラのプログラムをしてだいぶレベルが上がった気がします。タイマー、割り込み、データテーブルなど今まで避けてた部分に取り組めました。
T1G試してみます、ハードを変更しないといけなそうなので少し時間がかかりそうですが結果報告します。
またお願いします。
Posted by ふる at 2005年03月06日 17:23

--------------------------------------------------

PIC用freeコンパイラ情報です。

インターネットを閲覧していたらSDCCがPICの14&16bitに対応していることを見つけました。

http://sdcc.sourceforge.net/

sdcc -S -V -mpic14 -p12F629 %1
というようなバッチファイルでPIC12F629のソースをコンパイルしようとしてみたところ

pic12f629.h:61: warning 115: unknown or unsupported #pragma directive 'memmap 0x
0000 0x0000 SFR 0x000

なんてwarningがでてなかなかコンパイルが通らない・・・^^;

バンク切替えコードの最適化等もサポートしているようでなかなかよさげではあるのですが・・・

マニュアルを良く見たらPICは「In development, not complete」だそうですorz
完全対応版を待つしかないようですね。

Posted by さと at 2006年09月18日 02:10

--------------------------------------------------

フリーのCコンパイラSDCCですが、最近のものはPICに十分対応できているようです。
ただし、最近のsnapshot版でないと問題があるかもしれません。
Vine Linuxへインストールして使っています。
http://shino.pos.to/eda/pic.html

Windows用バイナリも配布されています。
Posted by シノバー at 2007年04月20日 19:14
by さと (2008-01-04 02:26) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0