Ungaxhuma kanjani i-HX711 ADC ku-NRF52832

1. Isingeniso

Ku-ajenda kwakuwumsebenzi wokwenza iphrothokholi yokuxhumana yesilawuli esincane se-nrf52832 esinamageji amabili ohlobo lwesiShayina ayingxenye yebhuloho.

Umsebenzi wabonakala ungelula, njengoba ngangibhekene nokuntuleka kolwazi oluqondakalayo. Kungenzeka kakhulu ukuthi "impande yobubi" iku-SDK evela ku-Nordic Semiconductor ngokwayo - ukubuyekezwa kwenguqulo engaguquki, ukuphindaphindeka okuthile nokusebenza okudidayo. Kwadingeka ngibhale yonke into kusukela ekuqaleni.

Ngicabanga ukuthi lesi sihloko sihambisana kakhulu ngokusekelwe eqinisweni lokuthi le chip inesitaki se-BLE kanye nesethi yonke "yezinto ezinhle" zemodi yokonga amandla. Kodwa ngeke ngijule kakhulu engxenyeni yezobuchwepheshe, ngoba izihloko eziningi zibhaliwe ngalesi sihloko.

2. Incazelo yephrojekthi

Ungaxhuma kanjani i-HX711 ADC ku-NRF52832

I-ayina:

  • Uphaphe lwe-Adafruit nRF52 Bluefruit LE (okwenzekile kuseduze)
  • I-HX711 ADC
  • I-Chinese strain gauges - ama-2 ama-pcs. (50x2 kg)
  • Umhleli we-ST-LINK V2

Isoftware:

  • I-IDE VSCODE
  • I-NRF SDK 16
  • I-OpenOCD
  • Umhleli we-ST-LINK V2

Yonke into ikuphrojekthi eyodwa, kufanele nje ulungise i-Makefile (chaza indawo ye-SDK yakho).

3. Incazelo yekhodi

Sizosebenzisa imojula ye-GPIOTE ukuze sisebenze nama-peripherals asekelwe ekuboshweni kwemisebenzi nemicimbi, kanye nemojula ye-PPI ukuze sidlulise idatha isuka ku-peripheral eyodwa iye kwenye ngaphandle kokubamba iqhaza komprosesa.

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);//настраеваем на выход

Silungiselela umugqa wokuvumelanisa we-PD_SCL kokuphumayo ukuze ukhiqize ama-pulses ubude besikhathi obungu-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);//включаем таймер
}
 

Silungiselela ulayini wedatha we-DOUT ukuze ufunde isimo sokulungela kwe-HX711; uma kuneleveli ephansi, isibambi siyaqaliswa lapho sikhubaza khona ukuphazamisa futhi siqale isibali-sikhathi ukuze sikhiqize ama-pulses wewashi kokuphumayo kwe-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); 

// vumela i-gpiote

Ngemva kwalokho, siqalisa imojula ye-PPI futhi sixhuma isibali sikhathi sethu kokuphumayo kwe-PD_SCL ukuze sikhiqize ama-pulses anobude besikhathi esingu-10 μs lapho kwenzeka isenzakalo sokuqhathanisa, futhi siphinde sivule imojula ye-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);// срабатывает по сравнению

Siqala isibali sikhathi esinguziro nesibambi saso.

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

Okuthakazelisa kakhulu kwenzeka kusibambi sesikhathi. Isikhathi sokushaya kwenhliziyo singama-20 μs. Sithanda ukushaya kwenhliziyo okungajwayelekile (onqenqemeni olukhuphukayo) futhi inqobo nje uma inombolo yawo ingekho ngaphezu kuka-24, futhi kunemicimbi engama-48. Ngomcimbi ngamunye oyinqaba, i-DOUT ifundwa

Kusukela kudatha yedatha kulandela ukuthi inani lama-pulses kumele okungenani libe ngu-25, elihambisana nenzuzo ye-128 (kukhodi engisebenzise ama-pulses angu-25), lokhu kulingana nemicimbi ye-timer engu-50, ekhombisa ukuphela kohlaka lwedatha.

 ++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
       }
   

Ngemva kwalokhu, sivala isibali sikhathi futhi sicubungule idatha (ngokwemininingwane yedatha) bese sishintsha i-HX711 ibe imodi yokusetshenziswa kwamandla okuphansi.


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);
}

Silindele imicimbi evela kusibali sikhathi se-RTC esinekhefu le-10 s (lokhu ngokwazi kwakho) futhi sethule i-HX711 kusibambi, okubangela ukuphazamiseka kulayini we-DOUT.

Kukhona elinye iphuzu, izingodo ziphuma nge-UART (izinga le-baud 115200, TX - 6 pins, RX - 8 pins) zonke izilungiselelo ziku-sdk_config.h

Ungaxhuma kanjani i-HX711 ADC ku-NRF52832

okutholakele

Ngiyabonga nonke ngokunaka kwenu, ngithemba ukuthi lesi sihloko sizoba usizo futhi sizonciphisa isikhathi esibalulekile sokuba abathuthukisi bathole isisombululo. Ngifuna ukusho ukuthi indlela yobuchwepheshe esetshenziswa iNordic kumapulatifomu ayo iyathakazelisa impela ngokombono wokonga amandla.

PS

Iphrojekthi isathuthukiswa, ngakho-ke uma lesi sihloko sinentshisekelo, esihlokweni esilandelayo ngizozama ukuchaza i-algorithm yokulinganisa izinzwa zesisindo, kanye nokuxhuma isitaki se-BLE.

Izinto zokwakha

Source: www.habr.com

Engeza amazwana