演習課題のプログラム例

ロータリエンコーダ信号からは車輪の回転角が求まりますが、それを時間微分したものが回転角速度になります。時間微分は微小な時間内に起きた変化の割合になるので、一定のサンプリングタイムを決め、そのときの車輪回転角を取り、前回の値からの変化量を見ます。

一定のサンプリングタイムを生成する方法は演習その7「一定周期を作る」を参考に作成すれば簡単です。演習その7では200μ秒ごとに発生するタイマB1のオーバフロ割り込み中で5000回に1回の割合でフラグを立て、mainルーチンでそのフラグを監視し1秒間のインターバルを作成していました。今回サンプリングタイムはできるだけ時間間隔が短い方がいいので10msecとしました。オーバフロ割り込み中で50回に1回の割合でフラグを立てると10msecのサンプリングタイムを作れます。

 

 

 

 

 

 

 

 

リスト3 int.c(抜粋)

リスト4 main.c(抜粋)

 

実際に実行すると

図4

となりました。表示されている数値が正しいかどうかは、車輪側面の適当なところに印をつけ、ある適当な時間(例えば1分間とか)に何回転したかをみればいいでしょう。

 

演習課題

今まではPUPPYにシリアルケーブルを繋げたままでパソコンにデータを転送していました。タイヤを空転させるならそれでもいいのですが、実際に走行させるとなるとケープルが邪魔です。そこで走行中のデータをRAMに蓄えておき、走行終了後シリアルケーブルを接続してパソコンにデータを転送するプログラムを作ってみましょう。

演習課題ができたらココ