菜鸟怎样做自己的网站国外域名服务商

当前位置: 首页 > news >正文

菜鸟怎样做自己的网站,国外域名服务商,网站建设开场白,网络规划设计师教程第2版pdf下载《基于STM32的单相瞬时值反馈逆变器》 整体功能#xff1a; 图13 软件框图 如图13所示#xff0c;由于本设计中需要通过定时器中断执行一些程序#xff0c;故首先对中断进行初始化。中断初始化以后即为对串口进行初始化#xff0c;总共初始化了两个串口#xff0c;第一个…《基于STM32的单相瞬时值反馈逆变器》 整体功能 图13 软件框图 如图13所示由于本设计中需要通过定时器中断执行一些程序故首先对中断进行初始化。中断初始化以后即为对串口进行初始化总共初始化了两个串口第一个串口波特率为9600主要目的是为了传输数据至串口调试助手用来测试。第二个串口波特率为4800主要目的是接收电能测量得出的数据解析电能测量模块传过来的串口数据采集到交流电压和交流电流信号。串口初始化完成以后紧接着对定时器进行初始化在本设计中用到了两个定时器。第一个定时器为定时器三其作用是开启PID追踪定时器三的中断频率为20KHz即为50us。设置中断频率为20KHz的原因在于需要以这种频率去改变驱动PWM的占空比本设计拟采用PWM模拟SPWM的模式故需要在一个工频周期内产生更多的正弦点在软件内部使得PWM的占空比以正弦波的形式去变化一个周期为50Hz即20ms。根据这个关系可算得在一个工频周期内需要模拟出400个正弦波点其中前200个点代表是正弦波的正半周期后200个点代表正弦波的负半周期。在定时器三的中断中定义了一个暂态变量当暂态变量等于400的时候也就是一个工频周期过去以后执行一次PID的执行函数通过PID去追踪一次目标电压。故在1s内可对整个系统进行50次的追踪。定时器一的工作频率也为20KHz方便进行驱动在定时器一的初始化函数中对死区进行了设置并且复用IO口作为互补驱动输出口。 定时器初始化完毕以后对LED按键进行了初始化。紧接着初始化了PID的参数PID的参数初始化根据系统的不行进行确认由于我们用到了PI环所以对P环的参数和I环的参数都进行了初始化。用到的PID为增量式PID每次输出的值是在原基础上进行加减而并不是直接赋值这样的好处在于有一个追踪爬坡的过程。当初始化完毕以后就对屏幕进行初始化和清屏同时关闭继电器电源输入关闭PID关闭PWM的输出。随后进入初始化界面当检测到Set按键按下以后打开继电器电源能正常输入到单相逆变电路中。同时也使能了PID和打开PWM的输出。由于定时器三早已初始化PWM模拟SPWM的函数早已开始运行故此刻逆变电路已经开始工作不过输出占空比需要乘以一个调制系数才是真正的输出在设计中设定调制系数越高输出的交流电压幅值就越高调制系数越低交流电压幅值就越低。软启动的含义在于渐渐增加调制系数调制系数设定最高为1200对应正常幅值输出的1.2倍最低输出100对应幅值的0.1倍。一般来说驱动MOS管的占空比不能跑满会带来很大的负荷量。 当软启动以后电路已经开始正常工作。此时可以通过按键选择工作模式和设定的追踪电压或者追踪功率。当工作模式设定完成以及追踪目标设定完毕后电路开启PID追踪模式直到获得追踪的目标电压值。 1PWM模拟SPWM算法实现 此算法要与实际电路建立联系单相逆变电路存在两个对管电路中电阻两端已经确认了电压的方向若想要让电阻两端电压从宏观的角度测出来为0V故需要在这一段时间的负电压和正点压占比相同比如一半的时间正电压为10V一半的时间负电压为-10V这样相互抵消最终测出的电压就为0V。根据这个原理当占空比为50%的时候左右对管导通的时间相同正电压和负电压幅值相同极性相反同样时间也相同故电阻呈现0V。若加大占空比则正电压占比时间增多整体就呈现正电压。若减小占空比则负电压占比时间增多整体呈现负电压。因此通过控制占空比大于50%或者小于50%就可实现电压正负并且高出50%越多正电压越大。按照这个原理只需要把50%的占空比是为0电位让占空比按照正弦表的规律去变化如从50%变化到75%再到50%到25%最终再回到50%就实现了一个正弦的生成。这个阶段变换的点数越多交流电压的图像就越平滑线性度就越好。改变交流电压幅值的方法通过改变大于50%的最大占空比即可实现需要注意的是大于50%的最高占空比差值与最小占空差值需一致这样才能实现上下幅值相等且以0电位为分割线的作用。
图14 PWM模拟SPWM算法流程 PWM模拟SPWM算法如图14所示。首先确定最高占空比对应的幅值此处设定100%占空比对应幅值为3600故50%占空比设置为1800。由于占空比不能弄满所以我们设定偏离50%占空比25%即2700。将此数据导入到SPWM表设定好生成的点数即可生成一个正弦数组表。在软件内部定义一个400内存的数组将数组表赋值进去每隔50us执行一次数组表的功能。以下是设定的PWM控制函数TIM1是高级定时器一由于用到的是定时器一的通道一所以通过此函数驱动。SinData是设定的正弦数表spwm_count变量每50us增加1length是设定的数组长度。因此通过这个取余可以每经过一次循环对数组内部的值进行加1移位。减去1800的意思是先把50%占空比弄到0电位再乘以调制系数由于调制系数是以1000为单位故还需除以1000。调整好了以后再加上1800即回到50%占空比。 set_pwm(TIM1,1,(u16)((sinData[spwm_count%length]-1800)duty/10001800),3500); 2PID功能实现 在本设计之中PID的作用是追踪特定的输出电压或特定功率。由于输入直流电压恒定故实现输出交流电压可调需要通过PID实现。PID环节会采集检测到的交流电压信号交流电压信号送入反馈函数中与目标值做比较。若小于目标电压则根据小于的比例以及变换的方向进行调节输出增量增量的应用对象为调制系数。调制系数越大输出电压幅值越大调制系数越小输出电压幅值越小。 在PID的函数中需要输入五个变量。格式为PID_X(float now,float target,float kp,float add_limit,float out_limit)其中now为检测到的交流电压target为设定的目标电压kp为比例环的调节系数add_limit代表每一次执行增加的限制在交流电压和目标电压相差过大时比例环节会有比较大的差值故输出的增量也大需限制增量否则会让电路迅速波动容易造成输出紊乱。Out_limit参量含义在于限制住最大输出前文提到了MOS管如果100%占空比容易损伤器件故对此进行一个限制使得最终不能超过特定的占空比实现安全保护。 以下是PID里面的主要调节参数环节reaval是当前值Ek为当前误差Pout是比例环比例环的定义为当前的误差乘以比例系数其中kp可调增大kp比例差分出来的结果就较大一些减小则影响小一些。公式完全按照PID的控制方式进行书写其中I环的公式是根据当前误差与上一次误差的差值进行判断起到刹车的效果。OUT_Single是三次环节累加的结果这个参数将加到当前的输出结果上或者减去。对输出也进行了限位防止最终输出出现过度的情况产生。 pid.reavalnow;//当前值 pid.Ektarget-pid.reaval;//当前误差指定值减去当前值 pid.Poutkppid.Ekpid.T/pid.Ti; //P公式 pid.Ioutpid.Kp_I(pid.Ek-pid.Ek_1);//I公式 pid.Doutpid.Kp_Dpid.Td(pid.Ek-pid.Ek_1-pid.Ek_1pid.Ek_2)/pid.T;//D公式 pid.OUT_Singlepid.Poutpid.Ioutpid.Dout; if(pid.OUT_Singleadd_limit)pid.OUT_Singleadd_limit;//限位 else if(pid.OUT_Single-add_limit)pid.OUT_Single-add_limit; OUTpid.OUT_Single; if(OUTout_limit)OUTout_limit;//输出限位限位的范围是300-sum_limit(自行设定) else if(OUT100)OUT100; pid.Ek_2pid.Ek_1;//将上次误差赋值给上上次误差 pid.Ek_1pid.Ek;//将当前误差赋值给上次误差 在TIM3的定时器中根据当前的mode_status状态进行判断当mode_status的状态为1的时候执行电压追踪的作用。当mode_status2时实现功率追踪的作用。 if(mode_status1)dutyPID_X(ACVotage*10,AC_Target,kp_v,1,1200); if(mode_status2)dutyPID_X(ACVotage*7.228,gonglv_Target,kp_p,1,1200); 3交流电压电流信号检测 由于与电能测量模块的串口通信协议已经包装好因此在串口中断函数处已经将数据处理完毕在主函数while循环内进行数据处理。ACVotage为交流电压的有效值由于采集会存在着一定的误差所以要乘以一个校正系数。校正系数的调整方法为先测出交流电压的大小然后求出显示的交流电压误差近似相等即可。交流电流的调整方法类似也是通过系数进行改变。另外也设定了继电器断开的条件如交流电压超过31V交流电流超过3A当累计超过了150ms以后判定为危险状态从而断开继电器。 ACVotage(Voltage_Parameter_Reg*1.88/Voltage_Reg)jiaozheng;//电压有效值 if(ACVotage2)ACVotage0; ACCurrent(Current_Parameter_Reg1.0/Current_Reg)*0.4893;//电流有效值 if(ACVotage31.00f||ACCurrent3.00f)baojing1,delay_ms(50); else baojing0; if(baojing3)GPIO_ResetBits(GPIOA,GPIO_Pin_0),baojing0; 作品展示 资料详情 说明 成品设计不易详情关注闲鱼店铺数字梦想家查看评论区。