logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Realizacja opóźnienia 0,1ms w tranzystorach - jak napisać funkcję?

ebson1307 14 Wrz 2020 15:41 1083 8
REKLAMA
  • #1 18923044
    ebson1307
    Poziom 3  
    Posty: 47
    Ocena: 20
    Witam, potrzebuję wprowadzić dead-time pomiędzy włączaniem i wyłączaniem tranzystorów. Funkcja opóźniająca udostępniona przez bibliotekę pozwala na łatwe wprowadzenie opóźnień w milisekundach. Niestety najmniejsze opóźnienie to 1ms, a ja potrzebuję mniej.
    Jak mam zrealizować opóźnienie wynoszące np. 0,1ms? Domyślam się że muszę napisać funkcję np. pustą pętlę for która wykona się okresloną liczbę razy, ale nie jestem pewnien. Czy jest to poprawne rozwiązanie? Jak określić dokładnie czas wykonania się takiej pętli? Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 18923089
    bart-projects
    Poziom 30  
    Posty: 836
    Pomógł: 200
    Ocena: 261
    Wiesz że są specjalizowane uC do sterowania takimi urządzeniami? Attiny85 ma wbudowaną sprzętową obsługę DeadTime. Pewnie nie on jeden.
    Może to burzy Twoją koncepcję, ale chciałem byś wiedział.

    Softowo to szukaj funkcji która dzieli taktowanie uC/1000 bo to 1s(1Hz) ma 1000ms.
    Jak znajdziesz to sklonuj, potem zmień na /10000 i nie zapomnij zmienić typów bo poprzedni maksymalny wynik może się nie zmieścić.
  • Pomocny post
    #3 18923178
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    @ebson1307 Tak jak napisał kol. @bart-projects - przejrzyj notę użytego procesora, niewykluczone, że timer ma możliwość wprowadzania czasów martwych w generowany przebieg. Jeśli nie - to z pewnością w użytej rodzinie znajdziesz MCU, które taką możliwość posiadają. Robienie tego softwarowo jest możliwe - zrób sobie po prostu pętlę, w której wykonujesz NOP i będziesz miał opóźnienie. Tyle, że to blokuje cały procesor, a potem oprogramowanie dodatkowych elementów może być trudne. Nawet jeśli chcesz zrobić rozwiązanie programowe, to oprzyj je o timer, który będzie generował opóźnienie, a nie o delay.
  • REKLAMA
  • Pomocny post
    #4 18923254
    _lazor_
    VIP Zasłużony dla elektroda
    Posty: 3795
    Pomógł: 259
    Ocena: 1132
    stm32g4 oraz stm32f334 ma timer hrtim, który pozwala na generowanie deadtime z bardzo dużą dokładnością. Można też polecić procki z serii piccolo od TI, ale to egzotyka dla większości użytkowników, a szkoda bo bardzo dobre układy.

    Inne rozwiązanie to zakup sterownika dla kluczy. Sygnał podstawowy jest generowany przez uC a driver zapewnia pozostałe elementy jak np deadtime
  • #5 18923290
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 18923296
    _lazor_
    VIP Zasłużony dla elektroda
    Posty: 3795
    Pomógł: 259
    Ocena: 1132
    khoam napisał:
    W ESP32 jest High Resolution Timer. Można generować przerwania z dokładnością 50µs.


    Tutaj nie chodzi o przerwania a generowanie sygnału i wprowadzania za pomocą peryferium deadtime. Ogólnie hrtim ma rozdzielczość do 184ps w rozwiązaniu ST, texas też podobną wartość;) To jest High Resolution Timer ;)
  • REKLAMA
  • Pomocny post
    #7 18925092
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Ja sobie robię sprzętowo czas martwy na zwykłym AVR'ku np. M8 itp.
    Odpalam pierwszy timer w trybie Phase and Frequency Correct PWM. Końcówki OC1A i OC1B ustawiam do pracy w przeciwfazie. Dla jednego kanału np. do OCR1A dodaję stała wartość do zadanego wypełnienia, a do OCR1B taką samą wartość odejmuję. (albo na odwrót). Czas martwy można więc regulować z rozdzielczością czasu trwania jednego "tiku" timera. Trzeba jednak pamiętać o ograniczeniach wynikających z dodawania i odejmowania wartości bez znaku.
  • Pomocny post
    #8 18925534
    Konto nie istnieje
    Poziom 1  
  • #9 18926248
    ebson1307
    Poziom 3  
    Posty: 47
    Ocena: 20
    Wszystko już jasne, dzięki Panowie :)

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem realizacji opóźnienia 0,1 ms w tranzystorach, wskazując na różne metody jego osiągnięcia. Użytkownicy sugerowali wykorzystanie mikroprocesorów z wbudowaną obsługą dead-time, takich jak Attiny85, STM32G4 oraz STM32F334, które oferują timer HRTIM do precyzyjnego generowania opóźnień. Zwrócono uwagę na możliwość programowego wprowadzenia opóźnienia poprzez pętlę NOP, jednak podkreślono, że blokuje to procesor. Alternatywnie, zaproponowano użycie timerów w trybie PWM oraz sprzętowych rozwiązań, takich jak MCPWM w ESP32, które umożliwiają regulację dead-time z wysoką dokładnością.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA