欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
參考壇友DCDC 51單片機PWM PID電源仿真程序,改了一下
[打印本頁]
作者:
ZHAOBAO511
時間:
2023-10-11 09:32
標題:
參考壇友DCDC 51單片機PWM PID電源仿真程序,改了一下
之前的程序下載 后不啟動,不知道是不是版本問題,改后正常。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
93231.png
(206.75 KB, 下載次數: 38)
下載附件
2023-10-11 09:32 上傳
單片機源程序如下:
#include"reg52.h"
#include"iic.h"
#include"math.h"
#include"intrins.h"
//#define unsigend char uchar
sbit pwm=P2^7; // 定義pwm脈沖
sbit P01=P0^1; // 定義pwm脈沖
sbit CS = P1^2; //使能。
sbit CLK = P1^3;//時鐘
sbit DIO = P1^4;
sbit button1=P3^0;
sbit button2=P3^1;
sbit button3=P3^2;
sbit button4=P3^3;
sbit button5=P3^4;
int pwm_add=0; //pwm增量
int PWM_control=0; //pwm占空比調節
float voltage_get=0; //獲取電壓值
float voltage_set=0; //設定電壓值 這個地方就是你要設定的電壓 修改這個值就可以獲得想要的電壓值 現在是36V
float voltage_kp=0.01; //PID KP比例系數
float voltage_ki=0.1; //PID KI積分系數
float voltage_output=0; //PID輸出
float voltage_error=0; //實際值與給定的誤差
float voltage_error_last=0; //記錄上次的誤差
void timer_init();
unsigned char Get_ADC(bit ch);
static void Delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 990; j++);
}
void main()
{
timer_init(); //初始化定時器
pwm=0;
voltage_set=12;
while(1)
{
if(!button1)
voltage_set=0;
else if(!button2) voltage_set=3;
else if(!button3) voltage_set=6;
else if(!button4) voltage_set=9;
else if(!button5) voltage_set=12;
// voltage_set=9;
// Delay_ms(3);
//PWM_control=20;
}
}
//定時器0 用于產生PWM波
void timer_irq() interrupt 1
{
pwm_add++;
if (pwm_add==PWM_control)
{pwm=0;}
else if (pwm_add==50)
{
pwm=1;
pwm_add=0;
}
}
void timer1_irq() interrupt 3
{
TH1=(65536-50000)>>8;
TL1= 65536-50000;
voltage_get=(Get_ADC(0)/10.2);//獲取當前電壓
//voltage_get=(Get_ADC(0));//獲取當前電壓
// voltage_get=17;
//voltage_set= voltage_set*10;
voltage_error=voltage_set-voltage_get;//當前差值=設置的減去獲取的。
voltage_output+=voltage_kp*(voltage_error-voltage_error_last)
+voltage_ki*voltage_error;
voltage_error_last=voltage_error;
if (voltage_output>49)
voltage_output=49;
else if(voltage_output<1)
voltage_output=1;
PWM_control=(int)voltage_output;
}
//定時器初始化 具體的下面的代碼已經配置好了 不用太關注
void timer_init()
{
TMOD=0X12;
TH0=TL0=256-200;
TH1=(65536-50000)>>8;
TL1= 65536-50000;
EA=1;ET0=1;ET1=1;TR0=1;TR1=1;
}
unsigned char Get_ADC(bit ch)
{
unsigned char i,dat1 = 0,dat2 = 0;
//啟動AD轉換
CS = 0; CLK = 0;
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0; DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0; DIO = ch; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0; DIO = 1; _nop_(); _nop_();
//從高位開始讀
for(i = 0; i < 8; i++)
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
dat1 = (dat1 << 1)|DIO;
}
//從低位開始讀
for(i = 0; i < 8; i++)
{
dat2 = dat2|((unsigned char)DIO<<i);
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
}
CS = 1;
//返回讀取結果
return dat1;
}
復制代碼
仿真程序51hei附件下載:
dcdc buck 閉環4.7z
(283.99 KB, 下載次數: 38)
2023-10-11 14:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1