📢 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]] | ||