54 #define _BV(bit) (1 << (bit))
58 #define MIN(a,b) (((a)<(b))?(a):(b))
62 #define MAX(a,b) (((a)>(b))?(a):(b))
66 #define SERVOS_NUM HW_SERVO_NUM // Number of servos to use
69 #define SERVO_CNT_SPEED 1000000L
95 #define S_STARTPULSE SERVO_OUT_PULSE_MIN_US
96 #define S_PULSELEN (SERVO_OUT_PULSE_MAX_US - SERVO_OUT_PULSE_MIN_US)
97 #define S_COOLDOWN (1000000 / SERVO_OUT_RATE_HZ)
103 #define SERVO_START_OFFSET (SERVO_CNT_SPEED / (1000000L / S_STARTPULSE))
104 #define SERVO_CPU_FACTOR ((SERVO_CNT_SPEED + ((1000000L / S_PULSELEN) * 256L) - 1L) / ((1000000L / S_PULSELEN) * 256L)) // Round up
105 #define SERVO_COOLDOWN_FACTOR (SERVO_CNT_SPEED / (1000000L / S_COOLDOWN))
112 #define USE_COMMANDS 0
117 #define TEST_CYCLE_TIME 0
120 extern volatile unsigned int restart_cnt;
121 extern volatile unsigned int interrupt_cnt;
123 #define get_restart_cycles() (restart_cnt)
124 #define get_interrupt_cycles() (interrupt_cnt)
128 #define ACTUAL_POS(servo) (MAX(MIN(servo.pos + (signed short)servo.offset, 255), 0))
129 #define ACTUAL_POS_PTR(servo) (MAX(MIN(servo->pos + (signed short)servo->offset, 255), 0))
130 #define CMD_MS_TO_VAL(ms) ((ms) / (((S_STARTPULSE + S_PULSELEN + S_COOLDOWN) * CMD_WAIT_FACTOR) / 1000))
131 #define SERVO_PERIOD_TIME_MS ((S_STARTPULSE + S_PULSELEN + S_COOLDOWN) / 1000)
137 volatile signed short pos;
140 volatile unsigned int pin;
145 volatile signed char active;
146 volatile signed short pos;
147 volatile signed short speed;
148 volatile signed short last;
151 extern volatile signed char cmd_seq_running;
152 extern volatile unsigned int cmd_ptr;
153 extern volatile const signed short *cmd_seq;
162 #define CMD_WAIT_FACTOR 1
175 #define CMD_MOVE_SERVO 0
184 #define CMD_MOVE_SERVO_REL 1
197 #define CMD_MOVE_MULTIPLE_SERVOS 2
204 #define CMD_CENTER_ALL 3
218 #define CMD_WAIT_SERVO 5
223 #define CMD_WAIT_ALL_SERVOS 6
228 #define CMD_STOP_DRIVER 7
233 #define CMD_STOP_CMDS 8
238 #define CMD_RESTART 9
245 #define CMD_REPEAT 10
256 void servo_move(
unsigned char servo,
signed short position,
unsigned char speed);
257 void servo_run_cmds(
const signed short *cmds);
258 void servo_stop_cmds(
void);
259 void servo_reset_pos(
unsigned char speed);
260 void servo_wait_for_cmds(
void);
261 void servo_move_within_time(
unsigned char servo,
signed short pos,
unsigned short time_ms);
262 void servo_move_within_time_multiple(
unsigned short time_ms,
unsigned short num, ...);
volatile signed short pos
Definition: servo.h:137
unsigned char servo_driver_is_active(void)
volatile unsigned int pin
Definition: servo.h:140
volatile SERVO servos[SERVOS_NUM]
#define SERVOS_NUM
Definition: servo.h:66
volatile unsigned char offset
Definition: servo.h:138
GPIO_TypeDef * gpio
Definition: servo.h:139
Library configuration file.
void servo_stop_driver(void)