pid汇编控制程序
plc自己编写pid案例
plc自己编写pid案例在工业自动化控制领域,PID控制器是一种常见的控制方式,它可以通过对系统的反馈信号进行比例、积分和微分运算,来实现对系统的稳定控制。
在PLC编程中,我们经常需要编写PID控制的程序来实现对温度、压力、流量等参数的精确控制。
下面,我将以一个温度控制的案例来介绍如何在PLC中编写PID控制程序。
首先,我们需要明确PID控制器的工作原理。
PID控制器根据系统的误差信号,分别进行比例、积分和微分运算,然后将这三个部分的输出相加,得到最终的控制量。
比例部分决定了控制量与误差的线性关系,积分部分可以消除稳态误差,微分部分可以抑制系统的振荡。
在PLC编程中,我们可以利用PID指令来实现PID控制。
首先,我们需要定义输入输出变量,比如温度传感器的输入变量和加热元件的输出变量。
然后,我们需要设置PID控制器的参数,包括比例系数、积分时间、微分时间等。
接下来,我们可以使用PID指令来进行PID计算,并将计算结果输出到加热元件,从而实现对温度的精确控制。
下面,我将以一个温度控制的案例来具体介绍如何在PLC中编写PID控制程序。
假设我们需要控制一个恒温箱的温度,使其保持在设定的目标温度。
首先,我们需要接入一个温度传感器,将传感器的输出信号作为PID控制器的输入。
然后,我们需要接入一个加热元件,将PID控制器的输出信号作为加热元件的控制信号。
接下来,我们需要在PLC中定义温度传感器的输入变量和加热元件的输出变量,并设置PID控制器的参数,比如比例系数为0.1、积分时间为10秒、微分时间为5秒。
最后,我们可以使用PID指令来进行PID计算,并将计算结果输出到加热元件,从而实现对恒温箱温度的精确控制。
在实际编写PID控制程序时,我们需要注意以下几点。
首先,需要根据实际系统的特性来调整PID控制器的参数,比如根据系统的惯性和时间常数来确定积分时间和微分时间。
其次,需要考虑系统的稳定性和抗干扰能力,可以通过合理设置PID参数和添加滤波器来提高系统的性能。
PID控制算法(PID控制原理与程序流程)
PID控制算法(PID控制原理与程序流程)⼀、PID控制原理与程序流程(⼀)过程控制的基本概念过程控制――对⽣产过程的某⼀或某些物理参数进⾏的⾃动控制。
1、模拟控制系统图5-1-1 基本模拟反馈控制回路被控量的值由传感器或变送器来检测,这个值与给定值进⾏⽐较,得到偏差,模拟调节器依⼀定控制规律使操作变量变化,以使偏差趋近于零,其输出通过执⾏器作⽤于过程。
控制规律⽤对应的模拟硬件来实现,控制规律的修改需要更换模拟硬件。
2、微机过程控制系统图5-1-2 微机过程控制系统基本框图以微型计算机作为控制器。
控制规律的实现,是通过软件来完成的。
改变控制规律,只要改变相应的程序即可。
3、数字控制系统DDC图5-1-3 DDC系统构成框图DDC(Direct Digital Congtrol)系统是计算机⽤于过程控制的最典型的⼀种系统。
微型计算机通过过程输⼊通道对⼀个或多个物理量进⾏检测,并根据确定的控制规律(算法)进⾏计算,通过输出通道直接去控制执⾏机构,使各被控量达到预定的要求。
由于计算机的决策直接作⽤于过程,故称为直接数字控制。
DDC系统也是计算机在⼯业应⽤中最普遍的⼀种形式。
(⼆)模拟PID调节器1、模拟PID控制系统组成图5-1-4 模拟PID控制系统原理框图2、模拟PID调节器的微分⽅程和传输函数PID调节器是⼀种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的⽐例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进⾏控制。
a、PID调节器的微分⽅程式中b、PID调节器的传输函数a、⽐例环节:即时成⽐例地反应控制系统的偏差信号e(t),偏差⼀旦产⽣,调节器⽴即产⽣控制作⽤以减⼩偏差。
b、积分环节:主要⽤于消除静差,提⾼系统的⽆差度。
积分作⽤的强弱取决于积分时间常数TI,TI越⼤,积分作⽤越弱,反之则越强。
c、微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太⼤之前,在系统中引⼊⼀个有效的早期修正信号,从⽽加快系统的动作速度,减⼩调节时间。
5.1 PID控制原理与程序流程
在工业生产的控制中,对于偏差,用比例,积分和微分的 适当组合形式来反映, 形成适当的控制算法来实现控制 目的的控制方法,称为PID控制.
5.1.1 过程控制的基本概念
过程控制:采用模拟或数字控制方式对生产过程某一制回路
图 5-1-2 微机过程控制系统系统基本框图
umin u (n) u (n) u max
u (n) u min umin u (n) u max u (n) u max
谢谢!
模拟、数字PID的特点: 1.模拟PID控制:控制规律的修改需要更换模拟硬件, 所以缺乏灵活 2.数字PID控制:通过改变相应的程序来实现控制,因此有较强的灵活性
DDC(Direct Digital Control)系统:
图 5-1-3 DDC系统构成框图
DDC系统的特点:
►实现多回路的PID调节 ►计算速度快, 计算能力强 ►可以实现较复杂系统的控制, 如前馈控制、串级控制、非线性控制、自适 应控制、最优控制等。
PID调节器各校正环节的作用:
(1)比例环节
1.按比例反映控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控 制作用以减小偏差. 2.比例调节的强弱由Kp决定
(2)积分环节
1.主要用于消除静差,提高系统的无差度.积分作用的强弱取决于积分时 间常数Ti , Ti越大, 积分作用越弱,反之则越强. 2. 提高了系统的稳态性,但降低了系统的速度, 3. 积分环节必须与比例一起作用才能实现稳态并无差的目的
n
因此得到位置型PID控制算式
Ts n Td un k p e(n) e(i) (e(n) e(n 1)) u0 Ti i 0 Ts
pid算法温度控制c语言程序
pid算法温度控制c语言程序PID算法是一种常用的温度控制算法,广泛应用于各种温度控制系统中。
在C语言中,我们可以通过编写程序来实现PID算法的温度控制功能。
我们需要了解PID算法的基本原理。
PID算法是通过对系统的反馈信号进行不断调整,使得系统的输出达到期望值。
PID算法由三个部分组成:比例控制、积分控制和微分控制。
比例控制根据反馈信号与期望值的差异来调整输出;积分控制根据反馈信号与期望值的累积差异来调整输出;微分控制根据反馈信号的变化率来调整输出。
在C语言中,我们可以使用变量来表示系统的输入、输出和期望值。
以下是一个简单的示例代码:```c#include <stdio.h>// 定义PID参数float Kp = 1.0; // 比例系数float Ki = 0.5; // 积分系数float Kd = 0.2; // 微分系数// 定义系统变量float setpoint = 25.0; // 期望值float input = 0.0; // 输入值float output = 0.0; // 输出值// 定义误差变量float error = 0.0; // 当前误差float last_error = 0.0; // 上一次误差float integral = 0.0; // 累积误差// PID算法函数float pid_algorithm(float setpoint, float input) {// 计算误差error = setpoint - input;// 计算比例控制float proportional = Kp * error;// 计算积分控制integral += error;float integral_control = Ki * integral;// 计算微分控制float derivative = Kd * (error - last_error); // 计算输出output = proportional + integral_control + derivative;// 更新误差last_error = error;return output;}int main(){// 模拟温度传感器的输入input = 23.5;// 调用PID算法函数output = pid_algorithm(setpoint, input);// 打印输出结果printf("Output: %.2f\n", output);return 0;}```在上述代码中,我们首先定义了PID算法的参数和系统变量。
PID温度控制的PLC程序设计
PID温度控制的PLC程序设计PID(比例-积分-微分)温度控制是一种常用的控制方法,可以通过PLC(可编程逻辑控制器)实现。
本文将详细介绍PID温度控制的PLC程序设计过程。
1.确定控制系统需求:首先要确定所需的控制系统的基本要求,包括控制温度范围、精度要求、控制方式等。
2.确定传感器和执行机构:选择合适的温度传感器和执行机构,例如热电偶或热电阻作为温度传感器,控制阀门或加热器作为执行机构。
3.确定控制算法:PID控制算法是一种经典的温度控制方法,可在PLC中实现。
PID控制算法由比例、积分和微分三个参数组成,可以通过自整定或手动调整获得最佳参数值。
4.确定控制模式:根据实际需求,选择合适的控制模式,比如开环控制、闭环控制或自适应控制。
对于温度控制,一般采用闭环控制。
5. PLC软件设计:根据控制系统需求和算法确定的参数,设计PLC 软件。
PLC软件可以使用Ladder Diagram(梯形图)或Function Block Diagram(功能块图)等语言编程。
下面是一个基本的PID温度控制的PLC程序设计示例(以Ladder Diagram为例):```ladder====主程序====-,----[]----[]----[]----()PID----[]----]----[]----[]----,[]----温度输入设置温度温度差系数K----[+]=--------]--------]-----------温度设定温度差积分控制值----[/K]------]--------------------------[]----------------[+]=---------控制值累计量----[]----[]----[]----()KpKiKd```上述Ladder Diagram中,PID控制算法的三个参数Kp、Ki和Kd通过输入设置,通过调整这些参数可以改善控制系统的响应速度和稳定性。
plc自己编写pid案例
plc自己编写pid案例在工业自动化控制领域,PLC(可编程逻辑控制器)是一种常用的控制设备,而PID(比例-积分-微分)控制是一种常见的闭环控制算法。
在本文中,我们将介绍如何使用PLC自己编写PID控制的案例。
首先,我们需要了解PID控制的基本原理。
PID控制器根据当前偏差的大小,通过比例、积分和微分三个部分来调节控制输出,以使系统稳定在设定值附近。
在实际应用中,我们需要根据系统的特性来调节PID参数,以达到最佳的控制效果。
接下来,我们将以温度控制系统为例,介绍如何使用PLC自己编写PID控制。
假设我们需要控制一个加热器,使其保持在设定温度附近。
首先,我们需要安装温度传感器,并将其信号接入PLC的输入端口。
然后,我们需要将加热器的控制信号接入PLC的输出端口。
在PLC编程软件中,我们可以创建一个PID控制的函数块,并在其中设置比例、积分和微分参数。
然后,我们需要编写一个主程序,通过读取温度传感器的数值,并根据PID算法计算出控制输出,最终控制加热器的工作状态。
在实际编写PID控制程序时,我们需要注意以下几点,首先,根据系统的特性来调节PID参数,以使系统稳定在设定温度附近;其次,需要考虑系统的动态响应特性,避免出现过调和欠调现象;最后,需要对控制输出进行限幅处理,以避免对加热器的损坏。
通过以上步骤,我们就可以使用PLC自己编写PID控制的案例。
通过合理调节PID参数,我们可以实现对加热器的精确控制,使其保持在设定温度附近,从而提高生产效率并节约能源消耗。
总之,PLC自己编写PID案例是工业自动化控制中常见的应用之一。
通过合理调节PID参数,并结合PLC的控制功能,我们可以实现对各种控制系统的精确控制,从而提高生产效率并降低成本。
希望本文的介绍能够对大家有所帮助,谢谢阅读!。
PID控制原理及编程方法
PID控制原理及编程方法PID控制是一种常见的控制算法,用于调节系统输出与期望输入之间的偏差。
PID控制的原理是根据当前的误差、误差变化率和误差累积值来调整系统输出,从而使系统输出逐渐接近期望输入。
PID控制具有简单易实现、调节性能良好的特点,被广泛应用于各种自动控制系统中。
比例项是根据当前误差的大小来调整系统输出,比例增益参数Kp决定了比例项的权重。
当误差较大时,比例项的影响较大,系统输出会迅速调整;当误差较小时,比例项的影响较小。
积分项是根据误差累积值来调整系统输出,积分增益参数Ki决定了积分项的权重。
积分项可以弥补比例项无法完全消除的稳态误差,使系统更加准确地跟踪期望输入。
微分项是根据误差变化率来调整系统输出,微分增益参数Kd决定了微分项的权重。
微分项可以抑制系统的震荡和超调,使系统响应更加平滑。
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt其中,u(t)为系统输出,e(t)为当前误差,de(t)/dt为误差变化率。
离散PID控制适用于基于采样的离散系统,通常在嵌入式系统中应用较多。
离散PID控制的基本步骤如下:1.初始化PID参数:设置比例增益Kp、积分增益Ki和微分增益Kd的初值,以及误差累积值和上一次误差的初值。
2.读取当前输入和期望输入。
3.计算当前误差:e(t)=期望输入-当前输入。
4. 计算比例项:Proportional = Kp * e(t)。
5. 计算积分项:Integral = Ki * ∑e(t)dt。
其中,∑e(t)dt是误差累积值,可以通过将当前误差加到上一次误差累积值上来计算。
6. 计算微分项:Derivative = Kd * (e(t) - 上一次误差)。
7. 计算PID输出:u(t) = Proportional + Integral + Derivative。
8.将PID输出作为系统控制信号。
9.更新上一次误差和误差累积值。
51单片机PID算法程序
51单片机PID算法程序51单片机(也称为STC单片机)是一种常见的单片机型号,它可以使用PID(Proportional-Integral-Derivative,比例-积分-微分)算法来实现控制系统。
PID算法可以根据系统当前的误差、误差的积分以及误差的变化率来动态调整系统的输出,使得系统达到期望的目标。
下面是一个使用51单片机实现PID算法的程序示例:```c#include <reg52.h>#include <intrins.h>//定义PID参数#define Kp 1 // 比例系数#define Ki 0.1 // 积分系数#define Kd 0.01 // 微分系数//定义控制输出范围#define OutputMax 100#define OutputMin 0//定义系统参数#define SetPoint 100 // 设定值#define SampleTime 100 // 采样时间(单位:ms)//全局变量unsigned int SetPointValue;unsigned int ProcessValue;signed int PIDOutput;unsigned int LastProcessValue;signed long Integral;signed int Error;signed int LastError;//初始化函数void InitSetPointValue = SetPoint;ProcessValue = 0;PIDOutput = 0;LastProcessValue = 0;Integral = 0;Error = 0;LastError = 0;//PID计算函数signed int PIDCalculation(signed int input)Error = SetPointValue - input; // 当前误差Integral += Error * SampleTime; // 积分项signed int dError = Error - LastError; // 当前误差的变化率PIDOutput = Kp * Error + Ki * Integral + Kd * dError; // PID 输出//限制输出在控制范围内if (PIDOutput > OutputMax)PIDOutput = OutputMax;}else if (PIDOutput < OutputMin)PIDOutput = OutputMin;}LastError = Error;return PIDOutput;//主函数void mainInit(;while (1)//获取传感器测量值ProcessValue = GetProcessValue(; // 自定义函数,获取传感器测量值//PID控制signed int controlValue = PIDCalculation(ProcessValue);//输出控制信号SetControlOutput(controlValue); // 自定义函数,设置输出控制信号//延时采样时间Delay(SampleTime); // 自定义函数,延时指定的时间}```上述示例程序在使用51单片机编写PID算法时,首先定义了PID参数(比例系数Kp、积分系数Ki和微分系数Kd)、控制输出范围(OutputMax和OutputMin)以及系统参数(设定值SetPoint和采样时间SampleTime)。
42. PLC编程中的PID控制如何实现?
42. PLC编程中的PID控制如何实现?关键信息项1、 PID 控制的定义及原理定义:____________________________原理:____________________________2、 PLC 编程中实现 PID 控制的步骤步骤一:____________________________步骤二:____________________________步骤三:____________________________3、 PID 控制器参数的调整方法方法一:____________________________方法二:____________________________方法三:____________________________4、 PLC 编程中 PID 控制的应用场景场景一:____________________________场景二:____________________________场景三:____________________________5、实现 PID 控制的注意事项事项一:____________________________事项二:____________________________事项三:____________________________11 PID 控制的定义及原理111 PID 控制的定义PID 控制,即比例积分微分控制,是一种常见的闭环控制算法。
它通过对系统的偏差进行比例、积分和微分运算,以生成控制信号来调节被控对象,使其达到期望的输出值。
112 PID 控制的原理PID 控制器的输出由比例项(P)、积分项(I)和微分项(D)三部分组成。
比例项根据当前偏差的大小成比例地产生控制作用,其作用是快速减小偏差。
积分项对偏差进行累积,以消除系统的稳态误差。
微分项则根据偏差的变化率产生控制作用,能够预测偏差的变化趋势,提前进行调节,从而改善系统的动态性能。
pid温度控制算法程序编写
pid温度控制算法程序编写PID(比例-积分-微分)控制算法是一种常用的控制系统算法,用于调节控制系统的输出以使其接近预期的设定点。
PID控制算法基于当前误差的比例、积分和微分,通过这三个部分的组合来调节控制系统的输出。
下面我将从编写PID控制算法的三个部分来进行解释。
首先是比例部分(P),它根据当前误差的大小来调节控制系统的输出。
比例控制的作用是使输出与误差成正比,即误差越大,输出调节越大。
比例部分的数学表达式为P = Kp e(t),其中P为比例控制输出,Kp为比例增益,e(t)为当前误差。
在编写PID控制算法的程序时,需要根据实际系统的特性来选择合适的比例增益Kp,并将其与当前误差相乘得到比例部分的输出。
其次是积分部分(I),它用于消除系统存在的静态误差。
积分控制的作用是累积误差并将其作用于控制系统的输出,以消除系统的稳态误差。
积分部分的数学表达式为I = Ki ∫e(t)dt,其中I 为积分控制输出,Ki为积分增益,∫e(t)dt为误差的累积。
在程序编写中,需要对误差进行积分运算,并乘以积分增益Ki得到积分部分的输出。
最后是微分部分(D),它用于预测误差的变化趋势并相应地调节控制系统的输出。
微分控制的作用是根据误差变化的速度来调节输出,以减小系统的超调和震荡。
微分部分的数学表达式为D = Kd de(t)/dt,其中D为微分控制输出,Kd为微分增益,de(t)/dt为误差的变化率。
在程序编写中,需要对误差进行微分运算,并乘以微分增益Kd得到微分部分的输出。
综合以上三个部分,PID控制算法的输出为PID = P + I + D,将比例、积分和微分部分的输出相加得到最终的控制输出。
在编写PID控制算法的程序时,需要根据实际系统的特性来选择合适的比例增益Kp、积分增益Ki和微分增益Kd,并将其与当前误差、误差的累积和误差的变化率相结合得到最终的控制输出。
总之,编写PID温度控制算法的程序需要考虑比例、积分和微分三个部分,并根据实际系统的特性选择合适的增益参数,将它们结合起来得到最终的控制输出。
pid控制原理及编程方法
pid控制原理及编程方法PID控制是一种常用的控制算法,可以根据给定的目标值和实际值,通过不断调整输出值,使得实际值尽可能接近目标值。
PID控制的原理可以通过以下几个步骤来理解和实现。
1. 比例控制(P控制):根据目标值和实际值的偏差,乘以一个比例增益系数Kp得到控制量的变化量,作为输出。
控制量的变化量 = Kp * (目标值 - 实际值)2. 积分控制(I控制):将偏差的累积值乘以一个积分增益系数Ki得到控制量的变化量,作为输出。
这个步骤主要是为了解决系统存在的偏差问题。
控制量的变化量 += Ki * (目标值 - 实际值)* Δt3. 微分控制(D控制):根据偏差的变化率乘以一个微分增益系数Kd得到控制量的变化量,作为输出。
这个步骤主要是为了解决系统存在的过渡问题。
控制量的变化量 += Kd * (目标值变化率 - 实际值变化率) / Δt以上三个步骤得到的控制量的变化量之和即为最终的输出。
在编程实现PID控制时,可以按照以下步骤进行:1. 定义并初始化相关变量,包括比例增益系数Kp、积分增益系数Ki、微分增益系数Kd、目标值、实际值、偏差、偏差的累积值、上次偏差等。
2. 循环执行以下操作:a. 更新实际值。
b. 计算偏差(目标值 - 实际值)。
c. 计算控制量的变化量,包括比例控制量、积分控制量和微分控制量。
d. 更新偏差的累积值。
e. 计算最终输出值。
f. 控制执行相应操作(根据最终输出值控制系统)。
g. 等待一定时间间隔。
3. 重复步骤2直至达到控制目标。
需要注意的是,PID控制算法需要根据具体的应用场景,仔细选择合适的增益系数,以达到良好的控制效果。
PID 控制的51汇编程序
PID 控制的51汇编程序PID 控制的51汇编程序;//************************************************************ **************************************************;//功能: 电机控制的PID(积分分离) PID(void) 执行时间少于70uS/932-12MHz;//设计者: 牟联树;//日期: 2003.12.28;//版本号: 1.0;//申明:;//**************************************************************** **********************************************$NOMOD51OCRAH equ 0EFhOCRAL equ 0EEhOCRBH equ 0FBhOCRBL equ 0FAhOCRCH equ 0FDhOCRCL equ 0FChOCRDH equ 0FFhOCRDL equ 0FEhTCR21 equ 0f9h$include (REG52.INC)NAME PIDWorkPR?PID?PIDWork SEGMENT CODEPR?PID_MUL?PIDWork SEGMENT CODEPR?PID_out?PIDWork SEGMENT CODEDT?PID_k?PIDWork SEGMENT DATA PUBLIC PID_Kp,PID_Ki,PID_Kd,PID_Umax,PID_Emax PUBLICPID_U,PID_En1,PID_En2,PID_Temp,PID_TempL RSEG ?DT?PID_k?PIDWorkPID_Kp: DS 2 ;比例系数PID_KpL data PID_Kp+1PID_Ki: DS 2 ;积分系数PID_KiL data PID_Ki+1PID_Kd: DS 2 ;微分系数PID_KdL data PID_Kd+1PID_Umax: DS 2 ;期望最大值设定PID_UmaxL data PID_Umax+1PID_Emax: DS 2 ;积分分离的误差最大值设定PID_EmaxL data PID_Emax+1PID_U: DS 2 ;当前的采样值PID_UL data PID_U+1PID_En1: DS 2 ;上一次计算的误差值PID_En1L data PID_En1+1PID_En2: DS 2 ;上一次计算的误差的误差值PID_En2L data PID_En2+1PID_Temp: DS 4 ;计算过程中的暂存PID_TempL data PID_Temp+1PID_Temp1 data PID_Temp+2PID_Temp1L data PID_Temp+3 PUBLIC _PIDRSEG ?PR?PID?PIDWork_PID: push accpush pswclr c ;有符号减法mov a,PID_UmaxL ;计算当前的误差En(PID_U里暂存运算结果)subb a,PID_ULmov PID_UL,amov a,PID_Umaxsubb a,PID_Umov PID_U,ajnb acc.7,PID_kmov a,PID_ULcpl aadd a,#1mov r7,amov a,PID_Ucpl aaddc a,#0xch a,r7sjmp PID_gPID_k: mov r7,PID_Umov a,PID_ULPID_g: clr csubb a,PID_EmaxLmov a,r7subb a,PID_Emaxjnb acc.7,PID_a ;如果En>Emax则转mov r7,PID_KiL ;Ki*Enmov r6,PID_Kimov r5,PID_ULmov r4,PID_Uacall PID_MUL ;二字节伪有符号乘法(r4-r7里暂存结果)mov a,PID_Temp1L ;PID加法子程序(将结果加入输出)add a,r7mov PID_Temp1L,amov a,PID_Temp1addc a,r6mov PID_Temp1,amov a,PID_TempLaddc a,r5mov PID_TempL,amov a,PID_Tempaddc a,r4mov PID_Temp,aPID_a: mov a,PID_En1L ;更新PID_En1xch a,PID_ULmov PID_En1L,amov a,PID_En1xch a,PID_Umov PID_En1,aclr c ;有符号减法mov a,PID_En1L ;计算当前的误差差(En-En1)subb a,PID_ULmov PID_UL,amov a,PID_En1subb a,PID_Umov PID_U,amovr7,PID_KpL ;+Kp*(En-En1)mov r6,PID_Kpmov r5,PID_ULmov r4,PID_Uacall PID_MULmov a,PID_Temp1L ;PID加法子程序(将结果加入输出)add a,r7mov PID_Temp1L,amov a,PID_Temp1addc a,r6mov PID_Temp1,amov a,PID_TempLaddc a,r5mov PID_TempL,amov a,PID_Tempaddc a,r4mov PID_Temp,aclr c ;有符号减法mov a,PID_UL ;计算误差差的差(En-En1-En2),同时更新En2subb a,PID_En2Lmov PID_En2L,amov a,PID_Usubb a,PID_En2mov PID_En2,amovr7,PID_KdL ;+Kd*(En-En1-En2)mov r6,PID_Kdmov r5,PID_En2Lmov r4,PID_En2acall PID_MULmov a,PID_Temp1L ;PID加法子程序(将结果加入输出)add a,r7mov PID_Temp1L,amov a,PID_Temp1addc a,r6mov PID_Temp1,amov a,PID_TempLaddc a,r5mov PID_TempL,amov a,PID_Tempaddc a,r4mov PID_Temp,apop pswpop accretret;//**************************************************************** **********************************************;//功能: 电机控制电流环的PI PI_I(void) 执行时间少于50uS/932-12MHz;//设计者: 牟联树;//日期: 2003.12.28;//版本号: 1.0;//申明:;//**************************************************************** **********************************************PUBLIC _PID_outRSEG ?PR?PID_out?PIDWork_PID_out: push accpush pswclr cmov a,r6rrc amov r6,amov a,r7rrc amov r7,aout_a: mov OCRAH,r6 ;PWM更新mov OCRAL,r7mov a,r7add a,#25mov OCRBL,amov a,r6addc a,#0mov OCRBH,aorl TCR21,#080h ;PWM更新out_b: pop pswpop accret;//**************************************************************** **********************************************;//功能: 整形乘法long int PID_MUL(int a,int b)用时13.5uS/932-12MHz;//设计者: 牟联树;//日期: 2003.12.28;//版本号: 1.0;//申明:;//**************************************************************** **********************************************PUBLIC _PID_MULRSEG ?PR?PID_MUL?PIDWork_PID_MUL:PID_MUL: push accpush pswclr f0 ;符号判断mov a,r4jb acc.7,PID_Masjmp PID_MdPID_Ma: setb f0mov a,r5cpl aadd a,#1mov r5,amov a,r4cpl aaddc a,#0mov r4,aPID_Md:; mov a,r6; mov c,acc.7;jnb f0,PID_Mf; cpl cPID_Mf:; mov f0,c; jb acc.7,PID_Mb; sjmp PID_McPID_Mb:; clr c; mov a,r7; subb a,#1; cpl a; mov r7,a; mov a,r6; subb a,#0; cpl a; mov r6,aPID_Mc: mov a,r5 mov b,r7mul abxch a,r7mov r3,bmov b,r4mul abadd a,r3mov r3,amov a,baddc a,#0xch a,r5mov b,r6mul abaddc a,r3xch a,r6xch a,r5addc a,bxch a,r5mov b,r4mul abaddc a,r5mov r5,amov a,baddc a,#0mov r4,ajb f0,PID_Me pop pswpop accretPID_Me: mov a,r7cpl aadd a,#1mov r7,amov a,r6cpl aaddc a,#0mov r6,amov a,r5 cpl a addc a,#0 mov r5,a mov a,r4 cpl a addc a,#0 mov r4,a pop psw pop acc retEND。
51单片机PID程序(1)
51单片机PID程序(1)什么是PID控制器?PID控制器是一种常见的自动控制器,可以被广泛地应用于工业制造、机械控制、电子控制等领域。
PID控制器采用比例(P)、积分(I)和微分(D)等控制策略,实现对被控制对象的控制,可以使被控制对象的输出尽可能地接近预设值,从而实现自动控制的目的。
51单片机PID程序实现原理在51单片机中,开发者可以通过编写相应的程序实现PID控制。
其基本原理如下:1.取得被控制对象的实际值和期望值,计算出误差(设为E)。
2.根据比例控制策略,计算出比例项(设为P)。
3.根据积分控制策略,计算出积分项(设为I)。
4.根据微分控制策略,计算出微分项(设为D)。
5.将比例项、积分项和微分项加权求和,得到控制输出,控制被控制对象。
下面,我们来详细介绍如何在51单片机上实现PID控制。
PID控制器的代码实现为了方便开发者理解,在下面的代码中,我们将PID控制器分为三个部分:PID初始化、PID计算和PID输出。
/** PID控制器初始化* kp:比例系数* ki:积分系数* kd:微分系数* error_sum:误差总和(初始值为0)* last_error:上一次误差值(初始值为0)*/void PID_Init(float kp, float ki, float kd, float *error_sum, float *la st_error){*error_sum = 0;*last_error = 0;Kp = kp;Ki = ki;Kd = kd;}/** 计算PID控制量* target:期望值* pv:被控制对象的实际值* error_sum:误差总和* last_error:上一次误差值* 返回值:PID控制值*/float PID_Calc(float target, float pv, float *error_sum, float *last_er ror){float error = target - pv;float p = Kp * error;*error_sum += error;float i = Ki * (*error_sum);float d = Kd * (error - *last_error);*last_error = error;return p + i + d;}/** 控制被控制对象* pid_val:PID控制值*/void PID_Output(float pid_val){// 将pid_val用于控制被控制对象}PID控制器的调试方法在实际应用中,对PID控制器进行调试十分重要。
汇编语言实现PID运算
//汇编语言实现PID运算,一阶二阶系统控制(含注释)//---------------------------------堆栈段---------------------------------STACKS SEGMENT STACKDW 128 DUP(?) //注意这里只有128个字节STACKS ENDS//---------------------------------数据段---------------------------------DATAS SEGMENT//1.乘数运算数据存储区MUL1 DW ? //存放被乘数MUL2 DW ? //存放乘数SHIFTTIME1 DB ? //存放乘积需要向左移位的次数(若结果按照被乘数的小数位,此值大小为乘数小数位数)PRODUCT DD ? //存放最终乘积DIV1 DW ? //存放被除数DIV2 DW ? //存放除数SHIFTTIME2 DB ? //存放商和余数需要向右移位的次数(此值大小为除数小数位数)QUOTIENT DW ? //存放商(包含后四位的小数)REMAINDER DW ? //存放余数DIV1DOT DW ? //小数部分移位后的值作为被除数,暂存值QUOTIENTDOT DW ? //存放小数部分相除的商,暂存值REMAINDERDOT DW ? //存放小数部分相除的余数,暂存值ERROR2 DB 'DIV2=0,ERROR!',0AH,'$' //除0错误SQUARE_TIME DW ? //开平方迭代次数SQUARE1 DW ? //需要进行开方运算的变量SHIFTTIME3 DB 0 //开方运算右移次数,为被开方数小数位数值的一半SQUARE2 DW ? //开方运算的值DISPLAYWORD DW ? //用于显示的字,做测试用//取绝对值存储区ABSNUM DW ? //被转换的数ABSV AL DW ? //数转换完成后的数//2.PID参数数据区PV DW ? //被控量,可以提前给定一个量SV DW 0010H //设定值,需要给定UN DW ? //控制量UNOV DW ? //若UN值溢出,高字部分放在UN2中EN1 DW ? //前一控制周期(n-1)时刻偏差量EN2 DW ? //后一控制周期n时刻偏差量ENPRO DD ? //存放比例项ENINT1 DW ? //累积偏差量ENINT DD ? //存放积分项ENDIFF DD ? //用于微分项ENSUM DD ? //存放三项的和//(1)PID 1 理想微分PID控制开环阶跃响应KP1 DW 00A0H //比例系数TI1 DW 0020H //积分时间常数TD1 DW 0020H //微分时间常数KD1 DW 0H //微分系数TC1 DW 0008H //控制周期//(2)PID 2 实际微分PID控制开环阶跃响应KP2 DW 0010H //比例系数TI2 DW 0020H //积分时间常数TD2 DW 0020H //微分时间常数KD2 DW 0020H //微分系数KP和KD的乘积不超过8000HTC2 DW 0008H //控制周期UD0 DD ? //微分项前一状态值Ud(n-1)UD1 DD ? //存放微分项后一状态值Ud(n)UD DD ? //存放暂时的值//(3)PID 3 闭环系统PID控制开环阶跃SV1 DW 0100H //闭环串级系统的设定值KP DW ? //比例系数TI DW ? //积分时间常数TD DW ? //微分时间常数KD DW ? //微分系数KP和KD的乘积不超过8000HTC3 DW 0008H //控制周期INTSEP DB ? //积分分离是否开启,为1则开,为0则关,默认为0 INTSEPV AL DW ? //积分分离值//主调节器的PID参数//一阶系统PID的参数KP3 DW 0070H //比例系数TI3 DW 0050H //积分时间常数TD3 DW 0001H //微分时间常数KD3 DW 0001H //微分系数KP和KD的乘积不超过8000H UN1 DW ? //主控制器的输出EN11 DW ? //主调节器存储上一时刻误差UD11 DW ? //存放上一时刻微分输出//副调节器的PID参数KP4 DW 0050H //比例系数TI4 DW 0050H //积分时间常数TD4 DW 0000H //微分时间常数KD4 DW 0050H //微分系数KP和KD的乘积不超过8000H UN2 DW ? //副控制器的输出EN21 DW ? // //副调节器存储上一时刻误差UD21 DW ? //存放上一时刻微分输出//3.被控对象数据存储区KG DW ? //控制对象的增益TG DW ? //控制对象的时间常数//(1)一阶惯性环节K1 DW 0010H //增益,按照KP的小数格式,最后四位为小数位T1 DW 0020H //惯性时间常数,最后四位为小数PV2 DW ? //一阶系统的输出TC DW 0008H //控制周期//(2)二阶惯性环节,与一阶一起构成二阶系统,K1,T1,K2,T2四个系数K2 DW 0010H //增益,按照KP的小数格式,最后四位为小数位T2 DW 0020H //惯性时间常数,最后四位为小数PV1 DW ? //二阶系统的输出PV3 DW ? //二阶系统中两个一阶系统之间的输出值DATAS ENDS//----------------------------------代码段---------------------------------CODES SEGMENTASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS //初始化MOV DS,AX//PID1 理想微分开环阶跃响应MOV CX,200 //PID计算次数MOV PV,0000H //开环阶跃效应,第一周期输入为0,故PV设置为SV的值CALL PIDINTLOOP1://MOV BX,WORD PTR ENPRO+2//MOV DISPLAYWORD,BX//CALL DISPLAYS//MOV BX,WORD PTR ENPRO//MOV DISPLAYWORD,BX//CALL DISPLAYS//MOV AX,WORD PTR ENINT+2//MOV DISPLAYWORD,AX//CALL DISPLAYS//MOV AX,WORD PTR ENINT//MOV DISPLAYWORD,AX//CALL DISPLAYS//MOV BX,WORD PTR ENDIFF+2//MOV DISPLAYWORD,BX//CALL DISPLAYS//MOV BX,WORD PTR ENDIFF//MOV DISPLAYWORD,BX//CALL DISPLAYS//MOV INTSEP,0 //开启积分分离//MOV INTSEPV AL,0008HCALL PIDG1MOV AX,PV2MOV DISPLAYWORD,AXCALL DISPLAYS //显示被控量PV的值//CALL PIDG1//MOV AX,PV2//MOV DISPLAYWORD,AX//CALL DISPLAYSMOV DL,0AHMOV AH,02HINT 21H//CALL PID2//MOV PV,0H //从第二个周期开始PV值设为0,用于阶跃响应DEC CXJNZ LOOP1//用于测试乘法部分//MOV MUL1,1000H//MOV MUL2,0030H//MOV SHIFTTIME1,4//CALL MULTIPLICATION//MOV AX,WORD PTR PRODUCT//MOV BX,WORD PTR PRODUCT+2//MOV DISPLAYWORD,BX//CALL DISPLAYS//MOV DISPLAYWORD,AX//CALL DISPLAYS//用于测试除法部分//MOV DIV1,0078H //为被除数和除数赋值//MOV DIV2,0050H//MOV SHIFTTIME2,4//CALL DIVISION//MOV AX,TC1 //调用乘法,获得Td除以Tc乘以Kp//MOV DIV1,AX//MOV AX,TI1//MOV DIV2,AX//MOV SHIFTTIME2,4 //左移4位,按照Td的小数格式形成结果//CALL DIVISION//MOV AX,QUOTIENT//MOV DISPLAYWORD,AX //查看商的值//CALL DISPLAYS//MOV AX,REMAINDER//MOV DISPLAYWORD,AX //用于测试,查看余数的值//CALL DISPLAYS// MOV AX,TC1 //调用除法和乘法,获得Tc除以Ti乘以Kp //MOV DIV1,AX//MOV AX,TI1//MOV DIV2,AX//MOV SHIFTTIME2,4//CALL DIVISION//MOV AX,QUOTIENT //左移4位,按照Tc的小数格式形成结果//MOV MUL2,AX//MOV MUL1,1000H//MOV SHIFTTIME1,4//CALL MULTIPLICATION//MOV AX,WORD PTR PRODUCT//MOV MUL1,AX//MOV AX,KP1//MOV MUL2,AX//MOV SHIFTTIME1,4//CALL MULTIPLICATION//MOV AX,WORD PTR PRODUCT//MOV DISPLAYWORD,AX//CALL DISPLAYS//测试开平方部分//MOV SQUARE_TIME,10 //迭代次数为100次//MOV SQUARE1,14H //被开放数为19//CALL SQUARE//MOV AX,SQUARE2//MOV DISPLAYWORD, AX//CALL DISPLAYS//测试数值转换部分://MOV AX,8011H//MOV ABSNUM,AX//CALL ABSOLUTE//MOV AX,ABSV AL//MOV DISPLAYWORD,AX。
增量式PID控制算法程序(汇编)
MOV 42H,#00H增量式 PID 控制算法程序 ( 汇编);T 、TD TI 、KP 依次从 30H, 33H, 36H, 39H 开始。
;A , B , C 的值依次存在 BL0CK1 BL0CK2 BL0CK3勺地址里 ; 这里 R(k) 给的是定值 ;0RG 0000HBL0CK1 EQU 43H ;A,B ,C BL0CK2 EQU 46H BL0CK3 EQU 49H UK EQU 4CH ;存结果 UK RK EQU 50HEK EQU 53H ;存放偏差值E(k)的始址EK1 EQU 56H ;存放E(k-1)的始址EK2 EQU 59H ;存放E(k-2)的始址CK EQU 5CH ;采样数据始址BUFF EQU 60H ;暂存区 BUFF1 EQU 63H BUFF2 EQU 66H REC EQU 69H TEST:M0V 3EH,#00HMOV 30H,#01H ;T 的 BCD 码浮点数 MOV 31H,#23H ;2.34 MOV 32H,#40H・********增量式PID 控制算法程序***********MOV RK,#01H 常数Rk 的BCD 码浮点数 M0V RK+1,#12H ;1.25 M0V RK+2,#50H MOV 3CH,#01H 常数1的BCD 码浮点数 M0V 3DH,#10HMOV 40H,#01H 常数2的BCD 码浮点数 M0V 41H,#20HMOV 33H,#01H ;Td的BCD码浮点数MOV 34H,#35H ;3.54 MOV 35H,#40H MOV 36H,#01H ;Ti 的BCD码浮点数M OV 37H,#11H ;1.12 MOV 38H,#20H MOV 39H,#01H ;Kp的BCD码浮点数MOV 3AH,#12H ;1.25 MOV 3BH,#50H MOV R0,#RK ;指向,,, 码浮点操作数LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向,,, 码浮点操作数Ti LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#33H ;指向,,, 码浮点操作数Td LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#30H ;指向,,, 码浮点操作数T LCALL BTOF ;将其转换成二进制浮点操作数MOV R1, #BUFF1 保存30H 中的值即T 值LCALL FMOVR0MOV R1, #36H ;计算A值(1+T/Ti+Td/T).KpLCALL FDIVMOV R1,#3CH ;常数1LCALL FADDMOV R0,#33H保存33H中的值MOV R1,#BUFFLCALL FMOVR0MOV R1,#BUFF1LCALL FDIVAIQd HVOliniAld HVOl HGG#* 冷AOIAI1/P丄dy 旬阴0 直£ H6G#*0d AOIAI odAOiAid nvoi 逐Mooia KBa 型曲乙yooia#'冷AOIAIiniAid nvoiH6G#*Ld AOIAIaavd nvoiHOG#* Ld AOIAIAIQd HVOlHOG#* Ld AOIAIiniAid nvoiHGGtfLd AOIAI(1/pr乙+Q d>i 旬阴a #44- AOIAIAOIAId HVOlHGGtfOd AOIAI呦恋V ddnatfLd AOIAIAOIAId HVOlHOGtfOd AOIAI WSfWWOG: LddnatfLd AOIAI odAoiAid nvoi 申Mooia 丑型制畜霧球以ooia#■冷AOIAIiniAid nvoiH6G#*Ld AOIAIaavd nvoi L+!1/I者阴型宙HO V HOG#* Ld AOIAIMOV R1,#EK1MOV R1,#BUFF1MOV R1,#BLOCK3保存 C 值到 BLOCK 中 LCALL FMOVRO MOV R0,#EK1 ;将 EK1, EK2设初值 0 LCALL FCLR MOV RO,#EK2 LCALL FCLRMOV REC,#03H 设; 置采样次数LOOP: MOV CK,#7eH ;采样数据暂时给了一个定值 MOV CK+1,#21H ;0.002112 MOV CK+2,#12HMOV R0,#CK LCALL BTOFMOV R0,#RK 保存R(k)中的值 MOV R1,#BUFF LCALL FMOVR0 MOV R1,#CKLCALL FMOVR0LCALL FMOVMOV R1,#BUFF 保存 B LCALL FMOVR0LCALL FMUL LCALL FMOVR0LCALL FSUB ;计算 R(k)-C(k) 的值送给 E(k) MOV R1,#EKMOV R1,#BUFF 恢复 RK 的值 释放 BUFF MOV R0,#RKMOV RO,#BLOCK2将 B.e(k-1) 的值暂存在BUFF 仲AOIAId HVOl(k>l)3<-(>l)3*fe->l)3<-(k>l)3 球以AOIAIa Old nvoi 用嗨嫌冲'S 曲oa >in#*od AOIAIAOIAId nvoi ddna v SM ddnatfLd AOIAIOdAOIAId HVOl申yn底畜霧川加#'冷AOIAIaavd nvoi乙ddna#* Ld AOIAIansd nvoife->i)3 O+(k>i)3 a-(>i)3 v ®>in #44 HdnatfLd AOIAIiniAid nvoiAOIAIOdAOIAId HVOlddnatfLd AOIAI (>iU>iooia#3 AOIAI AOIAId nvoi ddna wo MM ddnatfLd AOIAIOdAOIAId HVOl乙ddna#* Ld AOIAIiniAid nvoi乙AOIAIOdAOIAId HVOl0 川zHna#73 AOIAI竝zuna 丑型显®阴fe->i)9 0 <G>ioo-ia#*od AOIAI AOIAId nvoi ddna wa MM ddnatfLd AOIAIMOV R1,#EKMOV R0,#EK1LCALL FMOVLCALL DELAY ;等待采样时刻DJNZ REC,NEXT1SJMP $NEXT1: LJMP LOOPDELAY: MOV R7,#02H DELAY1: MOV R6,#0FFH DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1RET; (,) 标号: ,,,, 功能:浮点数格式化; 入口条件: 待格式化浮点操作数在[R0] 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XINT1_1:
LDP #07H
SPLK #0,count
SPLK #0,index
LDP #DP_PF1
SPLK #8005H,XINT1CR
RET
EVAINIT:
LDP #DP_EVA ;指向7400h~7480h区
SPLK #0200H,EVAIMRA ;使能T1UFINT_2 中断
SPLK #0FFFFh,EVAIFRA ;清EVA中断标志
SPLK #60C6H,GPTCONA
SPLK #2002H,ADCTRL1
SPLK #0H,MAXCONV ;采1路信号
SPLK #0001H,CHSELSEQ1
SPLK #4100H,ADCTRL2
********************************************
;查表做乘
COSTABLE
LDP #07H
;splk #0h,count ;取0~200
;splk #0h,index ;取0~50
CLRC XF ;用于检验是否进中断
SETC CNF ;B0区被配置为程序空间
SPM 0
LDP #0
SPLK #0007H,IMR ;使能中断优先级INT1、INT2、INT3
SPLK #8005H,XINT1CR
LDP #DP_PF2
SPLK #21C4H,MCRA
;SPLK #0400H,MCRC
;SPLK #0FF00H,PADATDIR
;LACL MCRB
;OR #0FF00H
;SACL MCRB
SPLK #0,U
SPLK #0,PIDTMP2
;SPLK #0,U2
********************************************
RET
IOINIT:
LDP #DP_PF1 ;指向7000h~7080h区
SPLK #25,index
second_1
LACC count
SUB #50
BCND third_0,EQ
ห้องสมุดไป่ตู้ BCND third_1,GT
COS
LACC index
ADD #01
SACL index
LACC count
ADD #01
SACL count
B END0
second_0
;主程序
.text
_c_int0
CALL SYSINIT
CALL IOINIT
CALL EVAINIT
SYSINIT:
SETC INTM
SETC OVM
SETC SXM
SACH AD ;高位存入AD
LACL AD
AND #03FFH ;取低10位,即采样值
SUB #512 ;减去偏移量,变为交流量
LACC count
SUB #25
BCND second_0,EQ
BCND second_1,GT
first_1
COS ;这是什么东西????????????
LDP #07H
LDP #18
MPY QQ2 ;q15
APAC
LDP #07H
SACH tmpAD,1 ;q12
SPLK #0,CMPR1
SPLK #0,CMPR2
SPLK #0842H, T1CON ;连续增减计数
SPLK #01H,EVAIMRB ;使能T2PINT中断
SPLK #0FFFFh,EVAIFRB
SPLK #9376,T2PR
PAC
LDP #07H ;yout(n)=(1-Q)*yout(n-1)+Q*x(n)
LT AD ;first older filter Q value is 0.9
;chen.asm
.include "vector.h" ; 建立中断向量表
.include "lf2407.h" ; 引用头部文件
.def _c_int0
.mmregs
SPLK #0100H,ADCTRL2
******************************************
CLRC INTM ;开总中断
WAIT NOP
B WAIT
*****中断程序******************************
SPLK #3000,T1PR ;使定时器每0.1ms产生一次中断
SPLK #0,T1CNT
SPLK #02700H, COMCONA
SPLK #0A700H, COMCONA
SPLK #016H,ACTRA
SPLK #0474H,DBTCONA
BACC
GISR2: ;T1UFINT_2周期中断入口
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断入口地址
LDP #DP_EVA
SPLK #0,T2CNT
SPLK #3888,T2CMPR
;LDP #0
;SPLK #0007h,IMR
;splk #0ffffh,ifr
CLRC INTM
BCND CHECK,TC ;等待空闲状态
LDP #0E1H
LACC RESULT0,10 ;左移10位装入累加器
LDP #07H
SPLK #0FFFFh,IFR ;清中断标志
LDP #07H
SPLK #0,TT
OUT TT,WSGR ;等待寄存器,读外部存储器时插入的时钟周期数目
********************************************
BACC
GISR3: ;T2PINT_3周期中断入口
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断入口地址
SACL AD
SPM 0
LT AD
LDP #18
MPY KCURRENT ;Q12
PAC
LDP #07
.sect ".costab"
costab .include "cos.tab"
.sect ".firtab"
firtab .include "fir.tab"
****************************
SACL AD ;定标为12
;输入filter
LT tmpAD ;q12
LDP #18
MPY QQ1 ;q15
GISR1:
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断入口地址XINT1_1同步中断入口,保护现场
SPLK #0,T2CNT
SPLK #4688,T2CMPR
SPLK #0D4AH,T2CON
ADINIT:
LDP #225 ;指向7080H~7100H
SPLK #4002H,ADCTRL1
RET
T1UFINT_2:
;AD开始
CHECK LDP #225 ;采样电源电流
BIT ADCTRL2,3 ;检测SEQ1是否处于空闲状态
;变量初始化
SPLK #0h, count
SPLK #0h, index
SPLK #0, tmpAD
SPLK #0,VE0
SPLK #0,VE1
SPLK #0,VE2