现在许多高精度控制场合要用到高精度高分辨率的DA输出来控制,或要用PWM波输出高频率(大于100kHz)而且数位要高(如大于16bit),则用在现有的MCU、ARM、DSP实现占用资源比较多特别占用中断时间而在要求多路输出时更是会出现中断干扰;而用FPGA则可以轻松实现且每路之间不存在中断干扰。
原理:1。要求PWM波精度N(N= 2^n); 2。选用一个适合位度b 的基波B(B= 2^b);3。计算谐波位数m(m = n-b);在FPGA定义四个寄存器:RES1(位度b位)、RES2(位度b位)、RES3(位度m位)、RES4(位度m位);
我们现在设计要求输出:频率200KHz,精度20bit。
根据这个要求我们可以选用FPGA的外部晶振25MHz, 再用FPGA内部PLL电路倍频到100MHz
计算: 100MHz / 200KHz = 500 ,约 = 9bit (9bit = 195kHz若要产生准确200KHz则可以选用适合的晶振频率和PLL值使FPGA内部运行频率为512的整数倍), 则20bit = 9bit * 11bit;这样一个20bit的PWM波的频率可以达到200KHz 但一个PWM波完整输出时间要10ms,但这样做对应用在PWM输出驱动MOSFET管后加LC滤波可以大大减小LC选值,若是做DAC输出也可以大减小RC输出滤波值。(n = 20;b=9;B=512;m=11)
举例说明波型输出的计算: 在闭环控制用PID算出要输出的量是X =524278= 2^19 -10;
RES1= X / (2^m) = 524278 / 2048= 255;
RES3= X % (2^m) = 524278 %2048= 2038;
在前10个9bit输出波形的占空比为255(100% = 511),到第11个到第2048个的9bit输出波形的占空比为256; RES2可以用9bit波形占空比的寄存器是RES1的实时计算值到第11个波形时变为256,RES4可以用11bit个9bit输出波形的计数器为RES3的互补计数器具=2048-2038 = 10;
关键词:
产生
高精度
高频率
波形
输出