9.3.2 电动机速度测量与转换,速度较大,与视频教程中不符
-
-
@ROSER 给出完整代码
-
@小鱼 ```
#include <Arduino.h>
#include <Esp32McpwmMotor.h>
#include <Esp32PcntEncoder.h>// 创建一个数组用于存储两个编码器
Esp32PcntEncoder encoders[2];
Esp32McpwmMotor motor;
//用于存储上一次读取的编码器数值ticks
int64_t last_ticks[2] = {0,0};
//用于存储上一次读取的编码器数据(前后两次的差值)
int16_t delta_ticks[2] = {0,0};
//用于存储上一次更新电机速度的时间
int64_t last_updateTime = 0;
//用于存储当前电机速度
float current_speed[2] = {0,0};
void setup()
{
// 1.初始化串口
Serial.begin(115200); // 初始化串口通信,设置通信速率为115200
// 将电机0连接到引脚22和引脚23
motor.attachMotor(0, 22, 23);
// 将电机1连接到引脚12和引脚13
motor.attachMotor(1, 12, 13);
// 2.设置编码器
encoders[0].init(0, 32, 33); // 初始化第一个编码器,使用GPIO 32和33连接
encoders[1].init(1, 26, 25); // 初始化第二个编码器,使用GPIO 26和25连接
// 3.设置电机速度
motor.updateMotorSpeed(0, 100);
motor.updateMotorSpeed(1, 100);
}void loop()
{
delay(10); // 等待10毫秒
int16_t dt = millis()-last_updateTime;
//计算编码器当前和上一次读取的数值差
delta_ticks[0] = encoders[0].getTicks()-last_ticks[0];
delta_ticks[1] = encoders[1].getTicks()-last_ticks[1];
//计算速度,0.10805是电机每个脉冲的前进距离
current_speed[0] = (delta_ticks[0]*0.105805)/dt;
current_speed[1] = (delta_ticks[1]*0.105805)/dt;
//为了下次还可以正常的计算速度
last_ticks[0] = encoders[0].getTicks();
last_ticks[1] = encoders[1].getTicks();
last_updateTime = millis();// 读取并打印两个编码器的计数器数值 speed1=1073741824, speed2=1071344822 Serial.printf("speed1=%d, speed2=%d\n", current_speed[0], current_speed[1]); //Serial.printf("tick1=%d, tick2=%d\n", encoders[0].getTicks(), encoders[1].getTicks());
}
这是完整代码...
-
-
@小鱼
明白了,谢谢~ C语言跟C++还是好大差别的,记录一下。
https://www.cnblogs.com/carsonzhu/articles/5255300.html