迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

PSoCでパルスジェネレータ

psoc060512_1psoc060512_2

要はPWMの周期とパルス幅を変えてやればパルスジェネレータになるというわけである。
周波数はどれぐらいまで上げられるのか実験してみた。
PWMのデータシートによると

If the output is routed via the global buses, then the frequency is constrained to a maximum of 12 MHz.

外部に出力するにはグローバルバスを通すから最大でも12MHzだろうと思って、まずVC1の分周比を1にしておきPWMのクロックをVC1にしたが、だめだった。12MHzが出ない。
VC3がSysClk*2と出来るのに目をつけた。これでVC3は48MHzになる。これを三分周して16MHzを得る。これをPWMのクロックとしたところ、8MHzの出力が得られた。

psoc060512_38MHz出力。リンキングがひどいが、MiniEvalで試したので無理もないかもしれない。
後はPWMの周期とパルス幅を変えてやれば周波数は可変出来るが、この場合8MHzの整数分の一の周波数しか出せない。
8MHz,4MHz,2.66MHz,2MHz,1.6MHz,1.33MHz,1.14MHz,1MHz・・・といった具合である。
そこで今度はVC3の分周比を変えることを思いついた。
分周比を4にすれば6MHzの整数分の一、5にすれば4.8MHzの整数分の一の周波数が得られる。

psoc060512_5回路図、というほどのことはない。電源などは省略してある。
周波数を変化させるのは可変抵抗器の出力をAD変換することによって行う。可変抵抗器を回すので周波数を連続可変出来るように思うが、実際は離散的にしか変化しない。

細かく説明するのが面倒なので(汗)、とりあえず、main.cを載せておく。

//----------------------------------------------------------------------------
// C main line
// CY8C27143-24PI
// 2006.5.9
// pulse generator
//----------------------------------------------------------------------------

#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

unsigned int iData;
unsigned int pw,ptable,oldptable;
unsigned int table[] = {3,1, // 8MHz
4,1, // 6MHz
5,1, // 4.8MHz
3,2, // 4MHz
4,2, // 3MHz
3,3, // 2.66MHz
5,2, // 2.4MHz
3,4, // 2MHz
5,3, // 1.6MHz
4,4, // 1.5MHz
3,6, // 1.33MHz
5,4, // 1.2MHz
3,7, // 1.14MHz
3,8 // 1MHz
};
void main()
{
M8C_EnableGInt;
PGA_1_Start(PGA_1_LOWPOWER);
ADCINC12_1_Start(ADCINC12_1_LOWPOWER);
PWM16_1_Start();

while(1) {
ADCINC12_1_GetSamples(1);
while(ADCINC12_1_fIsDataAvailable() == 0); // Loop until value ready
ADCINC12_1_ClearFlag(); // Clear ADC flag
iData=ADCINC12_1_iGetData()+2048; // Get ADC result
ptable=iData/293;
if (ptable!=oldptable) {
OSC_CR3=table[ptable*2]-1; // VC3 Divider
pw=table[ptable*2+1];
PWM16_1_WritePulseWidth(pw);
PWM16_1_WritePeriod(pw*2-1);
oldptable=ptable;
}
}
}
関連記事
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

この記事へのトラックバックURL
http://edycube.blog.fc2.com/tb.php/193-e3db6a5e

 | HOME | 

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

DABP発振回路を使ってキャパシタのESRを測定する構想(2)断念 2018/02/15
Androidアプリ:Resonance Calculator LC共振回路の計算に便利 2018/02/03
DABP発振回路を使ってキャパシタのESRを測定する構想(1)追記あり 2018/01/27
スマホとmicro:bitをBluetoothでつなぎたいのだが・・・。 2018/01/27
Androidアプリ:Signal Generator 2017/12/31
エレコム EHP-AHR192 を試す。(1) 2017/12/17
AliExpressでお買い物:TPS60403テスト 2017/12/02
AliExpressでお買い物:スイッチトキャパシタ電圧コンバータ三種(1) 2017/11/29
ATmega328 Maximum Frequency vs. VCC 2017/11/26
AC電力計(2) 2017/11/19

全記事表示リンク

全ての記事を表示する

リンク

このブログをリンクに追加する

月別アーカイブ

02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (434)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (32)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)
Android (1)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

ブログリンク

FC2Ad

まとめ

Template by たけやん