2016年5月24日火曜日

ジムニーに無線機取り付け

去年の10月に購入したジムニーJB23Wにモービル無線機を設置した。

無線機はYaesu FT-857DM。
ちゃんと設置する前は、シガーソケットから給電していたが、
50Wで送信すると配線抵抗による電圧降下が酷く、パワーが出なかった。

そこで、バッテリーから無線機専用に独立の回路で電源を引き込むことにした。


配線作業に使う部材一式。
出来るだけロスを抑えるために、ケーブルには5.5sqのKIV線を使用した。長さは3m。
この画像には載っていないが、ACCと連動させるためにエーモンの30Aリレーと、バッテリー直近に付けるヒューズボックスも含まれている。
バッテリーからの電源取り出し部分。プラス側に20Aのヒューズを挿入。
また、プラス側のケーブルは保護のために蛇腹チューブに通してある。
メートルネジにインチ規格のナットを無理やりねじ込んで若干ねじ山を潰してしまった・・・反省。
ちゃんと確認しよう。(マイナス側)

バッテリーの奥にあるグロメットから車内に引き込めば最短距離で仕上がるのだが、
ケーブルが太い上にグロメットへのアクセスも悪かったため、助手席のドアの隙間から引き込んだ。


無線機本体はプラスチックの籠に入れて運転席の下に設置した。


次、コントローラ。

ホームセンタのカー用品コーナで見つけたナビ用の基台を流用。

ぱっと見た感じではそのまま使えそうな気がしていたのだが、若干ハウジングの穴径が小さかったのでリーマで加工した。

仕上がりはこんな具合。

運転席上のダッシュボードに設置。

ついでにアンテナ基台のアースも強化した。V/Uはルーフのマグネット基台に設置したアンテナを使用するが、HFはこちらの基台(K-415)を使う。

OMさんに頂いた網線を接続し・・・

良好なアースポイントにアクセスするためにリアのランプを一旦外す・・・

ハッチバックドアのヒンジ(車体側)部に先程の網線を挟み込ませて固定した。


これでHFも安定して運用できそうだ。。
アンテナは左から
・SG-M507(ダイヤモンド、V/U送受信用)
・WC-113B(秋月電子、広帯域受信用)
・MD200(ダイヤモンド、21MHz用カセットコイル装着、OMさんからの借り物)
その他、NR950M、HF40FXW、自作6エレUHF八木を積んでいる・・

開局してまだ1年経っていない初心者ハムですが、
週末にたま~に移動運用しております。
聞こえておりましたらどうぞ宜しくお願いします。
de JJ5MEW/3

~おわり~

2016年4月24日日曜日

DDS(ATtiny861A版)

ATtiny2313からの移植。PWM周りのφ(..)メモメモ

初めてtiny861Aを使ったが、ピンの配置が揃っててヨイ感じ

PWM出力(OC1A, OC1B, OC1D)に1kΩ+0.1uFのCRフィルタ追加で60Hz3相正弦波を出力



/*
 * PWM_test.c
 *
 * Created: 2016/04/24 3:16:25
 * Author : kingyo
 * MPU    : ATtiny861A@24.576MHz
 */ 

#include <avr/io.h>
#define F_CPU 24576000UL
#include <util/delay.h>
#include <avr/interrupt.h>

/* DDS */
static uint32_t acc1 = 0, acc2 = 0, acc3 = 0;
static uint32_t adder1, adder2, adder3;

/* (1 / 2^32) / (6.917317 * 10^-6) */
#define DDS_RES 0.0003365909

/* 正弦波波形テーブル */
const uint8_t sinewave[] =
{
 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
 0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
 0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
 0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
 0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
 0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
 0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
 0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
};

/* MPU基本設定 */
static void initMPU(void)
{
 DDRA = 0b00000001;
 DDRB = 0b00101010;
}

/* PWM(timer1)設定 */
static void initPWM(void)
{
 /* PLL有効 IntRC8MHz * 8 = 64MHz */
 PLLCSR = 0b00000110;
 
 /* 3出力とも高速PWM動作 */
 TCCR1A = 0b10100011;
 TCCR1B = 0b00000001;
 TCCR1C = 0b10101001;
 TCCR1D = 0b00000000;
 
 /* PWMデューティのデフォルト値 */
 OCR1A = 128;
 OCR1B = 128;
 OCR1D = 128;
}

/* Timer0設定 */
static void initTimer0()
{
 TCCR0A = 0b00000001;
 TCCR0B = 0b00000001;
 TIMSK = 0b00010000;
 
 /* DDS処理割り込み周期決定 */
 /* 24.576MHz / 170 > About 6.917317us */
 OCR0A = 170 - 1;
}

/* DDS処理割り込み */
ISR (TIMER0_COMPA_vect)
{
 /* 位相ポインタ加算 */
 acc1 += adder1;
 /* SIN波形テーブル参照 3相波形出力 > 位相シフト120deg */
 OCR1A = sinewave[acc1 >> 24];
 OCR1B = sinewave[(acc1 + 1431655765) >> 24];
 OCR1D = sinewave[(acc1 + (1431655765 * 2)) >> 24];
}

/* 周波数設定 */
static void setFrq(uint16_t af1, uint16_t af2, uint16_t af3)
{
 adder1 = af1 / DDS_RES;
 //adder2 = af2 / DDS_RES;
 //adder3 = af3 / DDS_RES;
}


int main(void)
{
 uint16_t f1, f2, f3;
  
 initMPU();
 initPWM();
 initTimer0();
 
 sei();
 
 /* 60Hz */
 f1 = 600;
 setFrq(f1, f2, f3);
 
 while (1) 
 {
  /* 割り込み負荷測定用 */
  PORTA = 0x00;
  PORTA = 0x01;
 }
}


2016年3月14日月曜日

DDS

-- DDS処理メモ --
割り込みのオーバヘッド割合が大きいため、サンプリング周波数を高くできない・・・

■仕様
MPU: ATtiny2313@24.576MHz
出力: 2CH PWM (MAX 4CH)
サンプリング周波数: 約125kHz
垂直分解能: 8bit
波形テーブル: 正弦波256サンプル


出力波形例

配線(ん)


以下参考ソース

/*
 * softwareDDS.c
 *
 * Created: 2016/03/05 18:59:42
 * Author : kingyoZAL1
 */ 

#include <avr/io.h>
#define F_CPU 24.576E6
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>

/* Global val */
volatile uint32_t acc1 = 0, acc2 = 0;
volatile uint32_t adder1, adder2;

/* (1 / 2^32) / (7.97526 * 10^-6) */
#define DDS_RES 0.0002919411

/* MPU初期化 */
static void InitMPU (void)
{
 DDRD = 0x01;
 PORTD = 0;
 
 /* デバッグ用 */
 DDRD |= 1 << 4;
}

/* PWM設定 */
static void InitPWM (void)
{
 /* Duty = 50% */
 OCR0A = 0x80;
 OCR0B = 0x80;
 
 /* OC0A, OC0B */
 DDRB |= 1 << 2;
 DDRD |= 1 << 5;
 TCCR0A = 0b10100011;
         // ||||||++--- WGM01, WGM00
         // ||||++----- Reserved(0)
         // ||++------- COM0B1, COM0B0
         // ++--------- COM0A1, COM0A0
 TCCR0B = 0b10000001;
         // |||||+++--- CS02, CS01, CS00
         // ||||+------ WGM02
         // ||++------- Reserved(0)
         // ++--------- FOC0A, FOC0B
#if 0
 /* OC1A, OC1B */
 DDRB |= 1 << 3;
 DDRB |= 1 << 4;
 TCCR1A = 0b10100001;
         // ||||||++--- WGM11, WGM10
         // ||||++----- Reserved(0)
         // ||++------- COM1B1, COM1B0
         // ++--------- COM1A1, COM1A0
 TCCR1B = 0b10001001;
         // |||||+++--- CS02, CS01, CS00
         // ||||+------ WGM12
         // |||+------- WGM13
         // ||+-------- Reserved(0)
         // ++--------- ICNC1, ICES1
#endif
}

/* 正弦波波形テーブル */
const uint8_t sinewave[] PROGMEM =
{
 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
 0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
 0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
 0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
 0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
 0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
 0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
 0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,
};

/* DDS処理 */
ISR (TIMER1_COMPA_vect)
{
 acc1 += adder1;
 OCR0A = pgm_read_byte(&sinewave[acc1 >> 24]);
 acc2 += adder2;
 OCR0B = pgm_read_byte(&sinewave[acc2 >> 24]);
}

/* 周波数設定 */
static void setFrq (uint16_t af1, uint16_t af2)
{
 adder1 = af1 / DDS_RES;
 adder2 = af2 / DDS_RES;
}

/* MAIN */
int main (void)
{
 uint16_t f1, f2;

 InitMPU();
 InitPWM();
 
 /* 定周期DDS処理用タイマ1設定 */
 TCCR1A = 0b00000000;
 TCCR1B = 0b00001001;
 TIMSK = 0b01000000;
 OCR1A = 196 - 1; // 196 -> About 7.97526us
 
 sei ();
 
 f1 = 10000;
 f2 = 2000;
 setFrq(f1, f2);
 
 while (1) 
 {
  /* 波形観測用トリガ信号 */
  PORTD |= 1 << 4;
  PORTD &= ~(1 << 4);
  
  /* 周波数切替てすと */
  setFrq(2000, 5000);
  _delay_ms(2);
  
  setFrq(10000, 2000);
  _delay_ms(2);
 }
}
Let's キモい波形生成!

~ おわり ~

2016年1月5日火曜日

中華正弦波インバータの分解

車内で100V電源が用意できると何かと便利なので、インバータを購入した。
商品はBAL(大橋産業株式会社)の「No.1785 3WAY 正弦波インバーター 120W」

車用インバータとして一般的には、AC100Vに擬似正弦波と呼ばれる2レベルの矩形波を出力するものがある。
殆どの機器がこの擬似正弦波で動作するが、一部の精密機器やトライアック等による位相制御がなされる機器は動作しないことがある。
正弦波を出力するインバータはこれらの問題を解決し、一般家庭に供給される商用電力と同様に扱うことができる。

早速車に持ち込み、シガーソケットで動作確認を行った。
問題なく出力が得られることを確認できた。

・・・・

擬似正弦波出力のインバータは過去にいくつか分解したことがあるのでおおよそ見当がつくが、正弦波出力タイプのインバータはこれが初めてなのでど~なってんのか気になり・・・分解してみた。

PWMで正弦波形テーブルを出力し、LCフィルタでキャリアをカットしているんだろうなと予想はつくが。

結論とも言える出力周りの回路。
MOSFETのブリッジにLCフィルタが付いただけのシンプルなものだった。。。

以下画像類
~~~~~~~~~~~~~~~~

無負荷時出力波形

負荷:グロー式蛍光灯

負荷:はんだゴテ
  
フルブリッジ出力PWM波形①

フルブリッジ出力PWM波形②

フルブリッジ出力PWM波形③

昇圧トランス2次側波形 

無負荷時消費電流

無負荷時出力電圧

無負荷時出力周波数(60Hz設定時)

液晶モニタ(35W)負荷時出力電圧・・・

外見

出力パネル

裏面



USB給電用基板



12V→200V昇圧トランスのプッシュプルドライブ基板


フルブリッジドライブ基板

水晶と絶縁ドライバICが見える

PWMのキャリアをカットするコイル
1つ580[uH]ほど

トランス駆動用プッシュプルのヒートシンク



フィルタ用コンデンサ 10[uF]



耐圧200Vだが、、常時198V程度に充電されている
コスト削減でケチったか?

昇圧トランス2次側に直列に接続されるコンデンサ




フルブリッジ

【メモ】
・ケースが全面プラスチック製なのでシールド効果や冷却性は期待できない。一応空冷ファンは付いているが。
・12V入力とAC100V出力は完全に絶縁されている
・電源投入時に過放電アラームがいちいち鳴って煩い
・エアバンド(VHF)受信中にノイズ乗る(配線の取り回しで解決するかも


~おわり~