スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SPI通信

今日も通信関係をいじる.
バッファの問題はトレラント機能のあるDIP品がなかったので,とりあえず74ACを入れてみたらそれなりに動くようになった.このICでは焼ける可能性があるが,今のところ問題ない.

マスター側のSH2は49MHz動作しているのだが,I/Oの切り替えでSPI通信をやるとコンパイラの最適化をかけても780kbpsがいいところだった.これではdsPICの半分以下の速度しか出ていない.ベステクのコンパイラ(GCC)がイマイチのせいだろうか? 今度SHCの評価版も試してみよう.

さて,通信速度はさておき多マイコンの切り替え実験がまだ済んでいない.
SPIにはスレーブをイネーブルにするピン(SSピン)があるが,たとえば16chのスレーブを制御するにはマスタ側にも16本のI/Oピンを用意する必要がある.外付けRAM用のバス線で大量にI/Oを奪われるSH2ではピンが足りなくなる可能性がある.そこで間に直列→並列のシフトレジスタをかませることを考える.(74HC595,74HC673など.)
これを使えばch数がいくら増えても制御ピンは2~3本程度で済みそうだ.

スポンサーサイト

信号伝達がうまくいかない

今週末はSH2によるSPIマスター機能の実装が目標だったが,あまり作業がはかどらず未達に終わった.
ベステクのSH2-7047ボードは5V駆動なので,dsPICと通信させるには3.3Vへのレベル変換が必要になる.電圧変換バッファとして,手近にあったC-MOSインバータの4069を使ったのだがこれがまずかった.クロックがまったく受信されない!オシロでクロック信号を見てみると2.5MHzのパルスがナマリまくっている.凪の瀬戸内海のような波形で,エッジが完全になくなっている.流れる電流が足りなくて,ケーブルのインピーダンスに負けてしまっているのだろう.立ち上がり,立下りも50nsec程度と遅く,高速伝送には向かないようだ.
4000シリーズのC-MOS ICには電源電圧よりも高い電圧の入力を許容するトレラント機能がついていないので,3.3VのVccに対して5V信号を加えるとラッチアップを起こしてICが壊れる可能性がある.最近知ったのだが,ロジックICに同じ機能で種類があんなにいっぱいあるのは,信号伝送速度とか,動作電圧,このトレラント機能のあるなしとかが違うためらしい.
価格もずいぶん違う.

この手のロジックICはピン配置がコンパチになっている.きっと74VHCシリーズなどの高速トレラントバッファに代えればうまくいくだろう.
さっそく部品を注文だ.

SPIによるマスター側からの操作

今日はdsPICを2個使って,スレーブ側のモータードライバをマスター側からのSPI通信の割り込みで動かす実験.
SPIは送受信が同時に行えるので,UARTなどに比べ高速の送受信が可能である.
2.5Mbpsで18Byteの送受信を試したところ,割り込みの関数オープンやデータのエンコード時間等も含めて1パケット75μsecとなった.これなら12軸でも1msec以内で更新できる.
目標値の更新は割り込みのため,制御ループ自体はもっと高速で動作させることもできるが,おそらく1msecで十分だろう.
送受信データ18Byteの中身はPIDの制御量や現在位置,速度,電流,温度など.モーターの状態を知るのに十分なデータ量だ.これをマスター側でRAMにストアすればDCの挙動が最大1msec刻みでわかる.
dsPICではRAM容量が少ないので,明日以降マスターをベステクのSH2に代える作業に移ることにする.SH2にはSPI通信はついていないのでソフトで実現するしかない.スレーブセレクトの切り替え等含めていずれやらなければならない内容なので,早めに感触をつかんでおきたい.

PIDフィードバックできた

今日はPIDの実装.モーターのフィードバックと軌道追従までできた.
これで以前SH2-7045でやっていたところまではdsPICでできるようになった.

週末にかけて,トラブルが多そうな通信関係を片付けたい.

やる順番
済 0.I/Oアクセス
済 1.PCとのシリアル通信
済 2.インターバルタイマ
済 3.モーター制御用PWM
済 4.2相エンコーダ入力
済 5.SPI通信
済 6.内蔵EEPROMアクセス
済 7.インプットキャプチャ機能
  8.Motion-Reactorのファームウェア
済  8-1 PWMモーター駆動+エンコーダ入力の確認(CW,CCW合わせ)
済  8-2 PID制御の実装
   8-3 マスターからの割り込みによる軌道追従
   8-4 OPアンプ+A/D入力によるDSP機能のテスト(温度計測,電流計測)
   8-5 PWMのセンターアラインモード(ゲート駆動突入電流分散のため)

購入リスト:
・74HC595(SSラッチ用)
・10MHzセラロック
ALFAT002

速度計測O.K

今日は昨日の問題を解析.まずはノイズの線を疑い,速度値がおかしくなる時にHになるピンをつくり,これでオシロをトリガしてその近辺の波形を観測.波形は多少ノイズがあるものの,特に目立ったパルス異常はなかった.となるとソフトのバグか.
データを何度か取ると,必ず高速域のあるスレッシュを越えたあたりから異常値が出始めている.原因はフィルタだった.3バッファのプログラマブルデジタルフィルタで,カットオフが低すぎてエンコーダパルスそのものまでカットされていた.結果フィルタされた後のUP_Downフラグが不定になり速度値が異常になっていた.

デジタルフィルタを正しく合わせ直すと,きちんと速度波形がつながった
めでたしめでたし.
明日はPIDフィードバックの実装に入る.

モーター駆動テスト

今日はPWMをモータードライバに出力してちゃんとモータが回るかどうかと,2相エンコーダ入力は正しくできているかをチェック.結果,モータ駆動は問題無し,エンコーダ位置入力も問題なし.
しかし,パルス間の時間を計るインプットキャプチャがうまくいかない.時々パルスを読み飛ばしているような結果が出る.ノイズの侵入であればパルス数を多く読む現象になりそうなのに,なぜか逆の現象.なぜだ?

今日は時間切れになった.明日以降解析しよう.

EEPROMアクセスとインプットキャプチャできた

今日も引き続きdsPICと戯れる.

EEPROMアクセスはC言語からアクセスする方法が分かりにくくて,とても時間がかかった.
結局一部をインラインアセンブラで記述する方法でやっとできた.
C30コンパイラ用 dsPIC EEPROM読み書き

エンコーダ信号のインプットキャプチャの動作テスト.つまらないところでハマリ,相当な時間を要した.まだタイマの値をキャプチャできただけなので,今後バッファを使用して速度計測のコードを書いていかなければならない.

今日はマイクロチップのマニュアルをあれこれあさったり,MPLABのメニューをポチポチ押していろいろ試したりした為に,今まで知らなかったことがかなりわかってきた.やはり問題に直面してそれを解決する過程で得られるものは非常に大きい.

ここまでで必要な内部モジュールの動作確認はほぼ完了したので,次はいよいよ本チャンのファーム作成に移りたい.

やる順番
済 0.I/Oアクセス
済 1.PCとのシリアル通信
済 2.インターバルタイマ
済 3.モーター制御用PWM
済 4.2相エンコーダ入力
済 5.SPI通信
済 6.内蔵EEPROMアクセス
済 7.インプットキャプチャ機能
  8.Motion-Reactorのファームウェア
   8-1 PWMモーター駆動+エンコーダ入力の確認(CW,CCW合わせ)
   8-2 PID制御の実装
   8-3 マスターからの割り込みによる軌道追従
   8-4 OPアンプ+A/D入力によるDSP機能のテスト(温度計測,電流計測)

SPI通信できた

今日はdsPICを基板にもう1個追加し,2個の間でのSPI通信のテスト.
たまに通信データが化けることがあり,解析に手間取った.
コンフィグビットをいろいろいじるも解決せず.・・?.オシロの波形も問題ない.・・??.
?マークがどんどん増えていく.

そしてあるとき,オシロのプローブを当てた時だけ通信が安定していることに気付く.
まさかと思いつつもクロック線を100kΩでプルダウンしたら見事にエラーがなくなった.
なんなんだ,このピンは?フロートしているタイミングがあるのか?
まぁとりあえず通信不安定は解決したので良しとしよう.

dsPICのエンコーダ入力できた

今日は2相エンコーダ入力を試す.一回目のビルドで問題なく動いた.
 dsPICは駆動周波数をかなり高く設定できるので,エンコーダの分解能もけっこう上げられる(1MHzぐらいまではO.K).また,シュミットトリガ入力や簡単なデジタルフィルタ(3バッファのローパスフィルタ)も内蔵されていてノイズに強い.この機能は実にうれしい.

ここまででサーボがかけられる準備はできた.しかし,フィードバックのプログラムはいったん後回しにして,明日以降はSPI通信などをやって行きたい.

やる順番
済 0.I/Oアクセス
済 1.PCとのシリアル通信
済 2.インターバルタイマ
済 3.モーター制御用PWM
済 4.2相エンコーダ入力
  5.SPI通信
  6.内蔵EEPROMアクセス
  8.インプットキャプチャ機能
  7.Motion-Reactorのファームウェア

dsPICのタイマとPWM動いた

昨日ハマッたタイマのタイミング問題は,一晩寝ると原因が浮かびアッサリと解決した.睡眠の力は偉大だ.
 2相PWMの発生も首尾よく作業が進み,モータードライブ用のデッドタイム発生を含めたリニア動作確認まで終了.今日は実に好調だった.
dsPICを始めてまだ間がないが,やはりコツがつかめだすと早い.特にC言語の場合はこれまでのソフトウェア資産がそのまま流用できるところも多くて大助かりだ.・・・思えば始めてアセンブラ+PIC16F873でIICに挑戦したときには,連続バイト送受信までいくのに1ヶ月もかかったものだった.
実にいい時代になったものだ.

タイマうまくいかず

今日はdsPICのタイマ1をいじる.インターバルタイマ用に割り込みを動かしてみるが,割り込み発生のタイミングがおかしい.どこか勘違いしているのだろうか?

ロボットブログ開設

このブログは趣味の日記です.
技術的な内容が中心となりますが,それ以外の個人的な内容も若干あります.

管理人へのご質問,要望等はコメントかE-mailでどうぞ.
メールアドレスは
mo_ya_ne[a]yahoo.co.jp
[a]→@に変えてください

です.

【譲ります】カテゴリは管理人が持っているロボットのパーツ等を安価にてお譲りするコーナです.
必要なものがあればE-mailで連絡ください.
【譲ります】コーナの目的は有効活用,不用品処分のため,返品はお受けできません.ご了承ください.
プロフィール

もやね

Author:もやね
長野県在住の会社員(メカニカル・エンジニア).
ロボットは完全な趣味としてやってます.
E-mail:
mo_ya_ne[a]yahoo.co.jp
[a]⇒@

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
FC2カウンター
ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。