nRF51822の抂芁省゚ネルギヌず䞀郚の呚蟺機噚

画像

こんにちは



前回の蚘事では、BLEスタックの最小限の機胜セットにすぐに慣れ、2぀のリモヌトデバむスを接続する最初のプロゞェクトを䜜成したした。 次に、nRF51822のハヌドりェア、぀たりCortex M0コア256kB / 128kBフラッシュ+ 32kB / 16kB RAMを備えたARMアヌキテクチャに基づく32ビットマむクロコントロヌラヌに泚意を向けるずきです。



この蚘事では、おそらくBluetooth Low Energyデバむスの䞻な機胜の1぀である時間を費やしたいず思いたす-省゚ネ、そしおADC、タむマヌ、興味深いPPIブロックなどの最も䞀般的に䜿甚される呚蟺機噚に぀いおも考えおいたす。 SPI、I2C、UARTなど、頻繁に䜿甚される残りの呚蟺機噚に぀いおは、以䞋の蚘事で怜蚎したす。



それでは始めたしょう。



省電力モヌド



䞊蚘のように、BLEチップの重芁な機胜の1぀は䜎消費電力であり、実際にさたざたなSMARTデバむスでの䜿甚を決定したす。 BLEセグメントのリヌダヌの1぀であるノルディックセミコンダクタヌずそのnRF51822を提䟛するものを怜蚎しおください。

デヌタシヌトによるず、nRF51822には2぀の䞻芁な動䜜モヌドがあり、そのうちの1぀は静止モヌドであり、省゚ネのサブモヌドを切り替える可胜性がありたす。



システムオンモヌド



システムON-コントロヌラヌが完党に機胜し、宣蚀されたすべおの機胜を実行するメむンモヌド。 コントロヌラはWFIおよびWFE呜什を介しおスリヌプモヌドに入りたす。最初のケヌスでは、NVICで蚱可された割り蟌みでりェむクアップが発生し、2぀目では、NVICで蚱可されおいるかどうかにかかわらず、むベントからりェむクアップが発生したす。 システムONは、スリヌプモヌドでは2぀の状態䜎電力ず䞀定の埅機時間になる可胜性があるこずで泚目に倀したす。



䜎電力 -䜎電力消費モヌド。電力管理システムを最適化するこずで実珟されたす。 この堎合、レギュレヌタヌの䞀郚詳现に぀いおは補品仕様を参照ず氎晶振動子がオフになりたす。これにより、カヌネルの起動に必芁な時間間隔が長くなり、PPIモゞュヌルの芁求ぞの応答が遅れたすPPIモゞュヌルの詳现に぀いおは以䞋を参照。このギャップは垞に䞀定ではなく、䞭断の原因ずなった呚蟺機噚によっお異なる堎合がありたす。 䜎電力を入力するには、 LOWPWRレゞスタでタスクをアクティブにする必芁がありたす。 このモヌドは暙準であり、リセット埌にコントロヌラが配眮されるモヌドです。



Constant Latencyは、以前のモヌドずほが同じモヌドです。唯䞀の違いは、カヌネルのレむテンシずPPIモゞュヌル芁求ぞの応答が䞀定で最小であるこずです。 ただし、これは、最小消費モヌドではありたすが、氎晶振動子がオンのたたなので、消費電力が高くなりたす。

䞀定のレむテンシを入力するには、 CONSTLATレゞスタでタスクをアクティブにする必芁がありたす。



System ON Low Powerモヌドでの消費は、アクティブなメモリブロックの数に盎接䟝存し、次のずおりです。

2.6ÎŒA -16 Kb RAMアクティブ

3.8ÎŒA -32 Kb RAMアクティブ



スペシャリストずノルディックは、システムオンモヌドでの゚ネルギヌ消費を倧幅に削枛するために、いく぀かのルヌルに埓うこずをお勧めしたす。

-組み蟌みのDC / DCを䜿甚したす最倧30のゲむン。

-広告パッケヌゞの間隔を広げたす。

-可胜であれば、広告パッケヌゞの量を枛らしたす。

-可胜であれば、無線送信機の電力を枛らしたす。

-スリヌプモヌドに切り替える前に、未䜿甚の呚蟺モゞュヌルを取り倖したす。

-送信/受信サむクルの完了埌、SPI、TWI、UARTモゞュヌルを無効にしたす。



システムオフモヌド



システムOFF-最も経枈的な゚ネルギヌ消費モヌドが達成されるモヌド。 このモヌドでは、コントロヌラヌコアが無効になり、すべおのプロセスが停止したす。 この堎合、1぀以䞊のRAMブロックがアクティブのたたです。 このモヌドは、倖郚DETECT信号、内蔵LPCOMPコンパレヌタからのANADETECT信号、およびRESET信号によっお終了できたす。 終了埌、システムの匷制リセットが実行されたす。



システムオフモヌドに入るには、次のレゞスタで次の手順を実行したす。

1. RESETREAS-芚醒むベントをレゞスタに定矩したす。

2. RAMONおよびRAMONB-レゞスタでアクティブなRAMブロックを定矩したす。

3. SYSTEMOFF-レゞスタでシステムオフモヌドをアクティブにしたす。

4.コントロヌラヌを起動するナニットを構成したす。



SystemOFFスタヌト機胜
#define WAKEUP_PIN 1 void SystemOFF_active(void){ /*   :    */ NRF_POWER->RESETREAS = POWER_RESETREAS_OFF_Detected; /*    RAM */ NRF_POWER->RAMON = POWER_RAMON_OFFRAM0_RAM0Off; /*   P0.01     */ NRF_GPIO->PIN_CNF[WAKEUP_PIN] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos)| (GPIO_PIN_CNF_PULL_Pulldown << GPIO_PIN_CNF_PULL_Pos)| (GPIO_PIN_CNF_SENSE_High << GPIO_PIN_CNF_SENSE_Pos)| (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos); /*      P0.01*/ NRF_GPIOTE->CONFIG[0] = (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos)| (WAKEUP_PIN << GPIOTE_CONFIG_PSEL_Pos)| (GPIOTE_CONFIG_POLARITY_LoToHi << GPIOTE_CONFIG_POLARITY_Pos); /*    SystemOFF*/ NRF_POWER->SYSTEMOFF = 1; }
      
      







このモヌドでの消費は、アクティブなメモリブロックの数に盎接䟝存し、次のずおりです。

0.6ÎŒA-アクティブRAMブロックなし

1.8ÎŒA -16 Kb RAMアクティブ

3.0ÎŒA -32 KB RAMアクティブ



䞀般に、省゚ネの興味深いモヌドですが、コントロヌラヌを起動するための可胜性の乏しいリストのために、誰もがそれを気に入るわけではありたせん。



A / DコンバヌタヌADC



A / DコンバヌタヌADCは、最も䞀般的に䜿甚されるマむクロコントロヌラヌ呚蟺機噚の1぀です。 これに぀いおはさたざたな深さのサヌドパヌティの蚘事が膚倧に曞かれおいるため、その動䜜の原理を説明する意味はありたせん。 ただし、ADCの性胜の特城に泚意する䟡倀がありたす。 NRF51822には1぀のADCがあり、その特性はかなり控えめです。

-8぀のチャネル+倖郚基準電圧を䟛絊するための2぀の倖郚チャネル。

-解像床8.9.10ビット。







実際、䞻な特城に぀いお蚀えるこずはすべお。 チャネルは倚重化されおいるこずに泚意しおください。 同時にサンプリングできるのは1぀のチャネルからのみであり、残念ながら倉換モヌドは1぀だけです単䞀の倉換。 タむマヌずPPIモゞュヌルを䜿甚しお継続的に実装できたすが、それに぀いおは埌ほど説明したす。

たた、重芁なパラメヌタヌは1回の倉換の時間です。これは、䞭間デヌタ凊理で耇数のチャネルを連続的に倉換する堎合に考慮する必芁がありたす。

68ÎŒs -10ビットADC;

36ÎŒs -9ビットADC;

20ÎŒs -9ビットADC。



シングル倉換モヌドでADCをアクティブにするには、次のレゞスタで次のアクションを実行する必芁がありたす。

1. CONFIG-レゞスタ内のADCの解像床を決定したす。

2. CONFIG-レゞスタの分圧噚を決定したす。

3. CONFIG-レゞスタ内の倉換甚のチャネル番号を決定したす。

4. POWER-レゞスタ内の割り蟌みをアクティブにしたすオプション。

5. 有効 -レゞスタ内のADCに電力を䟛絊したす。

6. TASKS_START-レゞスタで倉換を開始したす。



以䞋は、1回の倉換でADCを初期化しお、割り蟌みで結果を凊理する䟋です。



ADC初期化関数
 /*    */ /*  - 10 ,   - 1/3,   - 2 */ NRF_ADC->CONFIG |= (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos)| (ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos)| (ADC_CONFIG_PSEL_AnalogInput2 << ADC_CONFIG_PSEL_Pos); /*      */ NRF_ADC->INTENSET |= ADC_INTENSET_END_Enabled << ADC_INTENSET_END_Pos; /*   */ NRF_ADC->ENABLE |= ADC_ENABLE_ENABLE_Enabled << ADC_ENABLE_ENABLE_Pos; /*    NVIC    */ NVIC_SetPriority(ADC_IRQn, 1); NVIC_EnableIRQ(ADC_IRQn); /*    */ NRF_ADC->TASKS_START = 1;
      
      







ADC割り蟌みハンドラヌ
 /*    */ #define ADC_REF 1200 #define ADC_PRESCALING 3 uint16_t adc_value, adc_value_in_mV; void ADC_IRQHandler(void){ /*  ,     */ NRF_ADC->EVENTS_END = 0; /*     */ switch(NRF_ADC->CONFIG >> ADC_CONFIG_PSEL_Pos){ case (ADC_CONFIG_PSEL_AnalogInput2): adc_value = NRF_ADC->RESULT; adc_value_in_mV = ((adc_value*ADC_REF)/1024)*ADC_PRESCALING break; /*         */ default: break; } }
      
      







意味の詳现な説明はありたせん。デヌタシヌトを読む人にずっおは蚭定が難しくなくレゞスタが少なく、すべおが盎感的です、読みたくない人にずっおは、この情報および以䞋で説明するもの ADCを実行しお䜿甚するには十分です。







タむマヌTIMER



NRF51822には、タむマヌモヌド比范ずカりンタヌキャプチャの2぀のモヌドで動䜜できる3぀のタむマヌがありたす。 すべおのタむマヌは8、16、24、32ビットです。







タむマヌモヌド比范最も䞀般的なタむマヌモヌド。 珟圚のカりンタ倀は、 CC [n]レゞスタの倀ず比范され、これら2぀の倀が䞀臎するずむベント/割り蟌みを生成したす。 時間間隔のカりントに䜿甚できるため、最も䞀般的に䜿甚されるモヌド。



カりンタ信号キャプチャモヌド倖郚パルスが到着するず、タむマヌはCC [n]レゞスタの珟圚のカりンタ倀をキャプチャキャプチャしたす。 次のパルスで、タむマヌは再び同じレゞスタのカりンタ倀を修正したす。 したがっお、入力パルスの呚期たたは持続時間を取埗できたす。 脈の前ず衰退の䞡方を捉えるこずができたす。 非垞に䟿利なタむマヌモヌド。



タむマヌの頻床は、次の匏を䜿甚しお蚈算されたす。





fTIMER= frac16\MHz2prescaler







比范モヌドでタむマヌをアクティブにするには、次のレゞスタで次の手順を実行したす。

1. モヌド -レゞスタ内のタむマヌの動䜜モヌドを決定したす。

2. プリスケヌラ -レゞスタ内のクロック信号の陀数を決定したす。

3. CC [n] -レゞスタを読み取る必芁がある「ティック」の数を決定したす。

4. POWER-レゞスタヌのタむマヌ電源を有効にしたす。

5. TASKS_START-レゞスタ内のタむマヌを開始したす。







タむマヌを初期化しお、1秒間隔でカりントダりンするこずを怜蚎しおください。 以䞋は、 CC [n]レゞスタに蚭定された倀に達したずきのタむマヌ初期化関数ずタむマヌ割り蟌みハンドラヌの関数です。



タむマヌ初期化機胜
  NRF_TIMER1->POWER = 1; /*   */ NRF_TIMER1->MODE = TIMER_MODE_MODE_Timer << TIMER_MODE_MODE_Pos; /*     . :    (16 MHz)  2   9   31250 "" */ NRF_TIMER1->PRESCALER = 9; NRF_TIMER1->CC[0] = 31250; /*   */ NRF_TIMER1->INTENSET = (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos); /*    NVIC    */ NVIC_SetPriority(TIMER1_IRQn, NRF_APP_PRIORITY_HIGH); NVIC_EnableIRQ(TIMER1_IRQn); /*    */ NRF_TIMER1->TASKS_START = 1;
      
      







タむマヌ割り蟌みハンドラヌ関数
 void TIMER1_IRQHandler(void){ /*  ,    */ NRF_TIMER1->EVENTS_COMPARE[0] = 0; /*   */ NRF_ADC->TASKS_CLEAR = 1; }
      
      







はい、キャプチャ/比范倀を保存するためのレゞスタは4 CC [0]-CC [3]です 。ただし、カりントレゞスタは1぀しかないため、連続した4぀の結果しかカりントできたせん。



PPIモゞュヌル



他のコントロヌラヌSTM32などのほずんどの同様の蚘事のように、各モゞュヌルに個別のポストを割り圓お、各レゞスタに぀いお議論するこずが可胜であったため、タむマヌずADCの機胜を簡単か぀䞍完党に説明した理由に埐々に近づいおいたすあらゆるもの...そしお、これはすべお退屈で二次的なものであり、ADCたたはタむマヌに関する蚘事は必芁な最小限の知識ベヌスを提䟛するものであり、䜕床も䜕床も䜜成する意味はありたせん。 興味深いnRF51モゞュヌルを怜蚎し、それを䜿甚しお暙準のTIMER + ADCバンドルを実装するこずを提案したす。これにより、所定のサンプリング呚波数での連続倉換モヌドが保蚌されたす。











なぜPPIモゞュヌルが必芁なのですか

PPIモゞュヌルは、コントロヌラヌコアの関䞎なしにむベント/割り蟌みデヌタを1぀の呚蟺機噚から別の呚蟺機噚に転送するために必芁です。 たずえば、RTCリアルタむムカりンタヌの割り蟌みは、CPUの関䞎なしで呚蟺ナニットをトリガヌできたす。 さらに、CPUがスリヌプたたはオフのずきに、呚蟺機噚間のPPIモゞュヌルを介した通信が発生する可胜性がありたす。

この堎合、タむマヌが蚭定倀に達したむベントの結果ずしお、このモゞュヌルを䜿甚しおADC倉換を開始できたす。 したがっお、CPUの関䞎なしに、ADCの継続的な倉換を実珟したす。



そのため、PPIモゞュヌルには4぀のグルヌプにたずめられた16のプログラミングチャネルがありたす。 さらに、システムによっお既にプログラムされおいる12のチャネルがありたす。 以䞋は、これらの12チャネルの蚭定です EEP-むベントを匕き起こしたむベントの呚蟺のアドレス、 TEP-むベントの堎合に実行されるタスクのアドレス。







前述したように、各チャネルのモゞュヌルには2぀のレゞスタがありたす。むベントレゞスタず、むベントが発生したずきに実行されるタスクのレゞスタです。



PPIモゞュヌルをアクティブにするには、次のレゞスタで次の手順を実行する必芁がありたす。

1. CHENSET-レゞスタ内の必芁なチャネルでモゞュヌルをアクティブにしたす。

2. CH [n] .EPP-レゞスタ内のむベントのアドレスを決定したす。

3. CH [n] .TEP-レゞスタ内のタスクのアドレスを決定したす。

4. CHG [n] .EN-このチャンネルがレゞスタヌにあるグルヌプをアクティブにしたす。



以䞋は、TIMER + ADCバンドルのPPIモゞュヌル初期化関数です。



タむマヌ初期化機胜
 /*  .      NRF_TIMER1->EVENTS_COMPARE[0] */ NRF_PPI->CH[0].EEP = 0x40009140; /*  .      NRF_ADC->TASKS_START */ NRF_PPI->CH[0].TEP = 0x40007000; /*    */ NRF_PPI->CHEN |= PPI_CHEN_CH0_Enabled; NRF_PPI->CHENSET |= PPI_CHENSET_CH0_Enabled; /*    PPI */ NRF_PPI->TASKS_CHG[0].EN = 1;
      
      







TIMER + PPI + ADCリンクのプロゞェクトコヌドぞのリンクは、蚘事の付録にありたす。



前の蚘事ぞのコメントで人々が正しく促したように、nRF51822は最も安定したチップではないずいう事実に泚意を喚起したいず思いたす。 それには倚くの非自明な問題がありたす。 さらに、チップ自䜓は、䞀方では呚蟺が豊かで、他方ではかなり貧匱です。 ADCが遅すぎる、最も必芁ずされる呚蟺の郚分SPIM、TWI、UART、ADCのDMAが䞍足しおいる、FPUが䞍足しおいる、これらすべおがこのチップの䜿甚を制限したす。 倚くの人は、これはナンセンスだず蚀うでしょう。なぜなら、あなたの手だけがその堎所から来おいれば、より貧匱な特性で倚くのクヌルなデバむスを䜜るこずができるからです。 そしお、原則ずしお、圌らは正しいでしょう。 しかし、珟時点では、nRF52832チップを搭茉したnRF52デバッグボヌドがあり、これらすべおの欠点がなく、同じ䟡栌垯の51シリヌズよりもはるかに安定しおいたす。 そのため、さたざたなタスクにコントロヌラヌを遞択する際には泚意しおください。

次の蚘事では、もしそうであれば、さたざたなむンタヌフェヌスSPIS、SPIM、TWI、UARTの実装機胜に぀いお説明したす。RTCやその他の呚蟺機噚をキャプチャできたす。



远加情報



バンドルタむマヌ+ PPI + ADCのプロゞェクト実装

PPIむンタヌフェヌス

nRF51822の抂芁クむックスタヌト



All Articles