дешифратор step/dir
- Войдите на сайт для отправки комментариев
Здравствуйте, занимаюсь станком чпу и столкнулся с тем что программа выдаёт сигнал в формате степ/дир, а контроллера под него нету, но есть лишняя ардуино.
Сам я совсем новичёк и слабо понимаю код и не смогу его создать, хотя он в данном случае простой насколько я понимаю.
Собственно задача такая, есть 4 входа (по 2 на каждый канал) и 8 выходов (по 4 на канал), эти каналы независимы друг от друга.
Алгоритм работы одного канала: при подаче импульсов на вход степ, происходит поочерёдное переключение логической единицы на выходах (1-2-3-4-1-2-3-4..), при подаче логической единицы в этот момент на вход дир, переключение должно пойти в обратную сторону.
На выходе будут стоять ключи для управления униполярными двигателями и в итоге должен получится обычный контроллер на два канала.
Надеюсь что кто нибудь сможет помочь с прошивкой для такого.
Забыл написать, у меня ардуино уно.
Мдааа сам я ничего не понимаю, но понимаю что код просиой и на форуме просто толпа ничем не занятых людей, которые пишут код для всех желающих.
А разве форумы несозданы для того что бы люди помогали друг другу?
У меня самого форум по самодельным двс, я всегда помогаю новичкам, так как для меня это просто и быстро, а новичку придётся вникать в проблему часами а то и сутками за литературой, это конечно хорошо для саморазвития, но всё таки не рационально, когда есть те кто может помочь.
Помогать и сделать за вас эт разные вещи на мой взгляд. Что бы кто то сделал за вас, этому кому-то нужен как минимум какой то интерес в этом. Имхо
Нашёл то что мне надо на японском сайте http://spinelify.blog.fc2.com/blog-entry-33.html
Правда там под arduino mega 2560 и 3 канала, может кто доработать прошивку под уно или подсказать как это сделать?
Японский текст черег гугл переводчик если что легко читается.
Час пытался понять хотя бы распиновку, но так и не понял.. вот на фото выходу подключены в разьём PWM, но ведь там нет 17 контакта, на этом месте земля, если же 17 это ножка самой меги, то как тогда становится под вопросом нога 2 и 3, это ведь сигналные выводы TX RX и их вроде как нельзя для такого использовать...
/*MP4401 FETモジュールを利用したMACH3用自作基板のArdunio用デコードプログラム Dsub25Pinからのstep/dia信号をArduinoで受信し、MP4401のゲートに出力する。 ステッピングモータはユニポーラ、XYZ軸用の3つを接続。 0~5はSTEP/dia×3個の入力、6~17はゲート制御(4PIN*3=12PIN),18&19は空き 本プログラムはx軸とy軸に外部割り込み処理をしているためパルスの取りこぼしは無いはず。 z軸はloopによる高速トレースで信号を読むため、取りこぼしの可能性がある。machのパルス幅は大きめに設定すること */ #define X1 17//モータの接続ポート #define Y1 14 #define lX1 16 #define lY1 15 #define X2 13 #define Y2 10 #define lX2 12 #define lY2 11 #define X3 9 #define Y3 6 #define lX3 8 #define lY3 7 #define X_step 3 #define X_dia 4 #define Y_step 2 #define Y_dia 5 #define Z_step 0 #define Z_dia 1 //---------------------------------------------------------------------------------------------------------*/ //setup------------------------------------------------------------------------ void setup() { pinMode(X1,OUTPUT); pinMode(lX1,OUTPUT); pinMode(Y1,OUTPUT); pinMode(lY1,OUTPUT); pinMode(X2,OUTPUT); pinMode(lX2,OUTPUT); pinMode(Y2,OUTPUT); pinMode(lY2,OUTPUT); pinMode(X3,OUTPUT); pinMode(lX3,OUTPUT); pinMode(Y3,OUTPUT); pinMode(lY3,OUTPUT); pinMode(18,INPUT); pinMode(19,INPUT); pinMode(X_dia,INPUT_PULLUP); pinMode(X_step,INPUT_PULLUP); pinMode(Y_dia,INPUT_PULLUP); pinMode(Y_step,INPUT_PULLUP); pinMode(Z_dia,INPUT_PULLUP); pinMode(Z_step,INPUT_PULLUP); //全軸動作テスト driveXp(); driveYp(); driveZp(); delay(1000); driveXp(); driveYp(); driveZp(); delay(1000); driveXp(); driveYp(); driveZp(); delay(1000); driveXp(); driveYp(); driveZp(); delay(1000); //外部割込み開始 attachInterrupt(1, X_FALLING, FALLING); attachInterrupt(0, Y_FALLING, FALLING); } void X_FALLING(){ if(digitalRead(X_dia))driveXp(); else driveXm(); } void Y_FALLING(){ if(digitalRead(Y_dia))driveYm(); else driveYp(); } //main------------------------------------------------------------------------- void loop(){ /* if(!digitalRead(Z_step)){//LOWなら if(digitalRead(Z_dia)){ driveZp(); } else{ driveZm(); } while(!digitalRead(Z_step)){ } } */ } byte t1=1; //x軸の回転ステップ位置の保持 byte t2=1;//y軸の回転ステップ位置の保持 byte t3=1;//z軸の回転ステップ位置の保持 //2層励磁------------ void driveXp(){//pはプラスの意味 switch(t1){//2相励磁 case 1: digitalWrite(lY1,LOW); digitalWrite(X1,HIGH); t1=2; break; case 2: digitalWrite(X1,LOW); digitalWrite(Y1,HIGH); t1=3; break; case 3: digitalWrite(Y1,LOW); digitalWrite(lX1,HIGH); t1=4; break; case 4: digitalWrite(lX1,LOW); digitalWrite(lY1,HIGH); t1=1; break; } } void driveXm(){//mはマイナスの意味 switch(t1){ case 1: digitalWrite(lY1,LOW ); digitalWrite(lX1,HIGH); t1=4; break; case 2: digitalWrite(X1,LOW); digitalWrite(lY1,HIGH); t1=1; break; case 3: digitalWrite(Y1,LOW); digitalWrite(X1,HIGH); t1=2; break; case 4: digitalWrite(lX1,LOW); digitalWrite(Y1,HIGH); t1=3; break; } } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void driveYp(){ switch(t2){ case 1: digitalWrite(lX2,LOW); digitalWrite(X2,HIGH); t2=2; break; case 2: digitalWrite(lY2,LOW); digitalWrite(Y2,HIGH); t2=3; break; case 3: digitalWrite(X2,LOW); digitalWrite(lX2,HIGH); t2=4; break; case 4: digitalWrite(Y2,LOW); digitalWrite(lY2,HIGH); t2=1; break; } } void driveYm(){ switch(t2){ case 1: digitalWrite(lY2,LOW ); digitalWrite(Y2,HIGH); t2=4; break; case 2: digitalWrite(X2,LOW); digitalWrite(lX2,HIGH); t2=1; break; case 3: digitalWrite(Y2,LOW); digitalWrite(lY2,HIGH); t2=2; break; case 4: digitalWrite(lX2,LOW); digitalWrite(X2,HIGH); t2=3; break; } } void driveZp(){ switch(t3){ case 1: digitalWrite(X3,HIGH); digitalWrite(lY3,LOW); t3=2; break; case 2: digitalWrite(Y3,HIGH); digitalWrite(X3,LOW); t3=3; break; case 3: digitalWrite(lX3,HIGH); digitalWrite(Y3,LOW); t3=4; break; case 4: digitalWrite(lY3,HIGH); digitalWrite(lX3,LOW); t3=1; break; } } void driveZm(){ switch(t3){ case 1: digitalWrite(lX3,HIGH); digitalWrite(lY3,LOW); t3=4; break; case 2: digitalWrite(lY3,HIGH); digitalWrite(X3,LOW); t3=1; break; case 3: digitalWrite(X3,HIGH); digitalWrite(Y3,LOW); t3=2; break; case 4: digitalWrite(Y3,HIGH); digitalWrite(lX3,LOW); t3=3; break; } } //----------------------------------------------------------------------------Почему нельзя? И как у вас пин 17 стал землей?
да про 17 ногу я чото не то сказал... однако не сходится, на фото совершенно другие пины используются для выхода http://blog-imgs-56.fc2.com/s/p/i/spinelify/IMG_7061.jpg
А не нужно смотреть на фото. Читайте описание в программе. Там все написано. Входящие пины и исходящие. Что вам еще нужно?
А как входы и выходы под ардуино уно переименовать? Для дижитал просто цифру, а для аналога перед ней буква А ставить?
И зачем там 18 и 19 вывод, можно ли их удалить для сохранения 3 каналов?
Я не вижу 18 и 19. Я вижу 5 входов и 12 выходов. И они все цифровые.
А по моему тут таки 6 входов, либо я считать разучился
И этот отрывок кода вроде как тоже обозначает какие то пины
Ну 6 входов, очепятался. 18 и 19 нигде не используют.
Можете заменить их на любые какие вам нравиться.
3 раза менял, признаков жизни не подаёт вообще
А как должны выглядеть признаки жизни?
Решил проблему спец прошивкой под старую версию программы Grbl
Решил проблему спец прошивкой под старую версию программы Grbl
Уважаемый motorist828, как можно с Вами связаться? Есть небольшой вопрос.
Есть и поновее разные микросхемы.... А есть готовые платы, их там 5 штук. На спор- никогда сами на сделаете такое
http://www.banggood.com/3D-Printer-Kit-RAMPS-1_4-Control-Board-5Pcs-4988...
0