Mokhoa oa ho hokela HX711 ADC ho NRF52832

1. Kenyelletso

Lenaneong e ne e le mosebetsi oa ho theha protocol ea puisano bakeng sa microcontroller ea nrf52832 e nang le li-gauge tse peli tsa borokho tsa China.

Mosebetsi ona o ile oa bonahala o se bonolo, kaha ke ne ke tobane le ho hloka boitsebiso leha e le bofe bo utloahalang. Ho na le monyetla oa hore "motso oa bokhopo" o ho SDK ho tsoa ho Nordic Semiconductor ka boeona - lintlafatso tsa mofuta o sa khaotseng, ts'ebetso e 'ngoe e fokolang le e ferekanyang. Ke ile ka tlameha ho ngola ntho e ’ngoe le e ’ngoe ho tloha qalong.

Ke nahana hore sehlooho sena se bohlokoa haholo ho latela taba ea hore chip ena e na le "BLE stack" le "lintho tse ntle" bakeng sa mokhoa oa ho boloka matla. Empa nke ke ka teba haholo karolong ea tekheniki, kaha ho ngotsoe lihlooho tse ngata tabeng ena.

2. Tlhaloso ea morero

Mokhoa oa ho hokela HX711 ADC ho NRF52832

Aene:

  • Lesiba la Adafruit nRF52 Bluefruit LE (se etsahetseng se se se le haufi)
  • ADC HX711
  • Li-gauge tsa khatello ea China li 2 pcs. (50x2 lik'hilograma)
  • Setsebi sa ST-LINK V2

Software:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • Setsebi sa ST-LINK V2

Ntho e 'ngoe le e' ngoe e morerong o le mong, o tlameha feela ho lokisa Makefile (hlalosa sebaka sa SDK ea hau).

3. Tlhaloso ea khoutu

Re tla sebelisa mojule oa GPIOTE ho sebetsa le li-peripherals tse thehiloeng ho tlamahaneng ha mesebetsi le liketsahalo, hammoho le mojule oa PPI ho fetisetsa data ho tloha sebakeng se seng ho ea ho se seng ntle le ho kenya letsoho ha 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);//настраеваем на выход

Re lokisa mohala oa khokahano oa PD_SCL ho sephetho ho hlahisa li-pulses ka nako ea 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);//включаем таймер
}
 

Re lokisa mohala oa data oa DOUT ho bala boemo ba ho itokisa ha HX711; haeba ho na le boemo bo tlase, sebatli se hlahisoa moo re timang tšitiso ebe re qala sebali sa nako ho hlahisa li-pulses tsa oache ho tlhahiso ea 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); 

// nolofalletsa gpiote

Ka mor'a moo, re qala mochine oa PPI mme re hokahanya nako ea rona ho PD_SCL tlhahiso ho hlahisa li-pulses ka nako ea 10 μs ha ketsahalo ea papiso e etsahala, hape re bulela 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);// срабатывает по сравнению

Re qala nako ea zero le sesebelisoa sa eona.

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

Ntho e thahasellisang ka ho fetisisa e etsahala ho sebali sa nako. Nako ea ho otla ke 20 μs. Re khahliloe ke likhahla tse sa tloaelehang (ho ea holimo) mme ha feela palo ea tsona e sa fete 24, 'me ho na le liketsahalo tse 48. Ketsahalong ka 'ngoe e sa tloaelehang, DOUT e baloa.

Ho tloha ho database ho latela hore palo ea li-pulses e tlameha ho ba bonyane 25, e lumellanang le phaello ea 128 (ka khoutu eo ke e sebelisitseng 25 pulses), sena se lekana le liketsahalo tse 50 tsa nako, tse bontšang qetello ea foreimi ea data.

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

Ka mor'a sena, re tima sebali sa nako ebe re sebetsana le data (ho ea ka database) ebe re fetola HX711 ho mokhoa o tlaase oa tšebeliso ea matla.


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

Re lebelletse liketsahalo ho tsoa ho sebali sa nako sa RTC ka nako ea 10 s (sena ke ka boikhethelo ba hau) mme re hlahise HX711 ho sebapi, se bakang tšitiso moleng oa DOUT.

Ho na le ntlha e 'ngoe hape, li-logs li hlahisoa ka UART (baud rate 115200, TX - 6 pins, RX - 8 pins) litlhophiso tsohle li sdk_config.h

Mokhoa oa ho hokela HX711 ADC ho NRF52832

fumanoeng ke

Ke leboha bohle bakeng sa tlhokomelo ea hau, ke tšepa hore sehlooho sena se tla ba molemo 'me se tla fokotsa nako ea bohlokoa bakeng sa bahlahisi ho fumana tharollo. Ke batla ho bolela hore mokhoa oa tekheniki oo Nordic o o sebelisang sethaleng sa eona o khahla haholo ho latela pono ea matla a matla.

PES

Morero o ntse o le tlas'a nts'etsopele, kahoo haeba sehlooho sena se thahasella, sehloohong se latelang ke tla leka ho hlalosa algorithm bakeng sa ho lekanya li-sensor tsa boima, hammoho le ho hokahanya stack ea BLE.

Lisebelisoa

Source: www.habr.com

Eketsa ka tlhaloso