Higher level abstraction for setting the speed register. This
        register is responsible for telling the grizzly at what speed or
        position to drive at. The different control modes and type it expects is
        documented in the table below:
        
        Mode            Type                Range
        NO_PID          16.16 fixed         [-100, 100]
        
        SPEED_PID       int16               Defined by your motor. Units are in
                                            encoder ticks per millisecond. This
                                            value is technically unbounded but
                                            realistically limited by the maximum
                                            motor speed.
                                            
        POSITION_PID    int16               Defined by your encoder. Units are
                                            in encoder ticks from zero. This 
                                            value is technically unbounded but
                                            realistically limited by integer
                                            overflow.

def set_target(self, setpoint):
        """Higher level abstraction for setting the speed register. This
        register is responsible for telling the grizzly at what speed or
        position to drive at. The different control modes and type it expects is
        documented in the table below:
        
        Mode            Type                Range
        NO_PID          16.16 fixed         [-100, 100]
        
        SPEED_PID       int16               Defined by your motor. Units are in
                                            encoder ticks per millisecond. This
                                            value is technically unbounded but
                                            realistically limited by the maximum
                                            motor speed.
                                            
        POSITION_PID    int16               Defined by your encoder. Units are
                                            in encoder ticks from zero. This 
                                            value is technically unbounded but
                                            realistically limited by integer
                                            overflow.
        """
        
        fixed_set = int(setpoint * (2 ** 16))
        buf = [cast_to_byte(fixed_set >> 8 * i) for i in range(5)]
        self.set_register(Addr.Speed, buf)