Yadda ake haɗa HX711 ADC zuwa NRF52832

1. Gabatarwa

A kan ajanda shine aikin samar da ka'idar sadarwa don microcontroller na nrf52832 tare da ma'auni biyu na rabin gada na kasar Sin.

Aikin ya zama bai kasance mai sauƙi ba, saboda na fuskanci rashin samun cikakkun bayanai. Zai yiwu cewa "tushen mugunta" yana cikin SDK daga Nordic Semiconductor kanta - sabuntawa na yau da kullun, wasu sakewa da ayyuka masu ruɗani. Dole ne in rubuta komai daga karce.

Ina tsammanin wannan batu yana da dacewa sosai dangane da gaskiyar cewa wannan guntu yana da tari na BLE da kuma duk saitin "kyakkyawa" don yanayin ceton makamashi. Amma ba zan yi zurfi cikin sashin fasaha ba, tunda an rubuta labarai da yawa akan wannan batu.

2. Bayanin aikin

Yadda ake haɗa HX711 ADC zuwa NRF52832

Iron:

  • Adafruit Feather nRF52 Bluefruit LE (abin da ya faru a hannun)
  • Saukewa: HX711ADC
  • Sinanci iri ma'auni 2 inji mai kwakwalwa. (50x2 kg)
  • Mai shirye-shirye ST-LINK V2

Software:

  • IDE VSCODE
  • Bayanin NRF SDK16
  • BudeOCD
  • Mai shirye-shirye ST-LINK V2

Komai yana cikin aiki ɗaya, kawai dole ne ku tweak ɗin Makefile (ayyana wurin SDK ɗinku).

3. Bayanin lambar

Za mu yi amfani da tsarin GPIOTE don yin aiki tare da abubuwan haɗin gwiwa dangane da ɗaurin ayyuka da abubuwan da suka faru, da kuma tsarin PPI don canja wurin bayanai daga wannan gefe zuwa wani ba tare da sa hannun mai sarrafawa ba.

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

Muna saita layin aiki tare na PD_SCL zuwa fitarwa don samar da bugun jini tare da tsawon μs 10.

   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);//включаем таймер
}
 

Muna saita layin bayanan DOUT don karanta yanayin shirye-shiryen HX711; idan akwai ƙaramin matakin, ana kunna mai sarrafa abin da muke kashe katsewa kuma mu fara mai ƙidayar lokaci don samar da agogon agogo a fitowar 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); 

// kunna gpiote

Bayan haka, muna ƙaddamar da tsarin PPI kuma mu haɗa lokacinmu zuwa fitowar PD_SCL don samar da bugun jini tare da tsawon 10 μs lokacin da abin da aka kwatanta ya faru, sannan kuma kunna 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);// срабатывает по сравнению

Mun fara lokacin sifili da mai sarrafa sa.

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

Abu mafi ban sha'awa yana faruwa a cikin mai sarrafa lokaci. Lokacin bugun jini shine 20 μs. Muna sha'awar bugun jini mara kyau (tare da hawan hawan) kuma idan har adadin su bai wuce 24 ba, kuma akwai abubuwan da suka faru 48. Ga kowane abu mara kyau, ana karanta DOUT

Daga cikin bayanan bayanan ya biyo bayan cewa adadin bugun jini dole ne ya kasance aƙalla 25, wanda yayi daidai da samun 128 (a cikin lambar da na yi amfani da bugun jini na 25), wannan yayi daidai da abubuwan da suka faru na lokaci 50, wanda ke nuna ƙarshen firam ɗin bayanai.

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

Bayan haka, muna kashe mai ƙidayar lokaci kuma mu sarrafa bayanan (bisa ga bayanan bayanan) kuma mu canza HX711 zuwa yanayin amfani da ƙarancin wuta.


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

Muna tsammanin abubuwan da suka faru daga mai ƙidayar lokaci na RTC tare da tazara na s10 (wannan bisa ga ra'ayin ku ne) kuma ƙaddamar da HX711 a cikin mai sarrafa, yana haifar da katsewa akan layin DOUT.

Akwai ƙarin ma'ana ɗaya, ana fitar da rajistan ayyukan ta hanyar UART (baud rate 115200, TX - 6 fil, RX - 8 fil) duk saitunan suna cikin sdk_config.h

Yadda ake haɗa HX711 ADC zuwa NRF52832

binciken

Na gode da duka don kulawar ku, Ina fatan wannan labarin zai zama da amfani kuma zai rage lokaci mai mahimmanci ga masu haɓakawa don neman mafita. Ina so in ce tsarin fasaha da Nordic ke amfani da shi a cikin dandamali yana da ban sha'awa sosai daga ra'ayi na ingantaccen makamashi.

PS

Har yanzu aikin yana ci gaba, don haka idan wannan batu yana da ban sha'awa, a cikin labarin na gaba zan yi ƙoƙarin bayyana algorithm don daidaita ma'aunin nauyi, da kuma haɗa nauyin BLE.

Abubuwa

source: www.habr.com

Add a comment