小车PWM调速-串口控制

小车PWM调速-串口控制

串口控制调速,即通过串口修改speed的值,

1.将上节PWM调速用到的定时器0源文件和头文件引入进来,工程文件如下

mian.c:主函数

Motor.c:小车前进、后退、左转、右转和停止的函数

Delay.c:延时函数

Timer0.c:定时器0初始化以及中断处理(PWM调速)

Uart.c:串口初始化以及中断处理(接收串口信息)

在这里插入图片描述

2.只需在串口中断处理函数中判断接收到的串口信号,如果是调速信号则改变speed的值即可

/**
  * @brief 串口中断处理函数
  * @param 无
  * @retval无
  */
void Uart_Rountine() interrupt 4
{
	static unsigned int i = 0;
	unsigned char temp;
	if(RI)
	{
		RI = 0;
		temp = SBUF;
		if(temp == 'F' || temp == 'B' || temp == 'L' || temp == 'R' || temp == 'S'||temp == 'Q'
			||temp == 'S'||temp == 'M')
		{
			i = 0;
		}
		rec[i++] = temp;
        //这里省略前进后退,左转右转的if语句……
        
		//接到到串口的快速指令Quick
		if(rec[0] == 'Q' && rec[1] == 'u')
		{
			speed = 35;
			i = 0;
			memset(rec,'\0',SIZE);
		}
		//接到到串口的中速指令Middle
		if(rec[0] == 'M' && rec[1] == 'i')
		{
			speed = 25;
			i = 0;
			memset(rec,'\0',SIZE);
		}
		//接到到串口的慢速指令Slow
		if(rec[0] == 'S' && rec[1] == 'l')
		{
			speed = 15;
			i = 0;
			memset(rec,'\0',SIZE);
		}
		if(i == SIZE){i = 0;}
	}
}

3.串口可以调速后,接上蓝牙模块,即可通过手机蓝牙助手控制小车调速

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个基于Arduino平台的二驱循迹小车PWM调速代码示例: ```c++ // 定义左右电机驱动引脚 #define LEFT_MOTOR_PIN1 5 #define LEFT_MOTOR_PIN2 6 #define RIGHT_MOTOR_PIN1 9 #define RIGHT_MOTOR_PIN2 10 // 定义左右电机PWM控制引脚 #define LEFT_MOTOR_PWM 3 #define RIGHT_MOTOR_PWM 11 // 定义循迹传感器引脚 #define SENSOR_PIN1 A0 #define SENSOR_PIN2 A1 #define SENSOR_PIN3 A2 #define SENSOR_PIN4 A3 #define SENSOR_PIN5 A4 // 定义调速变量 int leftSpeed = 0; int rightSpeed = 0; void setup() { // 配置电机驱动引脚为输出模式 pinMode(LEFT_MOTOR_PIN1, OUTPUT); pinMode(LEFT_MOTOR_PIN2, OUTPUT); pinMode(RIGHT_MOTOR_PIN1, OUTPUT); pinMode(RIGHT_MOTOR_PIN2, OUTPUT); // 配置电机PWM引脚为输出模式 pinMode(LEFT_MOTOR_PWM, OUTPUT); pinMode(RIGHT_MOTOR_PWM, OUTPUT); // 初始化串口 Serial.begin(9600); } void loop() { // 读取循迹传感器数据 int sensor1 = analogRead(SENSOR_PIN1); int sensor2 = analogRead(SENSOR_PIN2); int sensor3 = analogRead(SENSOR_PIN3); int sensor4 = analogRead(SENSOR_PIN4); int sensor5 = analogRead(SENSOR_PIN5); // 计算偏差值 int error = sensor1 * 1 + sensor2 * 2 + sensor3 * 3 + sensor4 * 2 + sensor5 * 1 - 1000; // 根据偏差值调整左右电机PWM占空比 leftSpeed = 100 - error * 0.2; rightSpeed = 100 + error * 0.2; // 限制PWM占空比范围 leftSpeed = constrain(leftSpeed, 0, 100); rightSpeed = constrain(rightSpeed, 0, 100); // 控制电机转速 analogWrite(LEFT_MOTOR_PWM, leftSpeed * 255 / 100); analogWrite(RIGHT_MOTOR_PWM, rightSpeed * 255 / 100); // 控制电机方向 if (leftSpeed > 0) { digitalWrite(LEFT_MOTOR_PIN1, HIGH); digitalWrite(LEFT_MOTOR_PIN2, LOW); } else { digitalWrite(LEFT_MOTOR_PIN1, LOW); digitalWrite(LEFT_MOTOR_PIN2, HIGH); } if (rightSpeed > 0) { digitalWrite(RIGHT_MOTOR_PIN1, HIGH); digitalWrite(RIGHT_MOTOR_PIN2, LOW); } else { digitalWrite(RIGHT_MOTOR_PIN1, LOW); digitalWrite(RIGHT_MOTOR_PIN2, HIGH); } // 打印调试信息 Serial.print("Error: "); Serial.print(error); Serial.print(", Left Speed: "); Serial.print(leftSpeed); Serial.print(", Right Speed: "); Serial.println(rightSpeed); // 延时一段时间 delay(20); } ``` 该代码中使用了循迹传感器读取数据,并根据偏差值调整左右电机PWM占空比,从而实现小车的循迹行驶。同时,还对PWM占空比范围进行了限制,并控制电机的转速和方向。最后,通过串口打印调试信息,方便调试和优化程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值