下控
2020-01-16 本文已影响0人
huangyubin
RPM的计算
- 周长:C= 2Pi*R =>
- R = 15cm
- C = 2 * 3.14 * 15 = 94.2cm ~ 100cm
- 假设磁体作用长度:0.5,=> 干簧管闭合 1/200
- 假设飞轮转速 60~600 RPM 即周期 ==> 1000ms~100ms
- 干簧管闭合时间:5ms~0.5ms之间
- 干簧管动作时间: 1ms
- 干簧管释放时间: 0.4ms
- 计算方法
1. 开低电平中断,中断后开启50us定时器,检测两次均为低电平,则认为有效输入 2. 中断时根据计数器值计算当前RPM,并清除计数器 3. 滤除太小或太大的RPM值 4. 当前RPM进入移动平均滤波数组,计算平均值
PWM的计算
- 测得在 0.3~3.0A 下对应的PWM值,得到一张10个值的表
- 当电流设置值与当前的电流设置值修改幅度大于0.3A时,直接设置到对应区间
-
- PWM已50ms周期调整,分档:
- 差值在0.2A以上时,每次调整20
- 差值在0.1A以上时,每次调整5
- 差值在0.05A以上时,每次调整2
- 差值在0.01以上时,每次调整1
- 差值小于0.01时,不调整
- 程序
uint16_t tab_cur_pwm[] = { // 数组下标是最大电流的1/10
1,2,3,4,5,6,7,8,9,10
};
void on_cur_set_change(uint16_t new_val, uint16_t old_val) {
if (new_val > old_val) {
if ((new_val - old_val) > 300) {
pwm_set = tab_cur_pwm[new_val/300];
}
} else if ((old_val - new_val) > 300) {
pwm_set = tab_cur_pwm[new_val/300];
}
}
void on_pwm_tick() {
}