1、课 程 设 计设计题目: 快速傅里叶变换程序设计 系别: 自控系 班级: 测控本091班 学号: 2009308120 学生姓名: 刘礼旭 指导教师: 吕勇军 职称: 教授 起止日期:2012 年 7 月 2 日起2012年7月6日止沈阳工程学院课程设计任务书课程设计题目: 快速傅里叶变换程序设计 系 别 自控系 班级 测控本091班 学生姓名 刘礼旭 学号 2009308120 指导教师 吕勇军 职称 教授 课程设计进行地点: 实训F430 任 务 下 达 时 间: 12年 7月2日起止日期: 12年7月2日起至12年7月6日止教研室主任 吕勇军 2012年 7月 2 日批准 快速傅里叶变换
2、程序设计1.设计主要内容及要求;要求:1)掌握DSP A/D转换器使用方法。 2)研究FFT原理以及利用DSP实现的方法。 3)编写A/D采样和FFT程序,调试,观察结果。2.对设计论文撰写内容、格式、字数的要求;(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计论文的结构及各部分内容要求可参照沈阳工程学院毕业设计(论文)撰写规范执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。(3).论文要求打印,打印时按沈阳工程学院毕业设计(论文)撰写规范的要求进行打印。(4). 课程设计论文装订
3、顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。3.时间进度安排;顺序阶段日期计 划 完 成 内 容备注17月2日教师讲解题目,学生查阅相关资料27月3日确定FFT算法以及程序流程37月4日编写程序47月5日调试程序57月6日撰写论文,程序验收沈 阳 工 程 学 院 DSP技术 课程设计成绩评定表系(部): 自控系 班级: 测控本091班 学生姓名:刘礼旭 指 导 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分调研论证能独立查阅文献,收集资料;能制定课程设计方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完
4、成设计工作。0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0.25432说明书的 质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432 指导教师评审成绩(加权分合计乘以12) 分加权分合计指 导 教 师 签 名: 年 月 日评 阅 教 师 评 审 意 见评价内容具 体 要 求权重评 分加权分查阅文献查阅文献有一定广泛性;有综合归纳资料的能力。0.25432工作量工作量饱满,难度适中。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完
5、备,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以8) 分加权分合计评 阅 教 师 签 名: 年 月 日课 程 设 计 总 评 成 绩 分 摘要数字信号处理 (Digital Signal Processing,DSP)是一门应用十分广泛的学科。数字信号处理是指利用计算机技术,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。数字信号处理器也称为DSP芯片,是一种用于进行数字信号处理运算的微处理器,其主要功能是实时快速地实现各种数字信号处理算法及各种复杂控制算法。TMS320C2000系列DSP集微控制器和高性能DSP的特点于一身,
6、具有强大的控制和信号处理能力,能够实现复杂的控制算法。TMS320C2000系列DSP片上整合了Flash存储器、快速的A/D转换器、增强的CAN模块、事件管理器、正交编码电路接口、多通道缓冲串口等外设,此种整合使用户能够以很便宜的价格开发高性能数字控制系统。傅立叶变换是一种将信号从时域变换到频域的变换方式,是声学、语音、电信和信号处理等领域中一种重要的分析工具。离散傅里叶变换(DFT)是连续傅里叶变换在离散系统中的表现形式,但由于DFT的计算量很大,因此在很长一段时间内其应用受到很大的限制。快速傅里叶变换(FFT)是离散傅里叶变换的一种高效运算方法。FFT使DFT的运算大大化简,运算时间一般
7、可以缩短1至2个数量级,FFT的出现大大提高了DFT的运算速度,从而使DFT得到广泛的应用。快速傅里叶变换(Fast Fourier Transform)是实现离散傅里叶变换(DFT)的一种快速高效的运算方法,是数字信号处理中最为重要的工具之一。它使DFT的运算效率提高12个数量级,为数字信号处理技术应用于各种高速信号的实时处理创造了良好的条件,从而大大推动了数字信号处理技术的发展。 关键词 DSP;微处理器;离散傅里叶变换(DFT);FFT 目录课程设计任务书IDSP技术 课程设计成绩评定表III摘要IV1 设计任务描述11.1设计题目11.2设计主要内容及要求11.2.1设计目的11.2.
8、2基本要求11.2.3发挥部分12 设计思路22.1 功能实现32.1.1 位置倒码32.1.2 蝶距32.1.3 旋转因子43 设计流程图54 各部分程序设计及参数计算64.1 驱动程序的配置64.2 程序的初始化84.3 主程序84.4 旋转因子的软件实现104.5 FFT初始化104.6 按时间抽取法的FFT程序114.7 功率谱的计算实现124.8 倒序运算函数124.9 定时器2中断子程序及AD转换子程序135 工作过程分析155.1 程序调试155.1.1 在CCS下调试程序步骤155.1.2 输入信号时域波形155.1.3 输出信号功率谱165.2 功率谱的计算186实验系统介绍
9、196.1 SEED-DTK2812 的原理框图196.2 实验箱整体配置196.3 实验箱特点20小结21致 谢22参考文献23附录1 源程序清单24附录2 程序运行图28 IV快速傅里叶变换程序设计 1 设计任务描述1.1设计题目快速傅里叶变换程序设计。1.2设计主要内容及要求1.2.1设计目的(1)掌握DSP芯片的使用方法。 (2)根据FFT的原理确定其程序流程。 (3)学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确运用。1.2.2基本要求(1)研究FFT原理以及利用DSP实现的方法。(2)编写FFT程序。(3)调试程序,观察结果。1.
10、2.3发挥部分用AD采集信号,可以对多种信号进行FFT变换。 2 设计思路在进行设计程序之前首先要弄清楚快速傅里叶变换(FFT)的变换原理,然后根据快速傅里叶变换的方法,编写相对应的程序来实现其功能。所以快速傅里叶变换算法的原理和实现成为了整个设计的核心部分。傅立叶变换是一种将信号从时域到频域的变换形式,是声学、语音、电信和信号处理等领域中的一种重要分析工具。离散傅立叶变换(DFT)是连续傅立叶变换在离散系统中的表现形式,由于DFT 的计算量很大,因此在很长时间内其应用受到很大的限制。快速傅立叶变换(FFT)是离散傅立叶变换的一种高效运算方法。FFT 使DFT 的运算大大简化,运算时间一般可以
11、缩短一至两个数量级,FFT 的出现大大提高了DFT 的运算速度,从而使DFT 在实际应用中得到广泛的应用。在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,它甚至成为DSP 运算能力的一个考核因素。 对于有限长离散数字信号xn,0nN-1,其离散谱xk可以由离散付氏变换(DFT) 求得。DFT 的定义为 可以方便的把它改写为如下形式: 即称为蝶形因子式旋转因子。 对于旋转因子来说,有如下的对称性和周期性:对称性:周期性:FFT 就是利用了旋转因子的对称性和周期性来减少运算量的。 FFT 算法将长序列的DFT 分解为短序列的DFT。N 点的DFT 先分解为两个N/2 点的DFT,每个
12、N/2 点的DFT 又分解为两个N/4 点的DFT 等等,最小变换的点数即基数,基数为2 的FFT 算法的最小变换是2 点DFT。一般而言,FFT 算法分为时间抽选(DIT)FFT 和频率抽选(DIF)FFT 两大类。时间抽取FFT 算法的特点是每一级处理都是在时域里把输入序列依次按奇/偶一分为二分解成较短的序列;频率抽取FFT 算法的特点是在频域里把序列依次按奇/偶一分为二分解成较短的序列来计算。 DIT 和DIF 两种FFT 算法的区别是旋转因子出现的位置不同,(DIT)FFT 中旋转因子在输入端,(DIF)FFT 中旋转因子在输出端,除此之外,两种算法是一样的。在本设计中实现的是基2 的
13、时间抽取FFT 算法,具体的实现过程可参见源程序及其注释。 首先定义N=128,当然也可以更改程序,将N值改为256或1024等等,前提是相应的数组大小也得更改。然后用模数转换器采集信号(正弦信号,方波信号等等),最后将采集到的信号进行FFT变换即可。2.1 功能实现2.1.1 位置倒码 当进行原位运算时,发现当运算完成后,FFT的输出X(k)按正常顺序排列在存储单元中,即按X(0),X(1),X(7)的顺序排列,但是这时输入x(n)却不是按自然顺序存储的,而是按x(0),x(4), , x(7)的顺序存入存储单元,看起来好像是“混乱无序”的,实际上是有规律的,称之为倒位序。当用二进制表示顺序
14、时,它正好是“位码倒置”的顺序。例如,原来的自然顺序应是x(1)的地方,现在放着x(4),用二进制码表示这一规律时,则是在x(0 0 1)处放着x(1 0 0),x(0 1 1) 处放着x(1 1 0),即将自然循序的二进制码位倒置过来,第一位码变成最末位码,这样倒置以后的顺序正是输入所需要的顺序,其结果与按时间抽样算法FFT流程图中的输入顺序是一致的。需要注意当进行原位运算时,输入输出序列为倒位序的关系,若不为原位运算,则这种关系不一定成立。在实际运算中,一般直接将输入数据x(n)按码位倒置的顺序排好输入很不方便,总是先按自然顺序的存储,然后进行FFT的原位计算。表2-1 码位倒置顺序自然顺
15、序二进码表示码位倒置倒位序00000000100110042010010230111106410000115101101561100113711111172.1.2 蝶距设N=,则整个运算流图中包含L级蝶形运算,每一级则有N/2个蝶形单元。蝶距等于每个蝶形单元两个输入(出)节点的序列号,即第m级蝶形单元的蝶距为:。2.1.3 旋转因子由FFT算法原理过程可知,若=,则共有级蝶形运算,各级蝶形运算中旋转因子分别如下:第级的旋转因子为(=0,1,);第-1级的旋转因子为(=0,1,);第一级的旋转因子为(=0,1,)。由此可见, 第级蝶形运算中旋转因子为,=0,1,。开始 3 设计流程图程序初始化
16、 开中断 初始化ADC 等待中断发生 是否发生中断?否 AD采样是 否采样结束否?将采集到的数据进行FFT变换是 计算功率谱 图形输出 结束 29 4 各部分程序设计及参数计算4.1 驱动程序的配置1.双击桌面上的Setup CCStudio v3.3。“Clear”原有的设备驱动程序配置。 2.根据DSP的型号选择相应的TI原装驱动程序,根据DSP的型号选择相应的TI驱动程序,本实验箱采用SEED_DEC2812,故选择F2812 XDS510 Emulator。如4.1图所示。 图4.1 目标板选择3.点中F2812 XDS510 Emulator驱动后,鼠标右键,在弹出的菜单中点击Pro
17、perties。设置完成后如下图所示。 4. 点击Next,作如下图所示的设置。5. 保存并启动CCS调试界面。4.2 程序的初始化#include math.h#define PI 3.1415926#define N 128 /采样次数#include DSP28_Device.h#include comm.hinterrupt void ISRTimer2(void); /声明定时器2中断子程序interrupt void ad(void); /声明ad中断子程序unsigned int Ad_data128=0;unsigned int convcount = 0;volatile u
18、nsigned int adconvover =0;unsigned int i;/void InitForFFT(void); /FFT初始化函数void finv(int N1,float *xr,float *xi); /倒序运算函数,对输入序列倒序int INPUTN,DATAN;float fWaveRN,fWaveIN,wN;float sin_tabN,cos_tabN; /正余弦函数表int Mum; /Mum为蝶形运算的级数 程序初始化部分的详细信息见上面所列程序。 4.3 主程序void main(void)for(i=0;iN;i+) sin_tabi=sin(PI*2*
19、i/N);/建立正余弦函数表cos_tabi=cos(PI*2*i/N); /*初始化系统*/InitSysCtrl();/*关中断*/DINT; /禁止可屏蔽中断IER = 0x0000; /禁止CPU中断IFR = 0x0000; /清CPU所有中断标志/*初始化PIE中断*/InitPieCtrl();/*初始化PIE中断矢量表*/InitPieVectTable(); /初始化cputimer InitCpuTimers();/*设置中断服务程序入口地址*/EALLOW;/ This is needed to write to EALLOW protected registersPie
20、VectTable.TINT2 = &ISRTimer2; /取ISRTimer2地址赋给中断 /向量TINT2(CPU-Timer2)PieVectTable.ADCINT = &ad; /取ad地址赋给中断向量ADCINTEDIS; / This is needed to disable write to EALLOW protected /registers/*开中断*/IER |= M_INT1;/ADC中断 ,使能第一组中断! /已经定义#defineM_INT10x0001EINT; / Enable Global interrupt INTMERTM;/ Enable Globa
21、l realtime interrupt DBGMadconvover=0;DINT;/*设置CPU*/ConfigCpuTimer(&CpuTimer2, 150, 22); StartCpuTimer2(); /已经定义 #defineStartCpuTimer2() /CpuTimer2Regs.TCR.bit.TSS = 0 /*开中断*/IER |= M_INT14; / 使能第14组中断(CPU定时器2(RTOS)! /已经定义#defineM_INT14 0x2000 ; IER是CPU中断使能寄存器EINT;InitAdc();for(;) /等待AD采样结束!if (adco
22、nvover=1)/adconvover=1表示AD采样 / 结束!见ad中断子程序 for(i=0;i128;i+) INPUTi=Ad_datai;for(i=0;iN;i+) /i128fWaveRi=INPUTi;fWaveIi=0.0;wi=0.0;Mum=(int)(0.5+log(N)/log(2); /N=2MumFFT(fWaveR,fWaveI);for(i=0;iN;i+)DATAi=wi;/功率谱 adconvover=0; 一般而言,编写一个能运行在操作系统上的程序,都需要一个主函数。主函数意味着建立一个独立进程,且该进程成为了程序的入口,对其它各函数进行调用,当然其
23、它被调用函数也可以再去调用更多函数,这样整个程序的运行轨迹就像一种栈,有时我们称之为调用栈。主函数既是程序的入口,又是程序的出口。由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。在这个主程序中,可以调用后续的FFT初始化函数程序,时间抽取法FFT程序,以及倒序运算函数程序,是整个程序的中转站。 4.4 旋转因子的软件实现for(m=1;m=Mum;m+)B=(int)(pow(2,m-1)+0.5); /B=2(m-1)for(j=0;jB;j+) /每级需要进行B种蝶
24、形运算S=j*(int)(pow(2,Mum-m)+0.5);for(k=j;k=N-1;k+=(int)(pow(2,m)+0.5)X=Xrk+B*cos_tabS+Xik+B*sin_tabS;/采用循环寻址方式对正弦Y=Xik+B*cos_tabS-Xrk+B*sin_tabS;/表和余弦表进行寻址Xrk+B=Xrk-X;Xik+B=Xik-Y;Xrk=Xrk+X;Xik=Xik+Y; 旋转因子是复数,可表示为: (4-1)由式(4-1)可以看出旋转因子的实部为余弦函数,虚部为正弦函数。为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为,对应于0180,同
25、时,采用循环寻址方式对正弦表和余弦表进行寻址。4.5 FFT初始化void InitForFFT() /FFT初始化函数,建立正余弦函数表int i;for(i=0;iN;i+)sin_tabi=sin(PI*2*i/N);/建立正余弦函数表cos_tabi=cos(PI*2*i/N);为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为,对应于0180。4.6 按时间抽取法的FFT程序void FFT(float XrN,float XiN) /时间抽取法FFT程序,要求采样 /点数N为2的整数幂次方 /Xr,Xi分别为输入序列的实 /部和虚部int S,B;
26、/S为旋转因子的幂数,B为蝶形运算输入数据的距离,也即各 /旋转因子的个数int m,j,k;float X,Y;finv(N,Xr,Xi); /倒序运算函数,对输入序列倒序for(m=1;m=Mum;m+)B=(int)(pow(2,m-1)+0.5); /B=2(m-1)for(j=0;jB;j+) /每级需要进行B种蝶形运算S=j*(int)(pow(2,Mum-m)+0.5);for(k=j;k=N-1;k+=(int)(pow(2,m)+0.5) /结果的实部和虚部分别存储在原实部和虚部位置X=Xrk+B*cos_tabS+Xik+B*sin_tabS;Y=Xik+B*cos_tab
27、S-Xrk+B*sin_tabS;Xrk+B=Xrk-X;Xik+B=Xik-Y;Xrk=Xrk+X;Xik=Xik+Y;在这个时间抽取法FFT程序中,要求采样点数N为2的整数幂次方,每级需要进行B种蝶形运算,每种蝶形运算在某一级中需要进行N/pow(2,m)次蝶形运算,结果的实部和虚部分别存储在原实部和虚部位置。对于任何一个2的整数幂N=2M,总是可以通过M次分解最后完全成为2点的DFT运算。这样的M次分解,就构成从x(n)到X(k)的M级运算过程。从上面的流图可看到,每一级运算都由N/2个蝶形运算构成。因此每一级运算都需要 次复乘和N次复加(每个结作加、减各一次),这样,经过时间抽取后M级
28、运算总共需要的运算: 复乘 复加 N 当然,实际情况与这个数字稍有出入,因为 这几个系数实际上都不用乘法运算,因此在上面N=8的例子中,实际上只有两个系数W 及W 是需要乘法运算的。用时间抽取法所需的计算量,不论是复乘还是复加都与Nlog2N成正比,而直接运算时则与N2成正比。例N=2048,N2=4194304,(N/2)log2N=11264,N2/(N/2)log2N=392.4倍。FFT显然要比直接法快得多。4.7 功率谱的计算实现for(m=0;mN/2;m+)wm=sqrt(Xrm*Xrm+Xim*Xim); /计算功率谱为了便于观察FFT的运算结果,需要求出信号的频谱。经过第三级
29、到最后一级蝶形运算之后,已经得到式(4-2)所示: (4-2)故功率谱可以通过式(4-3)计算得到: (4-3)通过软件仿真,可以观察到输入信号的时间波形和频谱波形以及输出信号的功率谱波形。4.8 倒序运算函数void finv(int N1,float *xr,float *xi)int m,n,N2,k; /m为正序数;n为倒序数;k为各个权值;N2为最高位的权值float T; /临时变量TN2=N1/2; /最高位加1相当于十进制加上最高位的权N1/2n=N2; /第一个倒序值for(m=1;m=N1-2;m+) /第0个和最后一个不倒序 if(mn) /为了避免再次调换,只需对m=k
30、) n=n-k; /次高位位1,继续上下进位,满2置0k=(int)(k/2+0.5); /向下权值依次比上级减半 n=n+k; /得到下一倒序值 倒序运算函数finv(N1,Xr,Xi),对输入序列倒序,N1为序列长度,Xr,Xi分别为输入序列的实部和虚部。 倒序原理:倒序数的加1是在最高位加1,满2向次高位进1,最高位变0,依次往下。从当前倒序值可求下一倒序值。 4.9 定时器2中断子程序及AD转换子程序interrupt void ad(void)IFR=0x0000; /CPU级中断标志寄存器IFR=0,即无CPU级中断请求 PieCtrl.PIEACK.all=0xffff;/PIE
31、ACK置1,禁止外部中断向CPU发起中断 /请求if(adconvover=0)Ad_dataconvcount = AdcRegs.RESULT0; / 将结果寄存器中的AD /转换结果放到Ad_data数组中 convcount+; /convcount的初始值为0 if (convcount=(128) /即convcount=128,即Ad_data包含采样值的最 /后一位为Ad_data128convcount=0; adconvover=1;/接满标志,即AD采样结束interrupt void ISRTimer2(void)AdcRegs.ADC_ST_FLAG.bit.INT_
32、SEQ1_CLR=1; /清除INT SEQ1标志 /位,SEQ1转换结束时INT_SEQ1中断标志位置1 AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; /启动SEQ1,触发模数转换!通过“ConfigCpuTimer(&CpuTimer2, 150, 22);”设定定时器2产生中断的时间。当进入定时器2中断子程序后,启动SEQ1,触发模数转换,进入AD中断子程序。 5 工作过程分析5.1 程序调试 5.1.1 在CCS下调试程序步骤(1)点击CCS图标启动CCS。(2) 打开fft.pjt工程。将已编好的汇编源文件FFT.c及其他相关源文件和命令文件2812.cmd等文件添
33、加到工程中编译,链接产生FFT.out文件。(3)下载FFT.out文件到目标板中。(4)显示示输入信号的时域波形。首先,通过设置实验箱的函数信号发生器,使AD采集波形为0通道的标准正弦波。(5)显示输入信号的频域波形。(6)显示信号功率谱。由配置文件可知,经程序计算得到的信号功率谱放在DATA数组中。显示经程序计算得到的信号功率谱。(7)改变输入信号,如改为方波,三角波等等。并重复(4)(5)(6)三个步骤。5.1.2 输入信号时域波形 当输入信号为正弦波时,其时域波形如图5.1所示。当输入信号为方波时,其时域波形如图5.2所示。当输入信号为三角波时,其时域波形如图5.3所示。 图5.1 标
34、准正弦波的时域波形 图5.2 标准方波的时域波形 图5.3 标准三角波的时域波形5.1.3 输出信号功率谱输出信号功率谱体现了信号的能量。当输入信号为正弦波时,其功率谱如图5.4所示。当输入信号为方波时,其功率谱如图5.5所示。当输入信号为三角波时,其功率谱如图5.6所示。 图5.4 标准正弦波的功率谱 图5.5 标准方波的功率谱 图5.6 标准三角波的功率谱5.2 功率谱的计算 对信号进行傅里叶变换,取sin部分为实部,cos部分为虚部,直接算实部和虚部的平方和并开根号,得到的就是功率谱分布。功率信号的功率谱反应了信号功率随频率分布的特点,功率谱是信号先自相关再作FFT变换。 6实验系统介绍
35、 为了更好地配合学校的理论教学,达到理论与实践完美的结合,合众达公司总结了 10 多年在 DSP 领域中的开发与应用经验,推出了双 DSP 教学系统 SEED-DTK 教学实验箱系列产品。它设计新颖、独特,为师生提供了一个完整的教学实验平台,为学生加速学习与系统掌握DSP 的开发与应用提供了强有力的手段。SEED-DTK 教学实验箱采用模块化设计理念,涵盖了 TI 所有的主流 DSP 系列:C2000、C3X、C5000 和 C6000 系列。其中 SEED-DTK实验箱中的主控板 SEED-DECxxxx 采用统一的系统结构、模块结构、机械结构和标准的总线接口以及相同的物理尺寸,实验箱上的主
36、控板可以替换为不同系列 SEED-DECxxxx,以适应不同院系在同一实验箱上开展不同的实验内容,大大节省了校方的设备经费。SEED-DTK(DSP Teaching Kit)是一套可以满足大学本科、研究生和教师科研工作的综合实验设备。SEED-DTK 是合众达在总结以往产品的基础上,以独特的多 DSP结构、强大的 DSP 主板功能、丰富的外围实验电路、精心设计的实验程序、精湛的产品工艺形成的高性能产品。6.1 SEED-DTK2812 的原理框图6.2 实验箱整体配置SEED-DTK2812 实验箱由以下几部分构成: 1. SEED-DEC2812 实验箱 DSP 基本系统 u 高性能 DSP:TMS320F2812,主频 150MHz u 外扩 SRAM,最大容量为 512K16 位,基本配置为 256K16 位 u 512 字节的 EEPROM+RTC 实时时钟 u 16 路 AD 输入 u 4 路 DA 输出 u 12 路 PWM 输出,6 路捕捉输入 u 双路 URAT 接口,接口标准为 RS232RS422RS485,可配置 u 符合 USB2.0 标准的高速 Host 端接口 u 1 路 CAN 总线接口,符合 CAN2.0 协议 2. SEED-Mbo