工作の2S(Seiri/Seiton)

工作やプログラムでやったことをまとめていきます

KiCADの3DモデルにDesignSpark MechanicalとWings 3Dで挑戦

KiCADでのフットプリント作成と3Dモデル作成と割付までを書いてあります

事後録のため順序が実際の作業と前後しています。

 

 

こんにちは。皆さんも日々、KiCADで基板アートワークしますね。

で、3Dビューしますね。

 

たとえば下のデータ転送回路の場合4ピンのDIPスイッチやらSDのホルダやらArduinoやら、オリジナル部品だらけです。

f:id:kt-marshal:20160604204235j:plain

 

たとえばこのDIPスイッチ

f:id:kt-marshal:20160604204250j:plain

f:id:kt-marshal:20160604204257j:plain

 オリジナル部品の場合3Dビューがないのです。

せっかくの3Dビューもオリジナル部品だらけではランドと基板だけの絵になってしまうのです

 

 

さみしいやないかい!

 

ということで作ります。

 

作業にあたり下記のサイトを参考にさせていただきました

Cubify Design + Wings3DでKiCad用の3Dモデルを作る:そこんとこkuwaしく - ブロマガ

●必要なもの

 ・KiCAD

 ・DesignSpark Mechanical

 ・Wings 3D

 

●KiCADのフットプリントを作る

グリッドを "2.54mm" にしてランドを配置して

外枠はグリッドを "1.27mm" にして、ランドのセンターにアンカーを置いてグリッドで計算しながら書いています

寸法は後述のメーカー情報を使います

この辺は KiCADことはじめ 的なモノを参考にすれば良いと思います

f:id:kt-marshal:20160604204945j:plain

 

●3Dモデルを書く

DesignSpark使います。持ってない人は 公式ページでゲットだ!

www.rs-online.com

メーカーの寸法情報を参考に書きます

今回はOMRONのA6Eシリーズです

f:id:kt-marshal:20160604205354j:plain

f:id:kt-marshal:20160604205400j:plain

DesignSpark Mechanicalは 平面作って 絵を描いて ヒッパル!

 平面作って 絵を描いて ヒッパル!

f:id:kt-marshal:20160604205635j:plain

はいおわり!

DSMで電子部品を書く方法もまとめるかも

 

各構成ごとにコンポーネントを分けて、色をつけています

f:id:kt-marshal:20160604210028j:plain

グリッドをヤード系にすると、グリッドにあわせながら簡単に作図できます

また、3Dモデルは見た目の話なので(?)ピッチは守りながらも外形などはラフに書きました(手抜き)

 

そして、完成したこいつを STL(Stereo Nantyara Li) で出力します。

STLは3D図形を細かい三角形の張り合わせで表現しようというものです。ファイルの中身は三角の座標とその面が向くベクトル情報の羅列になっています。

 

●Wings3Dで着色してwrlに変換する

DesignSparkMechanicalでは wrl が吐き出せないため Wings3D のお力を借ります

また、STLには色などの属性は含まれないため、着色もWings3Dで行います

(DesignSparkMechanicalがwrlを吐き出せれば一番いいのにね)

 

※説明書などを読まずに適当にやった方法です

 

最初にSTLをImportします

 

部品構成情報を用意する

Outliner ウィンドウをなんらかの方法で表示し、default を右クリック → duplicate(複製)して部品にRenameと色の設定をします

f:id:kt-marshal:20160604211535j:plain

色の設定は右クリックし Edit Material... をクリック

f:id:kt-marshal:20160604212312j:plain

下図、1、2の手順で変更可能 Ignoreのプルは左クリックを押しっぱなしじゃないと勝手に隠れるので注意

f:id:kt-marshal:20160604212320j:plain

 

次は部品のメッシュ(三角)を今作成した構成情報に割り当てていきます

範囲選択などし、赤くします。下記はピン(赤くなっている)を構成するメッシュをすべて選択したった

f:id:kt-marshal:20160604211522j:plain

outlinerの対象の pin を右クリックし Assign to Selection をします

するとそのメッシュに設定が適用されます。そう、色が変わるはずです

f:id:kt-marshal:20160604211704j:plain

割り付けたらスペースキーを 押して選択を解除します

 

これを繰り返すとすべてに色がつきます

メッシュは1構成にしか割り付けられないらしく、メッシュを別の構成に割り付けると

横取り的な感じになるようですね

f:id:kt-marshal:20160604211229j:plain

 

エクスポートします

f:id:kt-marshal:20160604213308j:plain

 

●KiCADに取り込む

プロパティで取り込めますが、なんか知りませんがでかいですな。

(図はお試しで取り込んだ段階なので白いのです。ブログ用に作業の順序変えてるんすよ)

f:id:kt-marshal:20160604213301j:plain

まあ、ピッチさえあっていればプロパティの調整でなんとかなるでしょう

スケーリングと位置オフセットを都合よくいじります

f:id:kt-marshal:20160604213404j:plain

あーだこーだやって、しっかりはまりました

f:id:kt-marshal:20160604213605j:plain

そして、細かい修正の中、スイッチの色をオレンジにしたらボディーが真っ白になって戻らなくなりました。スノーホワイト、これはこれでありですね。

f:id:kt-marshal:20160604213754j:plain

続いてほかの部品を作ってみました

あまり凝るとメッシュが増えて大変です。特にRや丸系は悲惨なことになるかも知れません

f:id:kt-marshal:20160604213855j:plain

f:id:kt-marshal:20160604213902j:plain

同じようにフットプリントに割り付けます

 

そしてKiCADでアートワークするとこんな感じです

 

 ばばーん!

f:id:kt-marshal:20160604214559j:plain

なんか作った感出てきますね。

もう満足したし実物作らなくてもいいや

 

この機能は、手付けするとしたらコテが入るか?とか、SDカード取り外せるか?とか実用面での確認がしやすくなると思います

ただし、画像での保存しかできないため、メカCADにインポートして筐体設計に引き継ぐなどはできないようです

(世の中的には3Dモデルとしてシミュレーションにかけたりします)

 

最初の1個目は1時間かかりましたが、2個目からは10分程度でできるようになりました

 

3Dモデルを配布しているサイトもありますのでそこから利用させていただくのも手だと思います

 

今回のデータ

SW-DIP4.zip - Google ドライブ

 

 

パソコンからArduino経由でSDにファイルを書いてみる1

ブログ作成時の作業BGMです

 

●製作品イメージ

PC上のファイルをArduinoを介してSDカードに書き込む

f:id:kt-marshal:20160601223408j:plain

この関係あまり詳しくないですが、OSとSDカードが直接つながらないのでAutorun.infにかかわるワーム被害のリスクはだいぶ低いんじゃないでしょうか。(そういう目的ではないですが)

 

●ということで

製作物は3点になります

 ・そういうのができる回路 

 ・VBの送信ソフト

 ・Arduinoソフト

 

●そういうのができる回路

まずはハードウェアが必要になります。

KiCADで作図しています。オリジナル部品の作成もだいぶ慣れてきました。

自動車学校で言うと教習所の外を走り出した感じですね(?)

f:id:kt-marshal:20160601232330p:plain

回路ですが、Arduino NanoにSDカードホルダーをつなぐだけです

SDホルダーDIP化キットを使用しています。DIPスイッチはパーツケースで腐ってたモノを使用しました

マイクロSDカードスロットDIP化キット: 組立キット 秋月電子通商 電子部品 ネット通販

 

拡張機能としてDIPスイッチを4つ取り付けています。

1ピンと2ピンの状態を起動時に読み取りボーレートを4800, 9600, 57600, 115200の4つに切り替えるというものです。早いほうが良いに決まってるので115200で使うことになるでしょう。残り2ピンは未使用です。

 

ブレッドボードで配線するとこんな感じ↓

f:id:kt-marshal:20160601233534j:plain

 

●VBの送信ソフト

Arduino Nanoとダイレクトにシリアル通信できるため、.NETのSerialPortを使用します

(ちなみにワタクシは気分でVBC#を使い分けています)

f:id:kt-marshal:20160601233841j:plain

SDの機能とファイル送信の機能があればいいかなということでこんな感じ

暫定でほとんどの機能を作ります

-----コマンド一覧---------------------------

CMD_ACCEPT As Byte = Asc("0") ' 通信受信正常
CMD_END As Byte = Asc("1") ' 通信終了指令

CMD_PING As Byte = Asc("2") ' PINGコマンド
CMD_SD_CONFIG As Byte = Asc("3") ' SD構成情報要求
CMD_SD_DISCONNECT As Byte = Asc("4") ' SD取り外し検出
CMD_FILE_SEND As Byte = Asc("5") ' ファイル送信
CMD_FILE_NACK As Byte = Asc("6") ' ファイル受信失敗
CMD_FILE_ACK As Byte = Asc("7") ' ファイル受信応答

CMD_NOP As Byte = &HFF

 

接続までの流れ

接続 ボタン押下でSD構成情報要求をArduinoに送信します

ArduinoからSD形式、全体容量、使用済み領域が帰ってくる

接続が確立する

確立中はVBから1秒ごとにPINGが送信されArduinoPING応答する

応答がない場合は切断する

データの送信

ファイル名を送信する(unicode風?) ArduinoはACKを返す

SD上にすでに存在すれば削除する(上書き)

ファイルサイズを送信する ArduinoはACKを返す

63byteブロックで送信し、ブロック受信でArduinoはACKを返す

エラー時はNACKを返し作業中のファイルを削除して終了する

書き込み時はLEDが点滅する

 

そういえば、「シーケンス制御検定」は、このように箇条書きレベルの仕様書で

プログラムを作らなければならないので大変でした

Arduinoソフト

VBソフトの仕様にあわせて作って行きます

SDの抜き差しに対応するために下記の工夫をしています

SPI.end();で終わることで、再度のSD.beginが正常実行でき、SDのホットプラグに対応できます

 

// ----------------------------------------------------------------------------------------------
// SDを終了する
// ----------------------------------------------------------------------------------------------
void SD_dispose() {
  SPI.end();
  volumesize = 0;
  usedsize = 0;
  sd_flag = false;
  sd_standby = false;
  sd_disconnect = true;
  // Serial.print("exit...\n\n");
}

 

 現段階のソースは下記です

 ・通信が不安定です

 ・SDスイッチが不安定です

movexe.zip - Google ドライブ

 

●データの転送

途中途中ハマッタところが

・ファイル名をAsciiで送ったところファイル作成ができず、unicode(風)にしたらできた

Arduinoのシリアルバッファ64bytesいっぱいにおくったらどうも63Bytesまでっぽい?

 

なんやかんや下記のように転送できました

f:id:kt-marshal:20160601235941j:plain

bschのなぞの回路図をSDに転送し無事開けたところです

作成日時は 2000/01/01/01:00:00 になっています

DEBUG.TXTは経過を記録するファイルです

 

残念なことにbschの回路ファイルはまんまAsciiファイルなのでバイナリファイルを次回試してみることにします

コンデンサ溶接電源の自作 その4 ~そして蔵入りへ~

●結論

現行の設計では放電回路に問題があり、溶接できないことが判明しました。

とりあえず仕様

 コンデンサ:0.04F

 充電電圧:8V ~ 35V

 出力エネルギー:1.2J ~ 24J

 溶接時間:すべてを放電しきるまで

電圧をボリュームで設定する方式です

 

一応、壊れるまでの2回、サス棒の溶接に成功しました

結構頑丈で引っ張り強度はよく、ねじって取れるレベルでした

f:id:kt-marshal:20160515004552j:plain

 

また、前回よりバージョンアップしています

秋月DCDCの出力を35V(+5V)に変更しコンデンサも2倍盛り

f:id:kt-marshal:20160515005423j:plain

配線もモッコリーナ

f:id:kt-marshal:20160515005454j:plain

●問題の予想

状態として、最大出力時にFETの片側が壊れます。データシートを見ると壊れて当然です。

FET2個では200Aも流せない

2SK3271は定格100Aなので、最高パフォーマンスでも2個200A。

35V放電直後のIDは350Aを越えようとし、2SK3271(2パラ)では消化できない。後半はVgs4V代だったので駆動率が悪くなおさら。

チョコボール生産ラインのチョコボール流し量を4倍にされ

おまけに給料も安いのでラインマンが過労死するイメージです

 ※あくまでイメージで、チョコボール生産ラインがブラックかどうかは知りません

Vgs5VではIDが高く無視できないレベルのRonとなり半開きになるようです

また片側だけ壊れるというのは、Cissが9nFと高いのに対しRgs100Ωで駆動しているため、抵抗やらFETやらのばらつきによって感度の良いほうが先に焼けてショートするからもう片側は保護されるという感じなんだと思います。

 溶接SWオン

 ↓

 FET半開き

 ↓

 FETでロスしながら放電

 ↓

 かたっぽ壊れるドーン!

FETが短絡して溶接開始というスイッチ方式

 

2SK3271でやる場合、Vgsは9Vの4パラくらいにする必要がありそうです。

2SK3271を使ったのは家に転がっていたからです。

拾ったものを使うからです

 

 

保護回路がない

調べると、FETの出力段をコンデンサにクリップすることで発振(サージ?)を防止するような工夫があるようです。

Vgs低下時の故障を防ぐために電圧低下検出回路も必須でした。

 

●ということで次回は

・FETを増やす

・FETのVgsを上げる

・FETドライブ抵抗を小さくする

・2sqより太い線を使う

・OSコンも検討

 

今回でいろいろと だいぶ習得することがあり、次回は安心して使えるものが作れるような気がします。

商用電源を使用しない溶接機に次回もトライするつもりです。

 

●感想

楽しかったです

コンデンサ溶接電源の自作 その3

●電極を作る TAKE1

洗濯ばさみの両口にクロム銅の丸電極を接着で取り付ける方式です。TAKE1ということなので、当然この方式は失敗しTAKE2があるということです。けっ

写真のように洗濯ばさみの口に穴をφ4mmの開けます。適当にやったら1mmくらいずれました。

f:id:kt-marshal:20160509002755j:plain

電極はクロム銅電極φ4mmを使用します。

f:id:kt-marshal:20160509002801j:plain

電極は長いので、半分にするための金切のこをダイソーで買ってきました。

この商品は100円です。

f:id:kt-marshal:20160509002808j:plain

 

電極に電線をはんだづけします。ライターで400℃近くまで炙ります。

始め、鉛フリーはんだでやったら熱容量不足ではんだごてがはんだに埋まったので共晶はんだに変えました。

f:id:kt-marshal:20160509002813j:plain

f:id:kt-marshal:20160509002821j:plain

 

上下ともに配線し洗濯ばさみの穴に通した後、エポキシ系接着剤で固めます。

f:id:kt-marshal:20160509003518j:plain

洗濯ばさみを 常時開 Normally Open にするためにGクリップを使用しています。

f:id:kt-marshal:20160509003646j:plain

溶接をする前にトラブル発生

どうやら穴ずれ修正で穴を広げたせいか片側の電極の接着が弱く、閉じる力でひっこんでしまう感じになりました。ということで急遽方式を変えることにしました。

 

●電極を作る TAKE2

接着の弱い側を板形状のものにします。コンセントのプレートにすることにします。この材料が適正かどうかはわかりません。

 金切のこでコンセントプラグのプレートを切り、電線をはんだづけします。

f:id:kt-marshal:20160509004311j:plain

なかなかいい感じなので失敗したほうがよかったと思いました。

f:id:kt-marshal:20160509004347j:plain

 

●実力を確認する

いちおう9Jのエネルギーを300msec程度で出力する予定です。

K熱電対をカッターで剥き、交差させ洗濯ばさみではさみます

f:id:kt-marshal:20160509004524j:plain

f:id:kt-marshal:20160509011235j:plain

 

うんともすんとも言わないよ

 

波形を確認すると1段目のドライブ用トランジスタがオンしていないようです。

CH1:マイコン出力

CH2:トランジスタ出力

トランジスタ出力がマイコン出力L時にHになるはずが無視されている。

f:id:kt-marshal:20160509004805j:plain

どうやら前回30V線をマイコンに触れさせたときにトランジスタも死んだ可能性があります。ということで交換したところドライブ回路は直ったようです。

CH1:トランジスタ出力

CH2:FETゲート入力

f:id:kt-marshal:20160509004944j:plain

 

あらためて熱電対を溶接してみます。

 

溶接できると思ったのですが、どうも熱で軟らかくなった分へこんだだけのような感じです。(細かくて写真はとれませんでした)

 

●なんで溶接できないんじゃ

理論上コンデンサ電圧30V、20000uFで仮に出力抵抗を2Ωとした場合、メインパワー継続時間は下記のグラフのように100m秒程度になるはずです。

f:id:kt-marshal:20160509011052j:plain

f:id:kt-marshal:20160509014057j:plain

実際の出力波形は下記で、7msecで放電しきっています。

f:id:kt-marshal:20160509011223j:plain

f:id:kt-marshal:20160509014306j:plain

7msecで放電しきるということは100mΩ以下である必要があります。ほんとにそうなんかなと思ってしまう。そして、コンデンサ放電波形に見えないという。

 

明日も休みなのでトラブルシューティングアンドウ対応は明日にすることにしました。

 

 

 

コンデンサ溶接電源の自作 その2

その1の続きです。その1はすでにだいぶ前に行った作業のまとめのため写真が少ない内容になりました。

また、この記事は英雄伝説 空の軌跡FCのローディング時間を使用して作成しています。

●主要キャスト(登場部品)

コンデンサ10000uF, 50V 2個使用

大須のボントンで購入しました。

f:id:kt-marshal:20160505202444j:plain

Nch FET 2SK3271

職場で拾ったのでタダ!5V駆動できるのでちょうどよい。放電用のスイッチとして使用します。

f:id:kt-marshal:20160505203136j:plain

木の入れ物(雑貨)

セリアで購入。ケースに使います。側面の隙間にスイッチを並べられるかなと思ってこれにしました。

Now, At the top of happiness.というのは今がまさに最高にハッピーだぜ的な感じでしょうか。そいつはよかった。

そして、2というのも意味分かりませんね。

f:id:kt-marshal:20160505204342j:plain

プラスチックまないた

 これもセリアで購入。立派な樹脂板材料です。PPPは加工しにくいと聞いたことがありますがまあいっかという。今回は木に張り合わせるという用途なので肉用を選択。

f:id:kt-marshal:20160505205356j:plain

●基板をつくる

家にある基板やコネクタを総動員し基板を作成

電線出し作業はケースを買う前に行ったため短く、あとで電源スイッチの分を作り直すことになったり、押しスイッチの線がちぎれたりと大変でした。

奥のライターはスミチューブ用です。ドライヤーやはんだごての根っこより収縮しやすいのでオススメです。(火災の危険がありますので使用については充分注意してください)

f:id:kt-marshal:20160505205956j:plain

コンデンサは下記のように2sqKIVで配線。一点配線がいいような気もしますが、ブレッドボードでも問題ないレベルなので数配線にしました。

f:id:kt-marshal:20160505210417j:plain

はんだ面です。コの字の黒い線はコンデンサやFETのGND線で電源の近傍で落としています。

左上の2sq集中エリアでは線間0.5mmくらいのギャップではんだ付けされているため、ショートすると危ないのでホットボンドで充填しておきました。

f:id:kt-marshal:20160505210953j:plain

 

 動作確認しOKそうなのでケースに入れて配置を確認します

基板固定サポータもピッチが底の梁木とちょうどよくなりました。

コンデンサも2sqの強力なテンションで写真の位置で静止しました。このまま固定できそうです。電池は適当です。

f:id:kt-marshal:20160505211657j:plain

●スイッチパネルを作成する

ここでまないたの登場です。製造者もこんな使われ方をするとは思ってなかったでしょう。

まず、必要なサイズを切り出します

f:id:kt-marshal:20160505212222j:plain

角のRは隠れるので気にしません

f:id:kt-marshal:20160505212234j:plain

スイッチ用の穴をエンピツでけがきます。一般的に、メーカー資料に板金寸法として穴寸法が出ていますがめんどくさいので実測でいきます。

f:id:kt-marshal:20160505212405j:plain

角穴はカッターで切り抜きます。丸穴はカッターでは難しいので、ドリルでφ5を空け、リーマで広げます。

f:id:kt-marshal:20160505212605j:plain

最後にカッターを使用してバリ取りして完了。

 

やはりPPPはやすりの刃は立ちませんでした。おそらくリュータでも溶着すると気がします。(昔、職場のリューターをPPP削って目詰まりさせて放置したことがあるのは内緒)

ちなみに樹脂加工は目の粗い組やすりもしくは紙やすり、2番角のゆるいドリルがいいみたいですね。(そんなもんうちにはない)

 

●組み立てる

基板は貼り付けボスで固定しています。タカチの製品だと思います便利です。

その他もアクリルフォーム強力テープやホットボンドなどで固定しました。

黄色のスイッチの穴が大きかったのでホットボンドで固定しました。(仕事だったら怒られてましたね)

f:id:kt-marshal:20160505213242j:plain

f:id:kt-marshal:20160505213236j:plain

いろいろあって、30Vの線をマイコンの数ピンに接触させてしまい、マイコン1つおしゃかにしましたが、マイコンを交換し電源投入から放電までどうにか動いているようです。

 

●次回の計画

次は溶接電極を作る予定です。洗濯ばさみのように自動で閉まる機構にうまくクロム銅電極を取り付けれればと思います。

クロム銅電極はCMでおなじみミスミー!で買えます。ただしメーター単位だったと思いますが。

 

明日から仕事という暗黒の時代の幕開けなので、たいがいのことが滞りますが、時間を見つけて作っていこうと思います。

コンデンサ溶接電源の自作 その1

2016年5月14日 追記 この設計ではうまく溶接できないという内容をその4でまとめてあります。

●作ろうと思ったきっかけ

仕事の延長線上(遊び)で近藤テックのマイウェルダーを使って熱電対の抵抗溶接を堪能しました。

近藤テック*1マイウェルダー

f:id:kt-marshal:20160504132924j:plain

マイウェルダーは、単相交流をトランスを通して1周期流すというシンプルな構造でした。

今回はコンデンサ充放電式なので方式はマイウェルダーとは違いますが、熱電対の残りかすが家にあるので、溶接ができる電源を造ってみようと思った次第です。

 

ただ、溶接できたからといって日常生活で得することは全くないので、フリマとかで売りつけて、その金で焼肉でも食べれたらいいなと思っています。

 

●事例を調べる

ネットに結構事例がありますね。過去トランジスタ技術にも事例がありました。

Youtube動画だと実際に溶接する様子が見れてなかなか迫力あるマシンもありました。

人によって細かい違いはありますが、

 コンデンサに 充電して ドーン!

ということは共通しています。したがって、そこを念頭に適当に設計していくことにします。

●構成を練る

f:id:kt-marshal:20160504135743j:plain

昇圧DCDCでコンデンサに充電

フィードバック電圧をマイコンADで監視

充電完了で放電スイッチ点灯

放電スイッチ押下でFETオン!

 

昇圧DCDCには秋月電気のモジュールを使っています

最大30V出力 昇圧型スイッチング電源モジュール NJW4131使用: 組立キット 秋月電子通商 電子部品 ネット通販

●回路図

KiCADを使っての初作図です。

画像として出力する方法がわからず、svgpng → jpg(pngの背景透明がアウトっぽい)としたらギリギリ数字が読めるかなレベルになりました。f:id:kt-marshal:20160504144839j:plain

 

●プログラム

自作溶接1プログラム.zip - Google ドライブ

とってもシンプルになっています。(一言で言えば手抜き)

 ADC、Timer0、FVRの自作ライブラリも同梱しています

●検証してみる

ブレッドボードで検証をしました。(ブレッドボード写真はどっかいった)

放電すると電源電圧が瞬間持ち上がる問題

どうやらFETのソースを電源GND端子から遠いところに配置したせいで、急な放電電流により電位差がでていたようでした。根元に配線しなおすことでキレイに解決しました

また、波形右側のギザギザもコンデンサのGNDを同じく電源近くに配線しなおすことで直りました。

f:id:kt-marshal:20160504142825j:plain

 

実際に熱電対を交差させた状態で放電したところ、火花が散りくっつきました。

(画像があったはずがどっかいき、電対もどっかいった)

爆裂の一歩手前レベルのようでややもぎれ状態でした。レベル、加圧を管理できればきれいにつくのではないかと思います

 

次回は基板製作とケーシング、電極製作をめどにまとめる予定です

なんか画像がごっそり消えたような気がするのは気のせいかな

 

●溶接について思い出す

仕事の延長線(遊び)の中で溶接について簡単に勉強もしました。

  • 溶接電流
  • 加圧力*2
  • 時間

の3つを管理することが重要で、単純に I^2Rt[J] の発熱量Hの公式に当てはまります。(異金属であれば電流方向もペルチェ効果の影響を受け片側が溶け過ぎ、もう片側は溶け不足になるなどもある)

今回、時間と電流はコンデンサと電圧による成り行きで、ボリュームによる調整で決まりますが、加圧力は形式によってばらつくような気がします。

 

たぶん洗濯ばさみ的な物ではさめばいいんじゃないかなと思っています。

*1:参考リンク:http://www.kondo-tech.co.jp/kthlist.htm

*2:電極が溶接電流により溶けて軟らかくなるのに追従して電対を抑えることで空間を作らず一体化させる目的がある

PIC1823のTimer0モジュールまとめ

●Timer0モジュールを使う目的

  • ミリ秒のウェイト
  • メインループのFPS管理

ワタクシはTimer0の割り込みでカウンタをインクリメントしています

現在オーバーフロー対策がありません(そんなんでいいんかい!)

 

●Timer0モジュール

f:id:kt-marshal:20160502215516j:plain

f:id:kt-marshal:20160502220447j:plainFosc/4(左上)を青線のとおりに導いてクロック源とするために OPTION_REG を設定し、割り込みを有効化すればTMR0レジスタのカウントが始まります。オーバフローするたびに割り込みルーチンが呼び出されます。

TMR0レジスタ

TMR0レジスタは8bitなので255からインクリメントした時点でオーバフローし、割り込み処理が呼び出されます。つまり256クロック必要なことになり必然的に256分周されちゃうわけです。

そこで割り込み処理終了時にTMR0に意図的に数字をセットすることで細かいタイミング調整ができると思います。(なぜ断言しないかというと合ってるかどうかはわからないがそれっぽくなったから)

●プログラム

tim0Initなど関数はtim0_lib.cにまとめてあります

// ------------------------------------------------------------------------------------------------
// 割り込み
// ------------------------------------------------------------------------------------------------
void interrupt isr(void){
  // Timer0割り込み処理
  if (TMR0IF == 1){
    tim0_count++;
    TMR0IF = 0;
    TMR0 = tmr0_val;
  }
}

void main(void) {
  // 初期化処理
  // Oscillator Control Register
  // SPLLEN (1) : 4x PLL is enable.
  // IRCF (1101): Internal oscillator frequency [4MHz HF]
  // uninplemented (0) : Read as '0'
  // SCS (11) : System clock select [Internal oscillator block]
  OSCCON = 0b11101011;

  // Timer0初期化
  tim0Init(OPTION_PA_8, 131);

  // 割り込みの有効
  PEIE = 1;
  GIE = 1;

  while(1){
    tim0_Wait(1000);
  }

  return;
}

 

下記は参考プログラムファイル

tim0_lib.zip - Google ドライブ

 

●チョイ待ちWait談義

職場ではArduinoの普及とともに、続々とマイコンデビューするようになっています。しかも、Arduinoでは標準でdelay()が用意されておりWaitもお気軽です。

そして、よく見かけるのが「ここのWait10秒実行してる間、スイッチとか見れないからどうしようかなー」というマイコンWait All 無視状態への対策。特にフロー制御系で出てきます。

こういう処理の場合、ワタクシは個人的に500msec以上のWaitは使わないようにしています。

下記のように「入力処理」と「状態」に分離し一箇所で処理がクローズしないようにします

 

入力処理 --------------------------

現在の状態を設定する

スイッチ、完了信号を変数などに代入(制御、出力は行わない)

 

状態処理 --------------------------

状態により遷移と処理

mode変数を列挙対として用意する。case内で状態遷移と処理を行う

switch(mode){

  case state1:  // センサーONならstate2へ

  case state2:  // 処理1実行しstate3へ

  case state3:  // 処理1実行完了ならstate1へ

}

てきな?

switchを増やせば並列作業も一応できると思います。ポイントはwhileなどで一箇所で処理が停滞することのないプログラムにするところです。

これはPLCのラダーの概念を参考にしています