2012年TI杯简易直流电子负载解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易直流电子负载设计与总结报告湖北仙桃职业学院:杨青林胡炎
何方
指导教师:刘祖云刘明江
简易直流电子负载的设计与总结报告
简易直流电子负载的设计与总结报告
摘要
本系统设计的是直流电子负载,以TI公司16位的单片机MSP430为控制核心,由按键模块,D/A转换模块,恒流源模块、以及液晶显示模块等主要外围电路构成。
通过对 DA的控制,达到对恒流值在一定范围内的控制,流过该电子负载的电流恒定,且电流值可设定。
之后通过内部AD的采集模块将实际端
电压、端电流值送到单片机控制模块,能够检测被测电源的电流值、电压值;各个参数通过显示模块加以显示。
本设计着重阐述了系统框架、工作原理、软硬件设计,并给出了系统测试表。
测试结果表明,该系统具有稳定性强、调节速度快的特点,很好的满足了提出的性能指标。
关键词:恒流源、TM12864Z-1液晶、D/A、采样电路(电压采样、电流采样)、键盘、被测电源。
J ' * 匕品f 性c VCK i r.i z A i. 简易直流电子负载的设计与总结报告一.系统结构原理图
本系统由以下部分组成:电源电路、单片机、功率控制电路、电压、电流米
样电路、D/A输出、键盘输入、液晶显示电路。
系统总体结构框图如图1所示:
图1系统总体结构框架
二.方案比较与论证
1.主控芯片
方案一:选用ATMEL公司的AT89C51作为该系统的微控制器。
51单片机
软件编程灵活,自由度大,可用软件编程实现各种算法和逻辑控制,单片机为8 位机,价格便宜,成本低,控制简单。
但 51单片机功耗较高、运行速度慢、储存空间小内存只有8Kb,片内资源少,存储容量小,难以存储大容量的程序和实现快速精准的反应、控制、计算。
使用 AT89C51需外接两路AD转换电路,实现较为复杂。
方案二:选用TI公司MSP430单片机作为该系统的微控制器。
MSP430单片机是16位的单片机,数据处理速度快,耗能低,保密性能好,内存空间大,抗干扰性好,内部集成资源丰富,存储容量大,低电源电压( 1.8V — 3.6V),支持多个中断源,可任意嵌套,时钟系统灵活,具有A/D转换等电路。
考虑到本系统对单片机性能要求较高,本设计采用了方案二,选用MSP430 单片机作为直流电子负载微控制器。
2.D/A转换电路
方案一:采用DAC0832的DA芯片,DAC0832是8位分辨率,双通道A/D 转换,5V 电源供电,工作频率为250KHZ,转换时间为32us, —般功耗为15mW。
方案二:采用TLC5615的D/A芯片,它是一个串行10位的DA芯片,性能比早期电流型输出的DA要好,只需要通过3根串行总线就可以完成10位数据的串行输入,5V 供电,微功耗,最大功耗为1.75mW,转换速率快,更新率为 1.2MHz,上电时内部自动复位。
根据方案比较与论证,本系统选择方案二。
3.液晶显示电路
方案一:用数码管进行显示。
数码管亮度高、显示速度快、显示效果简洁明了。
但是数码管需要实时的进行动态扫描,需要外加三极管或者锁存器进行驱动,硬件电路设计较为复杂。
且显示信息简单、有限,只能显示有限的数字和符号,在本题目中应用受到很大的限制。
方案二:采用TM12864Z-1液晶显示,显示效果为蓝底白字、数据传输:串、并口兼容STN(黄绿模、灰模、黑白模)反射型,带EL或LED背光源EL/30VAC, 400HZ 带EL驱动,内置ST7920简、繁体中文字库控制器,可3.3v或5v供电,显示4行,每行显示12个汉字。
根据方案比较与论证,本系统选择方案二。
4.恒流源电路
方案一:由晶体管构成恒流源该电路的缺点之一在于电流的测量精度受到两
个晶体管的匹配程度影响,其中涉及到比较复杂的工艺参数。
另一缺点在于,集电极最大输出电流约为几百毫安,而题目要求输出电流为100〜1000mA,因此由晶体管构成的恒流源不适合采用。
方案二:由运算放大器加上扩流管构成恒流电路,既能利用运算放大器准确的特性,输出又能达到要求。
采用高精度运算放大器OPA227,更能增加其准确
的性能;采用IRF540场效应管进行扩流,具有很大的扩流能力,两者结合,可以实现比较精确的恒流电路。
根据方案比较与论证,本系统选择方案二。
5.A/D转换电路
方案一:采用A/D0809芯片,此芯片是8位的A/D转换器,转换精度高, 抗干扰性能好,价格便宜,但是转换速度较慢一般用于要求不高的场合。
使用时需要外接电路
方案二:采用MSP430内部的A/D芯片,此芯片是10位的A/D转换器,使用时不需要外接电路即可使用。
根据方案比较与论证,本系统选择方案二
6. 米样电路
采样电路的作用是为了获得实际的端电压、端电流数据,送回到单片机处理并进行显示。
因此,采样电路的就成为设计的重点。
由D/A电路,输出一个电压信号送到OPA2277进行放大,去控制场效应管IRF540两极的电流。
由INA271 对本系统的电流进行监控,当从而使流经 R1的电流保持恒定,成为一个非常稳定的恒流电子负载。
再有MSP430内部的A/D。
采样之后的数据需要进行处理之后才会得到所求的数据
7.自制电源电路
方案一:采用7805三端正电源稳压电路。
此稳压电路有热过载保护,短路保护,其缺点就是输出电流小,纹波与噪声电压(峰峰值)大,输出的电压精度不够。
故不能达到要求。
方案二:自制一个稳压电源,本系统自制的稳压电源采用的是桥式整流电路,由电源变压器Tr,二极管D1、D2、D3、D4和电感、电容、电阻、TL431、TP31C 等电路组成桥式整流。
此电路输出的电压精度高,带负载能力强,纹波与噪声电压(峰峰值)小.
根据方案比较与论证,本系统选择方案二。
三.理论分析与计算
1.电子负载及恒流电路的分析
经由单片机和D/A电路,输出一个电压信号送到 OPA2277高精度运放进行
简易直流电子负载的设计与总结报告
简易直流电子负载的设计与总结报告
放大,去控制场IRF540场效应管的源极和漏极间的电流。
当被测电压改变时,
IRF540的D、S端压降改变,从而使流经R1的电流保持恒定,成为一个非常稳定的恒流电子负载。
2.电压、电流测量及精度分析
单片机经过D/A输出电压,控制IRF540的电流,电流步进值100mA,范围为100mA-1000mA。
INA271监测流经R1的电流,输出电压,该电压经过 2.5K 和17.5K 电阻分压电路,作为采样电压。
3.直流稳压电源的组成原理
自制一个稳压电源是由电源变压器 Tr,二极管D1、D2、D3、D4和电感、电容、电阻、TL431、TP31C等电路组成桥式整流。
采用n型滤波器,包括两
个电容器和一个电感器,它的输入和输出都呈低阻抗。
n型电路因为元件多,所以其插入损耗特性比C型和LC型更好。
本设计中采用电感 L值为57.2mH,电容C值为2200uF。
滤波后的信号经过并联稳压集成电路 TL431,该器件是良好的热稳定性能的三端可调分流基准源,它的输出电压用两个电阻就可以任意的设置到从Verf (2.5V)到36V范围内的任何值,其典型动态阻抗为0.2 ◎本设计中采用了 2.7K 电阻和2.7K电阻分压,得到5V输出。
在输出端采用了通用硅功率晶体管 TIP31C,输出电流可以达到1A的要求。
4.电源负载调整率的测量原理
负载调整率是电源负载的变化会引起电源输出的变化,负载增加,输出降低, 相反负载减少,输出升高。
好的电源负载变化引起的输出变化减到最低,通常指标为 3%~5%。
测试说明:
输入电压为额定值时,因变换负载引起的输出电压波动不应超过规定的范围。
测试方法:
1)输入电压为额定值,输出电流取最小值,记录最小负载量的输出电压 U1 ;
2)调节负载为50%满载,记录对应的输出电压 U0;
T A.O V i •Cf'A ■■叮 I CM - I . fCl-ll . I . »>:
简易直流电子负载的设计与总结报告
3) 调节负载为满载,记录对应的输出电压 U2; 4) 负载调整率按以下公式计算:
负载调整率={(U- U0)/U0} x 100%
式中:U 为U1和U2中相对U0变化较大的值;
四. 硬件电路设计
1. D/A 转换电路
采用TLC5615的D/A 芯片,由单片机输入信 转换输出,送入恒流源电路。
D/A 转换电路如图
图2 D/A 转换电路 图3液晶显示电路
2.
液晶显示电路
液晶由TM12864Z-1显示,引脚接线如表一。
液晶显示电路如图 3所示:
引脚号
引脚名称
方向
功能说明 1 VSS - 模块的电源地 2 VDD - 模块的电源正端
3 V0 -
LCD 驱动电压输入端
4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号
5 R/W(SID) H/L 并行的读写选择信号;串行的数据口
6 E(CLK) H/L 并行的使能信号;串行的同步时钟
7 DB0 H/L 数据0 8
DB1
H/L
数据1
]
IK 17
1 5
2 6
3 1 < S
L
1 h
洲
X
吋lol
乩 密E 2lrl _
-lol 比
■
号经过上拉电阻送入 TLC5615 2所示:
图表
3.恒流源电路
由单片机和D/A电路,输出一个电压信,由OPA2277高精度运算放大器进行放大, 加上扩流管IRF540构成恒流电路,再有INA271对本系统进行电流监控,从而使流经R1的电流保持恒定,成为一个非常稳定的恒流电子负载。
恒流源负载如图4所示:
^=F
图4恒流源负载
4.自制电源电路
本系统自制的稳压电源采用的是桥式整流电路,由电源变压器 Tr,四个二极管和电感、电容、电阻、TL431、TP31C等电路组成桥式整流。
由n型滤波器进行此电路的滤波,滤波后的信号经过并联稳压集成电路 TL431,输出电压用两个电阻就可以任意的设置到得到 5V输出,再由TP31C提高输出的电流。
自制电源电路如图5所示:
图5自制电源电路
五. 软件设计(软件设计图6)
采样输出电流、电压并在液晶上显示。
单片机通过内部自带的 10位A/D 对
等效负载的电压和电流进行采样,将采集回来的数值在单片机内部处理后送液晶 进行电压
电流的显示。
开始
初始化程序
数据处理
从A/D 取数据
显示子程序
是否有按 、键
按下
输出数据
D/A
4*6
議理J 「皂
T
VC KT! A l ; I CM I . f Cl-II . I .K£ H>'
液晶显示
键盘处理及 显示子程序
图6软件设计图
六.系统测试与分析
1.测试仪器
数字万用表;
函数发生器;
示波器;
直流电源;
2.测试方法
在电路各个模块完整的制作完成后,首先要做的是再次检查硬件电路是否有错误,如虚焊,连线错误等。
如果并无此方面的问题,则在不加测试电源的情况下,对各个模块的主要部件进行测试,如单片机对D/A的控制是否正常,采样
模块的A/D是否能够正常的进行工作,显示模块是否能够正常显示等。
当通过上面的测试后,则可以接入电源。
当电源在初次接入时,其电流值应该设定的很小,可以从0A开始进行调节,与此同时,还要考虑到并联限流电阻,为了确保电路的安全,初次接入时应先选取2欧进行测试。
在测试过程中,尽量保证电源电流与D/A输出模拟电流向接近,避免两者偏差过大。
当测试过程中出现异常情况时,切记先关闭电源开关。
3.测试数据
恒流源模式的测试负载调整率
通过键盘设置恒定值测得测试点电流数据如表二所示:
表二恒流模式下测试数据表
> 2 上简易直流电子负载的设计与总结报告
由数据表明,实测电流的值都稳定在设定值左右,经计算,相对误差小于 2%。
说明系统在恒流模式下工作正常。
七.总结
本系统设计的基于MSP430控制的电子负载,能够直接检测被测电源的电流值、电压值,以及在不同大小的负载下电源的输出电流值。
通过单片机控制使各个参数都能直观的在液晶上显示。
此电子负载能很好的替代传统的测试方法中一般采用的电阻、滑线变阻器、电阻箱等,更简单、更快捷、更可靠地对电源、变压器、蓄电池等电子设备进行输出特性的测试。
但是,本设计还存在着很多不足,希望能在以后能改善这方面的缺陷。
此次设计的电子负载,从最开始的资料搜集,到电路的设计;从最开始的元件选型,到电路板的焊接,再到现在的实物的整体调试,一步都印证着自己在完成电子设计任务上一个又一个的成功与失败,
迷惑与奋发!我们在整个设计
制作过程中,始终关注系统的性能指标和运行的稳定性,本着稳定性和精确性并重的原则,我们采取了诸多的有效措施,完成了设计题目所规定的部分指标和要求,达到基本的性能指标,而且对于有些指标我们的设计还有了一定的的提高,功能也有所扩展。
遗憾时间的仓促,以及自身能力所限,此次设计存在很多有待改进的方方面面,更存在很多的错漏和失误的地方。
还请各位学术上的专家多多包涵见谅。
八.参考文献
【1】张靖武,周灵杉•单片机原理与PROTEUS仿真[M].北京:电子工业出版社.2008. 【2】严启罡.黎万平.电路设计与制版[M].武汉:湖北科学技术出版社.2008.
【3】徐受蓉.C语言程序设计[M].重庆:西南师范大学出版社.2006.
简易直流电子负载的设计与总结报告
附录:程序
/******************************************************************************
*模块名:数控恒流源系统
* 日期:2012-06-27
*******************************************************************************
*/
#in elude <msp430g2553.h>
#defi ne SENDCOMM 0XF8 //0XF1000
#defi ne READCOMM 0XFC //0XF1100
#defi ne SENDDATA 0XFA //0XF1010
#defi ne READDATA 0XFE //0XF1110
#defi ne E_CLK_0 P2OUT &= ~BIT2 〃时钟信号为0
#defi ne E_CLK_1 P2OUT |= BIT2 //时钟信号为 1
#defi ne RW_SID_0 P2OUT &= ~BIT1 //数据信号为0
#defi ne RW_SID_1 P2OUT |= BIT1 //数据信号为 1
#defi ne RS_CS_0 P2OUT &= ~BIT0 //片选信号为0
#defi ne RS_CS_1 P2OUT |= BIT0 //片选信号为 1
void LCD_send_byte(unsigned char a); // 声明发送字节函数
un sig ned char LCD_read_byte(void); 〃声明读字节函数
void LCD_com m(un sig ned char comm); // 写指令函数声明
void LCD_setxy (un sig ned char x,un sig ned char y);
void LCD_WriteStr( un sig ned char dis_addr_x ,un sig ned char dis_addr_y,char* str); void LCD_WriteStr1( un sig ned char dis_addr_x, un sig ned char dis_addr_y,char yy); void MCU」ni tialize(void);
void LCD_i nit(void);
void PID(void);
void lcd_diao yon g1();
void PWM_1(void);
void F_data(void);
void In t_xs(void);
void Action( void);
简易直流电子负载的设计与总结报告void DY_fan gda(void);
un sig ned int shuzhi=0,qushu=0;
un sig ned int j=0,i=0,k=200,pwm2=5,a,h;
char yy[10]={48,49,50,51,52,53,54,55,56,57};//0--9
unsigned char data[]={0,0,0,0};
unsigned char data1[]={0,0,0,0};
//char yy1[10]={0x32,0x33,0x34,0x35,0x36};
typedef struct
{
char Kp,Ki,Kd;
int e0,e1,e2;
long pa,vpa;
}mypid;
mypid p1;
/** ******************* 主函数********************** **/
void mai n()
{
p1.Kp=6;
p1.Ki=7;
p1.Kd=3;
MCU」ni tialize();
LCD_i ni t();
In t_xs();
while(1)
{
DY_fa ngda();
PWM_1(); j++;
if(j>5000)
{
shuzhi=qushu*35/10;
a=shuzhi/0.1; 〃将取样电压转换成电流
lcd_diao yon g1();
j=0;
}
}
}
/********************************************
lcd子函数1
*******************************************/
void lcd_diao yon g1()
{
F_data();
LCD_WriteStr(1,1,"反馈模拟电压值:");
i=shuzhi/1000;
LCD_WriteStr1(3,2,yy[i]);
LCD_WriteStr(4,2,".");
i=shuzhi%1000/100;
LCD_WriteStr1(5,2,yy[i]); i=shuzhi%100/10;
LCD_WriteStr1(6,2,yy[i]);
i=shuzhi%10;
LCD_WriteStr1(7,2,yy[i]);
LCD_WriteStr(8,2,"V");
LCD_WriteStr(1,3,"系统设定电流值:
");//char* str="设定转数:",测量当前转数LCD_WriteStr1(3,4,yy[data[0]]);
LCD_WriteStr1(4,4,yy[data[1]]);
LCD_WriteStr1(5,4,yy[data[2]]);
LCD_WriteStr1(6,4,yy[data[3]]); LCD_WriteStr(7,4,"mA");
简易直流电子负载的设计与总结报告
************** 发送字节函数*************** **/
void LCD_se nd_byte( un sig ned char a) {
un sig ned char i;
for(i=8;i>0;i--)
{
if(a&( OxO1«(i-1)))
RW_SID_1;
else
RW_SID_0;
_delay_cycles(100);;
E_CLK_1;
_delay_cycles(100);
E_CLK_0;
_delay_cycles(100);
}
} un sig ned char LCD_read_byte(void)
************** 读字节函数*************** **/
{
un sig ned char i,dat=0;
for(i=8;i>0;i--)
{
E_CLK_1;
_delay_cycles(100); if(RW_SID_1) dat|=(0x01<<(i-1));
E_CLK_0;
简易直流电子负载的设计与总结报告_delay_cycles(100);
}
return dat;
}
************** 写指令函数*************** **/
void LCD_com m(un sig ned char comm)
{
un sig ned char temp;
_delay_cycles(100);
LCD_se nd_byte(SENDCOMM);
temp=com m&0 XFO;
LCD_se nd_byte(temp);
temp=((com m&O X0F)<<4)&O XF0;
LCD_se nd_byte(temp);
_delay_cycles(100);
}
写数据函数*************** **/
void LCD_data(u nsig ned char lcd_data) // 写数据
{
un sig ned char temp;
_delay_cycles(100);
LCD_send_byte(SENDDA TA);
temp=lcd_data&OxfO;
LCD_se nd_byte(temp);
temp=(lcd_data&0 X0F)<<4; LCD_se nd_byte(temp);
_delay_cycles(100); }
void LCD_setxy (un sig ned char x,un sig ned char y) //设置显示位置 {
switch(y) {
case 1:
LCD_comm(0X7F+x);break; case 2:
LCD_comm(0X8F+x);break; case 3:
LCD_comm(0X87+x);break; case 4:
LCD_comm(0X97+x);break; default:break;
} }
void LCD_WriteStr( un sig ned char dis_addr_x ,un sig ned char dis_addr_y,char* str)//
在指定位置
显示字符串
{
un sig ned char LCD_temp; LCD_setxy(dis_addr_x,dis_addr_y); LCD_temp=*str;
while(LCD_temp != 0x00) {
**************
设置显示坐标函数
*************** **/
X(1~16),Y(1~4)
************** 显示函数函数 *****************/
LCD_data(LCD_temp);
LCD_temp=*(++str);
************** ^显示数字函*****************/
void LCD_WriteStr1( un sig ned char dis_addr_x, un sig ned char dis_addr_y,char yy)〃在指定位置显示字符串
{
LCD_setxy(dis_addr_x,dis_addr_y);
LCD_data(yy);
************* *LCD 始化函***************
void LCD_i nit(void)
{
_delay_cycles(500);;
LCD_comm(0x30);〃一次送8 位数据
LCD_comm(OxOC);〃整体显示,游标off,游标位置off
LCD_comm(0x01);〃清DDRAM
LCD_comm(0x02);//DDRAM 地址归位
LCD_comm(0x80);〃设定DDRAM 7 位地址000,0000到地址计数器AC
}
简易直流电子负载的设计与总结报告************** MSP430 单片机初始化函数***************
简易直流电子负载的设计与总结报告
void MCU_i nitialize(void)
{
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MH Z;
P2DIR = OxFF;
P2OUT = 0x00;
P2DIR |= BIT3 + BIT4 + BIT5;
//P1OUT |= BIT1;
〃外部中断初始化
P1DIR &= ~BIT4 + ~BIT5;
P1IE |= BIT4 + BIT5;
P1IES |= BIT4 + BIT5;
P1IFG &= BIT4 + BIT5;
P1REN |= BIT4 + BIT5;
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, i nterrupt en abled
ADC10CTL1 = INCH_3; //input A1模拟信号输入选择通道A1即p1.1 ADC10AE0 |= 0x08; // PA.1 ADC option select 使p1.1 允许AD 模拟输入信号
TA1CCTL0 = CCIE;
TA1CCR0 = 312;
TA1CTL = TASSEL_2 + MC_1; _BIS_SR(LPMO_bits + GIE);
// CCR0 1ms 中断
// SMCLK, upmode
// En ter LPM0 w/ in terrupt
//PWM
void PWM_1(void) {
P1DIR |= 0x04; P1SEL |= 0x04; //设置P1.2为输出
//设置P1.2为内部输出
CCR0 = 2000; // PWM 周PWM
简易直流电子负载的设计与总结报告CCTL1 = 0UTM0D_7;
CCR1 = pwm2;
TACTL = TASSEL_2 + MC_1; } 〃占空比为0.5
//选择ACLK增计数模式
/******************************************** 定时器Timer1_A
*******************************************/ #pragma vector=TIMER1_AO_VECTOR
__in terrupt void Timer1_A (void)
{
P1OUT A= 0x01;
ADC10CTL0 |= ENC + ADC10SC;
qushu=ADC10MEM;
h++;
if(h==500)
{
PID();
Actio n();
}
__bis_SR_register(CPUOFF + GIE);
__bic_SR_register_o n_exit(CPUOFF); }
// Sampling and conversion start 开始转换
// LPM0, ADC10_ISR will force exit
// Clear CPUOFF bit from 0(SR)
/** ******************************************
中断服务函数
*******************************************/
#pragma vector=ADC10_VECTOR
__in terrupt void ADC10_ISR(void)
{
__bic_SR_register_o n_exit(CPUOFF);
// Clear CPUOFF bit from 0(SR)
简易直流电子负载的设计与总结报告
/** ******************** 外部中断服务函数*****************
#pragma vector=PORT1_VECTOR
__in terrupt void Port1()
{
if(P1IFG&BIT5)
{
_delay_cycles(10000);
if((P1IFG&BIT5))
{
k = k + 10; pwm2 += 10;
if(k>=2000) k=2000;
P1IFG &= ~BIT5;
}
}
if(P1IFG&BIT4)
{
_delay_cycles(10000);
if(P1IFG&BIT4)
{
k = k - 10;
pwm2 -=10;
if(k<=200)
k=200;
P1IFG &= ~BIT4;
}
}
简易直流电子负载的设计与总结报告
II拆分函数
void F_data(void)
{
data1[0]=a/1000;
data1[1]=a%1000/100;
data1[2]=a%100/10;
data1[3]=a%10;
data[O]=k/1OOO;
data[1]=k%1OOO/1OO;
data[2]=k%100/10;
data[3]=k%10;
}
//初始化显示函数
void In t_xs(void)
{
for(i=0;i<2;i++)
{
LCD_WriteStr(2,1,"系统初始化中");
LCD_WriteStr(2,3,"请稍候.");
_delay_cycles(1000000);
LCD_WriteStr(6,3," .");
_delay_cycles(1000000);
LCD_WriteStr(7,3," .");
_delay_cycles(1000000);
}
简易直流电子负载的设计与总结报告
简易直流电子负载的设计与总结报告
//电压放大
void DY_fa ngda(void)
{
if((k>=200)&&(k<=330))
{
P2OUT |= BIT3; //放大100 倍
P2OUT &= ~BIT4;
P2OUT &= ~BIT5;
a= (shuzhi/50)/0.1;
}
if((k>=331)&&(k<=660)) //放大50 倍
{
P2OUT |= BIT4;
P2OUT &= ~BIT5;
P2OUT &= ~BIT6;
a= (shuzhi/30)/0.1;
}
if((k>=661)&&(k<=2000)) 〃放大15 倍
{
P2OUT |= BIT5;
P2OUT &= ~BIT6;
P2OUT &= ~BIT7;
a= (shuzhi/10)/0.1;
}
} void PID(void)
简易直流电子负载的设计与总结报告
{
un sig ned int speedl;
speedl = a/3;
if((a-k)!=O){
p1.e2= speedl - i;
p1.vpa=p1.Kp*(p1.e2-p1.e1)
+p1.Ki*p1.e2
+p1.Kd*(p1.e2+p1.eO-2*p1.e1);
p1.vpa/=10;
p1.eO=p1.e1;
p1.e 仁p1.e2;
p1.pa+=p1.vpa;
}
}
void Action( void)
{
if(i=v);
if(k>a) pwm2=pwm2-p1.pa/10000000;
/if(k<a) pwm2=pwm2+p1.pa/10000000;
-30 -。