为什么下面这段程序小车的电机没有电流:#include "stm32f10x.h" // Device header #include "PWM.h" void Motor_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); PWM_Init(); } void Motor_SetLeftSpeed(int16_t Speed) { if (Speed >0) { GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); PWM_SetCompare2(Speed); } else if(Speed==0){ GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_1); PWM_SetCompare2(Speed); }else{ GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_1); PWM_SetCompare2(-Speed); } } void Motor_SetRightSpeed(int16_t Speed) { if (Speed >0) { GPIO_SetBits(GPIOA, GPIO_Pin_10); GPIO_ResetBits(GPIOA, GPIO_Pin_11); PWM_SetCompare3(Speed); } else if(Speed==0){ GPIO_SetBits(GPIOA, GPIO_Pin_10); GPIO_SetBits(GPIOA, GPIO_Pin_11); PWM_SetCompare3(Speed); }else{ GPIO_ResetBits(GPIOA, GPIO_Pin_10); GPIO_SetBits(GPIOA, GPIO_Pin_11); PWM_SetCompare3(-Speed); } }
时间: 2023-09-13 11:06:59 浏览: 67
根据您提供的代码,问题可能出在以下几个方面:
1. 引脚配置错误:在函数`Motor_Init()`中,您初始化了GPIOB的引脚但在后续的控制函数中使用的是GPIOA的引脚。请确认您的电机控制引脚是否正确连接,并且与代码中使用的引脚一致。
2. PWM配置错误:在控制函数中,您使用了`PWM_SetCompare2()`和`PWM_SetCompare3()`函数来设置PWM的占空比,但是在代码中没有提供这些函数的实现。请确保PWM模块已经正确初始化,并且这些函数能够正确设置占空比。
3. 控制信号逻辑错误:根据代码逻辑,当`Speed`为正数时,应该设置一个引脚为高电平,另一个引脚为低电平。当`Speed`为负数时,应该设置相反的引脚状态。当`Speed`为0时,两个引脚应该设置为相同的电平。请确保这些逻辑与您的实际需求一致。
建议您仔细检查以上几个方面,确保引脚连接正确、PWM模块正常工作,并且控制信号逻辑正确。如果仍然无法解决问题,请提供更多关于硬件连接和初始化的信息,以便更好地帮助您排查问题。
相关问题
#include<AT89X52.H> #include<ZY-4WD_PWM.H
这是一段8051单片机的程序代码,包含了头文件AT89X52.H和ZY-4WD_PWM.H。其中AT89X52.H是针对AT89X52单片机的头文件,可能包含了一些寄存器的定义、中断向量表等信息;ZY-4WD_PWM.H则可能是针对某种PWM电机控制模块的头文件,包含了一些控制PWM电机的函数定义和常量定义等信息。该程序可能是控制一个四驱小车的程序,使用PWM电机控制模块控制小车的运动。
QT实现小车动画#ifndef CARDEMONSTRATION_H #define CARDEMONSTRATION_H #include <QWidget> #include "staticimage.h" #include <QTimer> #include <synchapi.h> class cardemonstration : public QWidget { Q_OBJECT public: explicit cardemonstration(QWidget *parent = nullptr); ~cardemonstration(); void paintEvent(QPaintEvent *event); void move_onestep(); private: signals: }; #endif // CARDEMONSTRATION_H
您好!感谢您的提问。根据您给出的代码,我看到您正在使用Qt实现一个小车动画。这是一个继承自QWidget的类,其中包含了一些成员函数和成员变量。
在这个类中,您重写了paintEvent函数,用于绘制小车的图像。您还定义了一个move_onestep函数,用于控制小车的移动。
在Qt中,QWidget是一个基础类,用于创建用户界面的窗口。您可以在paintEvent函数中使用QPainter绘制小车的图像。然后,在move_onestep函数中,您可以使用QTimer或其他方法控制小车的移动。
如果您有更具体的问题或需要进一步的帮助,请随时告诉我。