用arduino做闭环buck电源,反馈搞不定,大家有什么好算法没?
本帖最后由 yifabin023 于 2012-12-14 21:33 编辑用arduino做闭环buck电源,反馈搞不定,大家有什么好算法没?
C语言基础差,加上刚接触arduino,有点懵。闭环反馈实在高不定了,上来问问他家怎么弄。。
贴个电路图,
我写的代码,自己都搞晕了,就是不闭环。
int Out_V = 0; //设置模拟口A0为电压采样输入端口
int Out_Vkeep = 1;//电压设置
long val; //定义一个变量
int Out_Vkeep1;//
char w1ord;
int k=0;
void setup()
{
Serial.begin(9600);//串口波特率
pinMode(3, OUTPUT);//PWM输出1 对应单片机的OC2B5脚
pinMode(11, OUTPUT);//PWM输出2 对应单片机的OC2A17脚
pinMode(Out_V, INPUT);//电压采样端口为A0口
pinMode(Out_Vkeep, INPUT);//设定电压端口
//analogReference(INTERNAL); //调用板载1.1V基准源
//TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
//16M时钟产生相位修正的PWM频率为32Khz左右
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20)| _BV(WGM21);
//16M时钟PWM频率为62.66Khz
TCCR2B = _BV(CS20);//时钟未分频
OCR2B = 0;//数字端口D3输出,占空比为0-255
OCR2A = 0;//数字端口D11输出,占空比为0-255
}
void loop()
{
int i ,j;
//Out_Vkeep1 = analogRead(Out_Vkeep);//读取设定电压
Out_Vkeep1 = 1023-400;//
val = analogRead(Out_V); //val变量为从A0口读取到输出电压的数值
j = Out_Vkeep1+(Out_Vkeep1-val);
i = j / 4;
if(i >= 255) i = 255;
if (i <= 0) i = 0;
OCR2B = i;//数字端口D3输出,占空比为0-255
OCR2A = i;//数字端口D11输出,占空比为0-255
k++;
if(k >= 2500)
{k=0;
//if (Serial.available() > 0) //判断串口缓冲器是否有数据装入
{
w1ord = Serial.read(); //读取串口
//if(w1ord=='a') //判断输入的字符是否为a
{
Serial.print(""); //从串口发送字符串
Serial.print(val); //从串口发送字符串
Serial.print(""); //从串口发送字符串
Serial.print(j); //从串口发送字符串
Serial.println(); //从串口发送字符串并换行
}
}
}
}
先在这里谢谢了! 论坛人气有点 地,没人回答啊:dizzy: 使用PID控制吧
cai_mouse 发表于 2012-12-14 22:44 static/image/common/back.gif
使用PID控制吧
不懂pid,能不能举个例子呢? 电感偏小了吧。。程序看着也不对劲。 本帖最后由 shidoukou 于 2012-12-17 09:39 编辑
是不是PWM 驱动能力问题?R1=10K,会影响MOSfet 的导通能力?
还有对电路图有一些不解的地方! 电路中是否要加反馈回路?
对你的设计比较感兴趣,祝福早点实现!加油{:soso_e179:} 你是采用pwm方式还是pfm工作方式阿?设计好工作电感才做反馈回路
页:
[1]