51小车关于PWM波的应用+代码

太君关于PWM波的见解

提到PWM波就让人联想到占空比,不错我认为占空比确实是PWM波的核心,看到这可别跑了。。。
我就讲讲我自己的理解:

原理:PWM是为了使某些原件的输出功率乘上某个系数从而调整原件的输出功率,但实际上好像只能缩小。

实现方法

因为我也初学现在只用过51单片机的定时器功能实现。。。
代码如图:
代码1
代码2
如果你采用我的代码请保证线要接的和我一样。
如果代码和接线无误,但是实现不了调速,检测使能端是否有问题。。。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的51单片机小车代码,让小车可以前进、后退、左转、右转、停止等基本操作: ``` #include<reg51.h> // 包含51单片机头文件 sbit ENA = P1^0; // 驱动电机A使能引脚 sbit ENB = P1^1; // 驱动电机B使能引脚 sbit IN1 = P1^2; // 驱动电机A控制引脚1 sbit IN2 = P1^3; // 驱动电机A控制引脚2 sbit IN3 = P1^4; // 驱动电机B控制引脚1 sbit IN4 = P1^5; // 驱动电机B控制引脚2 void delay(unsigned int n) // 延时函数 { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<125;j++); } void forward() // 前进函数 { IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; } void backward() // 后退函数 { IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 1; } void turn_left() // 左转函数 { IN1 = 0; IN2 = 1; IN3 = 1; IN4 = 0; } void turn_right() // 右转函数 { IN1 = 1; IN2 = 0; IN3 = 0; IN4 = 1; } void stop() // 停止函数 { IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; } void main() // 主函数 { ENA = 1; ENB = 1; while(1) { forward(); // 前进 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 backward(); // 后退 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 turn_left(); // 左转 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 turn_right(); // 右转 delay(500); // 延时500毫秒 stop(); // 停止 delay(100); // 延时100毫秒 } } ``` 这段代码中,我们使用了P1口的若干引脚来控制驱动电机A和B的运动,通过控制IN1~IN4引脚的高低电平来实现小车的前进、后退、左转、右转和停止等基本操作。为了让小车可以连续执行这些操作,我们在主函数中使用了一个无限循环来不断执行这些操作。同时,我们还使用了一个延时函数来控制每个操作的持续时间。 ### 回答2: 让51单片机小车跑起来的代码可以分为两个部分:电机控制部分和遥控信号接收部分。 电机控制部分的代码如下: ```C #include <reg52.h> sbit IN1 = P2^0; //电机IN1引脚连接到P2.0口 sbit IN2 = P2^1; //电机IN2引脚连接到P2.1口 sbit IN3 = P2^2; //电机IN3引脚连接到P2.2口 sbit IN4 = P2^3; //电机IN4引脚连接到P2.3口 void delay(unsigned int t) //延时函数 { unsigned int i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } void main() { while(1) { //小车向前行驶 IN1 = 1; IN2 = 0; IN3 = 1; IN4 = 0; delay(500); //延时500ms //小车停止 IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; delay(500); //延时500ms //小车向后行驶 IN1 = 0; IN2 = 1; IN3 = 0; IN4 = 1; delay(500); //延时500ms //小车停止 IN1 = 0; IN2 = 0; IN3 = 0; IN4 = 0; delay(500); //延时500ms } } ``` 遥控信号接收部分的代码可以根据实际情况选择不同的方式进行编写,例如通过红外遥控接收模块、蓝牙模块或者无线遥控模块来接收控制信号。具体的代码实现会根据所选用的遥控模块不同而有所差异。一般来说,遥控信号接收部分会读取遥控器发送的信号并将其转化为对应的电机控制信号,以实现小车的前进、后退、转向等动作。 以上代码仅为简单示例,实际应用中可能需要对电机控制部分进行更详细的设置和调整。此外,代码中的延时函数可以根据实际情况进行调整,以达到预期的效果。 ### 回答3: 51单片机小车跑起来的代码可以分为两部分,一部分是控制电机转动的代码,另一部分是控制小车运动的代码。 首先,我们需要配置51单片机相关的GPIO引脚的工作模式,将其设置为输出模式。然后,我们可以定义一些函数,例如forward()表示小车向前运动,backward()表示小车向后运动,left()表示小车向左转,right()表示小车向右转等。 接下来,编写控制电机转动的代码。对于双路电机驱动,一般使用L293D芯片或者直流电机驱动模块。我们可以使用PWM(脉冲宽度调制)技术来控制电机的速度,通过调整PWM的占空比来实现电机转速的控制。 在代码中,我们可以使用定时器来生成PWM信号,将其连接到电机驱动器上的控制端口。 最后,编写控制小车运动的代码。根据需要,我们可以将小车的运动控制代码编写成相应的函数,例如调用forward()函数使小车向前运动一段时间,然后调用left()函数使小车向左转等。在实际应用中,可以通过按键、遥控器等方式来触发相应的函数,实现对小车运动的控制。 以上是一个简单的描述,具体的代码实现需要根据具体的电路和功能需求进行设计。同时,还需要注意安全性,例如在操作电机时,需要考虑到电流、电压等参数的限制,以避免出现损坏或不安全的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值