现在许多高精度控制场合要用到高精度高分辨率的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;
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
