本帖最后由 bgsdd 于 2022-8-14 08:53 编辑
做了个激光测距模块控制电机动作,用的步进电机库,不论电机速度设置的多少,电机转速都一样,,是哪里的问题?激光测距模块是单独24V供电,单独输出0-5V电压模拟量,
24V和5V模拟量不用共地,0V接UNO-GND,5V接UNO-A0
#include <AccelStepper.h>//引用步进电机库
const int dir = 8; // 方向控制引脚
const int pul = 9; // 步进控制引脚
int val;//激光测距模块变量
int vall;
AccelStepper stepper1(1, pul, dir); //建立步进电机对象1
void setup() {
Serial.begin(9600);
pinMode(dir, OUTPUT);//步进电机端口输出模式,步进电机部分:
pinMode(pul, OUTPUT);
stepper1.setMaxSpeed(1000.0); // 设置电机最大速度300*这里无论是设置10还是10000,电机速度都不变
stepper1.setAcceleration(100); // 设置电机加速度
}
void loop() {
val = analogRead(A0);//定义测距模块接口A0并赋值给变量。步进电机部分:
val = map(val, 0, 1023, 0, 50);//减少激光测距模块输出跳动,降低灵敏度
vall = val * 400;//映射激光测距模块:量程200-600=400毫米,即0-5V=400毫米
//电机驱动脉冲200一圈,螺杆导程1204=4毫米,即200脉冲导轨直线运动4毫米,400毫米需要100*200=20000脉冲
//20000脉冲直线轨道运行400毫米,这样就和测距模块1毫米=轨道运行1毫米相对应
stepper1.moveTo(vall);//电机运行步数由激光测距模块1:1映射
stepper1.run();//电机运行
}
|