Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 13 of 13

Thread: T4, heatsink recommended?

Hybrid View

  1. #1

    T4, heatsink recommended?

    Hi,

    this great piece arrived today….wow...i love it....started with blink etc.. to get a feeling how it works…

    My endproduct where i want to use it will be "in a box" so i asked myself, due to there is a noticable amout of heat on the chip, is there a heatsink recommended? The T3.6 was cold even when i overclocked it.

    Anyone who has experience on this topic already? Will the amount of heat change with the load of the prcessor? Or will it always stay the same?


    Thank you

    Torsten

  2. #2
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,101
    It does tend to be a bit warmer but don't think we ever noticed that it really got too hot to touch. There is a tempmon that is always on. To call it to get the temp all you need to do is add this to your sketch: tempmonGetTemp() and print the value (its a float by the way). Some of us did put something like this on it https://www.amazon.com/gp/product/B0...?ie=UTF8&psc=1 as a quick test and it did drop the temp. But you may have to trim it a bit. If you do a search in the beta thread you will probably find some more info. In all our testing don't think we ever left the heatsink on except to see what would happen.

    Just as a note - if it hits the overtemp setting it will automatically shut down on you.

  3. #3
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    20,556
    Unless your enclosure is very small, or very well thermally insulated, or has some other stuff dissipating a lot of heat, you can probably get by without a heatsink.

    If you attempt extreme overclocking, like messing with the "// Danger Will Robinson" part in clockspeed.c, the chip does get very hot and probably needs a heatsink. But even with a heatsink, you can expect reduced life span if you drive the CPU beyond its maximum rated voltage (1.3V).

    If you run at 528 MHz or lower, the CPU runs at a slightly lower voltage (1.15V instead of 1.25V), which really reduces the power consumption. If you're worried about high temperature, and if you can get by without the full 600 MHz speed, slowing down just a little to 528 MHz makes quite a difference in temperature rise.

  4. #4
    Senior Member+ manitou's Avatar
    Join Date
    Jan 2013
    Posts
    2,192
    Quote Originally Posted by PaulStoffregen View Post
    If you run at 528 MHz or lower, the CPU runs at a slightly lower voltage (1.15V instead of 1.25V), which really reduces the power consumption. If you're worried about high temperature, and if you can get by without the full 600 MHz speed, slowing down just a little to 528 MHz makes quite a difference in temperature rise.
    FWIW, here is CoreMark power and temperature vs MHz plot
    Last edited by manitou; 08-22-2019 at 01:14 PM.

  5. #5
    Quote Originally Posted by PaulStoffregen View Post
    If you run at 528 MHz or lower, the CPU runs at a slightly lower voltage (1.15V instead of 1.25V), which really reduces the power consumption. If you're worried about high temperature, and if you can get by without the full 600 MHz speed, slowing down just a little to 528 MHz makes quite a difference in temperature rise.
    Is there a straightforward way to adjust this at runtime rather than tinkering with startup.c?

  6. #6
    I'm sure I'm not the only one operating these in a vacuum chamber occasionally to control experiments, so the possibility of overheating is well-worth considering. With the 3.6 running OC'd at 240 MHz there was no issue, but I never checked the temperature, either. I wonder if 600 will be too far to push these in vacuum and 528 might be safer.

    Thanks for the tip on the temperature monitor, though; when my 4.0 shows up I'll check that out right away.

  7. #7
    Quote Originally Posted by dukeblue219 View Post
    I'm sure I'm not the only one operating these in a vacuum chamber occasionally to control experiments, so the possibility of overheating is well-worth considering. With the 3.6 running OC'd at 240 MHz there was no issue, but I never checked the temperature, either. I wonder if 600 will be too far to push these in vacuum and 528 might be safer.

    Thanks for the tip on the temperature monitor, though; when my 4.0 shows up I'll check that out right away.
    FYI - In vacuum it took about five minutes for a Teensy 4 running a loop of floating point multiplication to reach 90C (per the internal tempmon) and shut itself down. It was straight of the box, without any headers installed, and hanging out in the open in a vacuum chamber, and running the default 600 MHz. A Teensy with headers installed on aboard might run slightly cooler with the thermal path added, but I suspect the MCU will still overheat. Looks like underclocking or running a thermal strap from the MCU to a thermal "ground" may be needed. Unfortunate, but not surprising given the power of this little guy.

  8. #8
    Hi,

    i will use it in vacuum of outer space behind the van Allen belt for the next lunar mission (Apollo 18) they need a computer without error 1202 during lunar descent ;-)

    Thank you for your feedback, i will add some air intake/outtake in my housing..to keep things moderate cool...

    BTW: With the 3.6 i had the possibility to overclock it via the IDE via dropdown menu. This dropdown menu is not present anymore for the T4.....(I am using the Arduino extension for MS Visual Studio 2017/19)

    Torsten

  9. #9
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    9,692
    Teensy 4 powers up and goes to 600 MHz with this in startup.c : set_arm_clock(600000000);

    User can call that same func with an alternate number in setup() or after if not wanting to edit the cores - in beta I just jumped it hi/low by 100,000,000 and it picked the Hz +/- that worked out and adjusted the voltage as programmed by PJRC.

    Needs this extern "C" prototype : uint32_t set_arm_clock(uint32_t frequency);

    Looking at this will show what the result is :: Serial.println(F_CPU_ACTUAL);

    Would be interesting to see the TempMon results in chamber starting at 100M and ticking up 100M with temp watch for change or stable each couple of minutes.


    Paul - when you posted Benchmarks { RSA & CoreMark } I did a quick test with those 2 and another two sketches - 700 Mhz seemed to run them all on the one T4 I tested - and Coremark ran at 800 Mhz , RSA failed. The others 700 & 800 works for the Prime calc code from the other week. T4 can run the Multiple 5X Serial and 2X ST7789 displays at 700 – but dies early and loses Serial USB early at 800.

  10. #10
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    9,692
    JUST COPIED THIS TO THE RIGHT THREAD ... https://forum.pjrc.com/threads/54711...l=1#post213338

    >> Posting failed a few times due to size and it ended up here ...

    Paul: loop() Code Mod to lps.ino - for a bit more stress that breaks here:
    Code:
    void loop() {
      while (1) {
        Serial.print("count=");
        Serial.print(count);
        Serial.print(", lines/sec=");
        Serial.println(count_per_second);
        count = count + 1;
        uint32_t msec = millis();
        if (msec - prior_msec > 1000) {
          delay(1);
          // when 1 second as elapsed, update the lines/sec count
          prior_msec = prior_msec + 1000;
          count_per_second = count - prior_count;
          prior_count = count;
        }
      }
    }
    IDE has this in the console: TOO LONG at 270K chars … see file - that had to be zipped for 80KB over limit ::
    Last edited by defragster; 08-22-2019 at 04:27 PM.

  11. #11
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,101
    Yes there is. This is curtesy of @defragster:
    Code:
    #if 1
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #if defined(__IMXRT1062__)
    uint32_t set_arm_clock(uint32_t frequency);
    #endif
    #ifdef __cplusplus
    } // extern "C"
    #endif
    #endif
    Add this to the top of your sketch. Then in your sketch you can call set_arm_clock with the frequency you went to set. Example: set_arm_clock(528000000); for 528Mhz.

  12. #12
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    9,692
    Post #7 gave notes on the explicit p#11 code.

    In setup() just add :: set_arm_clock(300000000);

    Pick the desired Hz and the code will pick the workable freq near that. Also in p#7 is this to use after to see actual current speed:: Serial.println(F_CPU_ACTUAL);

    I did a Pull request #385 to add the Early and Late startup hooks that would allow this to be done in user code before the 300 ms wait time to get into setup() - called inline without needing to edit the startup.c file.

  13. #13
    Quote Originally Posted by defragster View Post
    Post #7 gave notes on the explicit p#11 code.

    In setup() just add :: set_arm_clock(300000000);

    Pick the desired Hz and the code will pick the workable freq near that. Also in p#7 is this to use after to see actual current speed:: Serial.println(F_CPU_ACTUAL);

    I did a Pull request #385 to add the Early and Late startup hooks that would allow this to be done in user code before the 300 ms wait time to get into setup() - called inline without needing to edit the startup.c file.
    How did I miss that? Apologies for the unnecessary question, but thanks to you and mjs513 for the very clear responses. I'll give it a test today.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •