速度:低功耗μC尽管具有高MI/s/mA性能,仍然需要一些优化手段来使运行FFT的指令数尽可能少。好在本应用所用的C编译器(IAR的Em-bedded Workbeneh for MAXQ,见www.iar.com)可提供多种级别的优化和设置。高效地使用硬件乘法器可使代码优化到可以接受的水平。
无浮点能力:所选的μC不具备浮点能力(低功耗产品一般都不具备浮点能力)。因此,所有运算都必须采用定点算法。为了表示小数,固插件电感件采用带符号的Q 8.7表示法。这样,在固件中假定:
●第O位至第6位代表小数部分;
●第7位至第14位代表整数部分;
●第15位代表符号位(二的补码)。
这样的安排对于加法和减法没有影响,但在做乘法时必须注意将数据按照Q8.7格式对齐。
所选的数据表示法还要适应FFT算法可能遇到的最大数值,同时又要提供足够的精度。例如,我们的ADC可提供带符号的8位采样,以二的补码表示。如果输入为最大幅度(对于带符号8位采样为127)的直流电压,则其能谱全部包含于X(0)中,用Q8.7表示为32 512。这个数值能够用单个带符号的16位数据表示。
2 固件
以下部分讨论在低功耗μC上执行Radix-2FFT的固件实现。信号采样由ADC读出后被存储在x_n_re数组中。这个数组代表X(n)的电感电容滤波器实模压电感部。虚部存储在x_n_im数组中,在开始运行FFT前初始化为零。完成FFT后,计算结果取代原始采样电感生产厂家数据,被存储在x_n_re和x_n_im中。
2.1 获取采样
FFT算法假定采样是以固定的取样频率获得的。在为FFT获取采样时如果不加小心将会产生一些问题。例如,采样间隔的抖动就会给FFT结果引入误差,应尽力减小。
清单1.两种ADC采样伪码算法
ADC采样循环中的判决语句会造成采样间隔的抖动。例如,系统从ADC读取带符号的8位采样,并将其存储在一组16位变量中。程序清单1中给出了两种伪码算法,执行ADC读取-存储功能。算法l给出的方法会造成采样间隔的抖动,因为负采样比正采样需要更多的时间来读取并存储。
2.2 三角函数表
本FFT算法通过查表(LUT)而非计算得到正弦或余弦函数值。程序清单2给共模电感器出了对于正弦和余弦LUT的声明。实际固件的注释中包含了自动生成这些LUT的源代码,可由程序调用。两个LUT均含有N/2分量,因为旋转因子的索引号变化范围为0至N/2-1(见图2)。
这些LUT中的数组被声明为const,强制编译器将它们存储于代码空间而非数据空间。由于LUT数值须采用Q8.7表示法,它们由正弦和余弦的实际值乘以27后得到。
2051的比较器模拟AD源程序(C语言)sbit P36 = P3^6; // 比较器内部判断脚sbit LED = P3^7; // 一个发光二级管观察亮度变化// 内部标志位定义bit less; // 比较是否大于 1.小于,0.大于
[逆变器]【21ic分享赛】 机床用无刷电机控制器4本帖最后由亲爱的郭郭于2016-6-2814:12编辑
这几天一直没有写,主要是因为外壳还没有找到。
如果自己做外壳的话根本不可能,费用太高老板不会同意。
只能在特别什么买。
东西虽
一种轿车车门ECU 设计 摘 要: 提出了一种 总体分布、局部集中式 的轿车车门ECU设计,ECU之间以CAN总线方式通信。以英飞凌公司XC164CS微控制器和TLE8201、BTS781功率驱动芯片为核心设计了车门ECU的