゚ネルギヌ最適化STM32実甚ガむド

こんにちは、Habr



ネットワヌクには、゚ネルギヌ効率の高いデバむス通垞はバッテリヌ駆動のデバむスでのSTM32マむクロコントロヌラヌの動䜜に関する蚘事が非垞に倚くありたすが、それらの䞭でも、それらを含む省゚ネモヌドずSPL / HALコマンドのリストを超えおこのトピックを理解しおいないのは残念ですただし、同じ䞻匵が適甚されたす STM32での䜜業に関する蚘事の倧郚分に。



䞀方、スマヌトホヌムずあらゆる皮類のIoTの急速な発展により、トピックはたすたす重芁になっおいたす-そのようなシステムでは、倚くのコンポヌネントがバッテリヌ駆動であり、それらから䜕幎もの連続動䜜が期埅されたす。



このギャップをSTM32L1の䟋で埋めたす-非垞に人気のあるコントロヌラヌで、非垞に経枈的であるず同時に、このシリヌズに特有のいく぀かの問題がありたす。 述べられおいるほずんどすべおは、STM32L0およびSTM32L4に適甚され、䞀般的な問題ずアプロヌチの芳点から、Cortex-Mコアに基づく他のコントロヌラヌにも適甚されたす。







実際の結果は䞊の写真のようになりたすそしお、はい、マルチメヌタヌや他の枬定噚の同様のタスクぞの適甚性に぀いおも説明したす。



STM32L1の省電力モヌド



バッテリヌ節玄の基本は、プロセッサの䞻芁な省電力モヌドです。 各メヌカヌずコントロヌラヌの各シリヌズには独自のものがありたす特定のセットは、呚蟺機噚、電源電圧などに関するさたざたなニュアンスを持぀暙準のCortex-Mコアモヌドのベンダヌ拡匵です。



具䜓的には、経枈的な䞀連のコントロヌラヌに属するSTM32L1は、これに関連しお、拡匵された䞀連の電力蚭定を受け取りたした。





各モヌドに入るのは非垞に簡単です-3〜5個のレゞスタにフラグを蚭定し、その埌スリヌプモヌドの堎合WFIたたはWFE呜什を呌び出す必芁がありたす。これは暙準のCortex-M呜什で、「割り蟌み埅ち」および「むベント埅ち」を意味したす。 フラグに応じおプロセッサのリファレンスマニュアルに蚘茉されおいたす。STM32L1の堎合はRM0038です 、プロセッサ自䜓はこのコマンドでこのモヌドになりたす。



さらに、割り蟌みを犁止しおこれにより、倖郚および内郚むベントがプロセッサをスリヌプから埩垰させる胜力に圱響を䞎えたせん、DSBコマンドを䜿甚しお、レゞスタからメモリぞのデヌタの保存の完了を埅ちたす。



たずえば、停止モヌドぞの移行は次のようになりたす。



/*  PDDS    Stop  Standby,    */ PWR->CR &= ~(PWR_CR_PDDS); /*  Wakeup   ,      */ PWR->CR |= PWR_CR_CWUF; /*    low-power ,    Stop -    */ PWR->CR |= PWR_CR_LPSDSR; /*    Vref   */ PWR->CR |= PWR_CR_ULP; /*     Cortex-M,  Stop,  Standby -   Deep Sleep */ /*      Deep Sleep */ SCB->SCR |= (SCB_SCR_SLEEPDEEP_Msk); /*  ;       */ unsigned state = irq_disable(); /*      */ __DSB(); /*  */ __WFI(); /*    */ init_clk(); /*     */ irq_restore(state);
      
      





WFIはブロッキング呜什であり、その䞊でプロセッサヌはディヌプスリヌプに入り、䜕らかの割り蟌みが発生するたで終了したせん。 はい、繰り返したすが、割り蟌みを明瀺的にオフにしたにもかかわらず、プロセッサは割り蟌みに応答しお起動したすが、割り蟌みをオンに戻した埌にのみ凊理を開始したす。 そしお、これには深い意味がありたす。



䞊蚘のコヌドでは、WFIの埌、動䜜呚波数のある皮の再初期化が行われおいるだけではありたせん-事実、L1は4.2 MHzの呚波数で、この呚波数の゜ヌスずしお内郚MSIゞェネレヌタヌで垞にディヌプスリヌプを終了したす。 倚くの堎合、プロセッサをりェむクアップする割り蟌みハンドラヌがこの呚波数で実行を開始するのは望たしくありたせん。たずえば、すべおのタむマヌ、UART、およびその他のバスの呚波数がオフになるためです。 そのため、最初に動䜜呚波数を埩元したすたたは、MSIのたたにする堎合は、4.2 MHz未満の必芁なバスを再蚈算したす。次に、割り蟌みに飛び蟌みたす。



実際には、最も䞀般的に䜿甚される2぀のモヌドは実行ず停止です。 実際のずころ、LP Runは非垞に遅く、プロセッサが倖郚むベントを埅぀だけでなく、䜕らかの蚈算を実行する必芁がある堎合には意味がありたせん。たた、SleepおよびLP Sleepはあたり経枈的ではなく最倧2 mAの消費、必芁な堎合に必芁です少なくずもいく぀かを保存したすが、同時に動䜜しおいる呚蟺機噚を離れる、および/たたはむベントに察するプロセッサの可胜な限り速い反応を提䟛したす。 そのような芁件は存圚したすが、䞀般的にはそれほど頻繁ではありたせん。



通垞、スタンバむモヌドは䜿甚されたせん。これは、RAMのれロ化により、䞭断したずころから続行するこずが䞍可胜であるためです。たた、ハヌドりェア゜リュヌションを必芁ずする倖郚デバむスにも問題がありたす。 ただし、デバむスがこれを念頭に眮いお蚭蚈されおいる堎合、このデバむスの長期保管䞭などに、スタンバむを「オフ」モヌドずしお䜿甚できたす。



実際、このプレれンテヌションでは、ほずんどのマニュアルは通垞勝手に途切れおいたす。



問題は、それらに続いお、劎働時間の停止で玄束された1.4ÎŒAではなく、実際の消費量が100-200ÎŒAになるこずです-倖郚チップやセンサヌなどを持たないNucleoリファレンスデバッグでもです。それに起因する可胜性がありたす。



いいえ、プロセッサは動䜜しおいたす。゚ラッタには䜕もありたせんが、あなたはすべおを正しく行いたした。



終わりではありたせん。



むずむず脚症候矀



STM32L1の最初の問題は、 いく぀かの蚘事で蚀及されおいたすが、ほずんどの堎合フォヌラムでのみ思い出されたす。議論の3日目に、非垞に100-200ÎŒAが発生した堎所で 、誰かがAN3430の存圚を芚えおおり、その䞭の19ペヌゞに到達しおいたす-デフォルトでは脚の状態。



STMicro自䜓でさえスリヌブを介しお問題に蚀及しおいるこずに泚意しおください。゚ネルギヌ消費の最適化が考慮されるほずんどの文曞では、理由を説明せずに、未䜿甚の脚を地面に匕っ匵ったり、アナログ入力モヌドにしたりするアドバむスがある1぀たたは2぀のフレヌズに制限されおいたす。



悲しいこずに、デフォルトでは、すべおのレッグがデゞタル入力GPIOx_MODERレゞスタの0x00ずしお構成されおいたす。 シュミットトリガヌは垞にデゞタル入力にあり、この入力のノむズ耐性を改善したすが、完党に独立しおいたす-これは単玔なロゞック゚レメントであり、倖郚クロックを必芁ずしないヒステリシスを備えたバッファヌです。



この堎合、これは、ストップモヌドでクロックをオフにし、シュミットトリガヌが䜕も起こらなかったように動䜜し続けたこずを意味したす。入力信号のレベルに応じお、出力を0ず1に切り替えたす。



同時に、兞型的な回路のプロセッサレッグの䞀郚が宙に浮いおいたす。぀たり、それらに明瞭な信号はありたせん。 わかりやすい信号がないずいうこずは、これらのレッグに高い入力むンピヌダンスが原因でこれらのレッグに0が存圚しないこずを意味するず考えるのは間違っおいるでしょう。ピックアップず隣接するトラックから最初のテレビチャンネルに流れる電流から、䞍定倀のランダムノむズがありたす、足がアンテナずしお機胜するのに十分な長さである堎合ただし、ロシアのアナログテレビはすぐにオフになり、誀っお構成されたマむクロコントロヌラヌの電力消費がいくらか削枛されるはずです。



これらの倉動に応じお、レッグは䜕らかのランダムな方法で0ず1の間で切り替わりたす。CMOSロゞックはスむッチング時に電流を消費したす。 ぀たり、デゞタル入力モヌドで構成された空䞭にぶら䞋がっおいるプロセッサ脚は、 それ自䜓で顕著な電流を消費したす 。



この方法は簡単です-プログラムを起動するずき、すべおのレッグをアナログ入力の状態に蚭定する必芁がありたす。 STM32は、ADCに接続されおいるかどうかに関係なく、䟋倖なくすべおのレッグに察しお正匏に蚭定されおおり、入力にシュミットトリガヌがない堎合のみデゞタル入力ず異なりたす。







これを行うには、倀0xFF ... FFをすべおのGPIOx_MODERレゞスタに曞き蟌むだけで十分です。䞊蚘のように、開始時にすぐにこれを行うのが最も簡単です。次に、プレむ䞭に、このデバむスで必芁に応じお個々のレッグを再構成したす。



ただし、ここでは2次の問題が発生したす。ファヌムりェアが1぀の特定のコントロヌラヌで動䜜するので、GPIOxでxが䜕であるかを垞に把握しおいるず䟿利です。 さらに悪いこずに、ファヌムりェアがナニバヌサルな堎合-STM32は最倧 8぀のポヌトを持぀こずができたすが、それより小さくするこずもできたす。 コントロヌラのこのモデルに存圚しないポヌトに曞き蟌もうずするず、ハヌドフォヌルトが発生したす。 カヌネルクラッシュ。



ただし、この堎合でも回避するこずができたす-Cortex-Mでは、アドレスの有効性を確認できたす。さらに、M3およびM4の堎合、確認は䞀般に簡単ですが、M0では倚少の魔法が必芁ですが、実珟可胜です 詳现に぀いおは 、こちらの蚘事を参照しおください。 



぀たり、䞀般に、プロセッサが起動し、呚波数を調敎し、すぐに利甚可胜なすべおのGPIOポヌトを通過しお、それらをMODERポヌトに曞き蟌みたす以䞋のコヌドはRIOT OS向けに蚘述されおいたすが、䞀般的にはコメントなしで3分に転送できたすその他のプラットフォヌム。



 #if defined(CPU_FAM_STM32L1) /* switch all GPIOs to AIN mode to minimize power consumption */ GPIO_TypeDef *port; /* enable GPIO clock */ uint32_t ahb_gpio_clocks = RCC->AHBENR & 0xFF; periph_clk_en(AHB, 0xFF); for (uint8_t i = 0; i < 8; i++) { port = (GPIO_TypeDef *)(GPIOA_BASE + i*(GPIOB_BASE - GPIOA_BASE)); if (cpu_check_address((char *)port)) { port->MODER = 0xffffffff; } else { break; } } /* restore GPIO clock */ uint32_t tmpreg = RCC->AHBENR; tmpreg &= ~((uint32_t)0xFF); tmpreg |= ahb_gpio_clocks; periph_clk_en(AHB, tmpreg); #endif
      
      





これはL1シリヌズにのみ適甚され、L0およびL4でぱクスペリ゚ンスが考慮され、デフォルトでは、起動時にすべおのポヌトがアナログ入力ずしお蚭定されるこずに泚意しおください。



これらのすべおの手順を泚意深く行っお、完成したデバむスにファヌムりェアを入力したす...そしお、ボヌドではんだ付けしたすべおのデヌタシヌトから掚定倀が最も悲芳的であるずいう事実にもかかわらず、プロセッサずすべおの倖郚チップで停止モヌドで150 uAを取埗したす10ÎŒAを超えないようにしおください。



さらに、プロセッサを停止ではなくスタンバむにしようずしたす。 ほが完党にオフにするだけで、電力消費は䜎䞋する代わりに3倍に増加し、玄0.5ミリアンペアに近づきたす



パニックする必芁はありたせん。 ご想像のずおり、すべおを正しく行いたした。 しかし、最埌たでではありたせん。



むずむず脚症候矀-2



次の問題には2぀の郚分がありたす。



最初のものは非垞に明癜ですデバむスが1぀のマむクロコントロヌラヌで構成されおいない堎合、シュミットトリガヌがハングし、さらにチップの内郚ロゞックを呌び起こすこずができる入力信号が倖郚チップにもあるこずを忘れないこずが重芁です。 たずえば、UARTチヌムによっおスリヌプから取り䞋げられ、スリヌプから解陀されたチップは、バスの動きに応じお、バス䞊のデヌタを読み取ろうずしたす。



したがっお、これらの脚がすべお空䞭にぶら䞋がっおいるず、䜕も埗られたせん。



どのような条件䞋で、圌らは空䞭で終わるのでしょうか



たず、コントロヌラヌがスタンバむモヌドになるず、すべおのGPIOは高抵抗状態でHigh-Z状態に移行したす。぀たり、実際には、それらに接続された倖郚チップは空䞭にありたす。 これをSTM32L1でプログラムで修正するこずは䞍可胜です他のシリヌズおよび他のコントロヌラヌでは異なる方法で発生したす。そのため、唯䞀の方法はスタンバむモヌドを䜿甚するシステムで、倖郚チップの入力はグランドにプルするか、倖郚抵抗によっお絊電する必芁がありたす。



特定のレベルは、チップの芳点からラむンが非アクティブになるように遞択されたす。





第二に、 STOP sic モヌドを䜿甚するSTM32では、むンタヌフェむスの内郚ハヌドりェアブロックに接続されおいるGPIO の状態が異なる堎合がありたす。 ぀たり、同じSPIむンタヌフェむスが構成されおいる堎合、Stopで突然、デゞタル入力、たたは䞀般にHigh-Zのいずれかになるこずが刀明し、それに察応する結果ずしお、倖郚チップがハングしたす。 ドキュメントには脚が良奜な状態にあるず蚘茉されおいたすが、脚を通垞のGPIOずしお䜿甚する堎合にのみ事前に信頌できたす。



理解しお蚱すこずはできたせんが、芚えお修正するこずはできたす。このように動䜜するむンタヌフェむスの堎合、このむンタヌフェむスの非アクティブレベルに察応するレベルで、通垞のGPIOぞの匷制切り替えを远加する必芁がありたす。 スリヌプ状態から抜けた埌、むンタヌフェむスを埩元できたす。



たずえば、スリヌプする前の同じSPI単玔にするために、RIOT OSからコヌドを取埗したした。同じこずがレゞスタに実装するのが簡単であるこずは明らかです。



 /* specifically set GPIOs used for external SPI devices */ /* MOSI = 0, SCK = 0, MISO = AIN for SPI Mode 0 & 1 (CPOL = 0) */ /* MOSI = 0, SCK = 1, MISO = AIN for SPI Mode 2 & 3 (CPOL = 1) */ for (i = 0; i < SPI_NUMOF; i++) { /* check if SPI is in use */ if (is_periph_clk(spi_config[i].apbbus, spi_config[i].rccmask) == 1) { /* SPI CLK polarity */ if (spi_config[i].dev->CR1 & (1<<1)) { gpio_init(spi_config[i].sclk_pin, GPIO_IN_PU); } else { gpio_init(spi_config[i].sclk_pin, GPIO_IN_PD); } gpio_init(spi_config[i].mosi_pin, GPIO_IN_PD); gpio_init(spi_config[i].miso_pin, GPIO_AIN); } }
      
      





ここでの出力は、レベル0たたは1のGPIO_OUTずしおではなく、0たたは1ぞのプルアップを持぀入力ずしお構成されおいるこずに泚意しおください-これは基本的なポむントではありたせんが、間違えお䜕らかの皮類のプルプッシュをしようずするず、远加のセキュリティが提䟛されたすこのチップを反察方向に匕っ匵る倖郚チップ。 GPIO_OUTを䜿甚するず、プルアップ付きのGPIO_INを䜿甚しお、短絡を調敎できたす。



さらに、SPI CS信号は圱響を受けたせん。この堎合、プログラムによっお、぀たり通垞のGPIOによっお生成され、倢の䞭で自信を持っおその状態を維持したす。



スリヌプを終了するずきに脚の状態を埩元するには、倉曎されるレゞスタMODER、PUPDR、OTYPER、OSPEEDR-特定のケヌスの状況を参照の倀を入り口で倉数に曞き蟌み、倉数からスリヌプを解陀するずきにレゞスタにロヌルバックするだけで十分です。



そしお今... ta daaam タむトル画像。 1.5マむクロアンペア。



しかし、祝うには時期尚早です。 これで、゚ネルギヌ消費の静的な最適化が終了したした。そしお、私たちの先には動的なものがありたす 。



アキレスvsタヌトル



どちらが良いですか-より倚く食べおより速く走るか、より少なく食べたすが、より遅く走りたすか マむクロコントロヌラヌの堎合、この質問に察する答えは自明ではありたせん。



たず、動䜜呚波数は、65 kHzLP実行から通垞モヌドで32 MHzたでの非垞に広い範囲で倉曎できたす。 他のCMOSチップず同様に、STM32には消費電力に静的ず動的の2぀のコンポヌネントがありたす。 2番目は呚波数に䟝存し、1番目は䞀定です。 その結果、゚ネルギヌ消費は動䜜呚波数や生産性ほど速く䜎䞋せず、タスクによっおは、゚ネルギヌ効率の芳点から最適な呚波数が異なる堎合がありたす-䜕らかのむベントを埅぀必芁があるが、䜕らかの理由で眠るこずができない堎合、䜎呚波数は効果的で、数字を脱穀するだけです。 兞型的な「病院平均」タスクでは、通垞、2〜4 MHz未満にするず意味がありたせん。



第二に、これはささいなこずではありたせんが、睡眠から抜け出す割合は、動䜜呚波数ず受信方法に䟝存したす。



最悪の堎合は、倖郚クオヌツから32 MHzの呚波数でスリヌプ状態から抜け出すこずですSTM32L1は内郚4 MHzオシレヌタヌで起動するこずを思い出させおください。





実際にここでプロセッサをスリヌプ状態から解陀するこずは、4.2 MHzの呚波数では玄10ÎŒsかかりたすが、最小の問題です。 ただし、クォヌツの安定化には最倧1 msかかりたす通垞、高速共振噚の堎合は数癟マむクロ秒のオヌダヌでさらに高速ですが、PLLモヌドぞのアクセスはさらに160ÎŒsです。



これらの遅延は、めったに起動しないシステム1秒に1回以䞋の゚ネルギヌ消費の芳点からは重芁ではないかもしれたせんが、起動間隔が数十ミリ秒以䞋で、起動自䜓が短い堎合、オヌバヌヘッドは既に枬定可胜な远加を開始したすプロセッサの起動䞭に消費される電流は比范的小さいこずを考慮しおください。



これで䜕ができたすか 䞀般的に、答えは明らかです。倖郚クオヌツの䜿甚を避けるようにしおください。 たずえば、正確なタむミングたずえば、ささいなもの-UARTデヌタ亀換を必芁ずするたれな重いサブタスクや、頻繁な単玔なサブタスクがあるプログラムは、目芚めるたびに、今のたたにする必芁があるかどうかを刀断できたす。たたは、プロセッサが呚波数の初期化に倚くの時間を費やすこずなく既に起動しおいるMSIゞェネレヌタで珟圚のタスクを実行するのが簡単か぀高速になりたす。



ただし、この堎合、呚蟺クロック呚波数の調敎、フラッシュメモリアクセスモヌド遅延サむクル数、プロセッサコア電圧STM32L1では3぀の可胜な倀から遞択などの調敎が必芁になる堎合がありたす。 ただし、カヌネルお​​よびメモリの動䜜モヌドに関しおは、䜿甚される最倧呚波数に掚奚されるモヌドを遞択するこずにより、それらを埮調敎するこずが可胜です。これは、これらの呚波数でのタスク量が少ないため、䜎呚波数でのコアの非最適な動䜜が実際のパフォヌマンスず消費電力に倧きな倉化を䞎えないためです実行されたした。



そのような手段はすべお、モヌドの埮調敎にすでに適甚されおいたすがたずえば、ほずんどのOSやラむブラリは、ボックスに近いものさえ知りたせん、堎合によっおは、パヌセント単䜍のスケヌルで、時にはそれ以䞊で平均消費量を枛らすこずができたす。 たずえば、50 msごずにリヌドスむッチの接点をポヌリングする氎道メヌタヌを想像しおください。実際の調査には数十マむクロ秒かかりたす。この時間たでにコントロヌラヌを起動するたでに500ÎŒsを远加したすか



耐えられないほど長い秒



゚ネルギヌ保存に盎接関係しないが、それに関連しお必然的に発生する別の問題-1秒未満の時間間隔をカりントする方法は



事実、STM32L1には停止モヌドで動䜜するタむマヌが1぀しかありたせん。これはRTCであり、暙準の時間単䜍は1秒です。 同時に、プログラムでは、少なくずも同じ氎道メヌタヌを取埗するために、数十ミリ秒から数癟ミリ秒の単䜍の時間間隔が垞にありたす。



になる方法 32768 HzからクロックできるLPTIMタむマヌを備えたプロセッサヌで実行したすか 実際には良いオプションですが、必ずしも必芁なわけではありたせん。 それなしでも可胜です。



すべおのSTM32L1ではありたせんが、Catで始たりたす。 2これらはプロセッサSTM32L151CB-A、STM32L151CC以降、RTCブロックに新しいレゞスタSSR、SubSeconds Registerが远加されたした。 より正確には、ナヌザヌに芋えるほど補足されおいたせんでした。さらに、サブ秒アラヌムALRMASSRずALRMBSSRが远加されたした。



このレゞスタには、理解できる時間単䜍は含たれおいたせんが、技術的な内郚カりンタヌから収集されたした。 STM32L1では、32768 Hzで刻々ず進むクロックは、非同期ず同期の2぀の分呚噚カりンタヌを通過し、通垞合蚈32768で分呚しおクロックの1秒の刻みを取埗したす。 したがっお、SSRは2番目のカりンタヌの珟圚の倀にすぎたせん。



SSRはミリ秒単䜍ではなく単䜍でカりントしたすが、これらの単䜍の次元は、RTC入力で暙準の1秒を取埗するために32768に等しい合蚈係数を維持しながら、同期および非同期カりンタヌの陀数の比率を倉曎するこずで倉曎できたす。 これらの係数がわかれば、SSRの1区分の䟡栌をミリ秒単䜍で蚈算でき、ここから1秒未満のアラヌムのプログラミングに進むこずができたす。



非同期予備カりンタヌは同期SSRよりも経枈的であるため、1に蚭定し、入力呚波数をSSRに32768で陀算し、わずか30ÎŒsのカりントを受け取っおいるため、゚ネルギヌ的に䞍利なこずに泚意しおください。 私たち自身は、同期-40957 + 1*4095 + 1= 32768の予備陀算噚7の最適倀を決定したした。 予備分呚噚がさらに枛少するず、RTCの゚ネルギヌ消費量はわずかなマむクロアンペアで枬定可胜に増加し始めたすが、これを停止モヌドの「基準」1.4ÎŒAず比范するため、フラクションも重芁です。 デフォルトでは、STM32L1の堎合、これらの倀は127ず255です。 基準䟡栌は玄4ミリ秒で、これは少し倧雑把です。



コヌドをさらに深く掘り䞋げたい堎合は、やがおRIOT OSの暙準RTCドラむバヌを完成させ、 RTC_SSRずミリ秒間隔をサポヌトしたす。 それ以来、私たちは文字通りすべおのステップでそれを䜿甚しおきたしたそしお、OSで䜜業しおいるため、サヌビスもその䞊でハングアップし、手銖を振るだけで1぀のハヌドりェアタむマヌで任意の期間のほがすべおのタスクをハングアップできたす。



同じアプロヌチがSTM32L0およびSTM32L4コントロヌラヌに転送され、そのすべおのモデルにRTC_SSRレゞスタがありたす。 これにより、LPTIMタむマヌが䞍芁になり、異なるプラットフォヌムのコヌドが統䞀されたす。



マルチメヌタヌが嘘を぀いおいるこずを理解する方法



もちろん、すべおの最適化の埌、正圓な疑問が生じたす。実際、私たちは䜕を達成したしたかそれに察する答えを知らなくおも、正しく蚭定されたフラグを持぀1぀のWFEに完党に制限し、スリヌプ状態に入り、200〜500ÎŒAを取埗できたす。



電流を枬定する最も䌝統的な方法は、もちろん、マルチメヌタヌです。動的消費のあるマむクロコントロヌラヌのように負荷の䞊にあるこずを理解するのは非垞に簡単です-オンにするず、暪になりたす。



ただし、これはマルチメヌタヌがこの問題で圹に立たないずいう意味ではありたせん。あなたはそれを適甚できる必芁がありたす。



たず、マルチメヌタヌは非垞に遅いものであり、1カりントの兞型的な時間は2番目のスケヌルであり、マむクロコントロヌラヌが状態を倉曎する兞型的な時間はマむクロ秒のスケヌルです。そのペヌスで消費量を倉曎するシステムでは、マルチメヌタヌは単にランダムな倀を衚瀺したす。



ただし、私たちにずっお興味深い非ランダム倉数の1぀は、スリヌプモヌドでのマむクロコントロヌラヌの消費です。デヌタシヌトで掚定した倀を倧幅に超える堎合、明らかに䜕かが間違っおいたす。これは静的システムの消費量です。぀たり、マルチメヌタヌで枬定できたす。



タむトル写真に瀺されおいる最も簡単な方法は、マむクロアンメヌタモヌドのマルチメヌタです。これは珟圚、ほずんどのミッドレンゞモデルにあり、粟床ず分解胜が優れおいたす。 UT120Cの分解胜は0.1ÎŒAで、粟床は±1±3攟電です。これで十分です。



このモヌドには問題が1぀しかありたせん。マルチメヌタの盎列抵抗が倧きく、数癟オヌムのスケヌルがあるため、通垞モヌドでは、電源回路にこのようなマルチメヌタがあるマむクロコントロヌラは起動したせん。幞いなこずに、スケヌル䞊のほずんどすべおの機噚の「mA」ず「uA」の䜍眮は近く、䞡方の範囲で枬定する゜ケットは同じです。したがっお、コントロヌラヌを「mA」の制限で安党に実行し、スリヌプ状態になったら「uA」をクリックしたす「-これは十分に速く行われるため、コントロヌラが電力を倱っお再起動する時間がありたせん。



コントロヌラのアクティビティが急䞊昇する堎合、この方法は適甚できないこずに泚意しおください。たずえば、デバむスのファヌムりェアではりォッチドッグタむマヌが15秒ごずにリセットされたす。これらの瞬間に、マルチメヌタヌは27ÎŒAの領域で䜕かを衚瀺したすが、これはもちろん火星の倩気ずは関係ありたせん。 5-10秒に1回以䞊、システム䞊で勝手に短い䜕かが発生した堎合、マルチメヌタヌは単玔に嘘を぀きたす。静的



を枬定する別の方法私はこの蚀葉を盎接匷調しおいたすマルチメヌタヌによる消費は、倖郚シャントでの萜䞋の枬定倀です。数十マむクロアンペアのスケヌルの超埮小電流を枬定する堎合、倧きなシャントたずえば、1 kOhmを䞊列に接続する必芁がありたす-盎接接続のショットキヌダむオヌド。シャントが0.3 Vを超えるず、ダむオヌドが開き、電圧降䞋が制限されたす。最倧0.3 Vの堎合、1 mV = 1ÎŒAの範囲でマルチメヌタを䜿甚しお安党に降䞋を枬定できたす。



残念ながら、兞型的なマルチメヌタヌで䜎むンピヌダンスのシャントのドロップを枬定するこずはできたせん。䞭玚クラスのデバむスは、100ÎŒV未満の倀を瀺しおも、この範囲では残念です。 1ÎŒVを衚瀺できる優れたデスクトップデバむスがあれば、私のアドバむスはもう必芁ありたせん。



しかし、静力孊は良いのですが、力孊はどうですか平均電力消費に察する異なる呚波数の同じ効果を評䟡する方法は



ここではすべおが耇雑です。



基本的な芁件を曞き留めたしょう。





単玔に数倀に倉換するず、入力バむアスが30ÎŒV未満の比范的高速で18ビット以䞊のADC、1ÎŒVからの電圧を枬定できるアナログフロント゚ンド、およびこれらすべおを転送できるコンピュヌタヌぞのクむックむンタヌフェむスが埗られたす保存したす。



そしお、これらはすべお1回の䜿甚で枈みたす。



あなたは、はい、なぜそのようなものが10ドルの隅々に暪たわっおいないのですか Keysight N6705Cは最初の近䌌倀で芁件を満たしおいたすが、䟡栌は7960ドルです。



たずえば、予算゜リュヌションから、SiLabsは珟圚の枬定をそのデバッグに統合したす-Advanced Energy MonitoringAEMシステムの特性は特定のデバッグモデルに䟝存し、最倧の問題は枬定速床にありたす。叀い「スタヌタヌキット」では、STK3300 / 3400は100 Hzのみで、新しいデバッグではSTK3700 / 3800黒いテキ゜ラむトで簡単に認識可胜-6.25 kHz、DKシリヌズの叀いモデルでは最倧10 kHzに達したすが、コストもかかりたす圌らはすでに300ドル以䞊です。深刻なタスクに぀いおは、SiLabsは前述のKeysightを公匏に掚奚しおいたす。



原則ずしお、このようなデバむスは自分で蚭蚈するこずができたす-たず、OPA2335のような最小限の入力バむアスで非垞に優れたオペアンプが必芁です。このようなオペアンプは、異なる増幅係数を持぀2〜3個の同じシャントに配眮され、それらはすべお異なるADC入力に巻かれたすこのアプロヌチでは、内蔵のマむクロコントロヌラを䜿甚するこずは可胜です。瞬間は過負荷ではなく、それからの枬定倀がカりントされたす。



コンピュヌタヌぞのデヌタ転送速床の問題は非垞に簡単に解決されたす-実際の目的では、実際のシステムの平均消費に䞻に関心があるため、メヌタヌのオンボヌドマむクロコントロヌラヌでマむクロ秒の読み取り倀を収集し、合理的なミリ秒スケヌルの算術平均を送信するこずができたす



さらに、実践が瀺すように、メヌタヌロガヌは非垞に䟿利ですが、シンプルであたり正確ではありたせんが、垞に手元にありたす-省゚ネによっお砎壊された䜕らかのファヌムりェアの倉曎に驚かないようにするためです。



たずえば、暙準のUSBアダプタヌUMDK-RFに組み蟌みたした。これは、ファヌムりェアのデバッグ時に垞に䜿甚されたす。既にDAPLinkプロトコル、USB-UARTブリッゞ、および電源管理ロゞックをそれぞれサポヌトするSWDプログラマヌがあり、消費メヌタヌがありたすほずんど無料です。メヌタヌ自䜓は1オヌムシャントおよびINA213アンプゲむン50倍、暙準的なれロオフセット5ÎŒV







アンプはマむクロコントロヌラヌのADCSTM32F042F6P6の入力に盎接接続され、ADCはハヌドりェアタむマヌを䜿甚しお10ÎŒsの呚期で凊理し、USB経由で起動したす100ミリ秒間隔の平均デヌタが出力されたす。その結果、ファヌムりェアロゞックで䜕かを倉曎するず、煙を出したりコヌヒヌを飲んだりしお、デバむスをテヌブルに眮いたたた戻り、次のようなスケゞュヌルを芋るこずができたす。







もちろん、このような「無料」デバむスの粟床は高くありたせん-12ビットADCず1぀のアンプを䜿甚するず、最小量子は16ÎŒAになりたすが、゚ネルギヌ消費の芳点からデバッグされたデバむスの動䜜を迅速か぀定期的に評䟡するのに非垞に圹立ちたす。結局、ファヌムりェアたたはデバむスで䜕か間違ったこずをした堎合、非垞に高い保蚌があれば、マむクロアンプのナニットから少なくずも数癟を匕き出すこずができ、これははっきりず芋えたす。







別の玠晎らしいボヌナスは、デヌタがテキスト圢匏マむクロアンペア単䜍の倀で仮想COMポヌトに送信されるため、デバむスのコン゜ヌルを衚瀺するりィンドりの隣に端末りィンドりを配眮し、デバッグメッセヌゞず同時に電力消費を確認できるこずです。



これには理由があるこずを自慢し、この最小限のそしお非垞に安䟡なデバッガプログラマを自分のプロゞェクトで䜿甚したいすべおの人に提䟛したす。ここで



図を描くこずができたすDipTraceの゜ヌス、ここでファヌムりェアをドラッグアりトできたすタヌゲットを構築するずきのumdk-rfブランチ、dap42プロゞェクトに基づくUMDK-RF 。ダむアグラムは乱雑に描かれおいたすが、芁点が明確であるこずを願っおいたすが、ファヌムりェアはlibopencm3を䜿甚しおCで蚘述され、通垞のarm-none-eabi-gccでアセンブルされたす。远加機胜ずしお、ファヌムりェアには電源管理機胜があり、コントロヌルキヌから過負荷信号をキャッチし、ボタンを長抌ししおネむティブブヌトロヌダヌに接続されたコントロヌラヌを入力したす。



NBプログラマヌ自身のコントロヌラヌを通垞の方法でブヌトロヌダヌに入れるためのブヌトボタンが必芁な堎合、接続の極性を倉曎し、最初のブヌト時のコントロヌラヌのオプションバむト線集ずブヌトロヌダヌぞのプログラム入力を削陀し、通垞の割り蟌み極性を持たせる必芁がありたすこのボタンの機胜。



ゲむン係数が異なるオペアンプのペアで電流がどのように枬定されるかを芋るこずができたすたずえば、タスクの䞊蚘のデバッガヌを改善するため、ここp。9、1぀のオペアンプず高䟡な24ビットADC - TIの持っおいる5ペヌゞのEnergyTraceを。



PS接続されたUARTたたはJTAG / SWDを䜿甚したデバッグ䞭に、足から小さな電流が挏れる堎合がありたすが、これはデバむスの実際の動䜜䞭には存圚したせん。したがっお、SWDにUMDK-RFは、15マむクロアンペアおよびSWDこずなく、基板の叀いバヌゞョンで行わしたがっお資本マルチ枬定画像に぀いお挏掩し、STM32ヌクレオにSWDによっお寄生消費のケヌスがあった200マむクロアンペアに関する。枬定に䜿甚されるデバッグボヌドは、そのような機胜があるかどうかを確認する必芁がありたす-そのような可胜性がある堎合は、むンタヌフェむスラむンを切断するか、デバッグ甚にむンストヌルせずに枬定したデバむスの消費量ず結果を比范したすたずえば、静的モヌドのマルチメヌタヌ



結論の代わりに



マむクロコントロヌラのプログラミングをあなたの䞻な専門分野ずしお遞択するこずによっお、あなたが犯した間違いをすでに理解しおいるこずを願っおいたす。



All Articles