2015年03月07日

dsPIC内部プルアップ

先日、ある試作機を作る際に遭遇したトラブルについて、
解決方法をご紹介します。


試作機の概要としてはdsPICのUARTモジュールで数MHzの高速通信をさせ、
RS485ドライバを介してデバイスと通信するものです。


遭遇した問題はUARTの受信がなかなか安定しないということです。
低速なUARTではこのような問題に遭遇したことがありませんでした。



時々、全く通信ができなかったり(受信割り込みが発生しない)、
通信できても、意図しないデータも一緒に受信したりという状況でした。


RS485とdsPICの間にオシロで計測すると、
波形には問題なく、通信も安定するという状況でした。


RS485ドライバは半二重通信なので送信モードと受信モードの切り替えに
問題があるのか、受信バッファ処理に問題があるのかなど色々検討しました。




結論は、UARTのdsPICの入力ポートの電圧が不安定だったようです。
オシロをつなぐと、プローブの微小なキャパシタンスで安定したようです。
電圧が不安定なため、ノイズの影響をもろに受けているようです。




対策は、
RS485のRO受信ポートからdsPICのUART入力ポートへ直接つないでいる
配線に対してプルアップ抵抗を間に入れました。


追加回路を作成するのは面倒なため、
dsPICのメインプログラム内で内部プルアップを有効にさせました。


dsPICリセット時のデフォルトではCN**ピンの内部プルアップは
すべて無効になっています。
CNPU1=0x0000;
CNPU2=0x0000;



今回、UARTの送受信ポートはRB10,11のため、
ピンアサイン図からCN15,16に該当します。



CN15,16の内部プルアップを有効にさせるため、
下記のように変更しました。
CNPU1=0x8000;
CNPU2=0x0001;




内部プルアップは外付けでプルアップさせるよりも、
弱いプルアップとなっていますが、
今回内部プルアップを有効にさせるだけで
遥かにUARTの通信が安定するようになりました。



内部プルアップ恐るべし。




内部プルアップを有効にすると、
スイッチ入力を使用する際の回路の簡素化にも貢献できます。
スイッチ入力の際に入力ポートに直接スイッチを接続し、
一方をGNDに落として、内部プルアップでプルアップさせれば、
入力ポート部分の抵抗やVDDなどのプルアップ回路が不要になります。


ぜひ、内部プルアップを活用してみてください。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック