求助 我的步进电机不转
我用Arduino2560连接步进电机驱动M420B控制步进电机滑台,用位移传感器检测位置。可是我编好程序步进电机只运行一步。我哪里出错了。const int PUL = 13;
const int DIR = 12;
const int ENA = 11;
long delta;
long dt1;
long dt; float vol; float t,t_1;
volatile float v = 0, v_1, v_11;
unsigned long lasttime;
long unsigned mm;
int i = 2000;
int temp;
float ss;
int target_position; float old_position;float current_position;
int s_acc, s_dec;
boolean flag;
void setup()
{
pinMode(PUL, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(ENA, OUTPUT);
Serial.begin(9600);
lasttime = 0;
//**************************理想速度曲线**************************//
if (current_position < -200) {
t_1 = 400; v_1 = 2500;
}
if (current_position > 200) {
t_1 = -400; v_1 = -2500;
}
else {
t_1 = -80000/current_position; v_1 = -12.5*current_position;
}
/********************************************************************/
}
void loop() {
//**************************检测位置**************************//
int V1 = analogRead(A0);
vol = V1 * (5.0 / 1023.0) * 1000;
current_position = 270 * vol / 4690;
current_position -= 120;
current_position = round(current_position / 0.3);
//if (current_position == ss) {
// ss = current_position;
//}
//else {
// Serial.println(current_position);
// ss = current_position;
//}
/********************************************************************/
v_1 = -12.5*(current_position + sgn(v)); //下一拍的理想速度
int f = sgn(v-v_1); float new_position = round(-v/12.5);
v_11 = -12.5 * (new_position + f);//下一拍的期望速度
if ((v_11-v_1) * (v-v_1) < 0) {
mm = micros();
v = v_1;
dt = round(1000000/v);
dt1 = round(dt/2);
digitalWrite(DIR, LOW);
digitalWrite(ENA, HIGH);
delta = mm - lasttime;
if (delta < dt1) {
digitalWrite(PUL, LOW);
}
else if (delta < dt) {
digitalWrite(PUL, HIGH);
}
else {
lasttime = mm;
}
}
else if (v_11 * v < 0) {
v = 0;
// digitalWrite(ENA, LOW);
}
else {
mm = micros();
v = v_11;
dt = round(1000000/v);
dt1 = round(dt / 2);
digitalWrite(DIR, LOW);
digitalWrite(ENA, HIGH);
delta = mm - lasttime;
if (delta < dt1) {
digitalWrite(PUL, LOW);
}
else if (delta < dt) {
digitalWrite(PUL, HIGH);
}
else {
lasttime = mm;
}
}
}
int sgn(float x) {
if (x > 0) return 1;
else if (x < 0) return -1;
else return 0;
} 求大神:'(:'(
页:
[1]