I suspect your cheap encoder is incompatible with the Blue. The BB Blue is designed to operate with quadrature encoders. The Sparkfun site does not indicate your encoders are quadrature. There's a lot of other gobblygook in their encoder specifications...magnets and sensors etc...but sadly it's missing the word "quadrature".
Here is a link to a simple explaination of quadrature encoders....https://www.dynapar.com/Technology/Encoder_Basics/Quadrature_Encoder/
Note that the quadrature encoder A and B outputs are 90 degrees out of phase. This is critical. Without them being out of phase it is not possible to determine what direction the shaft is being rotated.
So find a way to watch both encoder outputs while you slowly turn the encoder in both directions. A dual channel oscilloscope or logic analyzer is best but you might be able to do it with LEDs or two voltmeters. The A and B pulses should never rise or fall at the same time. They need to be 90 degrees out of phase with each other.
Get back to me if you have more questions.
Clark
Since you don’t care about direction, for now, you might try hooking the encoder to just the A channel.
--Yep as you and Clark have surmised, neither connecting the pulse to A and B would work nor connecting just the A input. The counter would sometimes decrement if A and B were connected, and the counter would simply toggle from 1 to -1 if only A was connected.
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/CAC%3D1GgF8b1KVXTRh%2B3qw_Gg1RjQHhtV74TK1r_fXGizWruBs5Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--For more options, visit http://beagleboard.org/discuss---You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsub...@googlegroups.com.To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/594C4E58.7020707%40atldes.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/0a66ef55-6f2a-4e70-9e53-0d37b460c3e8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Hi Justin,
I modified the roboticscape source that changed the QDECCTL EQEP
register. This changed
the encoder from expecting a quadrature input to a simple up
counter. Input A should be used
to sense the hall effect pulses. I can't remember, but I do
believe I had to ground input B
This will only work for the first three encoders as the fourth is
handled by the PRU.
I fully intended to submit my changes so hopefully they would end
up in mainline code,
however I am not familiar PRU what changes were needed for the
PRU. Of course I
moved on to other projects.
I hope this helps
Mark
Here are the sections of code I changed:
In roboticscape.c (just a comment change)
/*******************************************************************************
* int rc_set_encoder_mode(int ch, int mode)
*
* set encoder for quadrature pulses or single pulse. Single pulse
on input A
*******************************************************************************/
int rc_set_encoder_mode(int ch, int mode){
if(ch<1 || ch>4){
fprintf(stderr,"Encoder Channel must be from 1 to 4\n");
return -1;
}
return write_eqep_mode(ch-1, mode);
}
In rc_nmap_pwmss.c
This is where the real change takes place
//set encoder to quadarature or single pulse mode.
int write_eqep_mode(int ch, int val){
if(init_eqep(ch)) return -1;
if(val == MODE_SINGLE_PULSE)
*(uint16_t*)(pwm_base[ch]+EQEP_OFFSET+QDECCTL) = 0x8000;
else
*(uint16_t*)(pwm_base[ch]+EQEP_OFFSET+QDECCTL) = 0x0;
return 0;
}
In rc_mmap_pwmss.h
//defs for setting encoder mode
enum{
MODE_SINGLE_PULSE,
MODE_QUADRATURE
};