ゲンコツ用パルス発振器を作る
プロファイルの生成方法
プロファイルの生成アルゴリズムとして,ブレゼンハムのアルゴリズムが簡便に用いられているが,非線形性の制御には応用が難しい.これに代わる手段として,PD制御器を応用したプロファイル生成を用いる
プロファイラに要求される条件
- 滑らかな速度変化を生成し得ること
- 目標位置を刻々と変化させられること
- 処理時間が短いこと
いきなり実装の話
パルスはDDAによって発生させる.DDAのパルス周期は100kHzとする.DDAアキュムレータは24bit幅(B23-B0)とする.アキュムレータに速度値を足しこんでいき,DDAアキュムレータのB24が立った場合にパルスを1発生成する.
この場合,速度値と出力周波数の関係は以下のとおり
fout=vReg / (2^24) * 100kHz
fout 出力周波数[Hz
vReg 速度レジスタ
以下のソースを100kHzで実行する
p->accumulator +=
p->frequency;;
if((p->accumulator & 0x01000000)
!= 0){
p->accumulator &=
0x00FFFFFF;
//パルス発生
*dest = pVal;
numOfPulses++;
}else{
//そのままスルー
*dest = 0xFF;
}
PDコントローラの構成
以下のソースをDDA更新周期の50倍程度の周期で実行する
周期を荒くする理由は2つある
1)CPU負荷を下げるため
2)微分制御が効くようにするため
D項の値はe1-e2の値のゲイン倍である
毎回実行すると,e1,e2の値に差が生じることが少ないため,有効にD項が働かない
e1 = targetPos - aPos;
//位置偏差算出
acc = e1 * KP + (e1 - e2) * KD;
//PD制御
e2 = e1; //制御量ストア
//加速度リミッタを設ける
if(acc > 80000){
acc = 80000;
}else if(acc < -80000){
acc = -80000;
}
vFreq += acc; //制御出力によって速度更新
KP=100 KD=10000程度の値が適当である.
この制御のキモは加速度リミッタである
生成されたプロファイルの最大加速度はこの加速度リミッタ値に依存する.
よって,加速度リミッタ値をモーターの出力トルクに見合った値にすることで,無理なく加速できるプロファイルが自動的に生成される.
加速度リミッタの設定方法
最終更新:2013年05月14日 21:41