stm32_hrtim/
deadtime.rs

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