トピック関連記事
48時間以内の記事は New Mark で表示されます
Re: 続続続続続ーPWM
またいっぱいになりました。

> 21行目 次の上げ下げは500マイクロ

それは、次の「ワイパーの」上げ下げは500usあける、という事でクロックの事ではありません。その前の1usはそれでいいです。
つまり、命令が入って、実行される=次のワイパーを繋ぎ→前のワイパーを切る、のにそれぐらいかかるから開けてくれ、という事でしょう。

No.1542の図で、オペアンプの電源になぜかコンデンサが付いていますけど?
猛牛ロック 2019/06/04(Tue) 12:23 No.1551
Re: 続続続続続ーPWM
デジタルでの取得も決して難しいものでは無いですよ。
MABOさんはちょっと難しく考えすぎでは?
下記程度でアナログよりもちゃんと読み取れると思います。



#include <xc.h>

#define inc LATB3
#define ud LATA3
#define mach RB4

// クロック周波数指定
// (__delay_ms()関数が必要としているため)
#define _XTAL_FREQ 16000000
// プロトタイプ宣言
unsigned int adconv(void); //ADC読み込み関数


//外部変数
char x9c_val;//ワイパ位置

//デバイス初期化関数
void x9c_init(void) {
ud = 0;
for (char i = 0; i < 99; i++) {
inc = 0;
__delay_us(1);
inc = 1;
__delay_us(500);
}
x9c_val = 0;
}

//U/D_up関数
void x9c_up(void) {
int ud = 1;
int inc = 0;
__delay_us(1);
int inc = 1;
if (x9c_val < 99)x9c_val++;
//次の上げ下げは500us空ける
}

//U/Ddown関数
void x9c_down(void) {
ud = 0;
inc = 0;
__delay_us(1);
inc = 1;
if (x9c_val > 0)x9c_val--;
//次の上げ下げは500us空ける
}

//メイン関数
void main() {
OPTION_REGbits.nWPUEN = 0;
OSCCON = 0b0111001;
PORTA = 0x00;
PORTB = 0x08;
ANSELA = 0b00000000;
ANSELB = 0b00000000;
// 入出力設定
TRISA = 0b00000000; // RA全て出力
TRISB = 0b00010000;

T1CON=0x31;//タイマー1を1/8で回す
※Mach周波数100~500Hz程度想定。→8000~40000カウント
x9c_init();
TMR1L=TMR1H=0;//タイマリセット

unsigned int p=0,d=0;
while(1) {
while(mach==0) {
if(TMR1H>250)<停止(x9c_down;)>;//250はテキトウ
}
p=(TMR1H<<8) | TMR1L;//周期記録
TMR1L=TMR1H=0;//タイマリセット
if(P>○○) { //100Hz@40000カウントなら39000とか。
target=100.0*d/p;
if(target>x9c_val)x9c_up();
else if(target<x9c_val) x9c_down();
}
}
while(RB4==1);
d=(TMR1H<<8) | TMR1L;//HIGHの時間記録
}
}


ちょっとNo.1543はスパイクが大きいような気もしますけど、
私の予定?では添付図のように周波数に合わせてwhileをまわして4点、もしくは8点を取得する、
という考えなので、多少の事はデジタルフィルタで誤魔化せます。

猛牛ロック   2019/06/04(Tue) 13:46 No.1553
Re: 続続続続続ーPWM
猛牛ロックさん、レス有り難うございます。
オペアンプに付けたバイパスコンデンサーです。ローパスフィルターとは役目が異なります。
必要性は 、教科書的な配慮です。

今回はコーセルだったか?
ちゃんとした電源なので、パスコンデンサーが実際必要かわ知りません。
オペアンプを高周波ノイズから守るそうです。安全側に付けます。


この先、デジタル可変抵抗とつないで、スピンドルモーターを上手く回せるか、不安です。
念の為、オペアンプのゲインを5vまで上げられるようにした方が良いでしょうか?
やったことわないので不確かですが。


ローパスフィルターに戻ります。
maboさんが参考にしてローパスフィルターを付けた実験をしオシロの写真を見せてくれました。矩形波が三角になっていました。
波形が心配です。
-****
maboさん
先達者のように、リップル対応のプログラムを頑張って作って下さい。
TR   2019/06/04(Tue) 14:51 No.1554
Re: 続続続続続ーPWM
猛牛ロックさん、自分の書き込みの差し換えました。。
すみません。

波形の乱れを4回のサンプルから平均値をとるから大丈夫と云いたいのですね?
理解
でも、プログラム変更するの?!
ジェジェ
前のプログラムで駄目?
TR   2019/06/04(Tue) 16:00 No.1555
Re: 続続続続続ーPWM
フィルターを通して読み取る方法は、元々、
・4つのサンプルから平均を取る
・1つしかワイパーを上下させない、
という2つの対策をしています。
なので、多少の乱れは大丈夫だと思っています。
もう少し…と思ったらサンプルを8個にすれば大丈夫でしょう。
ほぼ平均化されて乱れは出ないと思います。

> 前のプログラムで駄目?
この3行です。

adc[(++num)&3] = adconv();
for (char i = 0; i < 4; i++)target += adc[i];
target /= 40.93;
猛牛ロック   2019/06/04(Tue) 16:48 No.1556
Re: 続続続続続ーPWM
変更点を整理すると 下記の通りでしょうか?

   記
39 static unsigned int adc[8] = {0};



42 adc[(++num)&7] = adconv();

43for (char i = 0; i < 8; i++)target += adc[i];
44 target /= 81.84;
TR   2019/06/04(Tue) 19:14 No.1557
Re: 続続続続続ーPWM
猛牛ロックさん,TRさん,こんばんは。

猛牛ロックさん,レスありがとうございます。

デジタルの読み取り難しく感じるの,割り込み等が,入って来るからだと思います。

未だに,設定が面倒なのです。

その都度,参考書と首っ引きです。

それから,デジタルの読み取りのプログラムありがとうございます。

後で,試してみます。

基本周波数を変換しても,思った結果が得られないので,
使ってるPWMのコントローラーの特性も関係あるのかな,
なんて思い始めました。

MACHからのPWMのDUTY比がRPMとどんな関係なのか,

興味がでてきましたので,のんびり,MACHのDUTY比でも計ってみようかなと思います。

TRさん,はかどりますね。

いろいろあっても,トータルとしてまとめ上げてしまうので,

TRさんもすごいな,と思います。
mabo   2019/06/04(Tue) 22:54 No.1558
Re: 続続続続続ーPWM
> TRさん

そうです。8個ならそんな感じです。
でも重要な事はMACHのPWM周期とサンプリングレートの関係です。
その波形に対していいバランスでサンプルを取る事です。


> MABOさん

今現在、どんなプログラムで試しているのかは判りませんけど、
表の記事上の最新ではMACHの周波数1kHz=1000us周期にたいして、サンプリング周期は100usです。
なので、それだとサンプリング数が10でMACHからのPWMのDUTYを判断しています。
そして、サンプリング周期の整数倍が周波数になるので、うねりを持つような結果になると思います。
例えば、DUTY比が12%だとしたら、完全にPCとPICの周波数が動機すれば10%か20%のどちらかになるでしょうけど、
別のオシレータで動いていますから多少のずれが生じます。つまり、数十回?10%が続き、その後にその4倍の長さで
20%が続きます。
また、適当な割合で10%と20%が混ざるならMACHも対応してくれるかもしれないですけど、そうした動きでは難しいと思います。
せめて、30程度はサンプル数をとって、割合を算出する必要があると思います。
私がその方法を取るなら、MACHからのPWMは50Hz=200サンプルとかにすると思います。
なので、PWMの出力が来ないとの判断、つまり、タイマー0の周期はもっと遅くしてからMACHを試した方が良い、と言った次第です。
※テストの途中で停止命令が入り込むと結果の判断がより難しくなります。
猛牛ロック   2019/06/04(Tue) 23:30 No.1559
Re: 続続続続続ーPWM
間違った場所に投降したので、削除し、新たに本来の場所に投降します。

**************
スンピンドル制御に必要なPWM基本周波数って、本来はどれほど必要なんだろうか?
まず、これをはっきりと、ですね。

カーネルスピードは、↓ を見て薄っすらと分かりました。
https://microsoftwindowsblogger.blogspot.com/2010/07/losing-steps-in-mach3-kernel-speed.html

分解能100とすれば(***欄より推測)、PWM基本周波数の100倍がカーネルスピードなんですね。
***
先達者のコメ抜粋
・例えば、カーネル周波数が35KHzの場合にPWM周波数を1KHzにすると階調は35段階だ。
****

で、
下の先達者は、PWM基本周波数が、15KHzと設定しようとした。
だが、MACHのカーネルスピードは、MAX100kHz
MAX100,000Hz<15000Hz×100倍=1500,000
となり、PWM信号を制御できなくなった。 そこで、
ローパスフィルターってことになったんですね。

先達は
題目:CNC3020のスピンドル制御
先達者のURL
http://www002.upp.so-net.ne.jp/hard-and-soft/Spindol_Control/Spindol_Control.html
抵抗:22k
コンデンサ:10μ

カットオフ周波数?
答え
0.7Hz

感想
こんなに低い周波数から、ゲインさせてしまって、良く上手くいったものだと思いました。




猛牛ロックさんへ
8個サンプリングにしたら、効果大です。
ほぼ、ちらつきなくなりました。
TR   2019/06/05(Wed) 08:28 No.1561
Re: 続続続続続ーPWM
カーネル周波数とPWM周波数の考え方は合っていますけど、参考サイトの見方に関しては

・MACHからの出力(PICへの入力)
・モータへの出力
がごちゃ混ぜになっています。
また、都合のいいように話を持って行き過ぎです。

音の聞こえない15kHz(実際には15.6kHz)にしようとした(目的)のはモータへの出力の周波数です。
で、、目的の周波数(15kHz)でMACHから出力させて、モータに直接繋いだのでは2,3段階の諧調しか得られない。
なので直結での静音化(MACHから15kHz出力)は無理なので、「PICを使って周波数変換しよう」、という事です。
※この人のスピンドルのドライバはPWMの信号を入れるタイプ(=それが普通)です。

MACHからのPWMの周波数の記載はありませんから、参考サイトにある「250Hz」と「10mSの移動平均フィルタ」
から推測するしかありません。多分100〜250Hz程度だと思います。フィルタは、その周波数に応じて用意します。


**************


Machの周波数に対して、分割数で割ったものを最後の_delay_ms();の部分の周期にしてください。
Machから100HzのPWMが来て、分割数が8なら1.25msです。
その場合は,
__delay_us(1250);
になります。(けれどもデバイスの仕様上、500us以下は動作は保証されません。)
多分、現在の設定はPWMの周波数がもっと高くて、ランダムな場所になっているのだと思います。
それはそれで、8個ぐらい取れば平均値に近づきますから悪くないです。
※一番悪いのは同期して、波の同じ部分を取得してしまう事です。
猛牛ロック   2019/06/05(Wed) 11:23 No.1562
Re: 続続続続続ーPWM
15kHzは、ローパス後の電圧をPWMに変換後の周波数でしたね。
了解、
でも、PWM基本周波数のローパスのカットオフ周波数が0.7Hzでいいものだろうか?

猛牛ロックさんの推測↓
多分100〜250Hz程度だ


PWM基本周波数100〜250Hzなのに、カットオフ0.7Hzが適正なのか気になります。
実際は。どうなのか?


>__delay_us(1250);

これは、
10 __delay_us(500);を(1250)に変更ですね。 了解しました。

でも、
>Machから100HzのPWMが来て、分割数が8なら1.25msです。

これの算出方法は、
100Hz/8回サンプリング で、OK?
デジタル可変抵抗のスタート位置を決める式でしたよね、
この辺の訳を教えてください。
お願いします。


でも、カーネルSpeedとPWM基本周波数の関係が分かってよかったです。



6/5 14:30追記
非反転オペアンプですが、
落とし穴が分かりました。
DC12Vをオペアンプの電源に印可しないと駄目です。
TR   2019/06/05(Wed) 12:30 No.1563
Re: 続続続続続ーPWM
No.1553の添付図を見てください。(元はMABOさんの信号です。)

で、その図の縦線は読み取り点のことです。1つの波(周期)にたいして、4つサンプルを取っているものです。
MachのPWM周期を100Hz(=0.01s周期)に設定すれば、4サンプルなら2.5msですし、8サンプル(8分割)なら1.25msになります。
単純にPWM周期をサンプル個数で割っているだけです。

※その図で、ある1つの縦線の部分で8つサンプルを取ったら、全てがその縦線の値になってしまいますし、4つ分ずらした間隔で8サンプル習得しても
全て波の同じ部分を取得している事になるので良くないです。



> MABOさん

タイマー1を回さなくてもPWMは取得できます。主要部だけですけど

while(1){
unsigned long count_h=0,count_l=0;
while(mach);//HIGHの間、閉じ込める
while(!mach);//LOWの間、閉じ込める(次のHIGHの先頭を出すため)
while(mach){
count_h++;
if(count_h>@@@@)SetPWM(0);//ダミー?
}
while(!mach){
count_l++;
if(count_l>@@@@)SetPWM(0);
}
int duty=1023.0*count_h/(count_h+count_l);
SetPWM(duty);
// __delay_ms(1);
}

HIGH信号の時間を数えてLOW信号の時間を数えるだけです。
勿論、他に割り込みを使っていればカウント値が狂いますからその場合は
if(周期がこの間にあったら)・・・
といった処理が必要になります。この方法なら分母は数百や数千にはなるでしょうから、100usのサンプリングより正確なものが求まります。
猛牛ロック   2019/06/05(Wed) 15:26 No.1564
Re: 続続続続続ーPWM
猛牛ロックさん 有難うございます。
了解です。
聞いて良かったです。
Kanel SppedとPWM基本周波数も分かったし、
これで応用が利くようになりました。

同じ電圧にしなくてもいいかもしれませんが、
念には念を。

**********
maboさんへ


若しよかったら、オシロをお持ちでしょうから、
ローパスフィルター有り無しで、波形を比べて頂けませんか?
すでにご存じなら、教えてください。
御手隙の時で結構です。



それから、
非反転オペアンプの電源は、PICの電源と分けました。
これによって、PICのUDやINK端子に掛かる電圧と同じにできるようになりました。


一応、DC12V電源なしでもデジタル可変抵抗が動作すれば、12Vは外します。

TR   2019/06/05(Wed) 16:34 No.1566
Re: 続続続続続ーPWM
No.1566の添付図を見ましたけど、オペアンプは何のために使っているのでしょうか?

私はx9cのRwからオペアンプの+に入れて、outからスピンドルへと繋ぐのかと思っていました。
猛牛ロック   2019/06/05(Wed) 17:18 No.1567
Re: 続続続続続ーPWM
ML4のスピンドルモーター制御基板は、資料も何もないので弄れません。
なので、素人には理解できないと思います。

そこで、期待を込めて
ML4のスピード制御には、可変抵抗(DC5V印可の1KΩ)が使われています。
モーターの大きさから、どうも、ACサーボモーターのようです。
推測ですが、三菱のACサーボモーターもアンプ側にスピードコントロール用にアナログの可変抵抗をつけます。
ML4のと同じだろうと思いました。
デジタル可変抵抗と置き換えたら、どうだろうかと思った次第です。

追記
x9cのデータシートに下記の説明がありました。
動作電圧でしょうか?
もしそうなら。



U/D input HIGH voltage min2V Mxa Vcc+1
TR   2019/06/05(Wed) 18:13 No.1568
Re: 続続続続続ーPWM
猛牛ロックさん,TRさん,こんばんは。

なんかこの掲示板も内容がすごいことになってるな,

なんて,びっくりしてます。

なかなかついていけません。

猛牛ロックさん,サンプリング等のプログラムありがとう
ございます。

また,詳しい解説もすみません。

なんとなく理解できそうな気もしますが,難しいです。

TRさん,いろいろお疲れ様です。


ところで,今日は,ちょっと前に帰ってきたのですが,

MACHからのPWMのDUTY比をオシロで見てみました。

スケールで目視での確認ですので,おおざっぱです

下記の設定で,

 MACHカーネル 25000hz
 PWM基本周波数   100hz
 MaxSpeed  9000rpm

 設定rpm    DUTY比

 1000     10%
 2000     20%
 3000     32%
 4000     44%
 5000     54%
 6000     68%
 7000     78%
 8000     90%
 9000     98%

と,ほぼ比例でしたが,私が使ったPWMコントロールのドライバーは,

 入力DUTY比   RPM
  4%       1283
  6%       2256
  7%       3049
 11%       4061
 14%       5003
 19%       6125
 25%       7000
 36%       8015
 69%       9000

比例どころか,DUTY比 14% のPWMの入力で,

モーター能力のほぼ半分の回転数になってします。

他のPWM入力のコントローラーはわかりませんが,

こんなもんなんでしょうかね。使ってるFET等の性能

なんかも影響してるんでしょうかね。

別のものも試してみたくなりました。
mabo   2019/06/05(Wed) 21:34 No.1569
Re: 続続続続続ーPWM
見落とししているかもしれないので再度の書きこです。

**********
maboさんへ


若しよかったら、オシロをお持ちでしょうから、
ローパスフィルター有り無しで、波形を比べて頂けませんか?
すでにご存じなら、教えてください。
御手隙の時で結構です。
TR   2019/06/05(Wed) 22:27 No.1570
Re: 続続続続続ーPWM
私の言っているのは添付図のように繋ぐのかと思っていた、という事です。
スピンドルの中の事ではありません

猛牛ロック   2019/06/05(Wed) 22:30 No.1571
Re: 続続続続続ーPWM
TRさん,済みませんでした。

今気がつきました。

>ローパスフィルター有り無しで、波形を比べて頂けませんか?
これ,MACHからの信号でいいですか?

No1533がローパスフィルター通したPWMの信号です。

外すと,きれいな,PWMの信号になります。
mabo   2019/06/05(Wed) 22:43 No.1572
Re: 続続続続続ーPWM
maboさんへ、
仮にですが、
カットオフ周波数を変えるために、コンデンサとRを替えてみたらどうですか?
カットオフ15000Hzに。
自分は、手計算が面倒なので、↓のツールを使います。
15kHzなら、0.1マイク、15kΩ

sim.okawa-denshi.jp/CRtool.php
TR   2019/06/06(Thu) 07:15 No.1573
Re: 続続続続続ーPWM
猛牛ロックさんへ
デジタル可変抵抗って、あくまで、
アナログの可変抵抗と同じ役割ですよね、
であれば、VH,VW、VLは、抵抗値を変えるものではないのでしょうか?

抵抗値を変えるものだと思ったので、No1566です。
TR   2019/06/06(Thu) 07:39 No.1574

処理 記事No 暗証キー

- JoyfulNote v6.02 -
++ Edited by Hamel ++