5
5
#include " Utility.hpp"
6
6
#include " EPROMStore.hpp"
7
7
#include " Sidereal.cpp"
8
+ #include " Configuration_pins.hpp"
8
9
9
10
// mountstatus
10
11
#define STATUS_PARKED 0B0000000000000000
@@ -77,7 +78,7 @@ Mount::Mount(int stepsPerRADegree, int stepsPerDECDegree, LcdMenu* lcdMenu) {
77
78
_stepsPerRADegree = stepsPerRADegree;
78
79
#endif
79
80
#if DEC_DRIVER_TYPE != ULN2003_DRIVER
80
- _stepsPerDECDegree = stepsPerDECDegree * DEC_MICROSTEPPING ;
81
+ _stepsPerDECDegree = stepsPerDECDegree * DEC_SLEW_MICROSTEPPING ;
81
82
#else
82
83
_stepsPerDECDegree = stepsPerDECDegree;
83
84
#endif
@@ -445,17 +446,19 @@ void Mount::configureDECStepper(byte stepMode, byte pin1, byte pin2, int maxSpee
445
446
// configureRAdriver
446
447
// TMC2209 UART only
447
448
// ///////////////////////////////
448
- #if RA_DRIVER_TYPE == TMC2009_UART
449
+ #if RA_DRIVER_TYPE == TMC2209_UART
449
450
void Mount::configureRAdriver (HardwareSerial *serial, float rsense, byte driveraddress, int rmscurrent, int stallvalue)
450
451
{
451
452
_driverRA = new TMC2209Stepper (serial, rsense, driveraddress);
452
453
_driverRA->begin ();
453
- // _driverRA->en_spreadCycle(1);
454
+ #if RA_AUDIO_FEEDBACK == 1
455
+ _driverRA->en_spreadCycle (1 );
456
+ #endif
454
457
_driverRA->toff (4 );
455
458
_driverRA->blank_time (24 );
456
459
_driverRA->rms_current (rmscurrent);
457
460
_driverRA->microsteps (TRACKING_MICROSTEPPING);
458
- _driverRA->fclktrim (20 );
461
+ _driverRA->fclktrim (4 );
459
462
_driverRA->TCOOLTHRS (0xFFFFF ); // xFFFFF);
460
463
_driverRA->ihold (1 ); // its save to assume that the only time RA stands still is during parking and the current can be limited to a minimum
461
464
// _driverRA->semin(2);
@@ -472,15 +475,17 @@ void Mount::configureRAdriver(HardwareSerial *serial, float rsense, byte drivera
472
475
// configureDECdriver
473
476
// TMC2209 UART only
474
477
// ///////////////////////////////
475
- #if DEC_DRIVER_TYPE == TMC2009_UART
478
+ #if DEC_DRIVER_TYPE == TMC2209_UART
476
479
void Mount::configureDECdriver (HardwareSerial *serial, float rsense, byte driveraddress, int rmscurrent, int stallvalue)
477
480
{
478
481
_driverDEC = new TMC2209Stepper (serial, rsense, driveraddress);
479
482
_driverDEC->begin ();
480
483
_driverDEC->blank_time (24 );
481
- // _driverDEC->en_spreadCycle(1);
484
+ #if DEC_AUDIO_FEEDBACK == 1
485
+ _driverDEC->en_spreadCycle (1 );
486
+ #endif
482
487
_driverDEC->rms_current (rmscurrent);
483
- _driverDEC->microsteps (DEC_MICROSTEPPING );
488
+ _driverDEC->microsteps (DEC_SLEW_MICROSTEPPING );
484
489
_driverDEC->TCOOLTHRS (0xFFFFF );
485
490
_driverDEC->semin (5 );
486
491
_driverDEC->semax (2 );
@@ -512,7 +517,7 @@ void Mount::setSpeedCalibration(float val, bool saveToStorage) {
512
517
513
518
// The tracker simply needs to rotate at 15degrees/hour, adjusted for sidereal
514
519
// time (i.e. the 15degrees is per 23h56m04s. 86164s/86400 = 0.99726852. 3590/3600 is the same ratio) So we only go 15 x 0.99726852 in an hour.
515
- #if RA_DRIVER_TYPE == TMC2009_UART
520
+ #if RA_DRIVER_TYPE == TMC2209_UART
516
521
_trackingSpeed = _trackingSpeedCalibration * ((_stepsPerRADegree / SET_MICROSTEPPING) * TRACKING_MICROSTEPPING) * siderealDegreesInHour / 3600 .0f ;
517
522
#else
518
523
_trackingSpeed = _trackingSpeedCalibration * _stepsPerRADegree * siderealDegreesInHour / 3600 .0f ;
@@ -916,7 +921,7 @@ void Mount::startSlewingToTarget() {
916
921
}
917
922
918
923
// set Slew microsteps for TMC2209 UART // hier
919
- #if RA_DRIVER_TYPE == TMC2009_UART
924
+ #if RA_DRIVER_TYPE == TMC2209_UART
920
925
_driverRA->microsteps (SET_MICROSTEPPING);
921
926
// _driverRA->en_spreadCycle(1); //only used as audiofeedback for quick debug
922
927
#endif
@@ -935,6 +940,9 @@ void Mount::startSlewingToTarget() {
935
940
_mountStatus |= STATUS_SLEWING | STATUS_SLEWING_TO_TARGET;
936
941
_totalDECMove = 1 .0f * _stepperDEC->distanceToGo ();
937
942
_totalRAMove = 1 .0f * _stepperRA->distanceToGo ();
943
+ #if RA_STEPPER_TYPE == STEP_NEMA17 // tracking while slewing causes audible lagging
944
+ stopSlewing (TRACKING);
945
+ #endif
938
946
}
939
947
940
948
// ///////////////////////////////
@@ -985,32 +993,55 @@ void Mount::guidePulse(byte direction, int duration) {
985
993
986
994
switch (direction) {
987
995
case NORTH:
996
+ #if DEC_DRIVER_TYPE == TMC2209_UART
997
+ _driverDEC->microsteps (DEC_GUIDE_MICROSTEPPING);
998
+ #endif
988
999
_stepperDEC->setAcceleration (2500 );
1000
+ #if DEC_STEPPER_TYPE == STEP_28BYJ48
1001
+ _stepperDEC->setMaxSpeed (decTrackingSpeed * (1.0 + 0.2 ));
1002
+ _stepperDEC->setSpeed (decTrackingSpeed * 1.0 );
1003
+ #else // NEMA
989
1004
_stepperDEC->setMaxSpeed (decTrackingSpeed * (DEC_PULSE_MULTIPLIER + 0.2 ));
990
1005
_stepperDEC->setSpeed (decTrackingSpeed * DEC_PULSE_MULTIPLIER);
1006
+ #endif
991
1007
_mountStatus |= STATUS_GUIDE_PULSE | STATUS_GUIDE_PULSE_DEC;
992
1008
break ;
993
1009
994
1010
case SOUTH:
1011
+ #if DEC_DRIVER_TYPE == TMC2209_UART
1012
+ _driverDEC->microsteps (DEC_GUIDE_MICROSTEPPING);
1013
+ #endif
995
1014
_stepperDEC->setAcceleration (2500 );
1015
+ #if DEC_STEPPER_TYPE == STEP_28BYJ48
1016
+ _stepperDEC->setMaxSpeed (decTrackingSpeed * (1.0 + 0.2 ));
1017
+ _stepperDEC->setSpeed (-decTrackingSpeed * 1.0 );
1018
+ #else // NEMA
996
1019
_stepperDEC->setMaxSpeed (decTrackingSpeed * (DEC_PULSE_MULTIPLIER + 0.2 ));
997
1020
_stepperDEC->setSpeed (-decTrackingSpeed * DEC_PULSE_MULTIPLIER);
1021
+ #endif
998
1022
_mountStatus |= STATUS_GUIDE_PULSE | STATUS_GUIDE_PULSE_DEC;
999
1023
break ;
1000
1024
1001
1025
case WEST:
1026
+
1027
+ #if RA_STEPPER_TYPE == STEP_28BYJ48
1028
+ _stepperTRK->setMaxSpeed (raTrackingSpeed * 2.2 );
1029
+ _stepperTRK->setSpeed (raTrackingSpeed * 2.0 );
1030
+ #else // NEMA
1002
1031
_stepperTRK->setMaxSpeed (raTrackingSpeed * (RA_PULSE_MULTIPLIER + 0.2 ));
1003
1032
_stepperTRK->setSpeed (raTrackingSpeed * RA_PULSE_MULTIPLIER);
1033
+ #endif
1004
1034
_mountStatus |= STATUS_GUIDE_PULSE | STATUS_GUIDE_PULSE_RA;
1005
1035
break ;
1006
1036
1007
1037
case EAST:
1008
- _stepperTRK->setMaxSpeed (raTrackingSpeed * (RA_PULSE_MULTIPLIER + 0.2 ));
1009
1038
#if RA_STEPPER_TYPE == STEP_28BYJ48
1039
+ _stepperTRK->setMaxSpeed (raTrackingSpeed * 2.2 );
1010
1040
_stepperTRK->setSpeed (0 );
1011
- #else
1041
+ #else // NEMA
1012
1042
// Not sure why we don't stop tracking with NEMAs as is customary.....
1013
- _stepperTRK->setSpeed (0.6 * raTrackingSpeed);
1043
+ _stepperTRK->setMaxSpeed (raTrackingSpeed * (RA_PULSE_MULTIPLIER + 0.2 ));
1044
+ _stepperTRK->setSpeed (raTrackingSpeed * (RA_PULSE_MULTIPLIER - 1 ));
1014
1045
#endif
1015
1046
_mountStatus |= STATUS_GUIDE_PULSE | STATUS_GUIDE_PULSE_RA;
1016
1047
break ;
@@ -1432,7 +1463,7 @@ void Mount::startSlewing(int direction) {
1432
1463
1433
1464
// Set move rate to last commanded slew rate
1434
1465
setSlewRate (_moveRate);
1435
- #if RA_DRIVER_TYPE == TMC2009_UART
1466
+ #if RA_DRIVER_TYPE == TMC2209_UART
1436
1467
_driverRA->microsteps (SET_MICROSTEPPING);
1437
1468
// _driverRA->en_spreadCycle(1); //only used as audiofeedback for quick debug
1438
1469
// hier
@@ -1579,13 +1610,6 @@ void Mount::loop() {
1579
1610
unsigned long now = millis ();
1580
1611
bool raStillRunning = false ;
1581
1612
bool decStillRunning = false ;
1582
-
1583
- /* static uint32_t last_time = 0;
1584
- uint32_t ms = millis();
1585
- if ((ms - last_time) > 100) { //run every 0.1s
1586
- last_time = ms;*/
1587
- // Serial.println(_driverRA->mres());
1588
- // }
1589
1613
1590
1614
// Since some of the boards cannot process timer interrupts at the required
1591
1615
// speed (or at all), we'll just stick to deterministic calls here.
@@ -1600,13 +1624,13 @@ void Mount::loop() {
1600
1624
}
1601
1625
#endif
1602
1626
1603
- #if RA_DRIVER_TYPE == TMC2009_UART && DEC_DRIVER_TYPE == TMC2009_UART && USE_AUTOHOME == 1
1627
+ #if RA_DRIVER_TYPE == TMC2209_UART && DEC_DRIVER_TYPE == TMC2209_UART && USE_AUTOHOME == 1
1604
1628
if (isFindingHome ()) {
1605
1629
if (digitalRead (DEC_DIAG_PIN) == HIGH) {
1606
1630
finishFindingHomeDEC ();
1607
1631
return ;
1608
1632
}
1609
- if (digitalRead (RA_DIAG_PIN) == 52 ) {
1633
+ if (digitalRead (RA_DIAG_PIN) == HIGH ) {
1610
1634
finishFindingHomeRA ();
1611
1635
return ;
1612
1636
}
@@ -1617,6 +1641,9 @@ void Mount::loop() {
1617
1641
if (isGuiding ()) {
1618
1642
if (millis () > _guideEndTime) {
1619
1643
stopGuiding ();
1644
+ #if DEC_DRIVER_TYPE == TMC2209_UART
1645
+ _driverDEC->microsteps (DEC_SLEW_MICROSTEPPING);
1646
+ #endif
1620
1647
}
1621
1648
return ;
1622
1649
}
@@ -1655,8 +1682,9 @@ void Mount::loop() {
1655
1682
1656
1683
_currentDECStepperPosition = _stepperDEC->currentPosition ();
1657
1684
_currentRAStepperPosition = _stepperRA->currentPosition ();
1658
- #if RA_DRIVER_TYPE == TMC2009_UART
1685
+ #if RA_DRIVER_TYPE == TMC2209_UART
1659
1686
_driverRA->microsteps (TRACKING_MICROSTEPPING);
1687
+ startSlewing (TRACKING);
1660
1688
// _driverRA->en_spreadCycle(0); // only for audio feedback for quick debug
1661
1689
#endif
1662
1690
if (_correctForBacklash) {
@@ -1746,11 +1774,8 @@ void Mount::setHome(bool clearZeroPos) {
1746
1774
// Set RA and DEC to the home position
1747
1775
// ///////////////////////////////
1748
1776
void Mount::setTargetToHome () {
1749
- #if RA_DRIVER_TYPE != ULN2003_DRIVER
1750
- float trackedSeconds = (_stepperTRK->currentPosition () / _trackingSpeed) * (SET_MICROSTEPPING / TRACKING_MICROSTEPPING); // steps/steps/s
1751
- #else
1777
+
1752
1778
float trackedSeconds = _stepperTRK->currentPosition () / _trackingSpeed; // steps/steps/s
1753
- #endif
1754
1779
1755
1780
LOGV2 (DEBUG_MOUNT," Mount::setTargetToHome() called with %fs elapsed tracking" , trackedSeconds);
1756
1781
@@ -2052,7 +2077,7 @@ String Mount::RAString(byte type, byte active) {
2052
2077
//
2053
2078
// ///////////////////////////////
2054
2079
// Automatically home the mount. Only with TMC2209 in UART mode
2055
- #if RA_DRIVER_TYPE == TMC2009_UART && DEC_DRIVER_TYPE == TMC2009_UART && USE_AUTOHOME == 1
2080
+ #if RA_DRIVER_TYPE == TMC2209_UART && DEC_DRIVER_TYPE == TMC2209_UART && USE_AUTOHOME == 1
2056
2081
2057
2082
void Mount::startFindingHomeDEC () {
2058
2083
_driverDEC->SGTHRS (10 );
@@ -2116,7 +2141,7 @@ void Mount::finishFindingHomeRA()
2116
2141
2117
2142
2118
2143
startSlewing (TRACKING);
2119
- setHome ();
2144
+ setHome (true );
2120
2145
2121
2146
}
2122
2147
#endif
0 commit comments