Skip to main content

stm32_hrtim/
deadtime.rs

1#[cfg_attr(feature = "defmt", derive(defmt::Format))]
2#[derive(Copy, Clone, Debug)]
3pub struct DeadtimeConfig {
4    /// Prescaler for both rising and falling deadtime
5    pub(crate) prescaler: DeadtimePrescaler,
6
7    /// 9-bits
8    pub(crate) deadtime_rising_value: u16,
9
10    /// Is deadtime negative
11    pub(crate) deadtime_rising_sign: bool,
12
13    /// 9-bits
14    pub(crate) deadtime_falling_value: u16,
15
16    /// Is deadtime negative
17    pub(crate) deadtime_falling_sign: bool,
18}
19
20impl DeadtimeConfig {
21    /// See RM0440 Table 221 'Deadtime resolution and max absolute values'
22    pub fn prescaler(mut self, value: DeadtimePrescaler) -> Self {
23        self.prescaler = value;
24        self
25    }
26
27    /// Panic if value can not fit in 9 bits
28    pub fn deadtime_rising_value(mut self, value: u16) -> Self {
29        // 9 bits
30        assert!(value < (1 << 9));
31
32        self.deadtime_rising_value = value;
33
34        self
35    }
36
37    pub fn deadtime_rising_sign(mut self, is_negative: bool) -> Self {
38        self.deadtime_rising_sign = is_negative;
39        self
40    }
41
42    /// Panic if value can not fit in 9 bits
43    pub fn deadtime_falling_value(mut self, value: u16) -> Self {
44        // 9 bits
45        assert!(value < (1 << 9));
46
47        self.deadtime_falling_value = value;
48
49        self
50    }
51
52    pub fn deadtime_falling_sign(mut self, is_negative: bool) -> Self {
53        self.deadtime_falling_sign = is_negative;
54        self
55    }
56}
57
58impl Default for DeadtimeConfig {
59    fn default() -> Self {
60        Self {
61            prescaler: DeadtimePrescaler::Thrtim,
62            deadtime_rising_value: 170, // about 1us when f_sys = 170MHz
63            deadtime_rising_sign: false,
64            deadtime_falling_value: 170, // about 1us when f_sys = 170MHz
65            deadtime_falling_sign: false,
66        }
67    }
68}
69
70#[cfg_attr(feature = "defmt", derive(defmt::Format))]
71#[derive(Copy, Clone, Debug)]
72pub enum DeadtimePrescaler {
73    ThrtimDiv8 = 0b000,
74    ThrtimDiv4 = 0b001,
75    ThrtimDiv2 = 0b010,
76    Thrtim = 0b011,
77    ThrtimMul2 = 0b100,
78    ThrtimMul4 = 0b101,
79    ThrtimMul8 = 0b110,
80    ThrtimMul16 = 0b111,
81}