電気屋さんとしては,PWMじゃなくて,H/Lじゃなくて,もう少し自由に電圧を出せたらいいなあと思うことがあります。
ふと手持ちのNucleo STM32F303のスペックをよく見ますと,DACがあります。やってみることにしました。
確認環境
- Nucleo-F303K8
- mbedで開発
Nucleoのピンアウト図やらデータシートやらをまとめますと...
/*
A5 PA_6 DAC2/1 unbuffered imp=15k DOES'NT WORK...
A4 PA_5 DAC1/2 unbuffered imp=15k DOES'NT WORK...
A3 PA_4 DAC1/1 buffered
*/
以下を参考に,
https://os.mbed.com/users/okini3939/notebook/AnalogOut_jp/
AnalogOut Vout3(PA_4);
Vout3=0; // 0 to 1
Vout3.write_u16(0x8000); // 0 to 0xffff
A4とA5はなぜか出力しませんでした... まだまだ修行が足りないようです。
A3は所望の電圧になっていました。すばらしい!
いよいよレジスターも叩いてみる
さらに確認しますと,A3の出力インピーダンスは10kよりも多い感じです。これはBufferedとは言えないですよね...
最近見つけた Mbedでのレジスター叩き をやってみます。
リファレンスマニュアルとデータシートから,レジスターの存在と絶対アドレスを知りました。
volatile unsigned int *dac_cr = (unsigned int *)0x40007400;
*dac_cr &= !(1<<1); // means DAC_CR BOFF1=0 buffer=ON
未解決案件
それでも2.8Vぐらいから上は、少しずつ出力インピーダンスが出てきます。
マニュアルをよく読んでまたレジスターを叩けば解決するのか,バッファーの限界なのか,よくわかりません...
とにかく,かなり便利になりました!