Indlela yokudibanisa i-HX711 ADC kwi-NRF52832

1. Intshayelelo

Kwi-ajenda yayingumsebenzi wokuphuhlisa iprotocol yonxibelelwano ye-nrf52832 microcontroller kunye ne-half-bridge yaseTshayina yokulinganisa i-strain gauges.

Lo msebenzi wabonakala ungeyondlwan’ iyanetha, kuba ndandingenalo naluphi na ulwazi olucacileyo. Kunokwenzeka ukuba "ingcambu yobubi" ikwi-SDK evela kwi-Nordic Semiconductor ngokwayo-uhlaziyo lwenguqulelo eqhubekayo, ukungafuneki kunye nokusebenza okubhidayo. Kwafuneka ndibhale yonke into ukusuka ekuqaleni.

Ndicinga ukuba esi sihloko sifanelekile ngokusekwe kwinto yokuba le chip inesitaki se-BLE kunye neseti epheleleyo "yezinto ezilungileyo" zokonga amandla. Kodwa andiyi kungena nzulu kakhulu kwicandelo lobugcisa, kuba amanqaku amaninzi abhaliwe kwesi sihloko.

2. Inkcazo yeprojekthi

Indlela yokudibanisa i-HX711 ADC kwi-NRF52832

Iayini:

  • Usiba lwe-Adafruit nRF52 Bluefruit LE (kwenzeka ntoni ukuba sele ikufuphi)
  • I-HX711 ADC
  • Iigauges zaseTshayina ze-2 pcs. (50x2kg)
  • Umhleli we-ST-LINK V2

Isoftware:

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

Yonke into ikwiprojekthi enye, kufuneka udibanise iMakefile (chaza indawo ye-SDK yakho).

3. Inkcazo yekhowudi

Siza kusebenzisa imodyuli yeGPIOTE ukuze sisebenze kunye neeperipherals ezisekelwe ekubopheni imisebenzi kunye neziganeko, kunye nemodyuli yePPI yokudlulisa idatha ukusuka kwelinye i-peripheral ukuya kwelinye ngaphandle kokuthatha inxaxheba kweprosesa.

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

Siqwalasela umgca wongqamaniso wePD_SCL kwisiphumo sokuvelisa iipulses kunye nobude be-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);//включаем таймер
}
 

Siqwalasela umgca wedatha ye-DOUT ukuze ufunde imeko yokulungela kwe-HX711 ukuba kukho umgangatho ophantsi, umqhubi ushukunyiswa apho sikhubaza ukuphazamisa kwaye siqalise i-timer ukuvelisa i-clock pulses kwimveliso ye-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); 

// vula i-gpiote

Emva koko, siqalisa imodyuli yePPI kwaye sidibanise i-timer yethu kwimveliso yePD_SCL ukuvelisa i-pulses kunye nobude be-10 μs xa kwenzeka isiganeko sokuthelekisa, kwaye uvule imodyuli 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-xesha esingu-zero kunye nesibambi saso.

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

Eyona nto inomdla kakhulu yenzeka kwisibambi sexesha. Ixesha le-pulse yi-20 μs. Sinomdla kwii-odd pulses (kwi-edge ekhulayo) kwaye ukuba inani labo alikho ngaphezu kwama-24, kwaye kukho iziganeko ezingama-48 kwisiganeko ngasinye esingaqhelekanga, i-DOUT ifundwa

Ukusuka kwidatha yedatha ilandela ukuba inani lee-pulses kufuneka libe ubuncinane be-25, elihambelana nokuzuza kwe-128 (kwikhowudi endiyisebenzisileyo i-pulses ye-25), oku kufana neziganeko ze-50 timer, ezibonisa ukuphela kwesakhelo sedatha.

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

Emva koko, sicima i-timer kwaye siqhube idatha (ngokwedatha yedatha) kwaye sitshintshe i-HX711 kwimodi yokusetyenziswa kwamandla aphantsi.


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 iziganeko kwi-RTC timer kunye nekhefu le-10 (oku kukubona kwakho) kwaye uqalise i-HX711 kwisibambi, ebangela ukuphazamiseka kumgca we-DOUT.

Kukho enye ingongoma, iilogi ziphuma nge-UART (izinga le-baud 115200, TX - 6 izikhonkwane, i-RX - 8 izikhonkwane) zonke izicwangciso zikhona sdk_config.h

Indlela yokudibanisa i-HX711 ADC kwi-NRF52832

ezifunyanisiweyo

Ndiyabulela nonke ngengqalelo yenu, ndiyathemba ukuba eli nqaku liya kuba luncedo kwaye liya kunciphisa ixesha elixabisekileyo lokuba abaphuhlisi bafumane isisombululo. Ndifuna ukuthi indlela yobugcisa esetyenziswa yiNordic kumaqonga ayo inomdla kakhulu ngokwembono yokusebenza kakuhle kwamandla.

PS

Iprojekthi isephantsi kophuhliso, ngoko ke ukuba esi sihloko sinomdla, kwinqaku elilandelayo ndiya kuzama ukuchaza i-algorithm yokulinganisa izinzwa zobunzima, kunye nokudibanisa i-stack ye-BLE.

Izinto

umthombo: www.habr.com

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster