原创 用QT做一个搜索DC-DC配置电阻的工具

2023-9-12 17:44 1878 13 6 分类: MCU/ 嵌入式 文集: QT学习

设计DC-DC电路时,常常需要依据芯片的参考电压和需要的输出电压来计算配置电阻。在常用的电阻中找到合适的组合。 一个条件,求两个未知数。实际上并不容易得到想要的数据。不过可以将可选电阻值范围内,尝试各种组合。得到最优解。常用的电阻为 5%精度的 E24 1%精度的 E96 电阻。 E24 的取值为

 ,取1位小数。即 [ 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.9, 3.2, 3.5, 3.8, 4.2, 4.6, 5.1, 5.6, 6.2, 6.8, 7.5, 8.3, 9.1]

E96的取值为

2位小数。即 [ 1.0, 1.02, 1.05, 1.07, 1.1, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.3, 1.33, 1.37, 1.4, 1.43, 1.47, 1.5, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.0, 2.05, 2.1, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.8, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.4, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.9, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.5, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76]

方法是先设定好 Vout Vref。然后让 R1 R2 取选定电阻的所有组合,查找最接近的。 

因为电阻的取值有可能是10倍或100倍,在做查找前,先计算Vout 与参考电压Vref之间的倍率,如果大于100,则所选阻值加大100倍,如果大于10则加大10倍。先计算DivRatioNeed = Vout / VREF; 尝试电阻给合时的倍率DivRatio = (E24_resistors[j]*Rclass + E24_resistors[i]) / E24_resistors[i]; 比较一下DivRatioNeedDivRatio,留下偏差小的。所有组合尝试完成后,即得到最优电阻组合。

  1. // 计算最接近目标输出电压的电阻值
  2. void MainWindow::calculate_resistor(float VREF, float Vout) {
  3. float Rclass, DivRatioNeed, DivRatio, R1, R2, ERR;
  4. DivRatioNeed = Vout / VREF;
  5. ERR = 10;
  6. if(DivRatioNeed > 100){
  7. Rclass = 100;
  8. }
  9. else{
  10. if(DivRatioNeed > 10)
  11. Rclass = 10;
  12. else
  13. Rclass = 1;
  14. }
  15. for(int i = 0;i < E24_SIZE;i++){
  16. for(int j = 0;j < E24_SIZE;j++){
  17. DivRatio = (E24_resistors[j]*Rclass + E24_resistors[i]) / E24_resistors[i];
  18. if (qAbs(DivRatio - DivRatioNeed) < ERR){
  19. ERR = qAbs(DivRatio - DivRatioNeed);
  20. R1 = E24_resistors[i];
  21. R2 = E24_resistors[j]*Rclass;
  22. }
  23. }
  24. }
  25. ui->lbR1->setText(QString::number(R2));
  26. ui->lbR2->setText(QString::number(R1));
  27. ui->lbERR->setText("Vout = "+QString::number(VREF/R1*(R1+R2),'f',2)+" V\n"
  28. +"error = "+QString::number((VREF/R1*(R1+R2)/Vout-1)*100,'f',1)+" %");
  29. // ui->leOutput->setText(QString::number(VREF/R1*(R1+R2)));
  30. }

在选定好其中一个值R1后,查找R2时实际上可以先计算出准确值,缩小查找范围。搜索E96这样的大表会更快一些。

 

计算结果:输出 3.3V 参考电压为0.8时,可以用E24的电阻得到准确值。

使用1.23V参考时,使用E24得到的输出电压有偏差,用E96则无偏差。不过使用的电阻组合,分别是E24 E96表中的。

作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /5 下一条