Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха. |
26.09.2016, 00:27
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от omercury
|
Ну и как они?
(жаль, что опторазвязка не по всем линиям, но это исправимо и по скорости тот же LPT)
Я, кстати, серьёзно.
|
Работают!
Если до этого станок работал с LPT, то замечаешь, что реакция на нажатие в программе MACH кнопок управления передвижением происходит с некоторой задержкой.
|
|
|
|
26.09.2016, 00:32
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от AR_Favorit
|
Маловато знаешь. В промышленных контроллерах частенько встречается использование оптронов в гальванически связанных (через питание или землю) цепях. Как думаешь, зачем?
|
Наверное чтобы ракеты и самолеты делать.
|
|
|
|
26.09.2016, 00:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от akegor
|
Надо искать женщину. "Компро-мисс" называется
|
на другую не нарвитесь - смеху-то будет
|
|
|
|
26.09.2016, 00:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от jump
|
на другую не нарвитесь - смеху-то будет
|
Компромиссис? ((с) Довлатов)
Или просто без "м"?
|
|
|
|
26.09.2016, 00:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от ALEGYR
|
Наверное чтобы ракеты и самолеты делать.
|
Неа. Попробуй еще раз.
|
|
|
|
26.09.2016, 00:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от verdana
|
Просто сделать станок, это скучно и неинтересно.
|
Просто, значит просто.
|
|
|
|
26.09.2016, 00:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от ALEGYR
|
Работают!
Если до этого станок работал с LPT, то замечаешь, что реакция на нажатие в программе MACH кнопок управления передвижением происходит с некоторой задержкой.
|
Ага...
Значит на концевики тоже будут реагировать с опозданием. Хреново.
Не, я своё.
|
|
|
|
26.09.2016, 00:45
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Сообщение от jump
|
ТС заикнулся о спиральной интерполяции на меге - хочу лицезреть и точка!
|
Вот тебе кусок реальной программы для меги, который выполняет движение по окружности против часовой стрелки. В нем переменная "theta" как раз и определяет сколько кругов надо сделать.
Цитата:
|
// ************************************************** ********************************
void arc_CCW(float cx,float cy,float x,float y,float dir)
// ************************************************** ********************************
{
centr_arc_x = carent_Pos_X + cx * step_for_X; // определяем координату "X" центра дуги
centr_arc_y = carent_Pos_Y + cy * step_for_Y; // определяем координату "Y" центра дуги
end_arc_x = x * step_for_X; // определяем координату "X" конца дуги в шагах
end_arc_y = y * step_for_Y; // определяем координату "Y" конца дуги в шагах
delta_X = end_arc_x - centr_arc_x;
delta_Y = end_arc_y - centr_arc_y;
radius = sqrt(cx*cx + cy*cy); // определяем величину радиуса дуги в ММ
step_radius = radius * step_for_X; // определяем величину радиуса дуги в ШАГАХ
step_cx = abs(cx * step_for_X); // определяем длину перемещения по оси (в шагах)
step_cy = abs(cy * step_for_X); // определяем длину дуги (в шагах)//для отладки
step_temp_radius = step_radius; //
// определяем угол начала дуги
angle1 = atan2(cy,cx);
angle1 = PI + angle1;
Set_arc_mode(angle1);
arc_mode_1 = arc_mode_ ;
// определяем угол окончания дуги
angle2 = atan2(delta_Y,delta_X);
if (delta_Y ‹ 0){angle2 = 2*PI + angle2;}
Set_arc_mode(angle2);
arc_mode_2 = arc_mode_ ;
// определяем количество секторов в дуге
theta = angle2 - angle1;
if(theta ‹ 0){theta = 2*PI + theta ;}
Set_arc_mode(theta);
namber_arc_mode = arc_mode_ ;
// определяем количество шагов в дуге
// длина окружности =PI*2.0*radius;
// длина дуги len=theta*circ/(PI*2.0);
len = abs(theta) * step_radius ; // определяем длину дуги (в шагах)
Delta_Move = len ; //
Serial.print(" Delta_Move = "); Serial.println(Delta_Move); //для отладки
motor_enable() ;
max_count_Acceleration = max_count_Acceleration_X ;
INIT_Move_X_Y();
gradus_theta = (180*theta)/PI; //для отладки
if (gradus_theta ‹ 0.9){end_case = true; end_arc = true ;}
else {end_case = false; // сбрасываем флаг окончания сектора
end_arc = false ;} // сбрасываем флаг окончания дуги
ERROR_Pos_X = 0 ;
ERROR_Pos_Y = 0 ;
arc_mode = arc_mode_1 ;
for (int mode=0; mode ‹= namber_arc_mode ; mode++){
do{
switch (arc_mode) {
case 1: //выполняется, если дуга начинается в первом квадранте с начальным углом НЕ больше 45 градусов
digitalWrite( Y_DIR_PIN, HIGH ); digitalWrite( X_DIR_PIN, HIGH ); step_cy = step_cy + 1; carent_Pos_Y = carent_Pos_Y + 1 ;
if (step_temp_radius ›= step_radius) { STOP_MOTOR_X() ; step_cx = step_cx - 1; carent_Pos_X = carent_Pos_X - 1 ; }
if (step_cx ‹= step_cy) {end_case = true; } break;
case 2: //выполняется, если дуга начинается в первом квадранте с начальным углом больше 45 градусов
digitalWrite( Y_DIR_PIN, HIGH ); digitalWrite( X_DIR_PIN, LOW ); step_cx = step_cx - 1; carent_Pos_X = carent_Pos_X - 1 ;
if (step_temp_radius ‹= step_radius) { STOP_MOTOR_X() ; step_cy = step_cy + 1; carent_Pos_Y = carent_Pos_Y + 1 ; }
if (step_cx ‹= 0) {end_case = true; } break;
case 3: //выполняется, если дуга начинается во втором квадранте с начальным углом НЕ больше 135 градусов
digitalWrite( Y_DIR_PIN, HIGH ); digitalWrite( X_DIR_PIN, LOW ); step_cx = step_cx + 1; carent_Pos_X = carent_Pos_X - 1 ;
if (step_temp_radius ›= step_radius) { STOP_MOTOR_Y() ; step_cy = step_cy - 1; carent_Pos_Y = carent_Pos_Y - 1 ; }
if (step_cy ‹= step_cx) {end_case = true; } break;
case 4: //выполняется если дуга начинается во втором квадранте с начальным углом больше 135 градусов
digitalWrite( Y_DIR_PIN, LOW ); digitalWrite( X_DIR_PIN, LOW ); step_cy = step_cy - 1; carent_Pos_Y = carent_Pos_Y - 1 ;
if (step_temp_radius ‹= step_radius) { STOP_MOTOR_Y() ; step_cx = step_cx + 1; carent_Pos_X = carent_Pos_X - 1 ; }
if (step_cy ‹= 0) {end_case = true; } break;
case 5: //выполняется если дуга начинается в третьем квадранте с начальным углом НЕ больше 225 градусов
digitalWrite( Y_DIR_PIN, LOW ); digitalWrite( X_DIR_PIN, LOW ); step_cy = step_cy + 1; carent_Pos_Y = carent_Pos_Y - 1 ;
if (step_temp_radius ›= step_radius) { STOP_MOTOR_X() ; step_cx = step_cx - 1; carent_Pos_X = carent_Pos_X + 1 ; }
if (step_cy ›= step_cx) {end_case = true; } break;
case 6://выполняется если дуга начинается в третьем квадранте с начальным углом больше 225 градусов
digitalWrite( Y_DIR_PIN, LOW ); digitalWrite( X_DIR_PIN, HIGH ); step_cx = step_cx - 1; carent_Pos_X = carent_Pos_X + 1 ;
if (step_temp_radius ‹= step_radius) { STOP_MOTOR_X() ; step_cy = step_cy + 1; carent_Pos_Y = carent_Pos_Y - 1 ; }
if (step_cx ‹= 0) {end_case = true; } break;
case 7: //выполняется если дуга начинается в четвертом квадранте с начальным углом НЕ больше 315 градусов
digitalWrite( Y_DIR_PIN, LOW ); digitalWrite( X_DIR_PIN, HIGH ); step_cx = step_cx + 1; carent_Pos_X = carent_Pos_X + 1 ;
if (step_temp_radius ›= step_radius) { STOP_MOTOR_Y() ; step_cy = step_cy - 1; carent_Pos_Y = carent_Pos_Y + 1 ; }
if (step_cx ›= step_cy) {end_case = true; } break;
case 8: //выполняется если дуга начинается в четвертом квадранте с начальным углом больше 315 градусов
digitalWrite( Y_DIR_PIN, HIGH ); digitalWrite( X_DIR_PIN, HIGH ); step_cy = step_cy - 1; carent_Pos_Y = carent_Pos_Y + 1 ;
if (step_temp_radius ‹= step_radius) { STOP_MOTOR_Y() ; step_cx = step_cx + 1; carent_Pos_X = carent_Pos_X + 1 ; }
if (step_cy ‹= 0) {end_case = true; } break;
}
// ----------------------------------------------------------------------------------------------------
STEP_arc() ;
// ----------------------------------------------------------------------------------------------------
}
while ((end_case == false)&&(end_arc == false)); //
end_case = false ;
if (namber_arc_mode ›= mode ){ //если число пройденых секторов меньше общего числа секторов в дуге, то
arc_mode = arc_mode+1; // увеличиваем номер обрабатываемого сектора
if (arc_mode › 8 ){ arc_mode = 1;} } //устанавливаем номер первого сектора
}
Xa = carent_Pos_X/step_for_X;
Ya = carent_Pos_Y/step_for_Y;
iput_X = x ;//
iput_Y = y ;//
DEBUG();//
}
|
|
|
|
|
26.09.2016, 00:47
|
|
Заблокирован
Регистрация: 16.03.2005
Сообщений: 5,918
Сказал спасибо: 560
Сказали Спасибо 9,145 раз(а) в 2,892 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
|
|
|
|
26.09.2016, 00:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: Объясните лоху про параллельный порт
Последний раз редактировалось jump; 26.09.2016 в 00:59.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:46.
|
|