一个新手建设网站怎么简单淘宝运营是做什么的工作
一个新手建设网站怎么简单,淘宝运营是做什么的工作,东莞企业推广网站制作,免费手机网站建站完整dab变换器的dsp28335程序#xff0c;包含状态机#xff0c;adc中断#xff0c;抗饱和pi算法等。DAB变换器的数字控制核心在于状态管理和实时调节#xff0c;搞过数字电源的兄弟应该都清楚#xff0c;这玩意儿对时序和精度的要求有多变态。拿DSP28335来搞的话#xff…完整dab变换器的dsp28335程序包含状态机adc中断抗饱和pi算法等。DAB变换器的数字控制核心在于状态管理和实时调节搞过数字电源的兄弟应该都清楚这玩意儿对时序和精度的要求有多变态。拿DSP28335来搞的话咱们得把整个系统拆成几个关键模块来盘。状态机这块必须得稳直接上switch-case结构最实在。比如定义运行模式、故障保护、待机这几个基本状态typedef enum { SYS_INIT, STANDBY, RUNNING, FAULT } SystemState; volatile SystemState g_sysState SYS_INIT;在main循环里搞个状态巡检重点注意状态切换时的硬件初始化。特别是从故障恢复时记得先复位PWM输出再清故障标志不然分分钟炸管给你看。完整dab变换器的dsp28335程序包含状态机adc中断抗饱和pi算法等。ADC中断这块有个坑得注意28335的ADC结果寄存器居然他娘的不是双缓冲结构这就意味着如果在中断里直接读取数据时刚好遇到ADC正在转换可能读到半截数据。解决办法是在中断里先把数据拷贝到临时变量__interrupt void adc_isr(void){ static struct AdcResult { Uint16 input_voltage; Uint16 output_current; } adc_buff; adc_buff.input_voltage AdcResult.ADCRESULT0 4; adc_buff.output_current AdcResult.ADCRESULT1 4; AdcRegs.ADCTRL2.bit.RST_SEQ1 1; // 复位排序器 AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR 1; PieCtrlRegs.PIEACK.all PIEACK_GROUP1; g_real_time_data adc_buff; // 用结构体整体赋值避免数据撕裂 }这里用结构体整体赋值是个骚操作因为28335是32位处理器两个16位数据刚好可以原子操作避免主程序读到不一致的数据。抗饱和PI算法才是重头戏普通PI在输出限幅时积分项会疯狂累积。咱们在误差符号变化时给积分项来个急刹车typedef struct { float Kp; float Ki; float integral; float out_max; float out_min; } AntiWindupPI; float pi_calculate(AntiWindupPI *pi, float error){ float output pi-Kp * error pi-integral; // 抗饱和处理 if((error 0 output pi-out_max) || (error 0 output pi-out_min)){ return (output pi-out_max) ? pi-out_max : pi-out_min; } pi-integral pi-Ki * error * 0.0001; // 根据控制周期调整 return output; }注意这里积分项更新前先判断输出是否饱和这样当系统处于饱和状态时积分器自动停止累积。实测这个操作能让系统从过载恢复时响应速度快一倍不止。最后把这三个模块串起来主循环里根据状态机切模式ADC中断喂数据PI计算结果扔给PWM模块。有个细节是PWM死区时间建议用硬件自动生成别在软件里折腾28335的ePWM模块配置好之后比软件模拟的靠谱多了void InitEPwm(){ EPwm1Regs.TBPRD SYSTEM_FREQ / SWITCHING_FREQ; // 周期寄存器 EPwm1Regs.CMPA.half.CMPA 0; // 初始占空比 EPwm1Regs.DBCTL.bit.OUT_MODE 0x3; // 使能上升沿和下降沿死区 EPwm1Regs.DBFED 100; // 死区时间ns级配置 EPwm1Regs.DBPRD 100; }调试时建议先拿电子负载做测试别直接上真实负载。曾经有个兄弟没加死区时间直接上电瞬间两千块的MOS管就放烟花了那味道能在实验室飘三天...