Compare commits
26 Commits
aa4bb8bae8
...
20732c0de1
Author | SHA1 | Date |
---|---|---|
morgan | 20732c0de1 | |
morgan | 611c08262f | |
morgan | 06266eba84 | |
morgan | cf3f5dfcfa | |
morgan | 7b97d30a43 | |
morgan | fa5765383f | |
morgan | cd4169e571 | |
morgan | 84b5a5f2e3 | |
morgan | adc7554f79 | |
morgan | 30316d585d | |
morgan | 8eeec0bae8 | |
morgan | 3a76f207e1 | |
morgan | 4c164f980f | |
morgan | b4424476b9 | |
morgan | 8d76696b27 | |
morgan | 9e06faac94 | |
morgan | 733658db68 | |
morgan | 240b80309e | |
morgan | be6c1474b0 | |
morgan | e846655402 | |
morgan | 137489da93 | |
morgan | 19a431b5be | |
morgan | dec407c9d7 | |
morgan | f396fb1c02 | |
morgan | fb1d09a0a4 | |
morgan | 530fb2e7b0 |
|
@ -407,6 +407,7 @@ pub mod wrpll {
|
|||
pub fn get_period_error() -> i32 {
|
||||
// n * BEATING_PERIOD - REF_TAG(n) mod BEATING_PERIOD
|
||||
let mut period_error = unsafe { REF_TAG.overflowing_neg().0.rem_euclid(BEATING_PERIOD as u32) as i32 };
|
||||
|
||||
// mapping tags from [0, 2π] -> [-π, π]
|
||||
if period_error > BEATING_HALFPERIOD {
|
||||
period_error -= BEATING_PERIOD
|
||||
|
@ -515,20 +516,23 @@ pub mod wrpll {
|
|||
fn helper_pll() -> Result<(), &'static str> {
|
||||
let period_err = tag_collector::get_period_error();
|
||||
|
||||
let h_adpll = unsafe {
|
||||
let h_adpll;
|
||||
unsafe {
|
||||
H_INTEGRATOR += period_err * KI;
|
||||
(BASE_ADPLL + period_err * KP + H_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX)
|
||||
};
|
||||
h_adpll = (BASE_ADPLL + period_err * KP + H_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX);
|
||||
}
|
||||
set_adpll(i2c::DCXO::Helper, h_adpll)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main_pll() -> Result<(), &'static str> {
|
||||
let phase_err = tag_collector::get_phase_error();
|
||||
let m_adpll = unsafe {
|
||||
|
||||
let m_adpll;
|
||||
unsafe {
|
||||
M_INTEGRATOR += phase_err * KI;
|
||||
(BASE_ADPLL + phase_err * KP + M_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX)
|
||||
};
|
||||
m_adpll = (BASE_ADPLL + phase_err * KP + M_INTEGRATOR).clamp(-ADPLL_MAX, ADPLL_MAX);
|
||||
}
|
||||
set_adpll(i2c::DCXO::Main, m_adpll)?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue