Ungabatanidza sei HX711 ADC kuNRF52832

1. Nhanganyaya

Pachirongwa chaive basa rekugadzira nzira yekutaurirana yenrf52832 microcontroller ine maviri hafu-bhiriji Chinese strain geji.

Basa racho rakanga risiri nyore, sezvo ndakanga ndatarisana nokushaiwa mashoko api naapi anonzwisisika. Zvinonyanya kuitika kuti "mudzi wezvakaipa" uri muSDK kubva kuNordic Semiconductor pachayo - inogara ichigadziridza shanduro, kumwe kudhindwa uye kuvhiringidza mashandiro. Ndaifanira kunyora zvose kubva pakutanga.

Ini ndinofunga iyi musoro wakanyatsoenderana zvichienderana nekuti chip iyi ine BLE stack uye yakazara seti ye "goodies" yesimba rekuchengetedza maitiro. Asi ini handisi kuzopinda zvakanyanya muchikamu chehunyanzvi, sezvo zvinyorwa zvakawanda zvakanyorwa pane iyi nyaya.

2. Tsanangudzo yeprojekiti

Ungabatanidza sei HX711 ADC kuNRF52832

Simbi

  • Adafruit Feather nRF52 Bluefruit LE (chii chakaitika kuti chava pedyo)
  • ADC HX711
  • Chinese strain gauges 2 pcs. (50x2 kg)
  • Programmer ST-LINK V2

Yakapfava

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

Zvese zviri mupurojekiti imwe chete, iwe unongofanirwa kugadzirisa iyo Makefile (taura nzvimbo yeSDK yako).

3. Tsanangudzo yekodhi

Isu tichashandisa iyo GPIOTE module kushanda nemaperipherals zvichienderana nekusungwa kwemabasa uye zviitiko, pamwe neiyo PPI module yekuendesa data kubva kune imwe peripheral kuenda kune imwe pasina kutora chikamu kwe 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);//настраСваСм Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄

Isu tinogadzirisa PD_SCL mutsara wekubatanidza kune inobuda kuti ibudise mapurusi ane nguva yegumi ΞΌ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);//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€
}
 

Isu tinogadzirisa iyo DOUT data mutsara kuti uverenge kugadzirira mamiriro eHX711; kana paine yakaderera nhanho, mubato unokonzereswa umo isu tinodzima kukanganisa uye tanga timer kugadzira wachi pulses paPD_SCL yakabuda.

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

// shandisa gpiote

Mushure meizvozvo, isu tinotanga iyo PPI module uye tinobatanidza timer yedu kune PD_SCL yakabuda kuti ibudise pulses nehurefu hwegumi ΞΌs kana chiitiko chekuenzanisa chikaitika, uye zvakare vhura 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);// срабатываСт ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ

Isu tinotanga zero timer uye mubati wayo.

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

Chinhu chinonyanya kufadza chinoitika mumubati wenguva. Nguva yekurova ndeye 20 ΞΌs. Isu tinofarira zvisinganzwisisiki pulses (parutivi runokwira) uye chero nhamba yavo isingapfuuri 24, uye pane zviitiko 48. Pachiitiko chimwe nechimwe chisingadikanwi, DOUT inoverengwa.

Kubva padhetabheti zvinotevera kuti nhamba yemapulses inofanira kunge iine makumi maviri neshanu, iyo inoenderana nekuwana kwe25 (mune kodhi yandakashandisa makumi maviri neshanu pulses), izvi zvakaenzana ne128 timer zviitiko, izvo zvinoratidza kupera kweiyo data 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
       }
   

Mushure meizvi, tinodzima timer uye tinogadzirisa data (maererano nedhetabheti) uye shandura iyo HX711 kune yakaderera simba rekushandisa maitiro.


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

Isu tinotarisira zviitiko kubva kuRTC timer ine nguva yegumi (izvi zviri pakufunga kwako) uye vhura HX10 mumubati, zvichikonzera kukanganisa pamutsetse weDOUT.

Pane imwezve poindi, matanda anobuda kuburikidza neUART (baud rate 115200, TX - 6 pini, RX - 8 pini) zvese zvigadziriso zviri sdk_config.h

Ungabatanidza sei HX711 ADC kuNRF52832

zvakawanikwa

Ndinokutendai mose nokuda kwekucherechedza kwenyu, ndinovimba kuti chinyorwa ichi chichabatsira uye chichaderedza nguva inokosha yevagadziri kuti vawane mhinduro. Ndinoda kutaura kuti nzira yehunyanzvi iyo Nordic inoshandisa mumapuratifomu ayo inonakidza kubva pakuona kwesimba rekushandisa.

PS

Iyo purojekiti ichiri kugadziridzwa, saka kana ichi chinyorwa chiri chekufarira, mune inotevera chinyorwa ini ndichaedza kutsanangura iyo algorithm yecalibrating uremu sensors, pamwe nekubatanidza iyo BLE stack.

Zvinhu

Source: www.habr.com

Voeg