Sida loogu xidho HX711 ADC ilaa NRF52832

1. Horudhac

Ajendaha wuxuu ahaa hawsha horumarinta nidaamka isgaarsiinta ee nrf52832 microcontroller oo leh laba buundada nuska ah ee Shiinaha.

Hawshu waxay noqotay mid aan sahlanayn, maadaama ay ila soo gudboonaatay wax xog ah oo la fahmi karo. Waxay u badan tahay in "xididka sharka" uu ku jiro SDK-ga Nordic Semiconductor laftiisa - cusboonaysiinta nooca joogtada ah, qaar ka mid ah dib-u-celinta iyo shaqeynta wareersan. Waxay ahayd inaan wax walba ka qoro meel eber ah.

Waxaan u maleynayaa in mawduucan uu aad u khuseeyaa iyadoo lagu saleynayo xaqiiqda ah in chip-kani uu leeyahay xirmo BLE ah iyo dhammaan "waxyaallaha" ee habka badbaadinta tamarta. Laakiin si qoto dheer uma geli doono qaybta farsamada, maadaama maqaalo badan laga qoray mawduucan.

2. Sharaxaada mashruuca

Sida loogu xidho HX711 ADC ilaa NRF52832

Birta:

  • Adafruit Feather nRF52 Bluefruit LE (maxaa ku dhacay gacanta)
  • HX711 ADC
  • Culayska Shiinaha 2 pcs. (50x2 kg)
  • Barnaamij-sameeyaha ST-LINK V2

Software:

  • IDE VSCODE
  • NRF SDK 16
  • FurOCD
  • Barnaamij-sameeyaha ST-LINK V2

Wax kastaa waxay ku jiraan hal mashruuc, kaliya waa inaad hagaajisaa Makefile (sheeg meesha SDK-gaaga).

3. Sharaxaada koodhka

Waxaan u isticmaali doonaa moduleka GPIOTE si aan ula shaqeyno agagaaraha ku saleysan isku xirka hawlaha iyo dhacdooyinka, iyo sidoo kale moduleka PPI si aan xogta uga wareejino mid kale iyada oo aan ka qaybgelin 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);//настраСваСм Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄

Waxa aanu u habaynaynaa khadka isku xidhka PD_SCL wax soo saarka si aanu u soo saarno garaacyo leh muddo 10 ΞΌs ah.

   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);//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
}
 

Waxaan dejineynaa khadka xogta DOUT si aan u akhrino heerka u diyaarsanaanta HX711; haddii uu jiro heer hoose, maamule ayaa kiciyay kaas oo aan joojino joojinta oo aan bilowno saacad si aan u soo saarno garaaca saacadaha soosaarka 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); 

// awood gpiote

Taas ka dib, waxaan bilownay moduleka PPI oo waxaan ku xireynaa saacadaheena iyo wax soo saarka PD_SCL si aan u abuurno garaacyo leh muddada 10 ΞΌs marka ay dhacdo isbarbardhigga, iyo sidoo kale daar moduleka 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);// срабатываСт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ

Waxaan bilownay saacada eber iyo maamuleheeda.

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

Waxa ugu xiisaha badan ayaa ku dhaca saacadeeyaha. Muddada garaaca wadnaha waa 20 ΞΌs. Waxaan xiisayneynaa garaaca garaaca wadnaha (oo ay weheliyaan cidhifka kor u kaca) oo ay shardi tahay in lambarkoodu aanu ka badnayn 24, oo ay jiraan 48 dhacdo. Dhacdo kasta oo khayaali ah, DOUT waa la akhriyaa

Laga soo bilaabo xaashida xogta waxay soo socotaa in tirada garaaca wadnaha ay tahay inay ahaato ugu yaraan 25, taas oo u dhiganta faa'iidada 128 (koodka waxaan isticmaalay 25 pulses), tani waxay u dhigantaa dhacdooyinka saacadaha 50, taas oo muujinaysa dhammaadka xogta xogta.

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

Taas ka dib, waxaan daminnaa saacada oo aan socodsiineynaa xogta (sida ku cad xaashida xogta) oo u beddelo HX711 habka isticmaalka tamarta hoose.


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

Waxaan ka filaynaa dhacdooyinka saacada RTC oo u dhexeeya 10 s (tani waa go'aankaaga) oo ku bilow HX711 maamulaha, taasoo keenta kala go'a khadka DOUT.

Waxaa jira hal dhibic oo dheeri ah, diiwaannada waxaa lagu soo saaraa UART (qiimaha baud 115200, TX - 6 biin, RX - 8 biinanka) dhammaan goobaha waxay ku yaalliin sdk_config.h

Sida loogu xidho HX711 ADC ilaa NRF52832

natiijooyinka

Dhammaantiin waad ku mahadsan tihiin dareenkaaga, waxaan rajeynayaa in maqaalkani uu noqon doono mid faa'iido leh oo yareyn doona waqtiga qiimaha leh ee horumarinta si ay xal u helaan. Waxaan rabaa in aan sheego in habka farsamada ee Nordic ay u adeegsato goobaheeda ay tahay mid aad u xiiso badan marka loo eego aragtida waxtarka tamarta.

PS

Mashruucu wali wuu socdaa, sidaas darteed haddii mawduucan uu yahay mid xiiso leh, maqaalka soo socda waxaan isku dayi doonaa inaan sharaxo algorithm si loo cabbiro dareemayaasha miisaanka, iyo sidoo kale isku xirka xirmooyinka BLE.

Maaddooyinka

Source: www.habr.com

Add a comment