
"جعل اللاسلكي سهلاً!" - تمكين عد النبض على تطبيق LoRawan منخفض الطاقة

يتم توفير البرنامج "كما هو" ويعطي طريقًا للدعم الذاتي وصيانة الذات.
يحتوي هذا المستودع على رمز مثال غير مدعوم يهدف إلى المساعدة في تسريع تطوير منتجات العميل. لم يتم التحقق من صحة الإنتاج ولا يتم تدقيقه لأفضل الممارسات الأمنية.
لاحظ أنه على الرغم من أن هذا المستودع غير مدعوم ، إلا أنه سيتم اعتبار جميع عمليات السحب لإدراجها في المستودع.
التفاعل مع أقرانهم في المجتمع في منتدى لورا.
استنادًا إلى تطبيق Lorawan الذي تم إنشاؤه من ASFV3 ، يوضح رمز العينة هذا كيفية تمكين حساب النبضات الموفرة للطاقة أثناء وضع الجهاز في وضع الاستعداد ، وهو مفيد للتطبيقات التي تعمل بالبطارية المستخدمة في القياس الذكي
يتكون التطبيق الرئيسي في نقل قيمة العداد إلى سحابة مزود شبكة Lorawan من خلال بوابة. لغرض هذا العرض التوضيحي ، تم استخدام TTN و TTI مع عنصر آمن مسبقًا.
استنساخ/قم بتنزيل الريبو الحالي للحصول على البرنامج.
يجب: شراء مجموعة SAM R34 Xplained Pro Pro

شراء مجموعة التقييم المحترفة WLR089U0 Xplained

يجب: شراء بوابة لورا (ص) (على سبيل المثال من صناعات الأشياء) 
اختياري: شراء عينات من العنصر الآمن ATECC608A-Tnglora ومجموعة CryptoAuthentication UDFN Socket
قم بتنزيل وتثبيت Microchip Studio 7.0 IDE.
فتح Microchip Studio 7.0 IDE.
من الأدوات -> الامتدادات والتحديثات ، قم بتثبيت الإصدار المتقدم لبرامج البرامج (ASFV3) V3.49.1 أو الإصدار العلوي.
إعادة تشغيل استوديو MicroChip
قم بتنزيل وتثبيت برنامج طرفي متسلسل مثل Tera Term.
لاستخراج الاستهلاك الحالي SAM R34 ، يتطلب المجلس تكوينه كما هو موضح أدناه:

في حال كنت تستخدم خوادم TTI وعنصر ATECC608A-Tnglora الآمن ، راجع هذا الريبو للإعداد.
يتطلب WLR089 Xplained Pro تعديل الأجهزة لاستخدام رمز التطبيق. بشكل افتراضي ، لم يتم تثبيت المحث L301 (10UH) ومكثف C316 (100NF) على WLR089 Xplained Pro. كلاهما يجب تركيبه لاستخدام التطبيق التجريبي وتحديد محول باك كمنظم للجهد الرئيسي في الوضع النشط.
تحقق من وثائق WLR089 Xplained Pro لمزيد من التفاصيل.



تحتوي أجهزة SAMR34/R35 على مذبذبات دقيقة منخفضة الطاقة. يمكن تكوين مجالات الساعة المختلفة بشكل مستقل لتشغيلها بترددات مختلفة ، مما يتيح لتوفير الطاقة عن طريق تشغيل كل طرفي في تردد الساعة الأمثل ، وبالتالي الحفاظ على تردد وحدة المعالجة المركزية العالية مع تقليل استهلاك الطاقة.
تحتوي أجهزة SAM R34/R35 على أربعة أوضاع للنوم القابلة للاختيار البرمجيات: الخمول والاستعداد والنسخ الاحتياطي والإيقاف.
في وضع الخمول ، يتم إيقاف وحدة المعالجة المركزية بينما يمكن الاستمرار في تشغيل جميع الوظائف الأخرى.
في وضع الاستعداد ، يتم إيقاف جميع الساعات والوظائف باستثناء تلك المحددة لمواصلة التشغيل. في هذا الوضع يتم الاحتفاظ بجميع الكباش والمحتويات المنطقية. يدعم الجهاز المشي في النوم ، والذي يسمح لبعض الأجهزة الطرفية بالاستيقاظ من النوم بناءً على الظروف المحددة مسبقًا ، مما يسمح ببعض العمليات الداخلية مثل نقل DMA و/أو وحدة المعالجة المركزية للاستيقاظ فقط عند الحاجة ؛ على سبيل المثال ، عند عبور العتبة ، أو أن تكون نتيجة جاهزة. يدعم نظام الأحداث الأحداث المتزامنة وغير المتزامنة ، مما يسمح للأجهزة الطرفية باستلام الأحداث والرد عليها وإرسالها حتى في وضع الاستعداد.
في وضع النسخ الاحتياطي ، يتم تشغيل معظم الخلايا المنطقية والتناظرية. لا تتوفر سوى عدد قليل من الميزات (RTC ، سجلات النسخ الاحتياطي ، الاستيقاظ من المسامير الخارجية).
لا يُنصح وضع OFF ، حيث أن المقاومة العالية على ناقل SPI الداخلي ينتج عن قابلية النقيض.
تحتوي أجهزة SAM R34/R35 على مستويين للأداء (PL0 و PL2) مما يتيح للمستخدم توسيع أدنى مستوى من الجهد الأساسي الذي يدعم تردد التشغيل. لتقليل الاستهلاك الحالي ، على وجه التحديد ، تستخدم الأجهزة تقنية بوابة مجال الطاقة مع الاحتفاظ بإيقاف بعض مجالات المنطق مع الحفاظ على حالتها المنطقية. يتم التعامل مع هذه التقنية بالكامل في الأجهزة.
يوفر مكدس Micro -Chip Lorawan (MLS) وحدة إدارة الطاقة (PMM) في المكدس. يمكن للتطبيق الذي يعمل فوق MLS اختيار استخدام PMM لتوفير الطاقة أثناء أوقات الخمول. إلى جانب توفير الطاقة أثناء الخمول ، يحاول PMM تقليل استهلاك الطاقة حتى أثناء المعاملة. يتم توفير الطاقة عن طريق تحويل MCU إلى واحدة من أوضاع الطاقة المنخفضة المتاحة. حاليًا ، يتم دعم PMM فقط على SAM R34 MCU ويمكن تكوينه إما في وضع الاستعداد أو النسخ الاحتياطي.
وضع الاستعداد:
وضع النسخ الاحتياطي:
يتم تمكين PMM عبر الماكرو CONF_PMM_ENABLE . يتحكم هذا الماكرو في إضافة وإزالة PMM في التطبيق وفي المكدس. بعد تمكين ميزات PMM في رمز التطبيق ، سيتم تجميع جميع أجزاء التعليمات البرمجية الموجودة بين القسم التالي وتنفيذها:
#ifdef CONF_PMM_ENABLE
..
#endif
التطبيق الحالي (ملف lorawan_app.c ) يقوم بالفعل بتنفيذ جميع التعليمات البرمجية المطلوبة لاستخدام ميزات PMM. يتم تقديم التفاصيل التالية للمعلومات.
لاستخدام PMM في التطبيق ، يجب تضمين ملفات الرأس التالية:
#ifdef CONF_PMM_ENABLE
#include "pmm.h"
#include "conf_pmm.h"
#include "sleep_timer.h"
#include "sleep.h"
#endif
بشكل افتراضي ، يتم تكوين وقت النوم للتطبيق لمدة 30 ثانية ويمكن تغييره إلى القيم المطلوبة. يتم تكوين وقت طلب النوم بواسطة الماكرو:
#define DEMO_CONF_DEFAULT_APP_SLEEP_TIME_MS 30000 // Sleep duration in ms
ولكن يجب أن تقع مدة النوم ضمن النطاق المقبول الذي هو givin في الجدول التالي.

يجب تهيئة وحدة مؤقت النوم لتمكين وحدة RTC:
#ifdef CONF_PMM_ENABLE
SleepTimerInit() ;
#endif
يحتوي الملف rtc_count.h على مصادر الساعة المتاحة لوحدة RTC.
#ifdef FEATURE_RTC_CLOCK_SELECTION
/**
* brief Available clock source for RTC.
* RTC clock source.
*/
enum rtc_clock_sel {
/** 1.024KHz from 32KHz internal ULP oscillator */
RTC_CLOCK_SELECTION_ULP1K = OSC32KCTRL_RTCCTRL_RTCSEL_ULP1K_Val,
/** 32.768KHz from 32KHz internal ULP oscillator */
RTC_CLOCK_SELECTION_ULP32K = OSC32KCTRL_RTCCTRL_RTCSEL_ULP32K_Val,
#if !(SAML22)
/** 1.024KHz from 32KHz internal oscillator */
RTC_CLOCK_SELECTION_OSC1K = OSC32KCTRL_RTCCTRL_RTCSEL_OSC1K_Val,
/** 32.768KHz from 32KHz internal oscillator */
RTC_CLOCK_SELECTION_OSC32K = OSC32KCTRL_RTCCTRL_RTCSEL_OSC32K_Val,
#endif
/** 1.024KHz from 32KHz external oscillator */
RTC_CLOCK_SELECTION_XOSC1K = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC1K_Val,
/** 32.768KHz from 32.768KHz external crystal oscillator */
RTC_CLOCK_SELECTION_XOSC32K = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC32K_Val,
};
#endif
لهذا التطبيق ، سيتم تسجيل وحدة RTC من الساعة الخارجية 32 كيلو هرتز. باستخدام مذبذب الطاقة المنخفضة منخفضة 32 كيلو هرتز ، حيث يكون مصدر ساعة RTC ممكنًا ولكنه يتطلب إعدادات على مدار الساعة المختلفة. سيؤدي استخدام XOSC32 إلى أداء أفضل ، وانجراف أقل من التردد وبالتالي ثبات أعلى.
في وضع الاستعداد ، يتم إيقاف جميع مصادر الساعة ، باستثناء تلك التي يتم فيها تعيين Bit Runstdby (تشغيل في وضع الاستعداد) للوحدة أو تم تعيين بت على Zero. بشكل افتراضي ، يعمل المنظم في وضع الطاقة المنخفض عند استخدام وضع النوم الاستعداد. قبل إدخال وضع الاستعداد ، يجب التأكد من تعطيل كمية كبيرة من الساعات والأجهزة الطرفية ، بحيث لا يتم تحميل منظم الجهد. لتجنب التحميل الزائد ، يجب تكوين الأجهزة الطرفية بحيث يكون إجمالي استهلاك الطاقة الذي يوفره المنظم الداخلي في وضع الطاقة المنخفض أقل من 50μA. إذا كانت الأجهزة الطرفية المطلوبة للتشغيل في وضع الاستعداد تستهلك أكثر من 50UA ، فيجب تكوين المنظم للعمل في الوضع العادي ، ويمكن القيام بذلك من البرامج عن طريق تعيين Bit Runstdby في sysctrl -> vreg.
ينفذ التطبيق وظيفة تحسين الطاقة التالية مما يتيح الاستفادة من بنية الطاقة المنخفضة للغاية لجهاز SAM R34.
static void configure_sleep(void)
{
/* Disable BOD33 */
SUPC->BOD33.reg &= ~(SUPC_BOD33_ENABLE);
/* Select BUCK converter as the main voltage regulator in active mode */
SUPC->VREG.bit.SEL = SUPC_VREG_SEL_BUCK_Val;
/* Wait for the regulator switch to be completed */
while(!(SUPC->STATUS.reg & SUPC_STATUS_VREGRDY));
/* Set Voltage Regulator Low power Mode Efficiency */
SUPC->VREG.bit.LPEFF = 0x1;
/* Apply SAM L21 Erratum 15264 */
SUPC->VREG.bit.RUNSTDBY = 0x1;
SUPC->VREG.bit.STDBYPL0 = 0x1;
/* SRAM configuration in standby */
PM->STDBYCFG.reg = PM_STDBYCFG_BBIASHS(1) | PM_STDBYCFG_VREGSMOD_LP ;
}
ارجع إلى ورقة بيانات SAM L21 Family Product لمزيد من التفاصيل حول بنية الطاقة المنخفضة في متحكم. https://www.microchip.com/wwwproducts/en/atsaml21j18b
بشكل عام ، يحول مستشعر التدفق الطاقة الحركية من الدوران إلى إشارات رقمية كهربائية في شكل نبضات.
في هذا التطبيق ، يحسب جهاز SAM R34 عدد النبضات أثناء البقاء في وضع الاستعداد. بفضل ميزات نظام الأحداث (EVSYS) المتوفرة داخل جهاز SAM R34 لتمكين الاتصالات بين الأبعاد ، وبالتالي تساعد على خفض تحميل وحدة المعالجة المركزية واستهلاك الطاقة للنظام. يسمح بالتحكم المستقل للأجهزة الطرفية دون استخدام عرض النطاق الترددي لوحدة المعالجة المركزية ويمكن أن يبقى في وضع الاستعداد لفترات أطول.
يمكن أن تستمر بعض الأجهزة الطرفية في العمل في وضع الاستعداد ، حيث تعمل ساعة المصدر ، وهذه هي حالة عداد المؤقت (TC) أو عداد الموقت لتطبيقات التحكم (TCC).
يتكون نظام الأحداث من موارد الحدث التالية:
في التطبيق الحالي ، تم تكوين نظام الأحداث على النحو التالي.

يهدف هذا التطبيق إلى حساب النبضات القادمة من مصدر النبض والانتقال إلى بروتوكول Lorawan RF.

تم تكوين وحدة Extint8 (متصلة جسديًا بزر المستخدم الموجود على اللوحة) لإنشاء حدث عند الضغط على الزر SW0. يتم توصيل SW0 بـ PA28 ، والتي يمكن أن تولد المقاطعات على Extint [8].
// configure external interrupt for SW0
void configure_extint(void)
{
// configure external interrupt controller
struct extint_chan_conf extint_chan_config ;
extint_chan_config.gpio_pin = CONF_EIC_PIN ;
extint_chan_config.gpio_pin_mux = CONF_EIC_MUX ;
extint_chan_config.gpio_pin_pull = EXTINT_PULL_UP ;
extint_chan_config.detection_criteria = EXTINT_DETECT_RISING ;
extint_chan_config.filter_input_signal = true ;
extint_chan_set_config(CONF_EIC_CHAN, &extint_chan_config) ;
// configure external interrupt module to be an event generator
struct extint_events extint_event_config ;
extint_event_config.generate_event_on_detect[CONF_EIC_CHAN] = true ;
extint_enable_events(&extint_event_config) ;
}
يتم توجيه هذا إلى Timer/Counter TC0 بواسطة قناة نظام الأحداث 8.
// configure event system for generators and users
void configure_eventsystem(void)
{
// configure event system
struct events_resource event_res ;
// configure channel
struct events_config config ;
events_get_config_defaults(&config) ;
config.generator = CONF_EVENT_GENERATOR_ID ;
config.edge_detect = EVENTS_EDGE_DETECT_RISING ;
config.path = EVENTS_PATH_ASYNCHRONOUS ;
config.run_in_standby = true ;
events_allocate(&event_res, &config) ;
// configure user
events_attach_user(&event_res, CONF_EVENT_USER_ID) ;
}
تم تكوين TC0 لزيادة عداد 16 بت في الحدث الذي تم إنشاؤه من وحدة Extint.
// configure_tc
void configure_tc(void)
{
// configure TC module for counting
static struct tc_config tc_counter_config ;
tc_reset(&tc_counter_module) ;
tc_get_config_defaults(&tc_counter_config) ;
tc_counter_config.clock_prescaler = TC_CLOCK_PRESCALER_DIV1 ;
tc_counter_config.count_direction = TC_COUNT_DIRECTION_UP ;
tc_counter_config.counter_size = TC_COUNTER_SIZE_16BIT ;
tc_counter_config.on_demand = true ;
tc_counter_config.run_in_standby = true ;
tc_init(&tc_counter_module, CONF_TC, &tc_counter_config) ;
struct tc_events tc_event = {
.on_event_perform_action = true,
.event_action = TC_EVENT_ACTION_INCREMENT_COUNTER,
.generate_event_on_overflow = false
} ;
tc_enable_events(&tc_counter_module, &tc_event) ;
// enable TC module
tc_enable(&tc_counter_module) ;
}
نظرًا لأن TC لديه بت promand ، فإنه يحسن قليلاً من استهلاك الطاقة في وضع الاستعداد ضد وحدة TCC. في conf_pulse_counter.h ، من الممكن تحديد استخدام TC أو TCC كضكانة. كلاهما قادر على الاعتماد أثناء وضع الاستعداد.
#ifndef CONF_PULSE_COUNTER_H
#define CONF_PULSE_COUNTER_H
// Counter selection
#define USE_TC 0
#define USE_TCC 1
#define COUNTER_SELECTED USE_TC
// EXTINT Config
#define CONF_EIC_CHAN BUTTON_0_EIC_LINE // EXTINT8
#define CONF_EIC_PIN BUTTON_0_EIC_PIN
#define CONF_EIC_MUX BUTTON_0_EIC_MUX
// EVSYS Config
#define CONF_EVENT_GENERATOR_ID EVSYS_ID_GEN_EIC_EXTINT_8
#if (COUNTER_SELECTED == USE_TCC)
#define CONF_EVENT_USER_ID EVSYS_ID_USER_TCC1_EV_0
#else
#define CONF_EVENT_USER_ID EVSYS_ID_USER_TC4_EVU // must match with CONF_TC
#endif
// TCC
#define CONF_TCC TCC1
#define CONF_CAPTURE_CHAN_0 0
#define CONF_CAPTURE_CHAN_1 1
// TC
#define CONF_TC TC4 // TC0 is already used in LoRaWAN stack (hw_timer.c, conf_hw_timer.h)
#endif
افتح المشروع الحالي مع Microchip Studio 7 IDE
من القائمة العليا ، انتقل إلى المشروع -> الخصائص
في حالة توصيل عنصر آمن بلوحة SAM R34 Xplained Pro ، تأكد من تعريف Macro CRYPTO_DEV_ENABLED . حدد مجموعة الأدوات> برنامج التحويل البرمجي ARM/GNU C.

من إعدادات الأدوات ، حدد لوحتك كـ EDBG Debugger مع واجهة SWD


من القائمة العليا ، افتح أدوات> مرشح البيانات

ضمن لوحة التحكم DGI ، حدد Samr34 Xplained Pro وانقر فوق الاتصال

عندما تكون جاهزة ، حدد واجهة "Power" وانقر فوق بدء تشغيل الطاقة على اللوحة.

يجب أن يعرض مصور البيانات استهلاك الطاقة لجهاز SAM R34 وإجراء تجريد لاستهلاك الرقاقة الخارجي على متن الطائرة.
تفتح وحدة تحكم UART Term Term في 115200 نقطة أساس ، 8 بتات/لا تكافؤ/بت 1 توقف
اضغط على زر "إعادة تعيين" على لوحة SAM R34 Xplained Pro لرؤية المخرجات مطبوعة على وحدة التحكم
إذا تم تعريف الماكرو CRYPTO_DEV_ENABLED وتم توصيل عنصر آمن بـ SAM R34 Xplained Pro عبر موصل Ext3:

إذا لم يتم تعريف macro CRYPTO_DEV_ENABLED ، يتم استخدام بيانات اعتماد OTAA في lorawan_app.c :

عندما انضم الجهاز بنجاح إلى شبكة Lorawan ، سيقوم التطبيق بشكل دوري بالاستيلاء كل 60 ثانية وينقل رسالة الوصلة الصاعدة عبر شبكة Lorawan. تتضمن الرسالة قيمة العداد ودرجة الحرارة في درجة مئوية وفي درجة فهرنهايت.

في الوضع النشط ، في كل الاستيقاظ ، سيصدر الجهاز ناقل حركة متبوع بنوافذ الاستقبال.

بين اثنين من الإرسال ، يكون استهلاك الطاقة في وضع الاستعداد حوالي 8ua

في وضع الاستعداد ، يعد عد النبض ممكنًا دون استيقاظ وحدة المعالجة المركزية.

مقارنةً بـ SAM R34 DATASHEET ، يرجع تيار UA الإضافي إلى حقيقة أن مفتاح RF يتم تشغيله دائمًا في تصميم لوحة XPLAING PRO الحالية.
باستخدام لوحة Pro Pro WLR089U0 ، يتم التحكم في مفتاح RF بواسطة التطبيق ومع هذا التحسين ، يكون الاستهلاك الحالي أقل بكثير.
يمكن ملاحظة النتيجة على وحدة التحكم في خادم شبكة Lorawan أيضًا.

لجهاز الفئة A ؛ الذي ينام معظم الوقت. من المهم أن تأخذ في الاعتبار مقدار الطاقة عندما لا يقوم الجهاز بإجراء معاملة راديو. يعد استخدام PMM مع معلمة وقت النوم الأطول ممارسة جيدة لتقليل عدد أحداث الاستيقاظ وتقليل استهلاك الطاقة الإجمالي. هناك عوامل أخرى يجب مراعاتها عندما تريد تحسين استهلاك الطاقة الكلي لجهازك
إذا تم تمكين دورة العمل (على سبيل المثال ، إذا تم استخدام نطاق EU868) ، فإن مؤقت دورة العمل يقاطع النوم وإعطاء إيقاعات غير متوقعة.
