Quadrature Decoder - select appropriate type

⚠️
Hi there.. thanks for coming to the forums. Exciting news! we’re now in the process of moving to our new forum platform that will offer better functionality and is contained within the main Dialog website. All posts and accounts have been migrated. We’re now accepting traffic on the new forum only - please POST any new threads at https://www.dialog-semiconductor.com/support . We’ll be fixing bugs / optimising the searching and tagging over the coming days.
8 posts / 0 new
Last post
adam.stroz
Offline
Last seen: 7 months 1 week ago
Joined: 2020-05-22 07:54
Quadrature Decoder - select appropriate type

Hello,

I have a small questions about using rotary encoder with DA14531. 

How to choose the right type of encoder? 

What parameters to pay attention to? 

Whether this encoder will work with the built-in decoder (pdf in attachment)?  I wrote a simple program and it counts impulses wrong (e.g. 12 24 36)

Sample code here:

void quad_decoder_user_callback_function(int16_t qdec_xcnt_reg, int16_t qdec_ycnt_reg, int16_t qdec_zcnt_reg)
{
    arch_printf( "\n\r DX: ");
    arch_printf( "%i %i\n\r",qdec_xcnt_reg >> 8,qdec_xcnt_reg & 0xFF);
    quad_decoder_enable_irq(1);
}
void quad_decoder_init_enc(void){
QUAD_DEC_INIT_PARAMS_t quad_dec_init_param = {.chx_port_sel = QUAD_DEC_CHXA_P08_AND_CHXB_P09,
                                              .chy_port_sel = QUAD_DEC_CHYA_NONE_AND_CHYB_NONE,
                                              .chz_port_sel = QUAD_DEC_CHZA_NONE_AND_CHZB_NONE,
                                              .qdec_clockdiv = 0,
                                              .qdec_events_count_to_trigger_interrupt = 1,};
   quad_decoder_init(&quad_dec_init_param);
   quad_decoder_register_callback(quad_decoder_user_callback_function);
   quad_decoder_enable_irq(1);
}

 

Attachment: 
Device: 
PM_Dialog
Offline
Last seen: 1 week 5 days ago
Staff
Joined: 2018-02-08 11:03
Hi adam.stroz,

Hi adam.stroz,

Please check the DA14531 datasheet Table 3: Absolute Maximum Ratings and Table 4: Recommended Operating Conditions. Given that the encoder can be connected to any of the DA4531 pins, you should check that the output of the input channels are according to DA14531 pin specifications.

I would recommend first checking the UM-B-119: DA14585-DA14531 SW Platform Reference and section 5.10. Quadrature Decoder Example. Are you able to run the SDK example?  Take a look at Table 15 HDK jumper configuration Quadrature decoder.

Thanks, PM_Dialog

adam.stroz
Offline
Last seen: 7 months 1 week ago
Joined: 2020-05-22 07:54
Hello,

Hello,

yes i ran this example and it also showed bad values. I run the program on my custom PCB, here are sample readings (the message is sent after turning the encoder by 4 steps, not one as it should be)

 DX: 0 4

 DX: 0 18

 DX: 0 28

 DX: 0 37

 DX: 0 50

 DX: 0 52

 DX: 0 70

 

PM_Dialog
Offline
Last seen: 1 week 5 days ago
Staff
Joined: 2018-02-08 11:03
Hi adam.stroz,

Hi adam.stroz,

Can you please indicate the pinout that you are using? Is it P06 (CHX_A) and P05 (CHX_B)? Did you try to run it in our DK to check if there is any difference?

Thanks, PM_Dialog

adam.stroz
Offline
Last seen: 7 months 1 week ago
Joined: 2020-05-22 07:54
Currently i'm using this

Currently i'm using this pinout:

#define ENCODER_SW_PORT GPIO_PORT_0
#define ENCODER_A_PIN GPIO_PIN_9
#define ENCODER_B_PIN GPIO_PIN_8
///////////////////////////////
GPIO_ConfigurePin(ENCODER_SW_PORT, ENCODER_A_PIN, INPUT_PULLUP, PID_GPIO, true);
GPIO_ConfigurePin(ENCODER_SW_PORT, ENCODER_B_PIN, INPUT_PULLUP, PID_GPIO, true);
///////////////////////////////
QUAD_DEC_CHXA_P08_AND_CHXB_P09

What do you mean by " Did you try to run it in our DK to check if there is any difference?"  

Diagram in attachment.

Attachment: 
PM_Dialog
Offline
Last seen: 1 week 5 days ago
Staff
Joined: 2018-02-08 11:03
Hi adam.stroz,

Hi adam.stroz,

Sorry for the confusion – I meant to put the encoder on the Pro-DK and test it. I assume that you have a custom board.

Can you please use a clean quadrature_decoder project as provided by the SDK and do only the following modifications?  The P08 is used for the UART2.

Project location : 6.0.14.1114\projects\target_apps\peripheral_examples\quadrature_decoder\Keil_5

In user_periph_setup.h :

#define UART2_TX_PORT           GPIO_PORT_0

#define UART2_TX_PIN            GPIO_PIN_5

#define QUADRATURE_ENCODER_CHX_A_PORT        GPIO_PORT_0

#define QUADRATURE_ENCODER_CHX_A_PIN         GPIO_PIN_8

#define QUADRATURE_ENCODER_CHX_B_PORT        GPIO_PORT_0

#define QUADRATURE_ENCODER_CHX_B_PIN         GPIO_PIN_9

#define QUADRATURE_ENCODER_CHX_CONFIGURATION QUAD_DEC_CHXA_P08_AND_CHXB_P09

Thanks, PM_Dialog

adam.stroz
Offline
Last seen: 7 months 1 week ago
Joined: 2020-05-22 07:54
Quadrature Decoder / WKUP
Quadrature Decoder / WKUP controller
SW3 button to start/stop Quadec polling
SW2 button to terminate Quadec test

 Quadrature Decoder Test started!.
 Press SW2 button to terminate test.

Quadec ISR report:                        > First encoder turn
 DX: 0002 DY: 0000 DZ: 0000 
Quadec ISR report:                        >Fourth encoder turn
 DX: 0015 DY: 0000 DZ: 0000
Quadec ISR report:                        >Eighth encoder turn
 DX: 0023 DY: 0000 DZ: 0000

I tested your proposition (a clean quadrature_decoder example, i change only encoder and uart pins), and encoder still doesn't work properly... I see an event only when turn (left or right) encoder four times (sometimes after one turn). In attachment oscilloscope diagrams (A and B encoder pins on blue and yellow lines, the first picture shows first turn, second pictures shows next turns). Maybe i have the wrong type of encoder?

Attachment: 
PM_Dialog
Offline
Last seen: 1 week 5 days ago
Staff
Joined: 2018-02-08 11:03
Hi adam.stroz,

Hi adam.stroz,

Thanks for coming and posting to the forums. Exciting news! We’re now in the process of moving to our new forum platform that will offer better functionality and is contained within the main Dialog website. All posts and accounts have been migrated. We’re now accepting traffic on the NEW forum only - please POST any new threads at  https://www.dialog-semiconductor.com/support

We’ll be fixing bugs / optimizing the searching and tagging over the coming days.

This ticket has been posted on : https://www.dialog-semiconductor.com/products/bluetooth-low-energy?post_id=11435#tab-support_tab_content

Your last comment is not sync-up, so I’ll create a copy (with the attachment) on behalf of you.

I’ll respond to you as soon as possible on the NEW forum thread.

Thanks, PM_Dialog