PWM to DC converter 作製編



 

PWMのdury比を測定してDC電圧に変換する。

一番簡単な方法はローパスフィルタ。

ただ周波数に応じてリップルが除去しきれなかった。設計があいまい過ぎたからだろう。

確実な方法として、PWMのDuty比をマイコンで計測、その計測値からDACに出力電圧をマイコンから指示してDACからDCを出力する事をしてみた。

CNCのモーターのコントローラーとして下のようなドライバーを使っている。

https://www.amazon.co.jp/gp/product/B015F88D32/ref=ewc_pr_img_1?smid=A18ZODZFQ0ZC6B&psc=1


0-5VsignalのピンにDCで電圧を与えてやるとその電圧に応じてモータの回転数が変化する。
これまではここにつけた可変抵抗で手動で回転数を決めていたが、GRBLのソフトからモータの回転数を制御して、ON-OFFもしたいというモチベーションで作ってみた。


マイコンは手元にあった安価なArduinoNano互換を利用。

#include <Adafruit_MCP4725.h>

#include<Wire.h>            
#include<Adafruit_GFX.h>    
#include<Adafruit_SSD1306.h>


Adafruit_SSD1306 display(-1);
Adafruit_MCP4725 MCP4725;

#define pulse_ip 2
int ontime,offtime;
float freq,period,duty;

void setup() {

  pinMode(pulse_ip,INPUT);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  MCP4725.begin(0x60);
}

void loop() {
   ontime = pulseIn(pulse_ip,HIGH);
   offtime = pulseIn(pulse_ip,LOW);

   period = ontime+offtime;
   
   if (period==0){
    freq = 0;
    duty =0;
   }else{
    freq = 1000000.0/period;
    duty = (ontime/period)*100;
   }
   MCP4725.setVoltage(duty*(4096-1), false);
   delay(100);
   
  display.clearDisplay();  
  display.setTextSize(1);    
  display.setTextColor(WHITE);    
  display.setCursor(0, 0);    
  display.print(freq);  //freq
  display.setCursor(0, 8);    
  display.print(ontime);    
  display.setCursor(0, 16);    
  display.print(offtime);    
  display.setCursor(0, 24);    
  display.print(duty);      
  display.display();    
  delay(100);  
}


arduinoにpulseinという関数があるのでそれを利用。ONとOFFになる時間からduty比を求めるスケッチを書いてみた。(ArduinoでPWMのduty比を測定)

写真など記録は残していないが、ブレッドボードで試した時には、ちゃんとこのコードでテストをして、動作は確認している。

DACには、秋月電子MCP4725 EEPROM搭載12ビットD/Aコンバータモジュール、https://akizukidenshi.com/catalog/g/gK-08677/
が手元にあったので使っている。

回路の設計

1点物なので、ユニバーサル基板で作る事を考えたが、基板を設計、発注して基板を作ってみた。(CNCで作ろうとしたら、ステッピングモータのドライバーが故障・・・調達しなおしている間に、納品されると思って基板発注に切り替えたのが理由)


I2Cしか使っていないので、簡単な回路。


基板の大きさは、モータードライバーと重ねて固定する事を想定して同じ大きさにし、ネジ穴も同じ位置にくるようにしている。

実際にしあがってきた基板は以下。


半田で部品4点だけだが固定する。

3Dどおりにできている。これで送料込みで400円。エッチングとかCNCでとか馬鹿らしい世界・・・


動作の方は別途報告するとして、ArduinoでPWMのduty比を計測する










コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法