![]() |
發布時間: 2024-3-13 11:43
正文摘要:adc采集與pwm程序單獨使用的時候都是可以的,但是兩個聯立起來,就是adc采集后數據處理然后重新給定占空比計數值,但是確輸出不了pwm波,不知道是哪里的問題,用的mcu是stc8h系列單片機,我單獨讀取adc給定一個固定 ... |
void Init_adc() { P1M0 = 0x00; P1M1 = 0x08; P_SW2|=0X80; ADCTIM=0X3f; //2C P_SW2&=0X7F; ADCCFG=0X0f; ADC_CONTR = 0x83; //p1.3ͨµÀ _nop_(); _nop_(); EA=1; EADC=1; ADC_RES=0; ADC_CONTR |= 0x40; } void main() { float Vout=0; float Vout_D=0; float V1=0,V2=0,V3=0; float Vp=4.2057; //4.2057 float D=0.15; float Kp=0.2,Ki=0.005; Init_adc(); PWM_Init(); while(1) { ADC_CONTR |= 0x40; _nop_(); _nop_(); while(!(ADC_CONTR&0x20)); ADC_CONTR &= ~0x20; voltage2 = ADC_RES;//((unsigned int)ADC_RES<<8)+ADC_RESL; Vout = voltage2*5/255; //Vout_D = voltage1*5/255; V1 = Vp-Vout; //V3+=V1; D = D + Kp*(V1-V2) + Ki*V1; V2=V1; if(D < 0 ) //|| Vout_D > 1.826*1.1) { D=0.0; } if(D > 0.45) { D=0.48; } pwm_value = D*120; PWMB_CCR7H = 0; PWMB_CCR7L = (unsigned char)(pwm_value); soft_delay(2); } } |
STC莊偉 發表于 2024-3-13 13:44 已經關了,如果直接用ad采樣的電壓值來改變占空比可以的,但是加了那個pid之后啊他會整天在最高占空比,改變電壓,占空比不變的。 |
排查一下ADC相關的代碼里面有沒有把擴展寄存器訪問使能關閉了。 |