Bii o ṣe le sopọ HX711 ADC si NRF52832

1. Ifihan

Lori ero-ọrọ ni iṣẹ ṣiṣe ti idagbasoke ilana ibaraẹnisọrọ kan fun nrf52832 microcontroller pẹlu awọn iwọn ilaji afara Kannada meji.

Iṣẹ-ṣiṣe naa ko rọrun, bi Mo ṣe dojukọ aini aini alaye eyikeyi ti oye. O ṣee ṣe diẹ sii pe “gbongbo ibi” wa ninu SDK lati Nordic Semikondokito funrararẹ - awọn imudojuiwọn ẹya igbagbogbo, diẹ ninu apọju ati iṣẹ ṣiṣe iruju. Mo ni lati kọ ohun gbogbo lati ibere.

Mo ro pe koko yii jẹ pataki ti o da lori otitọ pe ërún yii ni akopọ BLE ati gbogbo eto ti “awọn ire” fun ipo fifipamọ agbara. Ṣugbọn Emi kii yoo jinlẹ pupọ sinu apakan imọ-ẹrọ, nitori ọpọlọpọ awọn nkan ti kọ lori koko yii.

2. Project apejuwe

Bii o ṣe le sopọ HX711 ADC si NRF52832

Irin:

  • Adafruit Feather nRF52 Bluefruit LE (kini o ṣẹlẹ lati wa ni ọwọ)
  • ADC HX711
  • Awọn iwọn igara Kannada 2 awọn kọnputa. (50x2 kg)
  • Pirogirama ST-RÁNṢẸ V2

Sọfitiwia:

  • IDE VSCODE
  • NRF SDK 16
  • Ṣii OCD
  • Pirogirama ST-RÁNṢẸ V2

Ohun gbogbo wa ninu iṣẹ akanṣe kan, o kan ni lati tweak Makefile (pato ipo ti SDK rẹ).

3. Apejuwe ti awọn koodu

A yoo lo module GPIOTE lati ṣiṣẹ pẹlu awọn agbeegbe ti o da lori isọdọkan ti awọn iṣẹ ṣiṣe ati awọn iṣẹlẹ, bakanna bi module PPI lati gbe data lati agbeegbe kan si ekeji laisi ikopa ti ero isise kan.

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

A tunto laini amuṣiṣẹpọ PD_SCL si iṣelọpọ lati ṣe ina awọn iṣọn pẹlu iye akoko 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);//включаем таймер
}
 

A tunto laini data DOUT lati ka ipo imurasilẹ ti HX711; ti ipele kekere ba wa, oluṣakoso kan wa ninu eyiti a mu idalọwọduro duro ati bẹrẹ aago kan lati ṣe ina awọn iṣọn aago ni iṣelọpọ 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); 

// mu gpiote ṣiṣẹ

Lẹhin iyẹn, a bẹrẹ module PPI ati so aago wa pọ si iṣẹjade PD_SCL lati ṣe ina awọn pulses pẹlu iye akoko 10 μs nigbati iṣẹlẹ lafiwe ba waye, ati tun tan module 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);// срабатывает по сравнению

A ṣe ipilẹṣẹ aago odo ati olutọju rẹ.

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

Ohun ti o nifẹ julọ n ṣẹlẹ ni oluṣakoso aago. Akoko pulse jẹ 20 μs. A nifẹ si awọn itọka ti ko dara (pẹlu eti ti o dide) ati pese pe nọmba wọn ko ju 24 lọ, ati pe awọn iṣẹlẹ 48 wa. Fun iṣẹlẹ iṣẹlẹ kọọkan, DOUT ti ka

Lati iwe data naa o tẹle pe nọmba awọn iṣọn gbọdọ jẹ o kere ju 25, eyiti o ni ibamu si ere ti 128 (ninu koodu ti Mo lo 25 pulses), eyi jẹ deede si awọn iṣẹlẹ aago 50, eyiti o tọka si opin fireemu data naa.

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

Lẹhin eyi, a pa aago ati ṣiṣẹ data naa (ni ibamu si iwe data) ati yipada HX711 si ipo lilo agbara kekere.


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

A nireti awọn iṣẹlẹ lati aago RTC pẹlu aarin 10 s (eyi wa ni lakaye rẹ) ati ṣe ifilọlẹ HX711 ni olutọju, nfa idalọwọduro lori laini DOUT.

O wa aaye kan diẹ sii, awọn akọọlẹ wa nipasẹ UART (oṣuwọn baud 115200, TX - awọn pinni 6, RX - awọn pinni 8) gbogbo awọn eto wa ni sdk_config.h

Bii o ṣe le sopọ HX711 ADC si NRF52832

awari

O ṣeun fun gbogbo akiyesi rẹ, Mo nireti pe nkan yii yoo wulo ati pe yoo dinku akoko ti o niyelori fun awọn olupilẹṣẹ lati wa ojutu kan. Mo fẹ lati sọ pe ọna imọ-ẹrọ ti Nordic nlo ninu awọn iru ẹrọ rẹ jẹ ohun ti o dun lati oju wiwo ti ṣiṣe agbara.

PS

Ise agbese na tun wa labẹ idagbasoke, nitorinaa ti koko yii ba jẹ iwulo, ninu nkan ti nbọ Emi yoo gbiyanju lati ṣapejuwe algorithm fun iwọn awọn sensọ iwuwo, ati sisopọ akopọ BLE.

Awọn ohun elo

orisun: www.habr.com

Fi ọrọìwòye kun