2012/03/09/Fri
知人からの修理依頼があった。
某社のデスクトップマシンなのだが、BIOS画面は出るものの、Windowsが起動しないとのこと。
ばらしてみたら電解コンデンサか膨らんでいた、ひとつは液漏れしかかっている。
いずれもニチコンの6.3V 1500μF。
ネット上でもこの機種はトラブルが多かったようだ。
さて久しぶりに日本橋に行ってみるか、でも今日は雨だし・・・。


2012/01/04/Wed

上の回路は疑似インダクタとなる、ただしR1+R2が直列に入ってしまうが、前の記事のように使うには問題ない。

LTSpiceによるシミュレーション結果、ほぼ同じ特性が得られている。

問題はオペアンプ出力で最大6dBほどのゲインがある。飽和しないように注意しないと。
2012/01/02/Mon
以前の実験の続きである。今回はOSR(Over Sampling Rate)を100とした。と言ってもPWM8_1の設定を変えただけである。

必要なクロック周波数は
4*OSR*出力周波数*分周比
なので、出力が30KHzだと24MHzのクロックが必要となる。
クロックを変化させて実験していると出力が10KHz以上で振幅が増大し、40KHzぐらいでピークを持ちそれ以上で減少してしまうことがわかった。
理由はまだ解明していない。
この回路で出力は30KHzぐらいまで出したいので高域での振幅補正が必要となる。

上の図で、左側が実測値。10KHzでの振幅を0dBとしたとき40KHz付近で4dBほど大きくなる。
右側が振幅補正回路のシミュレーション。これで30KHz以下ならほぼ振幅を一定に出来そうだ。
問題はインダクタ、100mHは手持ちにあるけど出来るなら使いたくない。
2011/12/10/Sat
トランジスタ技術1995年9月号237ページに
「汎用CMOSとE12系列抵抗で作る正弦波発振回路」著者:田中正人氏
と言う記事があった。
オリジナルでは正弦波を16分割しているがここでは20分割で作ってみた。

回路の原理は下図のようになる。ここでは8分割で説明している。
クロックを8分周し、シフトレジスタに入れる。シフトレジスタの各出力を抵抗で合成して疑似正弦波を得る。

試作した回路、抵抗はすべて1%の金属皮膜抵抗。
クロックはシュミットトリガインバータで作っている、手持ちの部品を適当に使った、発振周波数は1420Hz。
疑似正弦波の周波数は71Hzとなる。

出力波形、当然ながら階段状になる。

スペクトル測定結果、71Hz×(20±1)に大きなスペクトルが見られるが2次~3次ぐらいのアクティブフィルタで取り除けるだろう。
クロックを20KHzにし、アクティブフィルタを入れれば1KHzの正弦波を得られる。
2011/11/16/Wed
こちらのサイトにarduinoで
DS1077を動かすスケッチが載っていたのですが・・・。
動きません、どうも間違いがあるようです。
何とか動くようになったスケッチを載せておきます。
SDAはarduinoのanalog pin 4へ、SCLはanalog pin 5へつなぎます。
プルアップ抵抗は不要でした。どうやらチップ内部のプルアップ抵抗を使ってるようです。(未確認)
setup()内で
PS=3としてますがこの値は0~3
N=20としてますがこの値は2~1025です。
PS=3だとプリスケーラは1/8ですので出力は
133.33MHz/8/20=833.3125KHz
となるはずです、実測値は830.93KHzでした。
動かすのに注意がいるようです、スケッチ内のコメントに書いておきました。
#include <Wire.h>の
<と>は半角にかえてください。
//
//
DS1077コントロールテスト
// 2011.11.15
// edy
// 参考にしたサイト https://github.com/benlemasurier/ds1077
// だたしこのサイトのスケッチでは動作しなかった。
//
// I2C SDA (data line) = analog pin 4
// I2C SDC (clock line) = analog pin 5
//
#include <Wire.h>
#define
DS1077_ADDRESS 0b1011000
// command sets
#define DIV 0x01 // operating frequency
#define MUX 0x02 // mode of operation
#define BUS 0x0D // bus settings
#define E2 0x3F // EEPROM
int N,PS;
void setup() {
PS=3;
Wire.begin();
set_PS(PS);
delayMicroseconds(900);
/*
これを入れないと次のset_DIVが動作しなかった。ディレイの必要最小値は未確定。
DS1077にコマンドを送ってから次のコマンドを送るのに間隔をあける必要があるようだ。
DS1077の仕様(?)なのかどうかは不明。
*/
N=20;
set_DIV(N);
}
void loop() {
}
void set_DIV(int n) {
n-=2;
n&=0b1111111111;
n<<=6;
Wire.beginTransmission(DS1077_ADDRESS);
Wire.send(DIV);
Wire.send(highByte(n));
Wire.send(lowByte(n));
Wire.endTransmission();
}
void set_PS(int ps) {
int msb,lsb;
ps&=0b11;
lsb=ps<<7;
msb=(0b00011000 | (ps>>1));
Wire.beginTransmission(
DS1077_ADDRESS);
Wire.send(MUX);
Wire.send(msb);
Wire.send(lsb);
Wire.endTransmission();
}
2011/11/16/Wed
スイッチサイエンスさんの
DS1077搭載プログラマブル発振器モジュールです。
ストロベリーリナックスさんでも売ってますが、チップだけです、その分少し安いですが。
DS1077のデータシートは
こちらから入手できます。

ヘッダピンは写真のように取り付けました。

ブレッドボードに刺したときにピン配置を解りやすくするためです。
CTRL0とCTRL1はGNDに落とします。
基板上にパスコンが載ってますが、まるで足りません。発振が不安定になりますのでケミコンを追加します。
デフォルトでOUT1から66.666MHzが出力されるはずなんですが、測定してみたら約66.5MHzでした。
周波数は結構変動します。上四桁ぐらいは安定してますけど。
てっきりクリスタルオシレータとばかり思ってたのですが、データシートにはクリスタルなんて書いてませんね、う~む。
2011/11/02/Wed
8pin PSoC CY8C27143を使った簡単な周波数カウンタを作りました。
きっかけはこのアプリケーションノートです。
Application Note AN2138
3-Wire Interface for LCD Display通常LCD制御には7本必要ですが、それが3本ですみます、それならピン数の少ないCY8C27143でも作れるだろうと考えました。

回路図です、ゲートタイム作成用のクロックオシレータは手持ちの関係で4.194304MHzを使ってますが、何でも構いません。PSoCのカウンタのパラメータを変えれば済むことです。
入力アンプは手抜きしてます。
PSoCのGPIOはシュミットトリガ入力になっているのでこんな簡単な回路でも動きます。
PSoCのGPIOはTTLレベルですので2SK241のドレンソース間電圧を1.6Vぐらいにする必要があります。そのためgm(相互コンダクタンス)が小さくなり、増幅度が上がりません。
今回はシンプルに組みたかったのでこれで良しとします。
なおPSoCのGPIOの特性については
ねがてぃぶろぐさんを参考にさせて頂きました。
下のグラフは2SK241のデータシートからの引用です。
順方向伝達アドミタンスとなってますが相互コンダクタンスと同じです。



シフトレジスタをLCD側に組み込みました、これで接続は5本で済みます。

ユニバーサル基板に組んでみました、右の空きスペースにHT7750を使ったDC-DCコンバータを組んで電池二本で動作させるつもりです。
続きを読む
2011/10/02/Sun

電子オルゴールで使っているPSoC(CY8C27143-24PXI)のシステムクロックを分周して1KHzの矩形波を作りそれをwavespectraで表示してみた。(システムクロックは24MHzなので1/24000)
手持ちにあったSPG8640BNを使ったオシレータで同じく1KHzを出して比較してみた。
ちなみにSPGシリーズはとっくにディスコンである、便利だったのに・・・。
使ったオーディオインターフェースの分解能が24bitなので測定限界は約-140dBとなる。
水晶発振回路を分周しているSPG8640BNにくらべてPSoCの内蔵クロックはジッタが多いのがわかる。
続きを読む