Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix multiple servos with STM32 #16151

Merged
merged 2 commits into from
Dec 11, 2019

Conversation

MangaValk
Copy link
Contributor

Description

Fixes issue #16138

Depends on: stm32duino/Arduino_Core_STM32#822

Benefits

fixes multiple servos not working on stm32

@sjasonsmith
Copy link
Contributor

Thanks for looking into this.
This is failing because of course it depends on your own customizations in the STM32 framework.

I think you can avoid these by adding a constructor and storing the information you need inside the libServo object.

I'm attaching some files where I experimented with this. I haven't tested these, so they might need some work. I believe they will achieve your needs without requiring any changes to the STM32 framework.
Servo.zip

Comment on lines 252 to +253
// Do not use basic timer: OC is required
#define TIMER_SERVO TIM2 //TODO: advanced-control timers don't work
#define TIMER_SERVO TIM6 //TODO: advanced-control timers don't work
Copy link
Contributor

@sjasonsmith sjasonsmith Dec 8, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am confused by this. TIM6 is a basic timer, and TIM2 is a General-purpose timer.
This contradicts the comment in the line above. Do you know why this is working using the less functional timer?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi all,
the comment is a legacy one. Since HardwareTimer library has been deployed, this comment is no more relevant.
Using TIM6 is a good option like it is not linked to a pin.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that case we may need to check whether TIM2 is attached to any pins that might cause problems for the TONE_TIMER. Perhaps you are using some of the pins which attach to TIM2 as PWM outputs, and those are interfering with the timer operation.

(Sounds like the comment should be removed as well)

@MangaValk
Copy link
Contributor Author

I'll give your change a try next weekend when I have time again :)

About the timers, I have no idea, I'm not a stm programmer. I just know c++ and mess around some till it works. (php programmer by day)

Using tim2 the servos stoped working when using the tool changer mid print.
With tim6, stolen from the speaker, they keep working.

@sjasonsmith
Copy link
Contributor

I can help debug this, but I also won't be available to do so for a week. I don't have a tool changer, but I could probably reproduce just by tracing output on the servo lines. Right now it seems like we can't really explain why the change works, which concerns me.

Given the way the underlying servo code works, I don't really understand why one servo would work if the timer was insufficient. The manner in which the timer is used does not change by having more than one servo.

@MangaValk
Copy link
Contributor Author

MangaValk commented Dec 9, 2019

Thanks for looking into this.
This is failing because of course it depends on your own customizations in the STM32 framework.

I think you can avoid these by adding a constructor and storing the information you need inside the libServo object.

I'm attaching some files where I experimented with this. I haven't tested these, so they might need some work. I believe they will achieve your needs without requiring any changes to the STM32 framework.
Servo.zip

I had 5 minutes to check and your fix works!

@thinkyhead thinkyhead changed the title Bugfix multiple servos Fix multiple servos with STM32 Dec 11, 2019
@thinkyhead thinkyhead added A: STM32 C: Boards/Pins PR: Bug Fix T: HAL & APIs Topic related to the HAL and internal APIs. labels Dec 11, 2019
@thinkyhead thinkyhead merged commit 96cf556 into MarlinFirmware:bugfix-2.0.x Dec 11, 2019
@yopla31
Copy link

yopla31 commented Dec 11, 2019

For your information, I had the same anomaly, resolved by applying this fix (copy Servo.cpp and Servo.h into directory stm32). No side effects observed until now.
Thanks for your work.

@yopla31
Copy link

yopla31 commented Dec 13, 2019

Unfortunately I observed a side effect :
My X and Y axes are configured in "Sensorless Homing" with stall sensibility to 50 et 55 for X and Y, the Z axe homing with BL-Touch. If I run M502 and M500 then a G28, in 90% of the cases the probe does not deploy and the hotend crashes on the bed. Sometimes the homing of the Y forces like with an incorrect stall value or the homing of the X does not go as far as the stop.
The anomaly trigger seems to be the sequence M502 + M500, then G28.
Attached my configuration files.
SKRpro11_CFGv051.zip
I complete my observation:
After having to reconfigure the standard firmware (one said servo BL-Touch), I conducted a series of tests of this sequence, and the result is the same.

LinoBarreca pushed a commit to LinoBarreca/Marlin that referenced this pull request Dec 18, 2019
philippniethammer pushed a commit to philippniethammer/Marlin that referenced this pull request Dec 21, 2019
christran206 pushed a commit to christran206/Marlin2.0-SKR-Mini-E3-1.2 that referenced this pull request Dec 30, 2019
webs1821 added a commit to webs1821/Marlin that referenced this pull request Jan 2, 2020
* [cron] Bump distribution date

* STM32F1 Flash-based EEPROM fixes (MarlinFirmware#16118)

* Disable PRINTCOUNTER in SKR Mini E3 examples (MarlinFirmware#16110)

* Fix compile error with disabled PIDTEMP (MarlinFirmware#16108)

* Wanhao D6 uses TINYBOY2 (MarlinFirmware#16117)

* Improve touch buttons behavior (MarlinFirmware#16109)

* Update AZSMZ LCD link (MarlinFirmware#16106)

* [cron] Bump distribution date

* Update 3DFabXYZ settings (MarlinFirmware#16139)

* [cron] Bump distribution date

* Fix controller and SD on Robin Nano (MarlinFirmware#16187)

* Correct MKS Robin Mini pins (MarlinFirmware#16178)

* Formalize DAC percent strings (MarlinFirmware#16176)

* Update Italian language (MarlinFirmware#16147)

* Update french (objects, retract...)

* Superscript 3 for mm3

* [cron] Bump distribution date

* Add MKS Robin Pro, MKS Robin Lite3 (MarlinFirmware#16163)

* Fix multiple servos with STM32 (MarlinFirmware#16151)

* Use error message !! hints (MarlinFirmware#16145)

* Update BTT comments for USB/SD Composite (MarlinFirmware#16130)

* MKS 12864 OLED pins for SGEN-L (MarlinFirmware#16188)

* Invert E dir of Geeetech A10 (MarlinFirmware#16149)

* Disable SD_CHECK_AND_RETRY in BTT E3 configs (MarlinFirmware#16143)

* Add a CI test for RAMBo + CNC (MarlinFirmware#16126)

* Onboard (always-on) pullups support (MarlinFirmware#16144)

* Tweak ExtUI Probeless Babystepping (MarlinFirmware#16177)

* Fix RAMBo CNC test

* Flsun QQ-S example config (MarlinFirmware#16204)

* Add MKS Robin Mini EEPROM defines (MarlinFirmware#16203)

* Fix compile error (macro substitution typo) (MarlinFirmware#16194)

* Update M503 MBL G29 report (MarlinFirmware#16199)

* Include Z in SCARA steps feedrate (MarlinFirmware#16193)

* Cardreader read/write open methods

* Tweak some config names

* Improve A20M config

* Move status screen defines

* Fix bad #ifdef (MarlinFirmware#16227)

* TOUCH_MI_DEPLOY_XPOS fallback to X_MIN_POS (MarlinFirmware#16226)

* Fix MKS SGen-L SD detect pin (MarlinFirmware#16224)

* Improve ESP32 HAL (EEPROM, watchdog) (MarlinFirmware#16228)

* Fix G28 debug line, M569 calls (MarlinFirmware#16213)

* Add SKR Mini E3 + Zonestar LCD warning (MarlinFirmware#16214)

* STM32 Touch UI timings, Longer onboard pullups (MarlinFirmware#16219)

* Update BTT002 platform (fixing SD init) (MarlinFirmware#16217)

* Define more FAN pins for GT2560 (MarlinFirmware#16235)

* Tweak E180 config

* Update product links

* [cron] Bump distribution date

* Add dev-2.1.x to 'mfinfo' script

* Move AutoBuildMarlin to its own repo

* [cron] Bump distribution date

* Tweak G34, fix a declaration

* Sanity-check Z_STEPPER_AUTO_ALIGN coordinates (MarlinFirmware#16231)

* Improve SKR mini E3 + Ender 3 settings (MarlinFirmware#16247)

* Tweak code formatting

* Allow TMC2209 to save/restore spreadCycle (MarlinFirmware#16153)

Co-Authored-By: teemuatlut <teemu.mantykallio@live.fi>

* Spindle/Laser pins for RADDS (MarlinFirmware#16119)

* Improve pulse timing and step reliability (MarlinFirmware#16128)

* BigTreeTech SKR v1.4 support (MarlinFirmware#16236)

* Followup to TMC2209 spreadcycle patch

* Remove obsolete TMC2209 comment

* HOME_USING_SPREADCYCLE is obsolete

Co-Authored-By: teemuatlut <teemu.mantykallio@live.fi>

* Use MYSERIAL0 (not SerialUSB) for Malyan LCD

* Followup for step timing (MarlinFirmware#16128)

* Fix broken M100_dump_routine

* Tweak sanity checks

* Update test scripts to error on unknown (MarlinFirmware#16229)

* Kossel Clear configuration (MarlinFirmware#16198)

* Move pins debug condition

* Use Github Actions for CI, date bump (MarlinFirmware#16269)

* Fix HAL_STM32 + Arduino IDE SoftwareSerial conflict (MarlinFirmware#16266)

* Improve Anet A6 config (MarlinFirmware#16280)

* Fix G34 with Z_DUAL_STEPPER_DRIVERS compile (MarlinFirmware#16274)

* Fix planner compile error (MarlinFirmware#16272)

* Fix axis CS sanity check (MarlinFirmware#16271)

* Add Tevo Nereus (w/ Robin Nano) config (MarlinFirmware#16207)

* Don't test certain changes

* Reset runout.ran_out on resume (MarlinFirmware#16230)

* Step timing cleanup and rounding fix (MarlinFirmware#16258)

* Add MRR_ESPA/_ESPE (ESP32) boards (MarlinFirmware#16238)

* Add Ender-5 Pro config (MarlinFirmware#16221)

* Add FLYBOARD (STM32F407ZG) (MarlinFirmware#16257)

* Fix STM32 flush of TX (used by UBL) (MarlinFirmware#16197)

* Flash leveling (for some STM32) (MarlinFirmware#16174)

* Some ESP32 patches (MarlinFirmware#16297)

* MKS SGen-L pins EEBF or EFBF scheme (MarlinFirmware#16296)

* Release version 2.0.0

* Add Rumba32 support for PIO (MarlinFirmware#16202)

* MKS Robin 2 (STM32F407ZE) base support (MarlinFirmware#16270)

* Update Czech language (MarlinFirmware#16305)

* Sync SKR E3 configs (MarlinFirmware#16301)

* Add NOZZLE_AS_PROBE (no probe offsets) (MarlinFirmware#15929)

* Version 2.0.1

* Update build status url

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Co-authored-by: randellhodges <rhodges@taxfodder.com>
Co-authored-by: Jason Smith <jason.inet@gmail.com>
Co-authored-by: Antti Andreimann <anttix@users.sourceforge.net>
Co-authored-by: thisiskeithb <13375512+thisiskeithb@users.noreply.github.com>
Co-authored-by: Tanguy Pruvot <tpruvot@users.noreply.github.com>
Co-authored-by: Luu Lac <45380455+shitcreek@users.noreply.github.com>
Co-authored-by: Alain Martel <alain74martel@gmail.com>
Co-authored-by: Anders Sahlman <57940217+AndersSahlman@users.noreply.github.com>
Co-authored-by: dagorel <37673727+dagorel@users.noreply.github.com>
Co-authored-by: Giuliano Zaro <3684609+GMagician@users.noreply.github.com>
Co-authored-by: MS1987 <lms228@163.com>
Co-authored-by: MangaValk <patrickvalkmanga@hotmail.com>
Co-authored-by: André Kjellstrup <andre.kjellstrup@gmail.com>
Co-authored-by: Tobias Schürg <tobiasschuerg@gmail.com>
Co-authored-by: Jeff Eberl <jeffeb3@gmail.com>
Co-authored-by: ManuelMcLure <manuel@mclure.org>
Co-authored-by: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com>
Co-authored-by: iain MacDonnell <github@dseven.org>
Co-authored-by: Bo Herrmannsen <bo.herrmannsen@gmail.com>
Co-authored-by: Luc <8822552+luc-github@users.noreply.github.com>
Co-authored-by: danym21 <54744475+danym21@users.noreply.github.com>
Co-authored-by: chzj333 <53591189+chzj333@users.noreply.github.com>
Co-authored-by: Vertabreaker <opyrus@hotmail.com>
Co-authored-by: Moshi Binyamini <MoshiBin@users.noreply.github.com>
Co-authored-by: salami738 <24863070+salami738@users.noreply.github.com>
Co-authored-by: elementfoundry <57408038+elementfoundry@users.noreply.github.com>
Co-authored-by: teemuatlut <teemu.mantykallio@live.fi>
Co-authored-by: Mario Costa <mario.silva.costa@gmail.com>
Co-authored-by: BigTreeTech <38851044+bigtreetech@users.noreply.github.com>
Co-authored-by: Markus Towara <mtowara@gmail.com>
Co-authored-by: FLYmaker <49380822+FLYmaker@users.noreply.github.com>
Co-authored-by: ferengi82 <christian.maurer@gmx.eu>
Co-authored-by: petrzjunior <junior@zahradnik.cz>
griehsler pushed a commit to griehsler/Marlin that referenced this pull request Jan 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A: STM32 C: Boards/Pins PR: Bug Fix T: HAL & APIs Topic related to the HAL and internal APIs.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants