单片机直流电机问题问题


#include <STC32G.H>
#include "intrins.h"
sbit EnablePin = P2^1; // 使能信号  
sbit DirectionPin = P2^2; // 方向信号  
sbit PulsePin = P2^3; // 脉冲信号  
#define FOSC 24000000 //@24.000MHz。
void delay(unsigned int xms)        //@24.000MHz
{
    unsigned long edata i;

    _nop_();
    _nop_();
    _nop_();
    i = 5998UL;
    while (i) i--;
}

void main() {  
      
      P2M0=0x0E;
      P2M1=0x00;
      EnablePin = 1;    
    EnablePin = 0; 
    DirectionPin = 0;  //低电平
    while (1) {  
        PulsePin = 0; 
        delay(1); 
        PulsePin = 1; 
        delay(1);  
    }  
}  

为啥我的直流 电机不转啊那里写错了 求指导

【以下回答由 GPT 生成】

从提供的代码来看,应该是在脉冲信号控制部分出现了问题。以下是可能的解决方案:

  1. 检查硬件连线:确保直流电机的正极和负极正确连接到单片机的对应引脚。还要确保脉冲引脚正确连接到单片机。

  2. 检查引脚设置:确认P2引脚的设置正确。P2^1用于使能信号,P2^2用于方向信号,P2^3用于脉冲信号。确保这些引脚已正确设置为输出模式。

  3. 检查信号的时序:在代码中,通过控制PulsePin的高低电平来产生脉冲信号。脉冲信号的正负边缘变化触发电机转动。确保脉冲信号的变化频率适合你想要的转速。

  4. 检查使能信号:使能信号EnablePin被设置为0,然后立即被设置为1。这样的话,电机将没有足够的时间来启动。你可以在使能信号设置为1之前添加一个延迟。

下面是修改代码的建议,可以尝试一下:

#include <STC32G.H>
#include "intrins.h"
sbit EnablePin = P2^1; // 使能信号
sbit DirectionPin = P2^2; // 方向信号
sbit PulsePin = P2^3; // 脉冲信号
#define FOSC 24000000 //@24.000MHz。

void delay(unsigned int xms)        //@24.000MHz
{
    unsigned long i;
    while (xms--) {
        i = 6000; //调整延迟时间
        while (i--) {
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void main() {  
    P2M0 = 0x0E;
    P2M1 = 0x00;
    EnablePin = 1;
    DirectionPin = 0; // 低电平

    while (1) {  
        PulsePin = 0; 
        delay(10); //调整脉冲信号的频率,这里设置为10ms
        PulsePin = 1;
        delay(10);  
    }  
}

如果以上修改并没有解决问题,可能需要进一步检查硬件连接或者尝试其他调试方法。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

1,确定EnablePin和DirectionPin到底该是什么电平才会转
2,从代码看,PulsePin输出的是占空比50%的方波,先试试直接输出高或低,看电机能不能动,可能是占空比不足以启动电机。