迷走の果て・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.blog2.fc2.com/tb.php/193-e3db6a5e

 | HOME | 

文字サイズの変更

プロフィール

edy

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

店の電飾(3)無限鏡(infinity mirror) Jun 25, 2017
店の電飾(2)回路の変更とスケッチ Jun 25, 2017
店の電飾 Jun 18, 2017
Arduino Pro Microを試す。(3)HIDとして使う(2) Jun 15, 2017
Arduino Pro Microを試す。(2)HIDとして使う Jun 04, 2017
Arduino Pro Microを試す。(1) Jun 03, 2017
脈拍センサー MAX30102を試す(2)MAX30100と比較 May 29, 2017
脈拍センサーMAX30102を試す(1) May 25, 2017
脈拍センサーMAX30100を試す(5) May 20, 2017
MT3608モジュールを使ったDSO Shell用電源 May 16, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

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

月別アーカイブ

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)
電子工作 (404)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (31)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

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

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん