DSP电机控制中的斜坡计数器产生方法
DSP计数器 DSP定时器 计数器原理及设计举例

DSP 定时器/计数器原理及设计举例1、定时器结构定时器的组成框图如图1所示。
它有3个16位存储器映像寄存器:TIM 、PRD 和TCR 。
这3个寄存器在数据存储器中的地址及其说明如表1所示。
定时器控制寄存器(TCR )位结构如图2所示,各控制位和状态位的功能如表2所示。
(说明:图中包括,一个16位的主计数器(TIM)和一个4位预定标计数器(PSC)。
TIM 从周期寄存器PRD 加载,PSC 从周期寄存器TDDR 加载。
) 1.1典型操作顺序:(1) 在每个CLKOUT 脉冲后PSC 减1,直到它变为0。
(2) 在下一个CLKOUT 周期,TDDR 加载新的除计数值到PSC ,并使TIM 减1。
(3) 以同样方式,PSC 和TIM 连续进行减操作,直到TIM 减为0。
(4) 下一个CLKOUT 周期,将定时器中断信号(TINT)送到CPU ,同时又用另一脉冲送到TOUT 引脚,把新定时器计数值从PRD 加载到TIM ,并使PSC 再次减1。
因此,定时器中断的速率为1.2定时器编程(1)TIM :定时器中的当前值。
(2)PRD :正常情况,当TIM 减到0后,PRD 中的时间常数自动地加载到TIM 。
系统复位( =1)或定时器复位(TRB=1)时,PRD 中的时间常数重新加载到TIM 。
(3)控制寄存器(TCR)包含的控制位有下列功能: ①控制定时器模式;②指定定时器预先定标计数器的当前计数值; ③重新加载定时器; ④启动、停止定时器; ⑤定义定时器的分频系数。
图1 定时器组成框图TINT 速率=)()(频率1PRD 1TDDR CLKOUT +⨯+(说明:TDDR(Timer Divide-Down Ratio):复位时,TDDR 各位清零;PSC(Timer Prescaler Counter):PSC 可被TCR 读取,但不能直接写入) 1.3定时器初始化步骤:(1) 将TCR 中的TSS 位(停止状态位)置1,关闭定时器。
利用DSP实现的步进电机控制器的设计

利用DSP实现的步进电机控制器的设计数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。
德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。
TMS320LF2407是TI公司主推的一种高性能、低价格DSP处理器,其处理速度达到30 MIPS,片内处理集成RAM、Flash及定时器外,还集成了A/D转换器、PWM控制器及CAN总线控制器等模块,特别适合于电机、电源变换等实时要求高的控制系统。
但是通常设计DSP程序的方法是,在DSP的集成开发环境CCS中用C语言设计,需要花费大量的时间用来编写和输入程序代码。
在Matlab中用图形化的方式设计DSP的程序,能够缩短产品的开发时间。
本文所介绍的是一种基于TMS320LF2407实现的步进电机控制系统的设计。
1 系统硬件构成整个系统分为五个部分组成:DSP中央控制器TMS320LF2407,步进电机及驱动,光电编码器,键盘及液晶显示部分,以及整个系统的外围电源电路及看门狗复位电路组成,。
在这个系统设计中,由键盘设定给定转速(位置),通过中央控制器TMS320LF2407来产生PWM脉冲信号来控制步进电机的转速(位置),可以采用光电编码器对步进电机的转速(位置)进行采样检测实现闭环控制,也可以采用开环控制无需转速(位置)信号,以上过程中的多个变量、参数可以在液晶显示屏上得到直观地反映。
整个硬件结构简单直观,中央控制器TMS320LF2407还剩余丰富的I/O及中断资源,在此设计基础上具有一定的扩展空间。
pwm 负斜率斜坡补偿

pwm 负斜率斜坡补偿
PWM负斜率斜坡补偿是指在PWM输出信号中使用负斜率斜坡进行补偿,以达到减小输出电流的目的。
在PWM控制中,PWM信号的占空比决定了输出电流的大小。
正常情况下,PWM信号的上升沿和下降沿应该是垂直的,以保证输出电流平稳。
然而,由于电路元件的非线性特性,电流在上升沿和下降沿之间可能存在瞬时的过大或过小的情况,从而影响系统的稳定性。
为了解决这个问题,可以使用负斜率斜坡补偿。
所谓负斜率斜坡补偿,就是在PWM信号的下降沿上添加一个负斜率的斜坡信号。
具体的方法是在下降沿期间,将PWM信号的占空比逐渐减小,使得输出电流逐渐减小,从而达到补偿的目的。
使用负斜率斜坡补偿可以有效地减小输出电流瞬时过大或过小的情况,提高系统的稳定性和性能。
博途斜坡案例程序

博途斜坡案例程序
在编写博途(一种常用的工业自动化软件)的斜坡案例程序时,我们需要考虑如何使机器或设备在开始和结束时平滑地加速和减速,以减少对机器的冲击并提高工作效率。
以下是一个简单的例子,说明如何在博途中实现斜坡案例程序。
假设我们有一个电机,我们想要让它以恒定的加速度启动,然后在达到最大速度后以恒定的减速度减速到停止。
首先,我们需要定义一些参数:
`MaxSpeed`:最大速度
`Acceleration`:加速度
`Deceleration`:减速度
`StartPosition`:起始位置
`EndPosition`:结束位置
`MaxTime`:最大时间
然后,我们可以使用以下算法来计算电机的速度和位置:
1. 如果电机位置小于 `StartPosition`,则以加速度加速直到达到
`StartPosition`。
2. 如果电机位置大于 `EndPosition`,则以减速度减速直到达到
`EndPosition`。
3. 在其他情况下,电机以恒定速度移动。
在博途中实现这个算法,你需要创建一个组织块(OB),然后在其中编写一个函数块(FB)来计算电机的速度和位置。
然后,你可以使用这个函数块来控制电机的运动。
这只是一个基本的斜坡案例程序。
实际上,你可能需要根据你的具体需求进行更多的优化和调整。
例如,你可能需要考虑电机的负载、电机的最大和最小速度、电机的最大和最小加速度等等。
带圆角斜坡函数发生器算法的制作方法

带圆角斜坡函数发生器算法的制作方法带圆角斜坡函数发生器是一种常用的信号处理器件,用于产生具有圆角斜坡的波形信号。
在本文中,我们将介绍带圆角斜坡函数发生器的制作方法。
制作带圆角斜坡函数发生器的基本思路是通过对标准斜坡波进行改造,使其具有圆角转折的特性。
具体来说,我们需要在斜坡波的上升和下降过程中,分别添加一个半圆形的过渡区域。
这个过渡区域可以通过使用三角函数或幂函数进行计算,以实现其形状的精确控制。
首先,在MATLAB或其他数学软件中,我们可以定义一个标准斜坡波形函数,例如:function y = standard_ramp(t)y = t.*(t>=0);然后,我们可以在该函数中添加一个半圆形的过渡区域,用以实现圆角斜坡波形。
具体来说,我们可以使用如下公式进行计算:function y = rounded_ramp(t, tau, alpha)% tau 为过渡区域的时间常数,alpha为过渡区域的幅度y = t.*(t>=0) + alpha*(1-exp(-t/tau)).*(t>=0).*(t<tau) + alpha*(cos(pi*(t-tau)/2/tau)+1).*(t>=tau).*(t<(tau+2*tau/pi ));其中,exp和cos函数分别用来计算斜坡波的上升和下降过程中的半圆形过渡区域,tau参数用于控制过渡区域的时间常数,alpha参数用于控制过渡区域的幅度。
最后,我们可以通过调用rounded_ramp函数,以生成带圆角斜坡的波形信号。
总的来说,带圆角斜坡函数发生器的制作方法比较简单,只需要在标准斜坡波形的基础上添加一个半圆形的过渡区域即可。
通过调整过渡区域的时间常数和幅度,我们可以精确控制圆角斜坡波形的形状和特性。
基于DSP的正弦波.上斜波,下斜波,梯形波,方波等波形函数发生器源程序

要求可以使用拨码开关控制波形的输出,其对照如下:#include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File #include "f2812a.h"#define DIPS (*(unsigned int *)0xc0001)// Prototype statements for functions found within this file.// interrupt void ISRTimer2(void);void dac_loop(void);typedef unsigned char uint8; /*开始*/typedef unsigned int uint16;typedef unsigned long uint32;uint8 const code ZXB_code[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};/*结束*/void main(void){InitSysCtrl();dac_loop();}void dac_loop(void){int i,j,m,k;i=0;//m=DIPS&0x0f;for(;;){ m=DIPS&0x0f;if(m==0) //拨码开关值为0,显示上斜波形for(i=0;i<=0xfff;i+=0x10){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}if(m==1) //拨码开关值为1,显示下斜波形for(i=0;i<=0xfff;i-=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}if(m==2) //拨码开关值为2,显示三角波形{for(i=0;i<=0xfff;i+=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(k=0xfff;k>=0;k-=0x10){DA_DA TA_L=k&0xff; //第一通道数据输出量低8位DA_DA TA_H=((k>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}}if(m==3) //拨码开关值为3,显示梯形波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0x0f|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=0; //第一通道数据输出量低8位DA_DA TA_H=0|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x10;j++);}}if(m==4) //拨码开关值为4,显示方波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0xf|DA_CHN1;//第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0; //第一通道数据输出量低8位DA_DATA_H=0|DA_CHN1; //第一通道da数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}}////////if(m==5) //拨码开关值为5,显示更改频率后的上斜波形for(i=0;i<=0xfff;i+=0x10){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}if(m==6) //拨码开关值为6,显示更改频率后的下斜波形for(i=0;i<=0xfff;i-=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x15;j++); //更改频率}if(m==7) //拨码开关值为7,显示更改频率后的三角波形{for(i=0;i<=0xfff;i+=0x10){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(k=0xfff;k>=0;k-=0x10){DA_DA TA_L=k&0xff; //第一通道数据输出量低8位DA_DA TA_H=((k>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}}if(m==8) //拨码开关值为8,显示更改频率后的梯形波形{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=i&0xff; //第一通道数据输出量低8位DA_DATA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0x0f|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=i&0xff; //第一通道数据输出量低8位DA_DA TA_H=((i>>8)&0x0f)|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0xfff;i>=0;i-=0x50){DA_DA TA_L=0; //第一通道数据输出量低8位DA_DA TA_H=0|DA_CHN1; //第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++) ;//更改频率}}if(m==9) //拨码开关值为9,显示更改频率后的方波{for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0xff; //第一通道数据输出量低8位DA_DATA_H=0xf|DA_CHN1;//第一通道数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}for(i=0;i<=0xfff;i+=0x50){DA_DATA_L=0; //第一通道数据输出量低8位DA_DATA_H=0|DA_CHN1; //第一通道da数据输出量高8位和通道号1DA_CTL=0;for(j=0;j<0x31;j++); //更改频率}}if(m==10) //拨码开关值为10,显示更改频率后的正弦波{uint16 data x;while(1){for(x=0;x<256;x++){DA_DA TA_L =ZXB_code[x]&0xff;DA_DA TA_H=(( ZXB_code[x]>>8)&0x0f)|DA_CHN1;DA_CTL=0;}}}}}。
基于DSP的永磁同步电机控制系统硬件设计

基于DSP的永磁同步电机控制系统硬件设计胡宇;张兴华【摘要】以小功率永磁同步电机(PMSM)为研究对象,结合数字信号处理器TMS320F2812功能特点,给出了一套PMSM驱动控制系统硬件设计方案.详细阐述了功率驱动主电路、反馈信号检测电路以及供电电路的设计,介绍了主要元器件选型和参数计算方法.基于设计的硬件平台,对PMSM调速控制系统进行了测试.试验结果表明,所设计的控制系统硬件设计可靠、性能稳定、控制精度高.%Based on the controlled object of small power permanent magnet synchronous motor (PMSM),combined with the main features of digital signal processor TMS320F2812,an overall hardware design scheme had been put forward for the PMSM drive control system.Design of the power driven main circuit had illustrated,signal detection circuit and power supply circuit in detail,meanwhile introduced the main components selection and parameters calculation method.Based on the designed hardware platform,the control system of PMSM had been performed a functional test.Experimental results showed that the hareware design of control system had good reliability with stable performance and high control precision.【期刊名称】《电机与控制应用》【年(卷),期】2017(044)012【总页数】7页(P19-24,80)【关键词】永磁同步电机;功率驱动主电路;信号检测电路【作者】胡宇;张兴华【作者单位】南京工业大学电气工程与控制科学学院,江苏南京211816;南京工业大学电气工程与控制科学学院,江苏南京211816【正文语种】中文【中图分类】TM351永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)因其体积小、损耗低、功率密度高和效率高等优点,在机械制造、工业控制、航空航天等领域得到广泛应用[1]。
利用DSP控制直流无刷电机

利用DSP控制直流无刷电机直流无刷电机(Brushless DC Motor,简称BLDC)由于其高效、高转速、大扭矩和低噪音等特性而被广泛应用于各种领域。
要控制BLDC进行转速调节、位置控制等,需要使用数字信号处理器(Digital Signal Processor,简称DSP)来实现。
本文将详细介绍如何利用DSP控制直流无刷电机。
一、直流无刷电机介绍直流无刷电机由转子和定子组成,电机可通过电子调速控制技术实现闭环控制,即通过检测电流、电压、角度等参数来实现控制。
相较于传统的可调电阻电调速和功率电子器件调速,无刷电机控制方式更为精确,可控性更高,并且在减小电气噪声的同时大大提高了效率。
二、直流无刷电机的控制方式直流无刷电机的控制方式可以分为三种:感应式、霍尔传感器控制、反电动势检测控制。
其中,感应式控制方式较为简单,但其准确性和鲁棒性较差;霍尔传感器控制方式使用霍尔元件检测转子位置,可以获得更高的准确性和鲁棒性;反电动势检测控制方式通过检测转子的反电动势来确定位置,具有简化硬件和准确性高等优点。
三、DSP控制直流无刷电机利用DSP控制直流无刷电机需要进行以下几个步骤:1. 设置DSP的GPIO口并输入代码:用GPIO口连接电机,可根据需要设置GPIO管脚的中断、状态和其他属性,并输入代码到DSP中。
2. 制作电机转速控制器:通过编写参考电路和硬件控制程序来制作电机转速控制器,代码需要根据控制方式进行适当的修改。
3. 编写电机控制程序:根据转速调节、位置控制等的需求,编写相关的电机控制程序。
基本步骤包括:初始化电机控制器、设定控制参数、检测电机状态、执行电机控制指令等。
4. 测试和优化:根据测试结果优化电机控制程序,以达到最佳效果。
在测试过程中可以使用示波器、逻辑分析仪等工具进行分析。
四、DSP控制直流无刷电机的优点1. 高精度DSP能够提供高精度的控制,可在微秒级的时间内执行多种运算,实现高速、高精度的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Description This module implements a ramp up and ramp down function. The output flag variable s_eq_t_flg is set to 7FFFFFFFh when the output variablesetpt_value equals the input variable target_value.Availability This IQ module is available in one interface format:1) The C interface versionModule Properties Type: Target Independent, Application IndependentTarget Devices: x28xC Version File Names: rmp_cntl.c, rmp_cntl.hIQmath library files for C: IQmathLib.h, IQmath.libItem C version CommentsCode Size51 wordsData RAM 0 words•xDAIS ready NoXDAIS component No IALG layer not implementedMultiple instances YesReentrancy Yes• Each pre-initialized “_iq” RMPCNTL structure consumes 16 words inthe data memoryCode size mentioned here is the size of the calc() functionC InterfaceC InterfaceObject DefinitionThe structure of RMPCNTL object is defined by following structure definitiontypedef struct { _iq target_value; /* Input: Target input */ long rmp_dly_max; /* Parameter: Maximum delay rate (Q0) */ _iq rmp_lo_limit; /* Parameter: Minimum limit */ _iq rmp_hi_limit; /* Parameter: Maximum limit */ long rmp_delay_cntl; /* Variable: Incremental delay (Q0) */ _iq setpt_value; /* Output: Target output */long s_eq_t_flg; /* Output: Flag output (Q0) */ void (*calc)(); /* Pointer to calculation function */ } RMPCNTL;typedef RMPCNTL *RMPCNTL_handle;ItemNameDescriptionFormat *Range(Hex)Inputs target_value Target input GLOBAL_Q 80000000-7FFFFFFF setpt_value Target output GLOBAL_Q80000000-7FFFFFFF Outputs s_eq_t_flg Flag outputQ0 80000000-7FFFFFFF rmp_dly_max Maximum delay rate Q0 80000000-7FFFFFFF rmp_lo_limit Minimum limit GLOBAL_Q 80000000-7FFFFFFF RMP_CNTL parameterrmp_hi_limit Maximum limit GLOBAL_Q80000000-7FFFFFFF Internalrmp_delay_cntlIncremental delayQ080000000-7FFFFFFF*GLOBAL_Q valued between 1 and 30 is defined in the IQmathLib.h header file.Special Constants and Data types RMPCNTLThe module definition is created as a data type. This makes it convenient to instance an interface to ramp control. To create multiple instances of the module simply declare variables of type RAMPGEN.RMPCNTL_handleUser defined Data type of pointer to RMPCNTL moduleRMPCNTL_DEFAULTSStructure symbolic constant to initialize RMPCNTL module. This provides the initial values to the terminal variables as well as method pointers.Methods void rmp_cntl_calc(RMPCNTL_handle);This definition implements one method viz., the ramp control computation function. The input argument to this function is the module handle.C Interface Module UsageInstantiationThe following example instances two RMPCNTL objectsRMPCNTL rc1, rc2;InitializationTo Instance pre-initialized objectsRMPCNTL rc1 = RMPCNTL_DEFAULTS;RMPCNTL rc2 = RMPCNTL_DEFAULTS;Invoking the computation functionrc1.calc(&rc1);rc2.calc(&rc2);ExampleThe following pseudo code provides the information about the module usage.main(){}void interrupt periodic_interrupt_isr(){rc1.target_value = target1; /* Pass inputs to rc1 */rc2.target_value = target2; /* Pass inputs to rc2 */rc1.calc(&rc1); /* Call compute function for rc1 */rc2.calc(&rc2); /* Call compute function for rc2 */out1 = rc1.setpt_value; /* Access the outputs of rc1 */out2 = rc2.setpt_value; /* Access the outputs of rc2 */}Technical BackgroundTechnical BackgroundThis software module implements the following equations:Case 1: When target_value > setpt_valuesetpt_value = setpt_value + _IQ(0.0000305), for t = n . Td, n = 1, 2, 3… and (setpt_value + _IQ(0.0000305))< rmp_hi_limit = rmp_hi_limit , for (setpt_value + _IQ(0.0000305))> rmp_hi_limitwhere, Td = rmp_dly_max . Ts Ts = Sampling time periodCase 2: When target_value < setpt_valuesetpt_value = setpt_value - _IQ(0.0000305), for t = n . Td, n = 1, 2, 3….. and (setpt_value - _IQ(0.0000305))> rmp_lo_limit = rmp_lo_limit , for (setpt_value - _IQ(0.0000305))<rmp_lo_limitwhere, Td = rmp_dly_max . Ts Ts = Sampling time periodNote that target_value and setpt_value variables are in _iq format.Example:setpt_value=0(initial value), target_value=1000(user specified),rmp_dly_max=500(user specified), sampling loop time period Ts=0.000025 Sec.This means that the time delay for each ramp step is Td=500x0.000025=0.0125 Sec. Therefore, the total ramp time will be Tramp=1000x0.0125 Sec=12.5 SecTd _IQ(0.0000305) target_value > setpt_valuetarget_value < setpt_valuetarget_value > setpt_valuermp_lo_limitrmp_hi_limitt setpt_value。