JMotor
Loading...
Searching...
No Matches
Classes | Public Member Functions | Protected Attributes | List of all members
JEncoderPWMAbsolute Class Reference

reads a PWM signal from an absolute encoder More...

#include <JEncoderPWMAbsolute.h>

Inheritance diagram for JEncoderPWMAbsolute:
Inheritance graph
[legend]
Collaboration diagram for JEncoderPWMAbsolute:
Collaboration graph
[legend]

Classes

struct  pwmSettings
 struct for holding parameters for reading PWM Absolute Encoders More...
 

Public Member Functions

 JEncoderPWMAbsolute (byte _encoderPin, pwmSettings _ps, bool _reverse=false, float _distPerCountFactor=1.0, unsigned long _velEnoughTime=0, unsigned long _velEnoughTicks=0, bool _resetAngleOnStart=false, uint16_t _zeroPos=0)
 sets pins and settings for reading the encoder
 
virtual void setUpInterrupts (void(*_isrPointer)(void))
 set up pins and interrupts
 
virtual void turnOffInterrupts ()
 disable interrupts and stop monitoring encoder
 
int rawReading ()
 
long intTurns ()
 how many full turns the encoder has made.
 
long zeroCounter ()
 reset the counter of how far the encoder has turned
 
long zeroCounter (bool resetAngle)
 reset the zero point of the encoder
 
float getVel ()
 calculates velocity in distance per second where distance was set by setdistPerCountFactor()
 
long getCounter ()
 returns how far the encoder has turned from the zero position
 
float getPos ()
 returns how far the encoder has turned from the zero position converted to distance
 
float getDistPerCountFactor ()
 returns a conversion factor between encoder ticks and distance that can be set for the encoder
 
void setDistPerCountFactor (float _factor)
 
bool hasDirection ()
 can this encoder measure direction or just speed
 
bool isVelNew ()
 could be useful for only recalculating a control loop if there's new velocity data
 
bool setZeroPos (uint16_t zeroAngle)
 change what angle of the absolute encoder is zero
 
void run ()
 
void encoderISR ()
 
- Public Member Functions inherited from JEncoder
virtual void setRev (bool _rev)
 empty function for directionless encoders to override
 

Protected Attributes

byte encoderPin
 

Detailed Description

reads a PWM signal from an absolute encoder

tested with https://ams.com/as0548b

Note
platform: esp32, teensy
(could be used with standard avr arduinos but only with pins that support attachInterrupt())

Constructor & Destructor Documentation

◆ JEncoderPWMAbsolute()

JEncoderPWMAbsolute::JEncoderPWMAbsolute ( byte  _encoderPin,
pwmSettings  _ps,
bool  _reverse = false,
float  _distPerCountFactor = 1.0,
unsigned long  _velEnoughTime = 0,
unsigned long  _velEnoughTicks = 0,
bool  _resetAngleOnStart = false,
uint16_t  _zeroPos = 0 
)
inline

sets pins and settings for reading the encoder

Parameters
_encoderPinpin to read encoder signal with
_ps(struct pwmSettings) parameters of encoder signal
_reverse(bool) reverse positive direction, default=false
_distPerCountFactor(float) for the purposes of setting this factor a "count" is considered a full revolution of the absolute encoder
_velEnoughTime(default=0, no limit) shortest interval (in MICROseconds) between velocity calculations, if run() is called faster the calculation will wait to run
_velEnoughTicks(default=0, no limit) if the encoder turns more than this number of steps velocity calculations will be done even if velEnoughTime hasn't been reached
_resetAngleOnStart(default=false) zero encoder angle on startup (in encoder units)
_zeroPos(default=0) change what angle of the absolute encoder is considered zero. set _resetAngleOnStart to false to keep setting from being overridden

Member Function Documentation

◆ encoderISR()

void JEncoderPWMAbsolute::encoderISR ( )
inline

◆ getCounter()

long JEncoderPWMAbsolute::getCounter ( )
inlinevirtual

returns how far the encoder has turned from the zero position

Note
remember that variables overflow
Return values
(long)encoder ticks

Reimplemented from JEncoder.

◆ getDistPerCountFactor()

float JEncoderPWMAbsolute::getDistPerCountFactor ( )
inlinevirtual

returns a conversion factor between encoder ticks and distance that can be set for the encoder

Note
default is 1.0
Return values
(float)distPerCountFactor

Reimplemented from JEncoder.

◆ getPos()

float JEncoderPWMAbsolute::getPos ( )
inlinevirtual

returns how far the encoder has turned from the zero position converted to distance

Note
remember that variables overflow (counter) and that floats have limited precision
Return values
(float)encoder ticks converted to distance

Reimplemented from JEncoder.

◆ getVel()

float JEncoderPWMAbsolute::getVel ( )
inlinevirtual

calculates velocity in distance per second where distance was set by setdistPerCountFactor()

Return values
(float)velocity

Reimplemented from JEncoder.

◆ hasDirection()

bool JEncoderPWMAbsolute::hasDirection ( )
inlinevirtual

can this encoder measure direction or just speed

Return values
(bool)true = can measure direction

Reimplemented from JEncoder.

◆ intTurns()

long JEncoderPWMAbsolute::intTurns ( )
inline

how many full turns the encoder has made.

Note
this and rawReading can be used as an alternative to getPos if the limited precision of a float is a concern
Return values
(long)how far the encoder has turned

◆ isVelNew()

bool JEncoderPWMAbsolute::isVelNew ( )
inlinevirtual

could be useful for only recalculating a control loop if there's new velocity data

Return values
(bool)true if velocity has changed since this function was last called

Reimplemented from JEncoder.

◆ rawReading()

int JEncoderPWMAbsolute::rawReading ( )
inline
Note
divide by RESOLUTION to get fraction of full turn
Return values
theangle reading from the sensor [0, RESOLUTION) (but negative if reverse is true)

◆ run()

void JEncoderPWMAbsolute::run ( )
inlinevirtual
Note
call this function as frequently as possible or this code can't keep track of how many times the encoder has turned

Reimplemented from JEncoder.

◆ setDistPerCountFactor()

void JEncoderPWMAbsolute::setDistPerCountFactor ( float  _factor)
inlinevirtual
Note
for the purposes of setting this factor a "count" is considered a full revolution of the absolute encoder. it is converted to actual counts within this function

Reimplemented from JEncoder.

◆ setUpInterrupts()

virtual void JEncoderPWMAbsolute::setUpInterrupts ( void(*)(void)  _isrPointer)
virtual

set up pins and interrupts

Parameters
_isrPointerglobal function that calls internal ISR

Reimplemented in JEncoderPWMAbsoluteAttachInterrupt, and JEncoderPWMAbsolutePinChange.

◆ setZeroPos()

bool JEncoderPWMAbsolute::setZeroPos ( uint16_t  zeroAngle)
inline

change what angle of the absolute encoder is zero

Note
this will cause distance to jump some
Parameters
zeroAngle[0,ps.RESOLUTION-1)
Return values
(bool)did the zeroAngle change

◆ turnOffInterrupts()

virtual void JEncoderPWMAbsolute::turnOffInterrupts ( )
virtual

disable interrupts and stop monitoring encoder

Note
use setUpInterrupts to start encoder again

Reimplemented in JEncoderPWMAbsoluteAttachInterrupt, and JEncoderPWMAbsolutePinChange.

◆ zeroCounter() [1/2]

long JEncoderPWMAbsolute::zeroCounter ( )
inlinevirtual

reset the counter of how far the encoder has turned

Return values
(long)returns value of counter before it is reset

Reimplemented from JEncoder.

◆ zeroCounter() [2/2]

long JEncoderPWMAbsolute::zeroCounter ( bool  resetAngle)
inline

reset the zero point of the encoder

Parameters
resetAngle(bool) true=set the next read angle as zero, false=reset turns, but leave absolute angle measurement as is
Return values
(long)old position (number of turns, not including angle!)

Member Data Documentation

◆ encoderPin

byte JEncoderPWMAbsolute::encoderPin
protected

The documentation for this class was generated from the following file: