Yuav ua li cas txuas HX711 ADC rau NRF52832

1. Taw qhia

Ntawm cov txheej txheem yog lub luag haujlwm ntawm kev tsim cov txheej txheem kev sib txuas lus rau nrf52832 microcontroller nrog ob tug ib nrab-choj Suav kab ntsuas ntsuas.

Txoj haujlwm tau hloov mus tsis yooj yim, vim kuv tau ntsib nrog qhov tsis muaj cov ntaub ntawv nkag siab. Nws yog qhov zoo dua tias "hauv paus ntawm kev phem" yog nyob rau hauv SDK los ntawm Nordic Semiconductor nws tus kheej - qhov hloov tshiab tsis tu ncua, qee qhov rov ua dua thiab tsis meej pem ua haujlwm. Kuv yuav tsum tau sau txhua yam ntawm kos.

Kuv xav tias cov ncauj lus no tseem ceeb heev raws li qhov tseeb tias cov nti no muaj BLE pawg thiab tag nrho cov "khoom zoo" rau hom kev txuag hluav taws xob. Tab sis kuv yuav tsis nkag mus tob rau hauv cov txheej txheem, txij li ntau cov ntawv tau sau rau ntawm lub ncauj lus no.

2. Qhov project piav qhia

Yuav ua li cas txuas HX711 ADC rau NRF52832

Hlau:

  • Adafruit Feather nRF52 Bluefruit LE (dab tsi tshwm sim ntawm tes)
  • ADC HX711
  • Suav strain gauges 2 pcs. (50 x 2 kg)
  • Programmer ST-LINK V2

Software:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • Programmer ST-LINK V2

Txhua yam yog nyob rau hauv ib qhov project, koj tsuas yog yuav tsum tweak lub Makefile (teev qhov chaw ntawm koj SDK).

3. Cov lus piav qhia ntawm tus lej

Peb yuav siv GPIOTE module los ua haujlwm nrog cov khoom siv peripherals raws li kev khi ntawm cov haujlwm thiab cov xwm txheej, nrog rau PPI module kom hloov cov ntaub ntawv los ntawm ib qho peripheral mus rau lwm qhov yam tsis muaj kev koom tes ntawm lub processor.

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);//настраСваСм Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄

Peb teeb tsa PD_SCL synchronization kab rau cov zis los tsim cov pulses nrog lub sijhawm ntawm 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);//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
}
 

Peb teeb tsa DOUT cov ntaub ntawv kab los nyeem lub xeev kev npaj ntawm HX711; yog tias muaj theem qis, tus neeg tuav haujlwm tau tshwm sim uas peb lov tes taw kev cuam tshuam thiab pib timer los tsim lub moos pulses ntawm PD_SCL cov zis.

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

// pab gpiote

Tom qab ntawd, peb pib PPI module thiab txuas peb lub sijhawm rau PD_SCL cov zis los tsim cov pulses nrog lub sijhawm ntawm 10 ΞΌs thaum muaj kev sib piv tshwm sim, thiab tseem tig rau GPIOTE module.


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);// срабатываСт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ

Peb pib lub zero timer thiab nws tus tuav.

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// пСрСмСнная считанных Π΄Π°Π½Ρ‹Ρ…
        c_counter++;// счСтчик ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…  ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ²
           if(nrf_gpio_pin_read(DOUT))buffer++;//считываСм состояниС Π²Ρ…ΠΎΠ΄Π°
   }

Qhov nthuav tshaj plaws tshwm sim nyob rau hauv lub timer handler. Lub sijhawm mem tes yog 20 ΞΌs. Peb txaus siab rau qhov txawv pulses (raws li qhov nce siab) thiab muab tias lawv tus lej tsis ntau tshaj 24, thiab muaj 48 qhov xwm txheej. Rau txhua qhov xwm txheej khib, DOUT tau nyeem

Los ntawm cov ntaub ntawv nws ua raws li cov naj npawb ntawm pulses yuav tsum yog tsawg kawg yog 25, uas sib haum mus rau ib tug nce ntawm 128 (nyob rau hauv cov cai kuv siv 25 pulses), qhov no yog sib npaug rau 50 timer txheej xwm, uas qhia txog qhov kawg ntawm cov ntaub ntawv ncej.

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

Tom qab ntawd, peb tua lub timer thiab ua cov ntaub ntawv (raws li daim ntawv teev cov ntaub ntawv) thiab hloov HX711 mus rau hom kev siv hluav taws xob tsawg.


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

Peb cia siab tias cov xwm txheej los ntawm RTC timer nrog lub sijhawm ntawm 10 s (qhov no yog ntawm koj qhov kev txiav txim siab) thiab tso tawm HX711 hauv tus tuav, ua rau muaj kev cuam tshuam ntawm DOUT kab.

Muaj ib qho ntxiv, cov cav tau tso tawm ntawm UART (baud tus nqi 115200, TX - 6 pins, RX - 8 pins) txhua qhov chaw nyob hauv sdk_config.h

Yuav ua li cas txuas HX711 ADC rau NRF52832

tshawb pom

Ua tsaug rau koj txhua tus mloog, Kuv vam tias tsab xov xwm no yuav muaj txiaj ntsig thiab yuav txo lub sijhawm muaj txiaj ntsig rau cov neeg tsim khoom los nrhiav kev daws teeb meem. Kuv xav hais tias txoj hauv kev uas Nordic siv hauv nws cov platforms yog qhov nthuav heev los ntawm qhov pom ntawm lub zog ua haujlwm.

PS

Lub phiaj xwm tseem tab tom txhim kho, yog li yog tias lub ntsiab lus no muaj kev txaus siab, hauv tsab xov xwm tom ntej no kuv yuav sim piav qhia txog cov txheej txheem rau kev ntsuas qhov ntsuas qhov hnyav, nrog rau kev sib txuas ntawm BLE pawg.

Cov ntaub ntawv

Tau qhov twg los: www.hab.com

Ntxiv ib saib