feat: 增加置物平台接口

This commit is contained in:
bmy
2024-06-10 16:56:04 +08:00
parent f9a87063d8
commit 1aa5b84322
3 changed files with 46 additions and 15 deletions

View File

@@ -17,11 +17,11 @@ void by_servo_set_claw_arm(int16_t angle)
if (angle < 0) { if (angle < 0) {
angle = 0; angle = 0;
} else if (angle > 180) { } else if (angle > 270) {
angle = 180; angle = 270;
} }
ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); ch_val = (uint32_t)(((float)angle / 270.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f);
tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, ch_val); tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_2, ch_val);
@@ -36,7 +36,7 @@ void by_servo_set_claw_arm(int16_t angle)
*/ */
void by_servo_set_claw(int16_t angle) void by_servo_set_claw(int16_t angle)
{ {
#define PULSE_WIDTH_MIN 1.5f #define PULSE_WIDTH_MIN 0.5f
#define PULSE_WIDTH_MAX 2.5f #define PULSE_WIDTH_MAX 2.5f
uint32_t ch_val = 0; uint32_t ch_val = 0;
@@ -62,18 +62,18 @@ void by_servo_set_claw(int16_t angle)
*/ */
void by_servo_set_camera(int16_t angle) void by_servo_set_camera(int16_t angle)
{ {
#define PULSE_WIDTH_MIN 1.5f #define PULSE_WIDTH_MIN 0.5f
#define PULSE_WIDTH_MAX 2.5f #define PULSE_WIDTH_MAX 2.5f
uint32_t ch_val = 0; uint32_t ch_val = 0;
if (angle < 0) { if (angle < 0) {
angle = 0; angle = 0;
} else if (angle > 180) { } else if (angle > 270) {
angle = 180; angle = 270;
} }
ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f); ch_val = (uint32_t)(((float)angle / 270.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f);
tmr_channel_value_set(TMR3, TMR_SELECT_CHANNEL_4, ch_val); tmr_channel_value_set(TMR3, TMR_SELECT_CHANNEL_4, ch_val);
@@ -82,13 +82,13 @@ void by_servo_set_camera(int16_t angle)
} }
/** /**
* @brief 设置云台摇臂 * @brief 设置顶端抓取机构
* *
* @param angle 角度 (0-180) * @param angle 角度 (0-180)
*/ */
void by_servo_set_scoop(int16_t angle) void by_servo_set_scoop(int16_t angle)
{ {
#define PULSE_WIDTH_MIN 1.5f #define PULSE_WIDTH_MIN 0.5f
#define PULSE_WIDTH_MAX 2.5f #define PULSE_WIDTH_MAX 2.5f
uint32_t ch_val = 0; uint32_t ch_val = 0;
@@ -107,13 +107,40 @@ void by_servo_set_scoop(int16_t angle)
#undef PULSE_WIDTH_MAX #undef PULSE_WIDTH_MAX
} }
/**
* @brief 设置置物平台
*
* @param angle 角度 (0-180)
*/
void by_servo_set_storage(int16_t angle)
{
#define PULSE_WIDTH_MIN 0.5f
#define PULSE_WIDTH_MAX 2.5f
uint32_t ch_val = 0;
if (angle < 0) {
angle = 0;
} else if (angle > 180) {
angle = 180;
}
ch_val = (uint32_t)(((float)angle / 180.0f * (PULSE_WIDTH_MAX - PULSE_WIDTH_MIN) + PULSE_WIDTH_MIN) / 20.0f * 9999.0f);
tmr_channel_value_set(TMR3, TMR_SELECT_CHANNEL_2, ch_val);
#undef PULSE_WIDTH_MIN
#undef PULSE_WIDTH_MAX
}
void by_servo_init(void) void by_servo_init(void)
{ {
// 后续要不全初始化为空值,由主控按顺序初始化 // 后续要不全初始化为空值,由主控按顺序初始化
by_servo_set_claw_arm(0); by_servo_set_claw_arm(220); // 36-220
by_servo_set_claw(0); by_servo_set_claw(25); // 25-90
by_servo_set_camera(0); by_servo_set_camera(45);
by_servo_set_scoop(0); by_servo_set_scoop(0);
by_servo_set_storage(0);
} }
void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len) void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len)
@@ -136,6 +163,9 @@ void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len)
case 0x00C: case 0x00C:
by_servo_set_scoop(angle); by_servo_set_scoop(angle);
break; break;
case 0x00D:
by_servo_set_storage(angle);
break;
default: default:
break; break;
} }

View File

@@ -7,6 +7,7 @@ extern void by_servo_set_claw_arm(int16_t angle);
extern void by_servo_set_claw(int16_t angle); extern void by_servo_set_claw(int16_t angle);
extern void by_servo_set_camera(int16_t angle); extern void by_servo_set_camera(int16_t angle);
extern void by_servo_set_scoop(int16_t angle); extern void by_servo_set_scoop(int16_t angle);
extern void by_servo_set_storage(int16_t angle);
extern void by_servo_init(void); extern void by_servo_init(void);
extern void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len); extern void by_servo_can_handle(uint16_t stdd_id, const uint8_t *data, uint8_t len);

View File

@@ -71,7 +71,7 @@
int main(void) int main(void)
{ {
/* add user code begin 1 */ /* add user code begin 1 */
by_debug_init();
/* add user code end 1 */ /* add user code end 1 */
/* system clock config. */ /* system clock config. */
@@ -108,7 +108,7 @@ int main(void)
while (1) { while (1) {
gpio_bits_write(GPIOA, GPIO_PINS_10, !gpio_output_data_bit_read(GPIOA, GPIO_PINS_10)); gpio_bits_write(GPIOA, GPIO_PINS_10, !gpio_output_data_bit_read(GPIOA, GPIO_PINS_10));
delay_ms(1000); delay_ms(500);
/* add user code end 3 */ /* add user code end 3 */
} }
} }