څنګه HX711 ADC له NRF52832 سره وصل کړئ

1. پیژندنه

په اجنډا کې د nrf52832 مایکرو کنټرولر لپاره د دوه نیم پل چینایی فشار ګیجونو سره د مخابراتو پروتوکول رامینځته کول و.

دا کار اسانه نه و، ځکه چې زه د هیڅ ډول پوهه معلوماتو نشتوالي سره مخ وم. ډیر احتمال شتون لري چې "د بدۍ ریښه" پخپله د نورډیک سیمیکمډکټر څخه SDK کې وي - دوامداره نسخه تازه کول ، یو څه بې ځایه او مغشوش فعالیت. زه باید هرڅه له پیل څخه ولیکم.

زه فکر کوم چې دا موضوع د دې حقیقت پراساس خورا اړونده ده چې دا چپ د BLE سټک لري او د انرژي سپمولو حالت لپاره د "توکیو" بشپړ سیټ لري. مګر زه به تخنیکي برخې ته ډیر ژور نه ځم ، ځکه چې پدې موضوع ډیری مقالې لیکل شوي.

2. د پروژې تفصیل

څنګه HX711 ADC له NRF52832 سره وصل کړئ

وسپنه:

  • اډافروټ فیدر nRF52 بلیو فروټ LE (هغه څه چې په لاس کې و)
  • HX711 ADC
  • د چینایي فشار اندازه کول 2 پی سیز. (50x2 kg)
  • پروګرامر ST-LINK V2

سافټویر:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • پروګرامر ST-LINK V2

هرڅه په یوه پروژه کې دي ، تاسو باید یوازې د میک فایل ټیک کړئ (د خپل SDK موقعیت مشخص کړئ).

3. د کوډ تفصیل

موږ به د GPIOTE ماډل د دندو او پیښو د پابندۍ پراساس د پردیو سره کار کولو لپاره وکاروو ، په بیله بیا د PPI ماډل د پروسیسر له ګډون پرته د یو پریفیرال څخه بل ته ډیټا لیږدولو لپاره.

ret_code_t err_code;
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//настраеваем на выход
   nrf_drv_gpiote_out_config_t config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(false);//будем передергивать пин для импульса
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//настраеваем на выход

موږ د PD_SCL همغږي کولو کرښه د 10 μs د مودې سره د نبض تولید لپاره تولید ته تنظیم کوو.

   nrf_drv_gpiote_in_config_t  gpiote_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);// переход уровня с высокого на низкий
   nrf_gpio_cfg_input(DOUT, NRF_GPIO_PIN_NOPULL);// на вход без подтяжки
   err_code = nrf_drv_gpiote_in_init(DOUT, &gpiote_config, gpiote_evt_handler); 

static void gpiote_evt_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    nrf_drv_gpiote_in_event_disable(DOUT);//отключаем прерывание
    nrf_drv_timer_enable(&m_timer0);//включаем таймер
}
 

موږ د HX711 د چمتووالي حالت لوستلو لپاره د DOUT ډیټا لاین تنظیم کوو؛ که چیرې ټیټه کچه وي ، یو هینډلر رامینځته کیږي چې په هغه کې موږ مداخله غیر فعال کوو او د PD_SCL محصول کې د ساعت نبض رامینځته کولو لپاره ټایمر پیل کوو.

 err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel1);
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_assign(m_ppi_channel1,                                         nrf_drv_timer_event_address_get(&m_timer0, NRF_TIMER_EVENT_COMPARE0),                                           nrf_drv_gpiote_out_task_addr_get(PD_SCK));// подключаем таймер к выходу
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_enable(m_ppi_channel1);// включаем канал
   APP_ERROR_CHECK(err_code);
   nrf_drv_gpiote_out_task_enable(PD_SCK); 

// gpiote فعال کړئ

له هغې وروسته، موږ د PPI ماډل پیل کړو او خپل ټایمر د PD_SCL محصول سره وصل کړو ترڅو د 10 μs په موده کې نبض تولید کړي کله چې د پرتله کولو پیښه رامینځته شي، او همدارنګه د GPIOTE ماډل هم فعال کړئ.


nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;// по умолчанию
   timer_cfg.frequency = NRF_TIMER_FREQ_1MHz;// тактируем на частоте 1Мгц
   ret_code_t err_code = nrf_drv_timer_init(&m_timer0, &timer_cfg, timer0_event_handler);
   APP_ERROR_CHECK(err_code);
   nrf_drv_timer_extended_compare(&m_timer0,
                                  NRF_TIMER_CC_CHANNEL0,
                                  nrf_drv_timer_us_to_ticks(&m_timer0,
                                                            10),
                                  NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                                  true);// срабатывает по сравнению

موږ د صفر ټیمر او د هغې سمبالونکی پیل کوو.

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// переменная считанных даных
        c_counter++;// счетчик положительных  импульсов
           if(nrf_gpio_pin_read(DOUT))buffer++;//считываем состояние входа
   }

ترټولو په زړه پوری شی د ټایمر هینډلر کې پیښیږي. د نبض موده 20 μs ده. موږ د عجیب دالونو سره علاقه لرو (د مخ په څنډه کې) او په دې شرط چې د دوی شمیر له 24 څخه ډیر نه وي، او 48 پیښې شتون لري، د هرې عجیب پیښې لپاره، DOUT لوستل کیږي.

د ډیټا شیټ څخه دا تعقیب کیږي چې د نبضونو شمیر باید لږترلږه 25 وي ، کوم چې د 128 لاسته راوړنې سره مطابقت لري (په کوډ کې ما 25 نبضونه کارولي) ، دا د 50 ټیمر پیښو سره مساوي دی ، کوم چې د ډیټا چوکاټ پای ته اشاره کوي.

 ++m_counter;// счетчик событий
if(m_counter==50){
      nrf_drv_timer_disable(&m_timer0);// отключаем таймер
       m_simple_timer_state = SIMPLE_TIMER_STATE_STOPPED;//
       buffer = buffer ^ 0x800000;
       hx711_stop();//jотключаем hx711
       }
   

له دې وروسته، موږ ټایمر بندوو او ډاټا پروسس کوو (د ډیټا شیټ سره سم) او HX711 د ټیټ بریښنا مصرف حالت ته واړوو.


static void repeated_timer_handler(void * p_context)
{
   nrf_drv_gpiote_out_toggle(LED_2);
   if(m_simple_timer_state == SIMPLE_TIMER_STATE_STOPPED){
      	hx711_start();// включаем hx711
       nrf_drv_gpiote_out_toggle(LED_1);
       m_simple_timer_state = SIMPLE_TIMER_STATE_STARTED;
   }
  
}
/**@brief Create timers.
*/
static void create_timers()
{
   ret_code_t err_code;
 
   // Create timers
   err_code = app_timer_create(&m_repeated_timer_id,
                               APP_TIMER_MODE_REPEATED,
                               repeated_timer_handler);
   APP_ERROR_CHECK(err_code);
}

موږ د RTC ټایمر څخه د 10 s وقفې سره د پیښو تمه کوو (دا ستاسو په اختیار کې دی) او په هینډلر کې HX711 لانچ کړئ ، د DOUT لاین کې د مداخلې لامل کیږي.

یو بل ټکی هم شتون لري، لاګونه د UART له لارې تولید کیږي (د باډ نرخ 115200، TX - 6 پنس، RX - 8 پنونه) ټول ترتیبات په sdk_config.h کې دي

څنګه HX711 ADC له NRF52832 سره وصل کړئ

موندنو

ستاسو د پاملرنې لپاره ستاسو ټولو څخه مننه ، زه امید لرم چې دا مقاله به ګټوره وي او د پراختیا کونکو لپاره به د حل موندلو لپاره ارزښتناک وخت کم کړي. زه غواړم ووایم چې تخنیکي چلند چې نورډیک په خپل پلیټ فارمونو کې کاروي د انرژي موثریت له نظره خورا په زړه پوري دی.

PS

پروژه لاهم د پراختیا لاندې ده ، نو که دا موضوع د علاقې وړ وي ، په راتلونکي مقاله کې به زه هڅه وکړم د وزن سینسرونو اندازه کولو لپاره الګوریتم تشریح کړم ، او همدارنګه د BLE سټیک سره وصل کړئ.

مارټریټس

سرچینه: www.habr.com

Add a comment