极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12248|回复: 6

用arduino做闭环buck电源,反馈搞不定,大家有什么好算法没?

[复制链接]
发表于 2012-12-14 21:26:12 | 显示全部楼层 |阅读模式
本帖最后由 yifabin023 于 2012-12-14 21:33 编辑

用arduino做闭环buck电源,反馈搞不定,大家有什么好算法没?
C语言基础差,加上刚接触arduino,有点懵。闭环反馈实在高不定了,上来问问他家怎么弄。。

贴个电路图,


我写的代码,自己都搞晕了,就是不闭环。

  1. int Out_V = 0; //设置模拟口A0为电压采样输入端口
  2. int Out_Vkeep = 1;//电压设置
  3. long val; //定义一个变量
  4. int Out_Vkeep1;//
  5. char w1ord;
  6. int k=0;

  7. void setup()
  8. {
  9.       Serial.begin(9600);//串口波特率
  10.       pinMode(3, OUTPUT);//PWM输出1 对应单片机的OC2B  5脚
  11.       pinMode(11, OUTPUT);//PWM输出2 对应单片机的OC2A  17脚
  12.       pinMode(Out_V, INPUT);//电压采样端口为A0口
  13.       pinMode(Out_Vkeep, INPUT);//设定电压端口
  14.        //analogReference(INTERNAL); //调用板载1.1V基准源
  15.      //TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
  16.       //16M时钟产生相位修正的PWM频率为32Khz左右
  17.      TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20)| _BV(WGM21);
  18.       //16M时钟PWM频率为62.66Khz
  19.       TCCR2B = _BV(CS20);//时钟未分频
  20.       OCR2B = 0;//数字端口D3输出,占空比为0-255
  21.       OCR2A = 0;//数字端口D11输出,占空比为0-255
  22.      
  23. }

  24. void loop()
  25. {   
  26.   int i ,j;
  27.     //Out_Vkeep1 = analogRead(Out_Vkeep);//读取设定电压
  28.     Out_Vkeep1 = 1023-400;//
  29.     val = analogRead(Out_V);   //val变量为从A0口读取到输出电压的数值
  30.     j = Out_Vkeep1+(Out_Vkeep1-val);
  31.     i = j / 4;
  32.       if(i >= 255) i = 255;
  33.       if (i <= 0) i = 0;
  34.     OCR2B = i;//数字端口D3输出,占空比为0-255
  35.     OCR2A = i;//数字端口D11输出,占空比为0-255
  36.     k++;
  37.     if(k >= 2500)
  38.     {k=0;
  39.    
  40.         //if (Serial.available() > 0) //判断串口缓冲器是否有数据装入
  41.               {
  42.                   w1ord = Serial.read(); //读取串口
  43.                   //if(w1ord=='a') //判断输入的字符是否为a
  44.                       {
  45.                           Serial.print(""); //从串口发送字符串
  46.                          Serial.print(val); //从串口发送字符串
  47.                           Serial.print("  "); //从串口发送字符串
  48.                            Serial.print(j); //从串口发送字符串                           
  49.                           Serial.println(); //从串口发送字符串并换行
  50.                         }
  51.                 }
  52. }
  53. }
复制代码
先在这里谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2012-12-14 21:52:50 | 显示全部楼层
论坛人气有点 地,没人回答啊
回复 支持 反对

使用道具 举报

发表于 2012-12-14 22:44:59 | 显示全部楼层
使用PID控制吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-14 23:03:54 | 显示全部楼层
cai_mouse 发表于 2012-12-14 22:44
使用PID控制吧

不懂pid,能不能举个例子呢?
回复 支持 反对

使用道具 举报

发表于 2012-12-17 01:06:34 | 显示全部楼层
电感偏小了吧。。程序看着也不对劲。
回复 支持 反对

使用道具 举报

发表于 2012-12-17 09:33:10 | 显示全部楼层
本帖最后由 shidoukou 于 2012-12-17 09:39 编辑

是不是PWM 驱动能力问题?R1=10K,会影响MOSfet 的导通能力?
  还有对电路图有一些不解的地方! 电路中是否要加反馈回路?

对你的设计比较感兴趣,祝福早点实现!  加油{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2012-12-18 20:57:49 | 显示全部楼层
你是采用pwm方式还是pfm工作方式阿?设计好工作电感才做反馈回路
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 11:45 , Processed in 0.079396 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表