0

Comments

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);
	for(int i=9;i>=0;i--)//send the 10 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(DATA,LOW);//A 10-bit data word with two bits below the LSB bit (sub-LSB) with 0 values must be written since the DAC input latch is 12 bits wide.(SEE TLC5615C DATASHEET)
	delayMicroseconds(HALF_CLOCK_PERIOD);
	digitalWrite(CLOCK,HIGH);//DAC get 1 bit useless data at positive edge
	delayMicroseconds(HALF_CLOCK_PERIOD);
	digitalWrite(CLOCK,LOW);
	delayMicroseconds(HALF_CLOCK_PERIOD);
	digitalWrite(CLOCK,HIGH);//DAC get 1 bit useless data at positive edge
	delayMicroseconds(HALF_CLOCK_PERIOD);
	digitalWrite(CLOCK,LOW);
	digitalWrite(CS,HIGH);//end 12 bit data sequence
}
 
void loop()
{
	j=567;//DAC OUT=j*Vref/1024
	writeValue(floor(j));
}

Each DAC output voltage maps a main Vout.
To be continued.

< , >
5

Comments

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.

fig1

In this figure, voltage of the node feedback is fixed by the Vref (OR Vsense) of regulator. LM317 is 1.25V, 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 quantity, 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.

To be continued.

< >
4

Comments

伟大的电子设计产物, 电源组竞赛作品样品, 400V 高压 PFC 直流输入, 反激 + TL431 反馈, 36V 2A 输出, 设计优良的 "大只" 电源, 因制作新电源缺乏材料, 于 2011 年 12 月 17 日上午 8 点 30 分被拆解.

"大只" 电源是 TOP Switch 系列电源的伟大领导者, 它把毕生精力献给了繁荣开关电源的伟大事业, 建立了不朽的历史功勋. "大只" 电源是电子设计参赛同学的亲密朋友, 它以极大热情继承和发展了同学对电子设计的乐趣, 同老师同学结下了深厚友谊, 有力地推动了鄙校电子设计不断向前发展. 全体电子设计同学对 "大只" 电源的逝世深感悲痛, 我们将永远怀念它.

10

Comments

根据 信息时报 的报道, 爱疯"只要一不符合保修条件, 就需要支付上千元甚至与手机价格相近的维修费用".

前几天我们工作室里的一个同学要我来帮他会诊下他的 touch. 他的 touch 无法开机, 充电无显示, 送修, 被告知要换主板, 需要支付一千多的费用.
同学觉得有点坑爹. 于是没有修, 拿过来帮我会诊.
我拿到手后拆开, 检查了一下是电池没有电压输出. 用外部电源接到电源接口发现机器能工作. 判断电池损坏.
然后查了下是电池短路, 请隔壁寝室同学解锁解锁, 稍微充了一点电. 能正常开机, 就是无法充电.
后来仔细一检查是机身尾部的排插口中的电源针断了, 用引线拉出能正常充电.

因为主板上插座附近元件焊点比较多, 不敢从淘宝上买一个 (25软妹币) 自己焊接, 然后拿到学校边上的小店指明就换那个插件, 价格就少很多了.
技术宅拯救世界啊~!

< >
0

Comments

L6561,L5652 是 ST 公司的 APFC (Active Power Factor Corrector, 主动功率因数校正器) 芯片.
在环保节能绿色时代, 功率因数也成为电器的一个重要指标. 由于家用电器往往不是纯电阻性的, 负载带一定的电容或者是电感, 如开关变压器的线圈等.
这些非纯电阻的电抗元件会造成电压和电流的相位差.
功率因数指的是电流和电压的相位差的余弦值 cosφ.
功率因数越高, 相位差越小, 效率也有相应的提升.
APFC 电路就是一种能主动匹配负载的功率因数并且进行校正的电路.
当然, APFC 电路本身也要耗能, 有些电路本身效率就很高, 就没有必要使用 APFC 了. 被动式 PFC 相对成本就小, 当然成本计算不在我的讨论范围之内.

电路图请参考官方 L6561 的 图4, Typical Application Circuit (120W, 220VAC).

C1 的作用是交流输入滤波, 由于 APFC 电路的性质, 去掉也能很好的工作, 就是会降低一点点效率.
R9, R10 构成分压网络, 检测输入电压波形. C7 用于去耦滤波.
R3 是启动分压电阻, 和芯片内部的 20V 稳压二极管构成稳压电路给芯片启动时的供电.
T 的初级是储能电感, 按照图给出的参数绕到 0.8mH 就可以正常工作.
T 的次级有两个作用, 一个是感应出当前电流并通过 R1 降压输入到芯片的 5 脚进行过零检测. 另外作用是辅助供电.
辅助供电输出的电压通过 R2, C6 的滤波, D2 的稳压二极管进行降压滤波. D2 的稳压电压一般取 18V.
等芯片正常工作后, 供电主要由 T 来供, 芯片 8 脚的电压由 12V变成18V, 同时 MOS 管的栅极驱动电压也上升了, 能让MOS管快速饱和降低能耗.
D3 的作用是防止启动电压倒流到 T 的次级. 由于芯片上电时候 BOOST MOS 没有工作, T 的次级没有感应电压, 所以倒流是很危险的. D3 用 4148 就可以工作.
C2 是输入电源的滤波电容, 值可以取大一点. 同时要并联小电容.
R5,MOS,T,D1 构成了典型的 BOOST 电路, D1 用几个 FR107 并联就可以了.MOS 用 6N60 就可以工作, 太大没有必要.
R6 的作用和 UC3842 中的源级电阻差不多, 反正都是检测电流用的.
R7, R8 构成分压网络, 决定输出电压. 输出在 400V 的时候效率最高, 1 脚的电压是 2.5V, 所以还是老老实实算吧.
C3 是补偿电容.最好旁路接一个 10nF 电容串联 2K 的电阻.
C5 是输出滤波电容.

检查电路后就上电测试.负载用 2 个 25W 灯泡串联即可.
注意高压危险, 调试前请默念 "春哥纯爷们" .
工作正常的特征是上电灯泡比较暗, 过 1 秒不到灯泡正常工作. 输出电压 400V直流.
如果灯泡比单独接入 220V 暗, 就是没有工作. 确认元件正常的情况下, 减少 R3 的值, 使 8 脚能测到 12V 左右的电压. 电阻不要调得太小, 降低效率. 我自己用了 300K.
如果还是不行, 变压器次级多绕一圈, 再试. 不能绕太多, 变压器次级用示波器测试的电压正峰值在 20V 左右就可以了. 否则在 D2, R2 上的耗能会上升.
一般来说不工作就是供电的问题. 可以外接稳压电源试试.
线圈多绕 R1 也要增加, 5脚电压峰值取5V就可以了, 太小检测不到过零, 太大能耗上升.

电路的效率一般都能做到 90 以上, 功率因数一般能做到 98 以上. 输出功率最大 100W 左右, 适合用在笔记本电脑电源, 大型 LED 路灯, 电动车充电器上.

< >
5

Comments

用开源硬件平台 Arduino 制作了一辆寻迹小车.

硬件非常简单, 几个5000型红外对管, 利用红外线在白板上反射, 光敏二极管呈低阻; 在黑线上被吸收, 光敏二极管呈高阻的原理探测轨迹, 再通过一个斯密特触发器修正波形, 输入信号到 Arduino 平台, 处理信息, 最后 Arduino 输出占空比可调的 PWM 波加上驱动电路改变两个轮子的速度来控制小车的方向.

程序: 只有参考意义. 最后还是要仔细调整占空比的. 否则会冲出跑道.

int left=10;//定义左电机PWM输出端口
int right=9;//右电机PWM输出端口
int l2=5;
int l1=4;
int r1=3;
int r2=2;//定义传感器输入端口
int l;
int r;//测试数据
 
void setup() {
	//Serial.begin(9600);//启动串口,用于调试
	pinMode(l2,INPUT);
	pinMode(l1,INPUT);
	pinMode(r1,INPUT);
	pinMode(r2,INPUT);//定义输出端口作用,PWM输出不需要定义
}
void loop() {
	int left2=digitalRead(l2);
	if(left2==HIGH)
		left2=1;
	else
		left2=0;
	int left1=digitalRead(l1);
	if(left1==HIGH)
		left1=1;
	else
		left1=0;
	int right1=digitalRead(r1);
	if(right1==HIGH)t
		right1=1;
	else
		right1=0;
	int right2=digitalRead(r2);
	if(right2==HIGH)
		right2=1;
	else
		right2=0;//将输入的高低电平转换成0或者1
 
	int data=left2*1000+left1*100+right1*10+right2;//转换全部数据到一个变量,方便计算
	switch(data)
	{
		case 111://0111,由于触发器反转,0表示检测到黑线,111表示白线,就是黑线在左边
			analogWrite(left,63);l=63;//左轮减速,模拟量用PWM输出,输出量为63/255就是1/4的占空比
			analogWrite(right,255);r=255;//右轮全速
			break;
		case 11://0011
			analogWrite(left,127);l=127;
			analogWrite(right,255);r=255;	
			break;
		case 1011:
			analogWrite(left,191);l=191;
			analogWrite(right,255);r=255;
			break;
		case 1001://在中间
			analogWrite(left,255);l=255;
			analogWrite(right,255);r=255;
			break;
		case 1101:
			analogWrite(left,255);l=255;
			analogWrite(right,191);r=191;
			break;
		case 1100:
			analogWrite(left,255);l=255;
			analogWrite(right,127);r=127;
			break;
		case 1110:
			analogWrite(left,255);l=255;
			analogWrite(right,63);r=63;
			break;
		default:
			analogWrite(left,0);l=0;
			analogWrite(right,0);r=0;
			break;
	} //end case
	delay(500);
/*用于串口调试数据,可以不用,这里将其注释
	Serial.print(left2);
	Serial.print(left1);
	Serial.print(right1);
        Serial.print(right2);
        Serial.print(" -> ");
	Serial.print(l);
	Serial.print(" ");
	Serial.println(r);*/
}

标准的 C 语言用法. 非常简单吧.
为了节省开发成本, 我自己买了 ATMEGA328P ,参考了 Arduino UNO 的电路图画了自己的电路板. 电机驱动电路用了 ULN2003 达林顿堆 ( 其实可以用 MOS 管的 ), 这样比较便宜. 供电用了航模电池, 单片机和传感器分开用 7805 供电, 节省干扰.

最后跑了下效果还不错.

< >