|
帶有PID閉環控制,存在問題是調整率低,51單片機制作
單片機源程序如下:
- void PWMProcess(void)
- {
- uint16 idata temp;
- uint16 idata UKTemp;
- temp = 0;
- UKTemp = 0;
-
- if( Pwm.ChangeFlag_Uint8 != 0 ) //???????????
- { //????????????????????
- Pwm.ChangeFlag_Uint8 = 0;
-
- UKTemp = PID.Uk_Uint16 + SwIn.AddValue_Uint16;//??UK???
- //????????????????,????????????????????????????
- if(UKTemp>999)
- {
- UKTemp = 999;
- } //??????999?????1024???????PWM??????12V???
- while(1)//????????????? Delta,????????,???????
- {
- ADChPro(UPWMADCH); //??????
- if( ADPool.Value_Uint16[UPWMADCH] == UKTemp)
- {
- return;
- }
- if( ADPool.Value_Uint16[UPWMADCH] > UKTemp) //????????????,?????
- {
- if( ( ADPool.Value_Uint16[UPWMADCH] - UKTemp ) > UDELTA )
- {
- temp = ADPool.Value_Uint16[UPWMADCH] - UKTemp; //
- temp = temp / 2; //????????,???????? -----/*PWM????UK/4*/
- if( Pwm.DutyCycle_Uint8 > temp )
- {
- Pwm.DutyCycle_Uint8 = Pwm.DutyCycle_Uint8 - temp;
- }
- else
- {
- Pwm.DutyCycle_Uint8 = 0;
- }
- }
- else
- {
- return;
- }
- }
- else //????????????
- {
- if( ( UKTemp - ADPool.Value_Uint16[UPWMADCH] ) > UDELTA )
- {
- temp = UKTemp - ADPool.Value_Uint16[UPWMADCH];
- temp = temp / 4; //????????,?????+??
- if( (255-Pwm.DutyCycle_Uint8) > temp )
- {
- Pwm.DutyCycle_Uint8 += (temp/2);
- }
- else
- {
- Pwm.DutyCycle_Uint8 = 255;
- }
- }
- else
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
BUCK_adj.zip
(156.28 KB, 下載次數: 168)
2017-5-16 15:29 上傳
點擊文件名下載附件
|
|