Хочу собрать маленький чпу. Как всегда решил сэкономить и купил DccDuino Uno. Драйвера родные не подошли. подошел CH341SER.ZIP найденный в интернете. Загружаю прошивку с сайта http://www.ecnc.ru (который всем известен), а она не как не реагирует на команды из монитора порта. Прошивка из примеров работает- двигателя крутятся хоть и как то странно. Я просто еще не знаю как они должны крутиться.
Вот прошивка с сайта:
- Код: Выделить всё • Развернуть
int motorPins[3][4] = {{2, 3, 4, 5},{6, 7, 8, 9},{10, 11, 12, 13}};
int count;
int count2[3] = {0,0,0};
int delayTime;
int val = 0;
int rot=0;
int incomingByte = 0;
int sign=1;
//Процедура настройки прошивки
void setup() {
int i;
Serial.begin(9600);
for (i=0; i<3; i++) {
for (count = 0; count < 4; count++) {
pinMode(motorPins[i][count], OUTPUT); //установка режима работы цифровых pin'ов Ардуино
}
}
delayTime=3; //задержка между шагами 3 мс (2 мс - время реакции ШД на подачу напряжения)
}
//Поворот двигателя с номерм sm на один шаг вперёд
void moveForward(int sm) {
if ((count2[sm] == 0) || (count2[sm] == 1)) {
count2[sm] = 16;
}
count2[sm]>>=1;
for (count = 3; count >= 0; count--) {
digitalWrite(motorPins[sm][count], count2[sm]>>count&0x01);
}
}
//Поворот двигателя с номерм sm на один шаг назад
void moveBackward(int sm) {
if ((count2[sm] == 0) || (count2[sm] == 1)) {
count2[sm] = 16;
}
count2[sm]>>=1;
for (count = 3; count >= 0; count--) {
digitalWrite(motorPins[sm][3 - count], count2[sm]>>count&0x01);
}
}
//Одновременный поворот двигателей 0, 1, 2 на x, y, z шагов соответственно
void MoveSM(long x, long y, long z) {
long c[3], c2[3];
double c1[3], d[3];
long m, i;
boolean flg;
c[0] = x;
c[1] = y;
c[2] = z;
m = 1;
for (i=0; i<3; i++) {
if (m < abs(c[i])) m = abs(c[i]);
}
for (i=0; i<3; i++) {
c1[i] = 0;
d[i] = 1.0 * c[i] / m;
c2[i] = 0;
}
flg = false;
for (i=0; i<3; i++) {
if (abs(c1[i]) < abs(c[i])) flg=true;
}
while (flg) {
flg=false;
for (i=0; i<3; i++) {
if (abs(c1[i]) < abs(c[i]))
c1[i] += d[i];
if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
if (c[i]>0) {
c2[i]++;
moveForward(i);
} else {
c2[i]--;
moveBackward(i);
}
}
if (abs(c1[i]) < abs(c[i])) flg=true;
}
delay(delayTime);
}
}
//Основной цикл
void loop() {
if (Serial.available() > 0) { //Пришла команда
long c[3]={0,0,0};
int i;
sign=1;
i=0;
incomingByte = Serial.read();
while (incomingByte!=';') { //Читаем входящую строку, признак конца строки знак "точка с запятой"
if (c[i]==0) {
if (incomingByte=='-')
sign=-1;
}
if (incomingByte==',') {
c[i]*=sign;
sign=1;
i++;
} else if (incomingByte>='0' && incomingByte<='9') {
c[i]=c[i]*10+incomingByte-'0';
}
while (Serial.available() == 0) {
delay(2);
}
incomingByte = Serial.read();
}
c[i]*=sign;
MoveSM(c[0],c[1],c[2]); //Вращаем двигатели на заданное число шагов
Serial.println("OK"); //Отправляем компьютеру сообщение "OK", значит можно высылать новую команду
}
else
delay(100); //Если ничего не пришло, ждём 1/10 секуды.
}
А эта из примеров:
- Код: Выделить всё • Развернуть
/*
Stepper Motor Control - one revolution
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor should revolve one revolution in one direction, then
one revolution in the other direction.
Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
прошу помощи. заранее спасибо!