本发明属于工业控制技术领域,更具体地,涉及一种基于mcu的可调dac缓输出方法及系统。
背景技术:
在控制系统中常见到数模转换器dac输出在控制环路中应用时存在mcu与硬件执行电路之间的速率匹配问题。
在现有技术常用的dac输出电路中,mcu的dac输出变化是相当快的,一般通过放大器来放大dac输出来为后续电路的执行,但一般的放大器有一个变化范围,当信号变化太快时,放大器会发生混乱,就需要选择更加昂贵高速的放大器,会增加成本;第二种方式是采用特定硬件方式实现的dac芯片,这种方式需要增加元器件,会增加成本,而且随着硬件电路的增加,系统也会降低可靠性。
技术实现要素:
针对现有技术的至少一个缺陷或改进需求,本发明提供了一种基于mcu的可调dac缓输出方法及系统,能够连续地调整dac信号缓输出,解决可靠性及成本高的技术问题。
为实现上述目的,按照本发明的第一方面,提供了一种基于mcu的可调dac缓输出方法,包括步骤:
初始化dac模块,读取dac模块的输出高端偏移值、输出低端偏移值、dac模块的寄存器能写入的最大值和dac模块的输出起始值;
设置dac模块的输出目标值、dac模块的输出时间周期、从输出起始值到输出目标值所需要的输出时间和每单位时间周期的输出电压步进值;
选择输出模式,输出模式为时间输出模式或步进输出模式中的一种;
根据输出模式、所有读取值和设置值计算每个时间周期的dac模块对应的输出电压变量值和dac模块数字输入量,使得dac模块的模拟量输出斜率与后级电路相匹配。
优选地,将dac模块的输出高端偏移值记为damax、输出低端偏移值记为damin、dac模块的寄存器能写入的最大值记为dacregistermax、dac模块的输出起始值记为vsetmin;
将dac模块的输出目标值记为vsetmax、dac模块的输出时间周期记为intervaltime、从输出起始值vsetmin到输出目标值vsetmax所需要的输出时间记为t、每单位时间周期intervaltime的输出电压步进值记为step;
若选择输出模式为时间输出模式,则dac模块对应的输出电压变量值和dac模块数字输入量的计算包括步骤:
根据输出起始值vsetmin、输出最终目标值vsetmax、输出时间t、输出时间周期intervaltime计算每个时间周期的dac模块对应的输出电压变量值vout_t,根据输出电压变量值vout_t、输出高端偏移值damax、输出低端偏移值damin、输出起始值vsetmin、输出最终目标值vsetmax和最大值dacregistermax,计算时间输出模式下每个时间周期dac模块的数字输入量dac_output_t。
优选地,若选择输出模式为步进输出模式,则dac模块对应的输出电压变量值和dac模块数字输入量的计算包括步骤:
根据输出起始值vsetmin、输出时间周期intervaltime、输出电压步进值step计算每个时间周期的dac模块对应的输出电压变量值vout_s,根据输出电压变量值vout_s、输出高端偏移值damax、输出低端偏移值damin、输出起始值vsetmin、输出最终目标值vsetmax和最大值dacregistermax,计算步进输出模式下每个时间周期dac模块的数字输入量dac_output_s。
优选地,输出电压变量值vout_t和数字输入量dac_output_t的计算包括步骤:
s41:计算每个时间周期dac模块对应的输出电压变量值vout_t,vout_t=vsetmin (vsetrange/(t/intervaltime))*ntimes,其中ntimes为时间周期计数值,ntimes周期计数值从1开始,vsetrange=vsetmax-vsetmin;
s42:计算每个时间周期dac模块的数字输入量dacoutput_t,dac_output_t=(damax-damin)*(vsetmax-vout_t)/vsetrange (dacregistermax-damax);
s43:dac模块将数字输入量dac_output_t转换为模拟量并输出到后级电路;
s44:判断ntimes周期计数值是否为t/intervaltime,若是,保存输出时间周期intervaltime和输出时间t,结束;若不是,ntimes周期计数值递增1后转到s41继续执行。
优选地,输出电压变量值vout_s和数字输入量dac_output_s的计算包括步骤:
s51:计算每个时间周期dac模块对应的输出电压变量值vout_s,vout_s=vout_s′ step*intervaltime,vout_s′为上个时间周期输出的电压变量,vout_s′的起始值为输出起始值vsetmin;
s52:计算每个时间周期dac模块的数字输入量dac_output_s,dac_output_s=(damax-damin)*(vsetmax-vout_s)/vsetrange (dacregistermax-damax),
s53:dac模块将数字输入量dac_output_s转换为模拟量并输出到后级电路;
s54:判断vout_s是否等于输出最终目标电压值vsetmax,若是,保存输出时间周期intervaltime,输出电压步进值step,结束;若不是,则转到s51继续执行。
优选地,在选择输出模式前还包括步骤:
判断dac缓输出是否需要调整,若需要则继续执行选择输出模式及计算dac模块对应的输出电压变量值和dac模块数字输入量,若不需要则结束。
优选地,判断dac缓输出是否需要调整包括步骤:
判断此次设置的输出最终目标值vsetmax与上一次设置的vsetmax是否相等,若不相等则判断dac缓输出需要调整,若相等则判断dac缓输出不需要调整。
按照本发明的第二方面,提供了一种基于mcu的可调dac缓输出系统,包括mcu处理器、上位机、存储器、dac模块和通信接口:
mcu处理器,用于初始化dac模块,读取dac模块的输出高端偏移值、输出低端偏移值、dac模块的寄存器能写入的最大值和dac模块的输出起始值;
上位机,用于设置dac模块的输出目标值、dac模块的输出时间周期、从输出起始值到输出目标值所需要的输出时间和每单位时间周期的输出电压步进值,还用于从存储器调用输出时间、输出电压步进值、输出时间周期和输出目标值,并将mcu处理器输出的dac的数字输入量dac_output通过通信接口传送给上位机;
存储器,用于存储通过上位机设置的输出目标值、dac模块的输出时间周期、输出电压步进值;
上位机还用于选择输出模式,输出模式为时间输出模式或步进输出模式中的一种;
mcu处理器还用于根据输出模式、所有读取值和设置值计算每个时间周期的dac模块对应的输出电压变量值和dac模块数字输入量,使得dac模块的模拟量输出斜率与后级电路相匹配;
通信接口,用于处理上位机和mcu处理器间的信息交互。
优选地,存储器和dac模块集成在mcu处理器中。
总体而言,本发明与现有技术相比,具有有益效果:后台在线确定调整dac模块输出所用参数,经计算后得到dac输入值,实现连续地、高精度地在线调整dac输出,匹配给后级电路。本发明方法和系统方式具有使用灵活、硬件成本低、操作方便的优点,另外在一次调整参数之后,之后上电无需调节,将直接得到期望结果。
附图说明
图1是本发明实施例的可调dac缓输出系统的连接原理示意图;
图2是本发明实施例的可调dac缓输出系统的操作界面示意图;
图3是本发明实施例的可调dac缓输出方法流程图;
图4是本发明另一实施例的可调dac缓输出方法流程图;
图5是本发明实施例的dac缓输出在二维坐标系中对应关系改进前后示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,本发明实施例的可调dac缓输出系统的优选实施方式包括含有dac模块和带电可擦写可编程只读存储器eeprom的mcu处理器、异步收发传输器uart和上位机,mcu的dac模块含有dac1和dac2两路i/o口,uart的一端连接mcu,另一端连接后台参数调整系统,mcu自带的eeprom主要是用来存放调节过程中的调节参数,它具有掉电数据不丢失功能,能在下次上电时读取之前的保存值供计算使用。
本发明实施例的可调dac缓输出系统及方法主要功能是调节参数使之达到期望值,当调试开始时,初始化内部的eeprom的调整参数,经计算后得到输出值,dac输出系统将输出值与硬件电路期望值比较,当两者相匹配时,记录此调节参数,并反馈给eeprom模块,在下次上电时读取此参数参与计算。
在本发明实施例的可调dac缓输出方法中,调试开始时,进行初始化,mcu处理器读取dac模块的高端偏移值damax和低端偏移值damin,dacregistermax为dac模块的寄存器能写入的最大值,则mcu输出到dac的数字输入量dac_output的计算公式为:
dac_output=(damax-damin)*(vsetmax-vout)/vsetrange (dacregistermax-damax)(1)
其中,dac的高端偏移值vdamax和低端偏移值damin,高端输出目标值vsetmax(最终输出目标值vsetmax),高端输出目标值到低端输出目标值(输出起始值vsetmin)的范围vsetrange,dacregistermax为dac模块的寄存器能写入的最大值,以上5个变量值为dac输出的校准值,在校准之后即为固定值,改变实际要输出的电压值vout即改变dac模块的数字输入量dac_output。
在本发明的缓输出方法中,通过设置dac的输出的时间周期参数intervaltime、dac模块输出低端目标值到输出高端目标值的输出时间t或每个时间周期电压步进值step,计算每个时间周期输出实际目标电压值vout,然后通过公式(1)即可实现每个时间周期有不同的dac的输入量dac_output,即实现dac缓输出。
当选择时间模式时,dac模块的输出对应的电压变量值vout_t,按公式(2)计算,
vout_t=vsetmin (vsetrange/(t/intervaltime))*ntimes(2)其中,vsetmax为输出电压的目标值,ntimes为时间周期计数值,ntimes周期计数值从1开始,每个时间周期,将vout_t值代入公式(1)计算mcu输出的dac数字输入量为:
dac_output_t=(damax-damin)*(vsetmax-vout_t)/vsetrange (dacregistermax-damax),
每经过一个时间周期intervaltime,ntimes递增1,vout_t值改变,dac数字入量dac_output_t相应改变,ntimes最大值为t/intervaltime,当ntimes等于最大值t/intervaltime时,vout_t输出达到目标值即等于vsetmax,该次dac缓输出退出,进入常规的dac输出。那么在intervaltime值不变的条件下,只要改变时间参数t,就可以改变dac每个时间周期输出量,并使之逐渐达到目标输出值。
当选择步进模式时,由公式(1)dac模块的输出对应的电压变量值为vout_s,其计算按公式(3),
vout_s=vout_s′ step*intervaltime(3)
其中,vout_s′为上个步进的dac输出电压值,将vout_s值代入公式(1)计算每个时间周期dac数字输入量为dac_output_s=(damax-damin)*(vsetmax-vout_s)/vsetrange (dacregistermax-damax);
每经过一个时间周期intervaltime,dac输出的步进值值增加step*intervaltime,vout_s值改变,dac数字输入量dac_output_s相应改变,当vout_s等于达到目标值即等于vsetmax时,该dac缓输出退出,进入常规的dac输出。
dac缓输出退出时,将时间参数t值和步进step及dac输出间隔时间intervaltime值保存在eeprom中。
在每次上电时系统,初始化dac,读取dac模块输出的高端偏移值damax和低端偏移值damin,dac模块的寄存器写入的最大值dacregistermax;判断dac缓输出是否需要调整;若不需要,则自动读取时间参数t值和步进step及dac输出间隔时间intervaltime值并参与计算,即可得到一个dac输出与硬件相匹配的缓输出斜率,每一次对目标电压的调整执行一次。
如某使用场景中,某dac模块最大输出参考电压为2.5v,最大12位精度,则此dac模块最大输出参考电压为2.5v,寄存器写入最大值dacregistermax为4095,设备要求直流开关电源输出从50.0v到250.0v可调整,mcu的内部dac输出口经过lm258ad放大器放大之后接入移相谐振控制器uc2875dwp来达到调整输出电压的功能;当设定输出为50.0v时对应dac输出的dac模块最小输出参考电压接近2.5v,当设定输出电压为250.0v时对应dac模块最大输出参考电压0v,当mcu接受指令将dac输出从0v到2.5v时转换速率为1.2us变化2.5v即接近2.1v/us,而后面的硬件电路中的放大器lm258ad依数据手册可知转换速率sr最大为0.6v/us,导致放大器出错。但按本发明的方法,调整t值或step值,dac输出有一个斜率输出,各变量在二维坐标系中的对应dac缓输出关系如下图5所示。调整时间参数t或步进参数step,使dac输出的速率为小于0.6v/us,以达到与放大器相匹配的结果。
在这一实施例中,如图2所示,dac缓输出系统的上位机上的操作界面中,④处intervaltime值保持10ms不变的条件下,选定③处中的时间模式,调整图2中的①处的上下按钮,使dac缓输出从输出低端目标值vsetmin(输出起始值vsetmin)到输出高端目标值vsetmax输出时间为100ms,即dac从0v输出到2.5v输出的上升时间为100ms,即相当于输出速率为0.25v/us,即小于放大器lm258ad的最大转换速率0.6v/us,满足放大器lm258ad的要求。当在图2的③处选择步进模式时,调整图2中的②处的上下按钮,使dac缓输出步进为50mv/ms,那dac输出达到2.5v时,每个时间周期10ms输出500mv,需要50ms,即相当于输出速率为0.05v/ms,即小于放大器lm258ad的最大转换速率0.6v/us,也满足放大器lm258ad的要求。
当dac输出的①、②、③、④通道停止调整时,模块uart串口在200ms内没接收到调整指令时,mcu将自动保存调整结果t、step、intervaltime和模式选择到eeprom中,完成dac通道的缓输出调整。调整结束重新上电初始化时,系统将自动读取eeprom中调整后的t、step、intervaltime和模式选择的值按图3所示所示处理流程进行输出。
如图3所示,本发明实施例的一种基于mcu的可调dac缓输出方法,包括步骤:
s1:dac初始化,读取dac模块的高端偏移值damax和低端偏移值damin,输出起始值vsetmin,dacregistermax为dac模块的寄存器能写入的最大值:
s2:设置dac输出的时间周期参数intervaltime为10ms、dac模块从输出低端目标值vsetmin(输出起始值vsetmin)到输出高端目标值vsetmax输出时间为100ms、每单位时间周期intervaltime输出电压步进值50mv/ms以及dac输出电压最大值;
s3:选择按缓输出模式,若选择按时间输出模式,执行步骤s41;若选择步进模式输出模式,执行步骤s51;
s41:依据输出实际1电压值250v,计算每时间周期intervaltime的dac输出电压值:第一个时间周期,vout_t=50v (200v/(100ms/10ms))*1=70v,其中ntimes为时间周期计数值(最大值为100ms/10ms=10),ntimes周期计数值从1开始;
s42:计算第一个时间周期mcu输出的dac数字输入量dac_output_t1,dac_output_t1=(damax-damin)*(250-70)/200 (4095-damax);
s43:dac模块将数字输入量dac_output_t转换为模拟量并输出到后续lm258ad电路,lm258ad电路转化为实际的电压值70v。
s44:判断ntimes周期计数值是否为10(t/intervaltime),若是,上位机通知mcu保存保存周期参数10ms,dac的输出时间100ms,退出dac缓输出;若不是,ntimes周期计数值递增1后转到s41;
s51:为步进模式时,根据公式vout_s=vout_s′ step*intervaltime计算第一个步进的dac输出电压值vout_s=50v 50mv/ms*10ms=50.5v;
s52:计算每个步进mcu的dac数字输入量dac_output_s,
dac_output_s=(damax-damin)*(250-50.5)/200 (4095-damax),
其中,dacregistermax为dac模块的寄存器能写入的最大值,dac的高端偏移值damax和低端偏移值damin,高端输出标称目标值250v,低端输出标称目标值到高端输出标称目标值的范围200v;
s53:dac模块将数字输入量dac_output_s转换为模拟量并输出到后续lm258ad电路,lm258ad电路转化为实际的电压值50.5v。
s54:判断vout_s是否等于输出目标电压值250v,若是,上位机通知mcu保存周期参数10ms,dac的输出的步进值50mv/ms到eeprom,退出dac缓输出,若不是,则转到s51。
至此,dac缓输出即可完成,系统再上电时初始化时程序将自动加载之前保存在eeprom中的参数值,并代入计算,以获得与硬件放大器相匹配的执行速率。整个调参过程中无需对产品进行开箱操作,只需将通信工装夹具按要求连接好,打开上位机并运行用于调参的后台程序即可对待调模块进行调参,这将大大缩短dac缓输出调参时间。
依此类推,如有dac第二通道或更多dac通道,按如上步骤操作使dac输出进行缓输出处理。至此,dac缓输出的过程即可完成,当程序下次上电初始化时程序将自动加载之前保存在eeprom中的参数值,并代入计算,以获得与硬件电路相匹配的dac缓输出斜率。
如图4所示,本发明实施例的一种基于mcu的可调dac缓输出方法,在选择输出模式前还包括步骤:判断dac缓输出是否需要调整(图中步骤s21),若需要则继续执行选择输出模式及计算dac模块对应的输出电压变量值和dac模块数字输入量,若不需要则结束。其他步骤和图3实施例类似,此处不再赘述。
进一步地,判断dac缓输出是否需要调整的具体方法是:判断此次设置的输出最终目标值vsetmax与上一次设置的vsetmax是否相等,若不相等则判断dac缓输出需要调整,若相等则判断dac缓输出不需要调整。
本发明提供的dac缓输出系统的优选实施方式包括dac模块、mcu、eeprom存储器、uart和上位机,eeprom用来存放调节过程中的调节参数t、step、intervaltime值,dac模块和eeprom可集成于mcu中。
需要说明的是,存储器除采用eeprom外,还可采用其它非易失性存储器,如flash存储器;通信接口除采用uart串口外,还可采用如以太网口、can接口、usb接口等可用于数据通信的接口。
必须说明的是,上述任一实施例中,方法并不必然按照序号顺序依次执行,只要从执行逻辑中不能推定必然按某一顺序执行,则意味着可以以其他任何可能的顺序执行。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
1.一种基于mcu的可调dac缓输出方法,其特征在于,包括步骤:
初始化dac模块,读取dac模块的输出高端偏移值、输出低端偏移值、dac模块的寄存器能写入的最大值和dac模块的输出起始值;
设置dac模块的输出目标值、dac模块的输出时间周期、从输出起始值到输出目标值所需要的输出时间和每单位时间周期的输出电压步进值;
选择输出模式,输出模式为时间输出模式或步进输出模式中的一种;
根据输出模式、所有读取值和设置值计算每个时间周期的dac模块对应的输出电压变量值和dac模块数字输入量,使得dac模块的模拟量输出斜率与后级电路相匹配。
2.如权利要求1所述的一种基于mcu的可调dac缓输出方法,其特征在于,将dac模块的输出高端偏移值记为damax、输出低端偏移值记为damin、dac模块的寄存器能写入的最大值记为dacregistermax、dac模块的输出起始值记为vsetmin;
将dac模块的输出目标值记为vsetmax、dac模块的输出时间周期记为intervaltime、从输出起始值vsetmin到输出目标值vsetmax所需要的输出时间记为t、每单位时间周期intervaltime的输出电压步进值记为step;
若选择输出模式为时间输出模式,则dac模块对应的输出电压变量值和dac模块数字输入量的计算包括步骤:
根据输出起始值vsetmin、输出最终目标值vsetmax、输出时间t、输出时间周期intervaltime计算每个时间周期的dac模块对应的输出电压变量值vout_t,根据输出电压变量值vout_t、输出高端偏移值damax、输出低端偏移值damin、输出起始值vsetmin、输出最终目标值vsetmax和最大值dacregistermax,计算时间输出模式下每个时间周期dac模块的数字输入量dac_output_t。
3.如权利要求2所述的一种基于mcu的可调dac缓输出方法,其特征在于,若选择输出模式为步进输出模式,则dac模块对应的输出电压变量值和dac模块数字输入量的计算包括步骤:
根据输出起始值vsetmin、输出时间周期intervaltime、输出电压步进值step计算每个时间周期的dac模块对应的输出电压变量值vout_s,根据输出电压变量值vout_s、输出高端偏移值damax、输出低端偏移值damin、输出起始值vsetmin、输出最终目标值vsetmax和最大值dacregistermax,计算步进输出模式下每个时间周期dac模块的数字输入量dac_output_s。
4.如权利要求2所述的一种基于mcu的可调dac缓输出方法,其特征在于,输出电压变量值vout_t和数字输入量dac_output_t的计算包括步骤:
s41:计算每个时间周期dac模块对应的输出电压变量值vout_t,vout_t=vsetmin (vsetrange/(t/intervaltime))*ntimes,其中ntimes为时间周期计数值,ntimes周期计数值从1开始,vsetrange=vsetmax-vsetmin;
s42:计算每个时间周期dac模块的数字输入量dacoutput_t,dac_output_t=(damax-damin)*(vsetmax-vout_t)/vsetrange (dacregistermax-damax);
s43:dac模块将数字输入量dac_output_t转换为模拟量并输出到后级电路;
s44:判断ntimes周期计数值是否为t/intervaltime,若是,保存输出时间周期intervaltime和输出时间t,结束;若不是,ntimes周期计数值递增1后转到s41继续执行。
5.如权利要求3所述的一种基于mcu的可调dac缓输出方法,其特征在于,输出电压变量值vout_s和数字输入量dac_output_s的计算包括步骤:
s51:计算每个时间周期dac模块对应的输出电压变量值vout_s,vout_s=vout_s′ step*intervaltime,vout_s′为上个时间周期输出的电压变量,vout_s′的起始值为输出起始值vsetmin;
s52:计算每个时间周期dac模块的数字输入量dac_output_s,dac_output_s=(damax-damin)*(vsetmax-vout_s)/vsetrange (dacregistermax-damax),
s53:dac模块将数字输入量dac_output_s转换为模拟量并输出到后级电路;
s54:判断vout_s是否等于输出最终目标电压值vsetmax,若是,保存输出时间周期intervaltime,输出电压步进值step,结束;若不是,则转到s51继续执行。
6.如权利要求1所述的一种基于mcu的可调dac缓输出方法,其特征在于,在选择输出模式前还包括步骤:
判断dac缓输出是否需要调整,若需要则继续执行选择输出模式及计算dac模块对应的输出电压变量值和dac模块数字输入量,若不需要则结束。
7.如权利要求6所述的一种基于mcu的可调dac缓输出方法,其特征在于,判断dac缓输出是否需要调整包括步骤:
判断此次设置的输出最终目标值vsetmax与上一次设置的vsetmax是否相等,若不相等则判断dac缓输出需要调整,若相等则判断dac缓输出不需要调整。
8.一种基于mcu的可调dac缓输出系统,其特征在于,包括mcu处理器、上位机、存储器、dac模块和通信接口:
mcu处理器,用于初始化dac模块,读取dac模块的输出高端偏移值、输出低端偏移值、dac模块的寄存器能写入的最大值和dac模块的输出起始值;
上位机,用于设置dac模块的输出目标值、dac模块的输出时间周期、从输出起始值到输出目标值所需要的输出时间和每单位时间周期的输出电压步进值,还用于从存储器调用输出时间、输出电压步进值、输出时间周期和输出目标值,并将mcu处理器输出的dac的数字输入量dac_output通过通信接口传送给上位机;
存储器,用于存储通过上位机设置的输出目标值、dac模块的输出时间周期、输出电压步进值;
上位机还用于选择输出模式,输出模式为时间输出模式或步进输出模式中的一种;
mcu处理器还用于根据输出模式、所有读取值和设置值计算每个时间周期的dac模块对应的输出电压变量值和dac模块数字输入量,使得dac模块的模拟量输出斜率与后级电路相匹配;
通信接口,用于处理上位机和mcu处理器间的信息交互。
9.如权利要求8所述的一种基于mcu的可调dac缓输出系统,其特征在于,存储器和dac模块集成在mcu处理器中。
技术总结