Guest User

Untitled

a guest
May 20th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. int motorPin[4] = {6, 8, 10, 12};
  2. int ccw[8][4] =
  3. {
  4. {HIGH, LOW, LOW, HIGH},
  5. {LOW , LOW, LOW, HIGH},
  6. {LOW , LOW, HIGH, HIGH},
  7. {LOW , LOW, HIGH, LOW},
  8. {LOW , LOW, HIGH, LOW},
  9. {LOW , HIGH, HIGH, LOW},
  10. {HIGH, HIGH, LOW , LOW},
  11. {HIGH, LOW, LOW , LOW}
  12. };
  13.  
  14. long unsigned T1, T2;
  15. long unsigned ip, np, npMin;
  16. double dt, t, phi, phinow, dphi;
  17. void setup() {
  18.  
  19. // constantes
  20. double inch2cm = 2.54; // 1 pouce = 2.54 cm
  21.  
  22. // moteur
  23. int ppr = 4096; // inpulsions par revolution (reduction = 64)
  24.  
  25. // geometrie
  26. double tpi; // pas par pouce
  27. double beam; // charnière - vis
  28. double y0; // depassement de vis initial en cm
  29. double y1; // depassement de vis final en cm
  30.  
  31. tpi = 25.4;
  32. beam = 17.75;
  33. y0 = 19.5;
  34. y1 = 1.0;
  35. phi = atan2(195, 177.5)*180/3.14159265; //angle 0 en deg
  36.  
  37. np = ((y0-y1)/inch2cm)*tpi*ppr; // impulsions de y0 à y1
  38. ip = 0; // conpteur d'impulsions
  39.  
  40. // pin moteur en sortie
  41. for (int j = 0; j < 4; j++)
  42. pinMode(motorPin[j], OUTPUT);
  43. analogReference(DEFAULT);
  44.  
  45. T1 = millis(); // temps en µs, ms
  46. T2 = micros();
  47. }
  48.  
  49. void loop(){ //--------------------------------------------------------------------------------
  50. Serial.begin(9600);
  51. Serial.println(np);
  52.  
  53. while (ip <= np) {
  54. int ic = ip % 8; // utilise une ligne de la matrice a chaque pas, modulo 8  / We use one matrix line per step
  55.  
  56. // stepping
  57. t = 1000000*dt;
  58. Serial.println("zone 1 pass"); //----- ZONE 1
  59. while (micros() > T2+t){
  60. T2 = micros();
  61. Serial.println("zone 2 pass"); //----- ZONE 2
  62. for (int j = 0; j < 4; j++) {
  63. digitalWrite(motorPin[3-j], ccw[ic][j]);
  64. }
  65. }
  66. ip = ip + 1;
  67. // Determine phinow et delta phi
  68.  
  69. phinow = atan2(195-(ip/512), 177.5)*180/3.14159265; // phi apres phasage en deg  
  70. dphi = phi-phinow;
  71.  
  72. // Determine dt
  73. dt = dphi*86164.1/360; //temps que met la terre pour effectuer dphi / Time the earth take to rotate dphi
  74.  
  75. //affichage
  76. while (millis() > T1+500){
  77. T1 = millis();
  78. Serial.print("ip = ");
  79. Serial.println(ip);
  80. Serial.print("dphi = ");
  81. Serial.println(dphi);
  82. Serial.print("dt= ");
  83. Serial.println(dt);
  84. Serial.print("phinow= ");
  85. Serial.println(phinow);
  86. Serial.print("phi= ");
  87. Serial.println(phi);
  88. Serial.println(" ");
  89. }
  90. phinow = phi;
  91. }
  92. }
Add Comment
Please, Sign In to add comment