基础任务1、电机启停与方向控制;
任务要求
通过程序实现电机的启动、停止、正转和反转。
硬件准备
1. NXP FRDM-MCXA153开发板 1 块
2. Adafruit Motor Shield V2 电机驱动板 1 块
3. 电源(5 ~ 12V)1 个
4. 直流有刷电机 1 个
5. 杜邦线若干
开发环境搭建
我使用 NXP 官方开发环境 MCUXpresso IDE 来编程实现,开发环境安装我这里不作展开说明。具体环境安装方案详见:FRDM-MCXA153快速入门 - 获取软件
代码实现
/* 任务1:电机启停与方向控制:通过程序实现电机的启动、停止、正转和反转。 */
void task1(void) {
/* 马达控制测试 */
PRINTF("\nTesting Motor Control...\r\n");
/* 获取马达4对象 */
motor_shield_t *motor1 = getMotor(LPI2C0, pca9685Address, MOTOR_CHANNEL_4);
if (motor1 == NULL) {
PRINTF("Failed to get motor 4 object\r\n");
while(1);
}
PRINTF("Successfully got motor 4 object\r\n");
/* 测试马达正转 */
PRINTF("\nTesting motor 4 forward rotation...\r\n");
status_t result = runMotor(motor1, MOTOR_DIR_FORWARD, 128); // 50%速度正转
if (result == kStatus_Success) {
PRINTF("Motor 4 moving forward at 50%% speed\r\n");
} else {
PRINTF("Failed to run motor forward with error: 0x%08X\r\n", result);
}
/* 马达正转保持5秒 */
SDK_DelayAtLeastUs(5 * 1000000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
/* 测试改变速度 */
PRINTF("\nChanging motor 4 speed to 100%%...\r\n");
result = setMotorSpeed(motor1, 255); // 100%速度
if (result == kStatus_Success) {
PRINTF("Motor 4 speed set to 100%%\r\n");
} else {
PRINTF("Failed to set motor speed with error: 0x%08X\r\n", result);
}
/* 马达正转全速运行5秒 */
SDK_DelayAtLeastUs(5 * 1000000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
/* 测试马达反转 */
PRINTF("\nTesting motor 4 backward rotation...\r\n");
result = setMotorDirection(motor1, MOTOR_DIR_BACKWARD);
if (result == kStatus_Success) {
PRINTF("Motor 4 moving backward at 100%% speed\r\n");
} else {
PRINTF("Failed to set motor direction with error: 0x%08X\r\n", result);
}
/* 马达反转保持5秒 */
SDK_DelayAtLeastUs(5 * 1000000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
/* 测试停止马达 */
PRINTF("\nStopping motor 4...\r\n");
result = stopMotor(motor1);
if (result == kStatus_Success) {
PRINTF("Motor 4 stopped\r\n");
} else {
PRINTF("Failed to stop motor with error: 0x%08X\r\n", result);
}
PRINTF("\nMotor Shield test completed!\r\n");
}效果展示

基础任务2、电机调速控制;
任务要求
编写一个函数,可以通过输入参数(如0-100)来改变PWM的占空比,从而控制速度。
硬件准备
1. NXP FRDM-MCXA153开发板 1 块
2. Adafruit Motor Shield V2 电机驱动板 1 块
3. 电源(5 ~ 12V)1 个
4. 直流有刷电机 1 个
5. 杜邦线若干
代码实现
/* 任务2:电机调速控制:编写一个函数,可以通过输入参数(如0-100)来改变PWM的占空比,从而控制速度。 */
void task2(motor_direction_t direction, int speed) {
status_t result;
/* 获取马达4对象 */
motor_shield_t *motor1 = getMotor(LPI2C0, pca9685Address, MOTOR_CHANNEL_4);
if (motor1 == NULL) {
PRINTF("Failed to get motor 4 object\r\n");
while(1);
}
PRINTF("Successfully got motor 4 object\r\n");
/* 设置马达方向 */
result = setMotorDirection(motor1, direction);
if (result == kStatus_Success) {
PRINTF("Motor 4 direction set to %s\r\n", (direction == MOTOR_DIR_FORWARD) ? "forward" : "backward");
} else {
PRINTF("Failed to set motor direction with error: 0x%08X\r\n", result);
}
/* 设置马达速度 */
result = setMotorSpeed(motor1, speed);
if (result == kStatus_Success) {
PRINTF("Motor 4 speed set to %d\r\n", speed);
} else {
PRINTF("Failed to set motor speed with error: 0x%08X\r\n", result);
}
}效果展示

我要赚赏金
