STM32でSYSCLKを32MHz→64MHzへ引き上げた設計と周辺影響の整理
背景
1ms制約のあるフレーム間処理において、機能追加(ログ処理)後、理論処理時間が約989µsに達していた。
この状態では設計マージンがほぼ存在せず、条件次第でタイミング逸脱が発生する可能性がある。
設計マージン確保のため、システムクロック引き上げを検討した。
対象MCUは STM32F410R8T6。
最大SYSCLKは100MHzであり、64MHzへの引き上げは仕様範囲内である。
クロック設計
前提
- HSE:20MHz
- 変更前SYSCLK:32MHz
- 変更後SYSCLK:64MHz
- SPIクロック:1MHz(変更なし)
- 周辺タイマ周期は維持
- 設定はレジスタ直修正
PLL構成
PLLM(入力分周器)
VCO入力周波数は1〜2MHzに収める必要がある。
fVCO_IN = 20MHz / 20 = 1MHz
PLLM = 20(変更なし)
PLLN(VCO逓倍器)
fVCO_OUT = 1MHz × 128 = 128MHz
PLLN = 128(変更なし)
PLLP(SYSCLK生成)
設定可能値:2 / 4 / 6 / 8
- 変更前:128 / 4 = 32MHz
- 変更後:128 / 2 = 64MHz
PLLPのみを 4 → 2 に変更。
バス系への影響整理
AHB(HCLK)
分周なし(DIV1)
HCLK = 64MHz
APB1(最大50MHz)
DIV1では上限超過となるため、
APB1 = DIV2 → 32MHz
※タイマクロック注意点
STM32F4では、APB分周が
- DIV1 → TIM_CLK = PCLK
- DIV2以上 → TIM_CLK = 2 × PCLK
と式が異なる。
今回
PCLK1 = 32MHz
TIM_CLK = 64MHz
タイマクロック自体は変更前と同一。
ただし周期維持のため、PSCを32 → 64へ変更。
APB2(最大100MHz)
64MHzは上限内のため変更なし。
Flash Latency
32MHz:1WS
64MHz:2WS
Wait State未変更の場合、不定動作やHardFaultの原因となる可能性があるため必ず変更。
処理時間の改善結果
データ量多・ログ機能有の構成において:
- 変更前:約989µs
- 変更後:約680µs
約300µsの短縮を確認。
1ms制約に対し:
1000µs - 680µs = 約320µsのマージン
設計目標として「900µs以内(マージン0.9)」を基準としていたため、条件達成。
※温度条件や個体差による変動については今後評価予定。
消費電流への影響
動的消費電力は以下で表される。
P = C × V² × f
電流換算すると:
I = C × V × f
Cはスイッチングに伴い充放電される容量(回路規模に依存)。
理論上、周波数を倍にすれば電流も倍となる。
ただし実際には、
- 常時最大スイッチングしているわけではない
- 負荷率に依存する
ため、本システムでは実用上問題となる増加は確認されなかった。
設計上の確認項目
- SPI通信速度は変更なし(1MHz維持)
- UARTボーレート再計算
- タイマ周期再検証
- 発熱確認
クロック変更は単なる数値変更ではなく、
- バス上限
- タイマ倍化仕様
- Flash待ち時間
- 周辺再検証
を横断的に整理する設計作業である。
まとめ
- PLLP変更のみでSYSCLK倍化可能
- APB1上限とタイマ倍化仕様に注意
- Flash Latencyは必須変更
- 実測で約300µs改善
- 約320µsのマージン確保
クロック引き上げは有効な対策だが、
影響範囲を体系的に整理しないと新たな不具合要因になり得る。
Discussion