📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{…
 
(同じ利用者による、間の7版が非表示)
25行目: 25行目:
用途に応じて最適な値を選択することが重要である。<br>
用途に応じて最適な値を選択することが重要である。<br>
<br>
<br>
==== PWMの周波数 ===
==== PWMの周波数 ====
PWMの周波数は、1秒間のパルスの数を表す。 (単位は[Hz])<br>
PWMの周波数は、1秒間のパルスの数を表す。 (単位は[Hz])<br>
<br>
<br>
56行目: 56行目:
* 周波数が高すぎると、スイッチング損失が増加して、効率が低下する場合がある。
* 周波数が高すぎると、スイッチング損失が増加して、効率が低下する場合がある。
* デューティ比が0%や100%に近づくと、制御の分解能が低下する。
* デューティ比が0%や100%に近づくと、制御の分解能が低下する。
<br><br>
== デューティ比の計算 ==
クロックが1.1[MHz]の場合、TA0CCR0レジスタの値を999、TA0CCR1レジスタの値を100に設定することにより、デューティ比を10%に設定することができる。<br>
<math>\mbox{ PWM 周 期 } = (\mbox{TA0CCR0} + 1) \times \frac{1}{\mbox{ 分 周 比 }} = 1000 \times 1 = 1000</math><br>
<br>
<math>\mbox{ PWM 周 波 数 } = \frac{\mbox{ ク ロ ッ ク 周 波 数 }}{\mbox{ PWM 周 期 }} = \frac{1.1 \mbox{[MHz]}}{1000} = 1.1 \mbox{[kHz]}</math><br>
<br>
<math>\mbox{ デ ュ ー テ ィ 比 } = \frac{\mbox{TA0CCR1}}{\big( \mbox{TA0CCR0} + 1 \big)} = \frac{100}{1000} = 0.1 = 10[\%]</math><br>
<br>
ただし、クロックが16[MHz]の場合、TA0CCR0レジスタに15999999を代入することはできない。<br>
MSP430G2553のタイマA0は、16ビットタイマであり、最大値は65535 (0xFFFF) だからである。<br>
<br>
したがって、16[MHz]のクロックを使用する場合、以下に示すようにTA0CCR0レジスタとTA0CCR1レジスタの値を設定することができる。<br>
<syntaxhighlight lang="c">
// タイマA0の設定
TA0CTL  = TASSEL_2 | MC_1 | ID_3;  // SMCLK (16[MHz]), アップモード, 分周 1/8 = 2[MHz]のクロックを生成
TA0CCR0 = 20000 - 1;              // PWM周期を1[mS] (1[kHz]) に設定
TA0CCR1 = 2000;                    // デューティ比を10%に設定
</syntaxhighlight>
<br>
上記の設定では、以下のように計算される。<br>
<math>\mbox{ PWM 周 期 } = (\mbox{TA0CCR0} + 1)  \times \frac{1}{\mbox{ 分 周 比 }} = 20000 \times \dfrac{1}{\dfrac{1}{8}} = 20000 \times 8 = 160000</math><br>
<br>
<math>\mbox{ PWM 周 波 数 } = \frac{\mbox{ ク ロ ッ ク 周 波 数 }}{\mbox{ PWM 周 期 }} = \frac{16 \mbox{[MHz]}}{160000} = 1 \mbox{[kHz]}</math><br>
<br>
<math>\mbox{ デ ュ ー テ ィ 比 } = \frac{\mbox{TA0CCR1}}{\big( \mbox{TA0CCR0} + 1 \big)} = \frac{16000}{160000} = 0.1 = 10 [\%]</math><br>
<br>
このように、クロックが16[MHz]の場合は、分周器を使用してクロックを分周して、適切なTA0CCR0とTA0CCR1の値を設定することにより、目的のPWM周期とデューティ比を達成することができる。<br>
<br>
また、上記のサンプルコードでは、、タイマA0のクロックソースとしてSMCLK (Sub-Main Clock) を選択している。<br>
SMCLKは、DCOを分周して生成されるクロックであり、タイマや周辺機器のクロックとして使用されるクロックである。<br>
<syntaxhighlight lang="c">
TA0CTL = TASSEL_2 | MC_1 | ID_0;  // SMCLK (1MHz), アップモード, 分周なし
</syntaxhighlight>
<br>
ここで、TASSEL_2レジスタはクロックソース選択ビットであり、以下のように定義されている。<br>
* TASSEL_0
*: TAxCLK (外部クロック)
* TASSEL_1
*: ACLK (補助クロック、32.768[kHz])
* TASSEL_2
*: SMCLK (サブメインクロック、DCOを分周)
* TASSEL_3
*: INCLK (外部クロック)
<br>
一方、MCLK (Main Clock) は、CPUやその他の一部の周辺機器のクロックとして使用される。<br>
MCLKは、DCOを直接使用する、または、DCOを分周して生成される。<br>
<br>
デフォルトではDCOが1.1[MHz]に設定されており、SMCLKとMCLKはこの周波数で動作する。<br>
ただし、DCOの周波数を変更することにより、SMCLKとMCLKの周波数を変更することができる。<br>
<br><br>
<br><br>


191行目: 242行目:
<br><br>
<br><br>


{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:MSP430]]
[[カテゴリ:MSP430]]