|
本帖最后由 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 对应单片机的OC2B 5脚
- pinMode(11, OUTPUT);//PWM输出2 对应单片机的OC2A 17脚
- 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(); //从串口发送字符串并换行
- }
- }
- }
- }
复制代码 先在这里谢谢了! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|