没有pwm输出?为什么?

img


用的tb6612fng电机驱动为啥用上了pwm电机就不转了?

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
TB6612FNG电机驱动器可以通过PWM信号控制电机的速度和方向。当你使用Pulse Width Modulation (PWM)时,使输入引脚保持在高电平。振荡的频率必须比PWM的发射频率高得多。否则,电机将收到类似于直流电的信号,不会转动。

如果你使用TB6612FNG电机驱动器而无法得到PWM输出,请检查如下问题:

  1. 检查你的引脚定义是否正确。 根据你的开发板和驱动器型号,可能需要使用特定的引脚或模块。

  2. 检查你的代码是否正确。 确保你的代码正确地初始化了特定的引脚和电机类型。

  3. 检查你的电路是否被连接正确。 确保你的TB6612FNG电机驱动器与你的Arduino板连接正确。

以下是一个简单的基于Arduino的PWM控制电机代码示例:

#include <Wire.h>
#include <Adafruit_MotorShield.h>

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);

void setup() {
  AFMS.begin(); 
  myMotor->setSpeed(255);  //设置电机速度
  myMotor->run(FORWARD);   //向前转动
}

void loop() {

  myMotor->run(FORWARD);   //向前转
  delay(1000);

  myMotor->run(BACKWARD);  //向后转
  delay(1000);

  myMotor->run(RELEASE);   //释放电机
  delay(1000);  
}

此代码使用Arduino和Adafruit Motor Shield来控制一个电机。 在setup()函数中,电机速度设置为255,电机方向设置为FORWARD。在loop()函数中,电机向前转动1000毫秒,然后向后转动1000毫秒,最后释放电机并延迟1000毫秒以重新开始循环。 这是一个简单的示例,你可以按照自己的需求进行修改。
如果我的回答解决了您的问题,请采纳!

以下内容引用CHATGPT:

可能有以下原因导致没有PWM输出:

  1. 没有配置正确的GPIO引脚为PWM输出模式;
  2. 没有正确配置定时器;
  3. 没有正确设置PWM输出的占空比。
    下面给出一个简单的例子,演示如何在STM32中配置PWM输出:
#include "stm32f4xx.h"

void PWM_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

    // 使能时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    // 配置GPIO为AF模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置为PWM模式
    TIM_TimeBaseInitStructure.TIM_Period = 9999; // PWM周期为10000个时钟周期
    TIM_TimeBaseInitStructure.TIM_Prescaler = 83; // 时钟预分频为84,即1MHz
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

    // 配置PWM输出通道
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OCInitStructure.TIM_Pulse = 4999; // 占空比为50%
    TIM_OC1Init(TIM2, &TIM_OCInitStructure);

    TIM_Cmd(TIM2, ENABLE);
}

在上面的代码中,我们使用了TIM2的第一个通道(PA0)作为PWM输出。首先,我们需要使能GPIOA和TIM2的时钟。然后,我们将PA0配置为AF模式,使其可以作为TIM2的PWM输出引脚。接下来,我们配置TIM2的时钟预分频和周期,以及PWM输出通道的占空比。最后,使能TIM2即可开始输出PWM信号。

可能是因为PWM输出的占空比设置不正确,或者是电机接线或供电不正确。建议检查一下这些方面,或者尝试调整PWM输出的占空比来解决问题。