はじめまして。森です。
今マイコンでモータを制御するプログラムを作成中です。
しかしながら、モータを制御するためのカウント値の計算でつまづいています。
○現在の計算の仕方
総パルス数=Pls、自起動=Smin、最高速=Smax、加速度=Sup、減速度=Sdown
現在の時間=t、現在の速度=v
とすると、
↓
加速時間=(Smax-Smin)/Sup →傾き、自起動、最高速より、時間を計算
減速時間=(Smax-Smin)/Sdown
加速域のパルス数=(Smin+Smax)*加速時間/2 →(上辺+下底)*高さ÷2
減速域のパルス数=(Smin+Smax)*減速時間/2
t=0
for(i=1;i<=Pls;i++){
if i <=加速パルス数
v=Sup*t+Smin →次のパルスまでの時間t2 = 1/v → 次の出力パルスが持つ速度
v=Sup*t2+Smin
else if i >= Pls-減速パルス数
v=Smax-Sdown*t →加速域と同じ
else if 定速域
v=Smax
}
カウント値=クロック数[Hz]/速度v
↑
加速域、減速域の条件は省きます。
分かりにくくてすみません。
問題>
※総パルス数、自起動、最高速、加速/減速度を与えると、台形駆動を行うプログラ
ムを作成したい。
( 割り込みの度に次のパルス周期を計算し、出力するプログラムにしたい)
※ROM要領が小さいため、バッファにパルスパターンを持たしたくない。
※毎回割り込みの度に次のパルス周期を計算して制御したい。
1.市販のモーターコントローラーの中には自起動そのままのパルス
周期を出力していないものもあるが、これはどうしてでしょうか?
2.加速度の減速度を同じにしても、パルス周期が加速と減速で違ってしまう。
(階段状に速度が変化するので仕方がない気もしますが、何かいい方法はないで
しょうか?)
3.上のプログラムのようにやると、自起動が小さい場合、計算した加速パルス数よ
りも
ずっと早く最高速に達して波形(台形駆動)がおかしくなる。。
既にこのような制御プログラムの経験がある方や、
何かいい案がある方がいれば教えてください。
サンプルなどがあればさらにありがたいです。
よろしくお願いします。