循迹电机都分别正常 但不能正常循迹

循迹能亮 电机烧录也能动 但是结合起来不能循迹是什么原因 电子还是程序的原因

以下内容部分参考ChatGPT模型:


首先需要确认循迹模块的输出是否正确,可以通过示波器等工具观察输出波形是否符合预期。如果循迹模块输出正确,则需要检查程序中是否正确读取了循迹模块的输出,并根据读取的结果控制电机的转动。同时还需要注意电机控制的算法是否正确,例如PID算法等是否正确实现。可以尝试在程序中输出调试信息,观察程序的执行过程是否符合预期,以便定位问题所在。以下是一个简单的示例代码,可供参考:

#include <stm32f4xx.h>
#include <stdbool.h>

#define TRACKING_PORT GPIOA
#define TRACKING_PIN  GPIO_Pin_0

#define MOTOR_PORT GPIOB
#define MOTOR_PIN  GPIO_Pin_0

bool track_is_on_track(void)
{
    return GPIO_ReadInputDataBit(TRACKING_PORT, TRACKING_PIN) == Bit_RESET;
}

void motor_forward(void)
{
    GPIO_SetBits(MOTOR_PORT, MOTOR_PIN);
}

void motor_stop(void)
{
    GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN);
}

int main(void)
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;

    // 初始化循迹模块引脚为输入模式
    GPIO_InitStructure.GPIO_Pin = TRACKING_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(TRACKING_PORT, &GPIO_InitStructure);

    // 初始化电机引脚为输出模式
    GPIO_InitStructure.GPIO_Pin = MOTOR_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(MOTOR_PORT, &GPIO_InitStructure);

    while (1)
    {
        if (track_is_on_track())
        {
            motor_forward();
        }
        else
        {
            motor_stop();
        }
    }
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

很可能是程序的原因。如果循迹电机的测试都正常,但不能正常循迹,那么问题很可能出在程序上。你可以检查程序中循迹算法的实现是否正确,例如光线的检测和转向的控制逻辑等部分。如果你不确定可能出在哪里,你可以逐步排除问题。首先,你可以检查光线传感器是否正常工作,例如是否能够正确检测出黑色线条。然后,你可以检查电机是否正确地响应光线传感器的输入,例如是否能准确地转向以跟随黑色线条。最后,你可以检查你的代码是否正确及其处理数据的方式是否正确。

硬件你没有调好,程序网上多的是应该不会错

该回答参考ChatGPT:循迹和电机控制是两个相互独立的功能,循迹传感器只负责检测轨道上的黑线或白线,而电机则负责根据检测结果控制小车的运动。因此,无法循迹可能是由于电子电路或程序代码的问题,也可能是因为传感器安装位置或者传感器灵敏度等问题导致的。

如果你已经确认了电子电路方面没有问题,可以尝试检查程序代码是否正确实现了循迹逻辑。例如,是否正确读取传感器信号,是否正确解析传感器数据,并根据解析结果控制电机运动等。同时,你还可以考虑优化循迹算法,例如增加 PID 控制等方式来提高循迹精度和稳定性。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这可能是程序方面的问题。循迹电机正常工作并且能够亮,这表明代表循迹的信号已经被正确读取。电机烧录也能动,这表明电机驱动程序也没有问题。因此,问题可能在于控制循迹电机的算法或程序。

以下是一些可能导致该问题的原因:

  1. 循迹电机的控制算法错误。如果循迹电机的控制算法有误,它们不会按照预期的轨迹移动,导致行走方向错误。请检查算法是否正确。

  2. 循迹电机的驱动程序错误。确认循迹电机的驱动程序正常运行,没有发生任何错误或异常。

  3. 电源电压不稳定。如果电源电压不稳定,电机可能不能正常工作,这可能导致循迹问题。

  4. 循迹传感器故障。如果循迹传感器损坏或错误校准,循迹电机则可能无法正确进行循迹。尝试检查传感器是否正常并且正确校准。

以下是Python示例代码,可以用来控制循迹电机,如有需要可以做参考。

import RPi.GPIO as GPIO
import time
 
# 设置模式
GPIO.setmode(GPIO.BOARD)
 
# 定义引脚
PIN_DIR_L = 35
PIN_STEP_L = 37
 
PIN_DIR_R = 40
PIN_STEP_R = 38
 
DIR_CCW = 1
DIR_CW = 0
 
# 设置输出
GPIO.setup(PIN_DIR_L, GPIO.OUT)
GPIO.setup(PIN_STEP_L, GPIO.OUT)
GPIO.setup(PIN_DIR_R, GPIO.OUT)
GPIO.setup(PIN_STEP_R, GPIO.OUT)
 
# 设置初值
GPIO.output(PIN_DIR_L, DIR_CW)
GPIO.output(PIN_DIR_R, DIR_CCW)
 
# 循迹算法
def run_track():
    # TODO: 实现循迹算法
    pass
 
# 控制电机运动
def move(left_steps, right_steps):
    # 左电机
    GPIO.output(PIN_DIR_L, DIR_CW)
    for step in range(left_steps):
        GPIO.output(PIN_STEP_L, GPIO.HIGH)
        time.sleep(0.001)
        GPIO.output(PIN_STEP_L, GPIO.LOW)
        time.sleep(0.001)
 
    # 右电机
    GPIO.output(PIN_DIR_R, DIR_CCW)
    for step in range(right_steps):
        GPIO.output(PIN_STEP_R, GPIO.HIGH)
        time.sleep(0.001)
        GPIO.output(PIN_STEP_R, GPIO.LOW)
        time.sleep(0.001)
 
# 运行循迹
while True:
    # 执行循迹算法
    left_steps, right_steps = run_track()
 
    # 控制电机
    move(left_steps, right_steps)

如果我的回答解决了您的问题,请采纳!