[H8-ML(2817)] Re:H8/3664のPWM動作についての質問
From: Kosaka Toshifumi <kosaka@xxxxxxxxxxxxxx>
Date: 2003年02月18日(火)19時28分51秒
こんにちは,小坂です。

以下のような初期化関数と2つのデューティ設定関数(実際はマクロ)で2系統のPWM信号を作っています。参考になれば幸いです。
http://www2.tokyo-ct.ac.jp/~j/staff/kosaka/for_students/H8_3664/samples/samples.html
ここに使用例もあります。(5.タイマーWユニットを用いて2系統PWM出力生成)

/*TimerWを利用したPWM出力を2系統出力する*/
/*GRAを周期レジスタ,GRBとGRCを比較対象レジスタとして用いる*/
/*出力は端子FTIOBとFTIOCにでてくる*/
/*周期カウンタは2MHzでカウント(φ/8)*/
/*TimerWPWMの初期化*/
void initTimerWPWM(unsigned short int period)
{
         TW.TMRW.BYTE=3; /*B,CはPWMモード バッファは使わない*/
         TW.TCRW.BIT.CCLR=1; /*Aとの一致でTCNTクリア*/
         TW.TCRW.BIT.CKS=3; /*クロックはφ/8*/
         TW.TCRW.BIT.TOB=1; /*FTIOBは1で開始*/
         TW.TCRW.BIT.TOC=1; /*FTIOCは1で開始*/
         TW.TIOR0.BIT.IOB=1; /*GRBはアウトプットコンペアレジスタ 一致で0出力*/
         TW.TIOR1.BIT.IOC=1; /*GRCはアウトプットコンペアレジスタ 一致で0出力*/
         TW.GRA=period; /*周期の設定*/
         TW.GRB=0;
         TW.GRC=0;
         TW.TMRW.BIT.CTS=1; /*タイマースタート*/
}

/*
void setPWMValueB(unsigned short int value)
{
         TW.GRB=value;
}
*/
#define setPWMValueB(value) TW.GRB=value

/*
void setPWMValueC(unsigned short int value)
{
         TW.GRC=value;
}
*/
#define setPWMValueC(value) TW.GRC=value

At 18:48 03/02/18 +0900, you wrote:
>---具体的には---
>クロックの分周を1/8として、1カウント500nsとしています。
>GRAの値を32000カウントにすると波形の周期は16msになります。(正しいです)
>しかし、GRCの値を16000カウントにすると
>周期は15.997msになってしまいます。(実際は8msです)
>また、そのGRCの値を半分の8000カウントにすると
>周期は15.704msと変化はするけど理解できない値になります。(実際は4msです)
>
>下にプログラムを付けさせてもらいます。
>ご検討のうえ、どう対処すればいいかご回答いただければ幸いです。


****************************************************
〒193 0997 八王子市椚田町1220-2 東京工業高等専門学校
情報工学科 小坂敏文 phone0426-68-5199 Fax68-5098

スレッド概略
[2816(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]