Programmed Adjustable Power

Programmed Adjustable Power

I just explored an easy scheme to design a high precision programmed adjustable power.
In this scheme, there is no needs to make a complex PWM circult,
just a liner or switcher adjustable voltage regulator and a resister network, a DAC, and a MCU.

Resister network change DAC output voltage into feedback voltage
and let adjustable voltage regulator regulate output voltage itself.

Outputting an fixed voltage by using resister to control regulator may be easy,
but there is a little challenge to output adjustable voltage.

My mates used to use digital potentiometer to adjust output voltage, but digital potentiometer is too instable.

Lucky, DAC with a resister network works better, and they can provide high precision output witch depends the resolution of DAC.

In this figure, voltage of the node feedback is fixed by the Vref (OR Vsense) of regulator.

LM2576 is 1.23V, TPS5432 is 0.808V.

When there is voltage difference between Vout of DAC and Vref of regulator, the difference sets up an current in R2.

Then the current through R1 to the ground.

This adjustable current could change the resistance because voltage between Vref and GND is fixed

and no current will go into Vref pin duo to the virtual short and virtual open of the error amplifier inside of the regulator chip.

Now it‘s time to value R3, R2, R1.

Make sure that the output range of this regulator (Vout) and DAC (Vdac) , and Vref by checking the datasheet of part.
Then, list two equation.

(Vdac.max-Vref)/R2+(Vout.min-Vref)/R3=Vref/R1
(Vdac.min-Vref)/R2+(Vout.max-Vref)/R3=Vref/R1

Three unknown resistance, but two equation, we must assume the value of R3. 10K is very common.
Then check the Idac.max to make sure that DAC will not overloaded.

[Update 2014/Tue/22] PS:

Three terminal regulator, such as LM317 is not available to this equation because the 1.25V is between Ref pin and out pin.

We use TI‘s TLC5615, 10-BIT DIGITAL-TO-ANALOG CONVERTERS as our DAC.
This chip has 3-Wire Serial Interface, so we can use Arduino to control it.
Arduino is an open-source physical computing platform based on the AVR MCU.
Now give the Arduino program.

//Arduino project http://arduino.cc
//by Mini Dragon at http://minidr.com/archives/687
//This program is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.
#define CS 2 //chip enable
#define CLOCK 3
#define DATA  4

#define HALF_CLOCK_PERIOD 2 //2 uS of clock period
float j=0;
void setup()
{
    pinMode(DATA, OUTPUT);
    pinMode(CLOCK,OUTPUT);
    pinMode(CS,OUTPUT);
    digitalWrite(CS,HIGH);
    digitalWrite(DATA,LOW);
    digitalWrite(CLOCK,LOW);
}

void writeValue(uint16_t value)
{
    digitalWrite(CS,LOW);//start of 12 bit data sequence
    digitalWrite(CLOCK,LOW);
    data = data << 2; //Add 2 0 at the end of the data. A 10-bit data word should add 2 0 at the LSB bit (sub-LSB) since the DAC input latch is 12 bits wide.(SEE TLC5615C DATASHEET)
    for(int i=11; i>=0; i--)//send the 12 bit sample data
    {
        digitalWrite(DATA, (value & (1 << i) ) >> i );//DATA ready
        delayMicroseconds(HALF_CLOCK_PERIOD);
        digitalWrite(CLOCK,HIGH);//DAC get DATA at positive edge
        delayMicroseconds(HALF_CLOCK_PERIOD);
        digitalWrite(CLOCK,LOW);
    }
    digitalWrite(CS,HIGH);//end 12 bit data sequence
}

void loop()
{
    j=567; //in here, 567 is a example. DAC OUT=j*Vref/1024
    writeValue(floor(j));
}

Each DAC output voltage maps a main Vout.

Long day for me to update my blog. I even don‘t know my blog was blocked by our Great Fire Wall.

Yesterday I passed my first time of GRE test.

That‘s a f**k test.

But during the day of preparing the GRE, I got a chance to attend our University‘s electronic design contest.

In the contest, I fixed some problems of my power and add some now function into it.

This is the top layer of the power.

You can see a black PCB which plug into the main board.

That‘s a current detection module.

I using TI‘s INA200A to detecting the current of power‘s output.

Then using Arduino‘s ADC to check out the current if the current exceeds the threshold value.

This threshold value could change during the runtime.

If the power is overloaded, the relay (yellow thing) will cut off the output to protect the buck chip until manual reset the system.

The 1602 LCD could display the output voltage, output current and cut off thrshold current value.

Using Arduino to control the LCD is very simple like using printf() function in C language.

This the bottom layer of the power. I using the surface mount package part to keep the system small.

This is the out put waveforms.

About 15mV ripple voltage in 1A load, 10V output.

Fantastic result by using Nichicon HD aluminium electrolytic capacitor.

That‘s all of the

This project is open-sourced, under the licence of BY-NC-SA.

If you want the SCH, PCB file and Arduino file, leave the comment and I will mail you ASAP.

Thanks to Texas Instruments for offering me so many kind of chips free.

dfd

时间: 2024-08-27 18:00:12

Programmed Adjustable Power的相关文章

Cyclone II的IO资源学习

IO资源 IO是与外界沟通和控制的通道,fpga提供了丰富的IO和一些实用的特性. 本文简要的将主要的特性摘录下来做设计参考用.具体参数参考handbook. 第一部分:IO特性概述 -----通过软件的灵活配置,可适应不同的电器标准与I/O物理特性:可以调整匹配阻抗特性,上下拉电阻:可以调整输出驱动电流的大小等. 可编程上拉(Each Cyclone II device I/O pin provides an optional programmable pull-up resistor dur

I/O特性

IO资源 IO是与外界沟通和控制的通道,fpga提供了丰富的IO和一些实用的特性. 本文简要的将主要的特性摘录下来做设计参考用.具体参数参考handbook. 第一部分:IO特性概述 -----通过软件的灵活配置,可适应不同的电器标准与I/O物理特性:可以调整匹配阻抗特性,上下拉电阻:可以调整输出驱动电流的大小等. 可编程上拉(Each Cyclone II device I/O pin provides an optional programmable pull-up resistor dur

Power aware dynamic scheduling in multiprocessor system employing voltage islands

Minimizing the overall power conservation in a symmetric multiprocessor system disposed in a system-on-chip (SoC) depends on using voltage islands operated at different voltages such that similar circuits will perform at significantly different level

[LeetCode] Power of Three

Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it without using any loop / recursion? 判断一个数是否是3的幂,则这个数a的所有的约数都是3的幂,如果一个数b小于这个数a且是3的幂,则这个数b一定是a的约数.所以找出3的最大的幂,然后用这个数对n取余即可. class Solution { public: boo

poj 3134 Power Calculus(迭代加深dfs+强剪枝)

Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multiplications: x2 = x × x, x3 = x2 × x, x4 = x3 × x, …, x31 = x30 × x. The operation of squaring can be appreciably shorten the sequence of multiplications.

POJ 3233 - Matrix Power Series ( 矩阵快速幂 + 二分)

POJ 3233 - Matrix Power Series ( 矩阵快速幂 + 二分) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; #define MAX_SIZE 30 #define CLR( a, b ) memset( a, b, sizeof(a) ) int MOD = 0; int n, k; st

Power BI教程_Power BI数据分析快速上手及案例实战

Power BI数据分析快速上手及案例实战 课程学习地址:http://www.xuetuwuyou.com/course/194 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本课程在<Power BI 数据分析快速上手>基础上结合大量的实例,深入讲解PowerBI中看似难懂的各种概念.操作, 并结合行业中的典型案例贯穿了从初级的数据透视表工具.数据透视表选项.数据透视表的刷新.数据透视表中的排序,到中级的动 态数据透视表的创建.数据透视表函数 GETPI

leetcode 231. Power of Two

Given an integer, write a function to determine if it is a power of two. class Solution { public: bool isPowerOfTwo(int n) { int num = 0; while (n > 0) { if (n &1) num++; n/=2; } if (num == 1) return true; return false; } };

[LeetCode] Power of Two

Given an integer, write a function to determine if it is a power of two. 判断一个整数是否是2的幂.如果一个数是2的幂,则这个数的二进制表示中,最高位是1,其他位都是0.这个数-1的二进制位全是1.所以我们可以利用这个规律对两个数取与进行判断. class Solution { public: bool isPowerOfTwo(int n) { if (n <= 0) return false; return !(n &