2024年2月1日发(作者:)
keil5编写stm32四旋翼飞行机器人程序
#include
// 定义控制四旋翼飞行机器人的引脚
#define MOTOR1_PIN GPIO_Pin_0
#define MOTOR2_PIN GPIO_Pin_1
#define MOTOR3_PIN GPIO_Pin_2
#define MOTOR4_PIN GPIO_Pin_3
// 定义四旋翼飞行机器人电机的转速控制范围
#define MOTOR_MIN_SPEED 1000
#define MOTOR_MAX_SPEED 2000
void motorInit(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置引脚为推挽输出
GPIO__Mode = GPIO_Mode_Out_PP;
GPIO__Speed = GPIO_Speed_50MHz;
GPIO__Pin = MOTOR1_PIN | MOTOR2_PIN |
MOTOR3_PIN | MOTOR4_PIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void motorSetSpeed(uint16_t motor1, uint16_t motor2,
uint16_t motor3, uint16_t motor4) {
// 限制电机转速在可控范围内
motor1 = (motor1 < MOTOR_MIN_SPEED) ? MOTOR_MIN_SPEED :
motor1;
motor1 = (motor1 > MOTOR_MAX_SPEED) ? MOTOR_MAX_SPEED :
motor1;
motor2 = (motor2 < MOTOR_MIN_SPEED) ? MOTOR_MIN_SPEED :
motor2;
motor2 = (motor2 > MOTOR_MAX_SPEED) ? MOTOR_MAX_SPEED :
motor2;
motor3 = (motor3 < MOTOR_MIN_SPEED) ? MOTOR_MIN_SPEED :
motor3;
motor3 = (motor3 > MOTOR_MAX_SPEED) ? MOTOR_MAX_SPEED :
motor3;
motor4 = (motor4 < MOTOR_MIN_SPEED) ? MOTOR_MIN_SPEED :
motor4;
motor4 = (motor4 > MOTOR_MAX_SPEED) ? MOTOR_MAX_SPEED :
motor4;
// 设置引脚电平控制电机转速
if (motor1 >= MOTOR_MIN_SPEED && motor1 <=
MOTOR_MAX_SPEED) {
GPIO_WriteBit(GPIOA, MOTOR1_PIN, (motor1 >
(MOTOR_MAX_SPEED / 2)) ? Bit_SET : Bit_RESET);
}
if (motor2 >= MOTOR_MIN_SPEED && motor2 <=
MOTOR_MAX_SPEED) {
GPIO_WriteBit(GPIOA, MOTOR2_PIN, (motor2 >
(MOTOR_MAX_SPEED / 2)) ? Bit_SET : Bit_RESET);
}
if (motor3 >= MOTOR_MIN_SPEED && motor3 <=
MOTOR_MAX_SPEED) {
GPIO_WriteBit(GPIOA, MOTOR3_PIN, (motor3 >
(MOTOR_MAX_SPEED / 2)) ? Bit_SET : Bit_RESET);
}
if (motor4 >= MOTOR_MIN_SPEED && motor4 <=
MOTOR_MAX_SPEED) {
GPIO_WriteBit(GPIOA, MOTOR4_PIN, (motor4 >
(MOTOR_MAX_SPEED / 2)) ? Bit_SET : Bit_RESET);
}
}
int main(void) {
motorInit();
while (1) {
// 设置电机转速
motorSetSpeed(1500, 1500, 1500, 1500);
}
return 0;
}
发布者:admin,转转请注明出处:http://www.yc00.com/web/1706746349a1463686.html
评论列表(0条)