ARM嵌入式系统课程设计.docx
- 文档编号:30594342
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:18
- 大小:85.06KB
ARM嵌入式系统课程设计.docx
《ARM嵌入式系统课程设计.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
ARM嵌入式系统课程设计
1系统设计任务与要求
1.1设计要求
利用ARM芯片设计信号发生器,包括Sin、方波、三角波形实现
1.2设计作用和目的
1、注重培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。
2、了解所选择的ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等的相关原理,并巩固学习嵌入式的相关内容知识。
3、通过软硬件设计实现利用ARM芯片完成信号发生器功能。
1.3课程设计应完成的任务
1查阅相关文献资料,熟悉所选ARM芯片;
2总体设计方案规划信号源的产生,用不同按钮选择不同信号源;
3系统硬件设计,熟悉DA转换原理及过程及硬件接口实现及信号函数显示,注意频率及幅度;
4系统软件设计,包括DA转换及显示的软件实现,用C语言编程;
5设计心得体会及总结。
2设计方案
2.1信号产生部分
方案一:
使用集成函数发生器芯片ICL8038。
芯片ICL8038能输出方波、三角波、正弦波和锯齿波四种不同的波形,将他作为信号发生器。
它是电压控制频率的集成芯片,失真度很低。
可输入不同的外部电压来实现不同的频率输出。
为了达到数控的目的,可用高精度DAC来输出电压以控制正弦波的频率。
方案二:
锁相环频率合成器(PLL)[2]
锁相环频率合成器(PLL)是常用的频率合成方法。
锁相环由参考信号源、鉴相器、低通滤波器、压控振荡器几个部分组成。
通过鉴相器获得输出的信号FO与输入信号Fi的相位差,经低通滤波器转换为相应的控制电压,控制VCO输出的信号频率,只有当输出信号与输入信号的频率于相位完全相等时,锁相环才达到稳定。
如果在环路中加上分频系数可程控的分频器,即可获得频率程控的信号。
由于输出信号的频率稳定度取决于参考振荡器信号fi,参考信号fi由晶振分频得到,晶振的稳定度相当高,因而该方案能获得频率稳定的信号。
一般来说PLL的频率输出范围相当大,足以实现1kHz-10MHZ的正弦输出。
如果fi=100Hz只要分频系数足够精细(能够以1步进),频率100Hz步进就可以实现。
方案三:
直接数字频率合成(DDS)[3]
DDS是一种纯数字化方法。
它现将所需正弦波一个周期的离散样点的幅值数字量存入ROM中,然后按一定的地址间隔(相位增量)读出,并经DA转换器形成模拟正弦信号,再经低通滤波器得到质量较好的信号。
方案四:
基于计算的数字频率合成[4]
利用函数将波形的点数保存在芯片的RAM中,根据所要的波形的频率计算出它的周期,经计算得到在定时器定时时间固定的前提下产生一个完整的波形所需要的输出的点数,这样数据指针可以根据点数的数量来进行移动,得到频率准确、切换快速的信号。
方案一(VOC)不能实现稳定频率信号的输出并且难于数字控制。
并且电容、电阻参数随温度等其他因素的影响,频率稳定度以及电路的稳定度都较低,实现也较复杂,不予采纳。
虽然ICL8038可很好的实现频率输出的控制,但查看ICL8038的设计资料[4]可知其频率输出范围为0.01Hz~300kHz,不能达到题目的要求,故不予选用。
PLL方案和DDS方案都能实现1kHz~10MHz的稳定的信号输出,且能达到100Hz频率步进,但是PLL的动态特性却很差,在频率改变时,环路从不稳定到稳定的过程有时间延迟。
相比较而言,DDS的频率输出范围一般低于PLL,且杂散也大于PLL方案,但DDS信号源具有输出频率稳定度高、精度更高、分辨率更高且易于程控等优点,且频率改变不存在失调过程,尽管有杂散干扰,只需在输出级加滤波器仍可以得到质量很好的波形。
而方案四集中了上述三个方案的各个优点,因此采用方案四来实现波形信号的产生。
2.2对幅度进行调整
方案一:
用高速模拟乘法器实现
采用AD835高速模拟乘法器,来实现模拟调制。
模拟乘法器AD835的-3dB截止频率为250MHz,能够满足题目的要求。
但是AD835的差分输入范围仅为±1V,因此必须对输入信号进行预处理,这样在增加硬件的同时,又加大了设计的难度。
方案二:
采用高速的D/A转换器
在LPC2138中集成着一个高速的D/A转换器[5],我们可以直接在软件中设置一个幅度的参数来改变输出波形的幅度大小。
综上所述,采用方案
(二)虽然增加了软件的难度,延迟了波形的输出时间,但是可以不用外加硬件拓展,节省了成本。
2.3对频率进行调整
方案一:
通过在存储芯片ROM中保存不同频率信号的信号发生点数,在频率切换时调用ROM中所存储的不同点数模块来实现频率的切换。
方案二:
在存储芯片RAM中保存由软件实时产生的波形点数,通过所取的点数的不同来决定发生的波形的频率。
由于设计中的信号要进行不断的改变,因此波形的数据不能存储在ROM中,应该存储RAM中,因此采用方案二的设计方法。
2.4滤波电路
方案一:
利用运放芯片TL082构成的有源二阶巴尔沃基滤波器[6],它的频率范围可以达到1MHZ,远远高于我们所要的达到的最高频率,而且可以同时提高输出电压的稳定性即带载能力。
方案二:
采用硬件构建的模拟滤波器,通常这种滤波电路主要采用无源元件R,L和C组成的低通滤波电路[6]。
其优点是具有不用电感,体积小,重量轻等优点;缺点是其集成运放的带宽有限,电路的工作频率有限难以做得很高。
由于所设计的信号源的频率相对来说不是很高,采用RC滤波器已经可以很好的完成设计的要求。
因此采用方案二。
3硬件设计
3.1系统框图
根据前述方案,得到以下系统方框图,如图3-1所示,包括键盘、芯片LPC2138、D/A转换、滤波器、示波器、串口RS432、上位机。
图3-1系统方框图
3.2各功能模块
3.2.1波形产生电路
通过软件将波形数据存储到RAM当中去,再把这些数据输送到D/A转换器进行转换得到模拟波形。
3.2.2键盘模块
用LPC2138开发板上自身带有的键盘得到键值,通过中断服务程序将键盘信息传给控制芯片。
3.2.3滤波器设计
直接采用RC过程的简单的滤波电路,此方法设计简单,又完全满足设计要求。
3.2.4显示模块
波形直接在示波器上显示,波形的中间调试参数在上位机EasyARM2131上显示,这样节省了外部显示模块的扩展,使得硬件电路更加的简便。
3.3各个功能块的实现原理及分析
3.3.1正弦波的产生
本设计中信号的产生直接用LPC2138芯片上集成的D/A转换器和软件的结合来生成。
波形的信号数据采用了函数计算的方法来取得:
Y=sin(N)[7](3-1)
其中,N表示所要取得的点数的多少。
在设计中我选择N=1024,即一个完整的基本的正弦信号有1024个数据信号点组成。
将数据存储到控制芯片LPC2138的RAM当中,根据所要的频率来取得信号数据的多少,点数多少的计算如下:
N=T/2t[7](3-2)
其中,N表示点数,T表示所要产生的波形信号的周期,t表示定时器的时间长短.
从RAM中取得点数的间隔为:
M=1023/N[8](3-3)
其中M表示在RAM中的表格取得点数的间隔.根据不同的间隔的大小决定产生一个完整的波形信号所要的数据多少不同.
设计中要求信号的最高产生的频率为50KHZ,根据奈奎斯特定理,采样的频率最少要为所要信号的频率的两倍,但是为了更好的保证信号的完整输出,我们至少要让它采样10个点才能输出完整波形,就要求采样的频率为他的10倍即500KHZ,采样时间的大小为2us,这刚好满足了LPC2138控制芯片上的集成D/A转换器最高转换时间为1us的限制。
3.3.2三角波的产生
在设计中,三角波的产生就直接利用定时器定时时间的长短来控制信号数据的输出,信号数据从一个较低(或高)的位置开始按照一定的规律步进[9],当其达到一个高度时再按照相同的步进下降到原来的数据大小,如此反复的输出就构成了三角波模拟信号的输出。
3.3.3方波的产生
在设计中,方波的产生由大小不同的两个信号数据交替输出形成,每个信号数据输出的时间长短根据所要点信号频率来决定。
3.3.4幅度的控制
在设计中,为了能使波形在示波器中显示,这样就要设定好波形的幅度,在设计时我们把波形的幅度控制在1024之内,才能很好的显示波形。
同时为了改变幅度的大小,我们设置了一个参数直接与所取得的信号数据相乘,这就改变了信号数据的大小,也就使得D/A转换时的数据大小产生变化,从而体现在输出的信号波形在幅度上发生改变。
3.3.5频率的控制
在输出的信号数据的时间间隔一定时,当产生一个完整波形时所需要的点数发生变化时信号的周期就发生变化,这样它的频率就相应的变化。
因此,在设计中,通过固定定时器的定时长短,改变波形数据的点数多少就改变了信号的频率。
3.3.6滤波器设计
由于我所设计的信号源的输出频率还不是很高,所以可以用简单的低通滤波器就可以完成滤波的功能,因此我选择使用RC低通滤波器。
参数为:
R=100欧姆,C=0.1UF。
具体结构如下:
R
图3-2
3.3.7键盘模块
键盘是直接与ARM(LPC2138)芯片的P0口P0.16—P0.21连接,通过ARM芯片对P0.16—P0.21输入数据,0表示有效,1表示无效[11]。
键1用来选择输出波形,键2用来选择所要改变的参数,键3和键4用来加/减键3所选的参数
4软件设计
4.1方框图
由设计方案进行进一步的软件设计,首先得到流程图如图4-1所示,主要包括:
初始化、键盘扫描、PC机显示波形等部分。
N
Y
图4-1
4.2程序清单
由硬件设计及主程序流程图,经过C语言编程,在ADS环境下运行,完成了信号源发生器的软件设计部分,实现了设计的内容。
部分主要程序清单如下:
1、初始化串口0
voidUART0_Init(void)
{
uint16Fdiv;
U0LCR=0x83;//DLAB=1,可设置波特率
Fdiv=(Fpclk/16)/UART_BPS;//设置波特率
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
}
2、向串口发送字节数据
voidUART0_SendByte(uint8data)
{//data=18;
U0THR=data;//发送数据
while((U0LSR&0x40)==0);//等待数据发送完毕
}
3、向PC机发送显示字符。
voidPC_DispChar(uint8x,uint8y,uint8chr,uint8color)
{
UART0_SendByte(0xff);//起始字符
UART0_SendByte(x);//发送字符显示坐标(x,y)
UART0_SendByte(y);
UART0_SendByte(chr);//发送显示字符
UART0_SendByte(color);
}
4、向上位机发送字符串。
voidISendStr(uint8x,uint8y,uint8color,char*str)
{
while
(1)
{
if(*str=='\0')break;//结束字符
PC_DispChar(x++,y,*str++,color);//发送显示数据
if(x>=80)
{
x=0;
y++;
}
}
}
5、定时器0中断服务程序。
void__irqIRQ_Timer0(void)
{
pinsave=(IO0PIN&pinvalue);
if(pinsave!
=pinvalue)
{
while(delay++==2)
{delay=0;
if(pinsave==(IO0PIN&pinvalue))
switch(pinsave)
{
case0x003e0000:
{
bo=bo+1;
if(bo>4)
bo=1;}
break;
case0x003d0000:
{canshu+=1;
if(canshu>2)
canshu=1;
}
break;
case0x003b0000:
{switch(canshu)
{case1:
{if(hight<26)
hight=hight+1;}
break;
case2:
{if(fc<100)
fc=fc+2;}
break;}
}
break;
case0x00370000:
{switch(canshu)
{case1:
{if(hight<26)
hight=hight-1;}
break;
case2:
{if(fc<100)
fc=fc-2;}
break;}
}
break;}
}
}
T0IR=0x01;
VICVectAddr=0x00;}
6、定时器1捕获中断服务程序
void__irqIRQ_Timer1(void)
{
switch(bo)
{case1:
sin_wave();
break;
case2:
trip_wave();
break;
case3:
fang_wave();
break;
default:
break;}
T1IR=0x01;
VICVectAddr=0x00;
}
7、主程序
intmain(void)
{charstr[30];
constdoubleT=(2*3.1415926)/1024;//把一个周期分成2048份
for(i=0;i<1024;i++)
{
table[i]=512*(1+sin(T*i));
}
PINSEL0=0x00000000;//设置管脚连接GPIO,管脚功能选折寄存器全部为0时选为GPIO功能
PINSEL1=(2<<18);
PINSEL2=PINSEL2&(~0x08);
DACR=(0<<16);//最大定时1US,电流700UA
IRQEnable();
T0TC=0;
T0PR=0;
T0MCR=0x03;
T0MR0=Fpclk/2;
T0TCR=0x03;//启动并复位T0TC
T0TCR=0x01;
T1TC=0;
T1PR=0;
T1MCR=0x03;
T1MR0=Fpclk/205000*(fc/100);//把一秒分成2048份,再根据要求的频率来进行设置t
T1TCR=0x03;//启动并复位T1TC
T1TCR=0x01;
VICIntSelect=0x00;
VICVectCntl0=0x20|0x04;
VICVectAddr0=(uint32)IRQ_Timer0;
VICVectCntl1=0x20|0x05;//设置定时器1中断通道分配最高优先级
VICVectAddr1=(uint32)IRQ_Timer1;
VICIntEnable=(1<<0x04)|(1<<0x05);
while
(1)
{sprintf(str,"%4dmv",hight);
ISendStr(0,8,0x30,str);
sprintf(str,"%4dhz",fc);
ISendStr(0,10,0x30,str);}
return0;
}
4.3测试结果图
由以上硬件、软件设计,经实验调试得到测试结果,如图4-2、4-3、4-4所示,分别为三角波、正弦波、方波。
图4-3三角波(频率=200HZ幅度=2.4V)
图4-4正弦波(频率=40HZ幅度=100MV)
图4-5方波(频率=1000HZ幅度=2V)
5心得体会
两个周的嵌入式课程设计—基于ARM的信号源发生器设计就要结束了,虽然课程设计的时间比较短,但我却收获了很多值得总结和值得我铭记于心的知识和认识。
开始课程设计的时候,由于我们学的都是一些嵌入式方面的理论知识,牵涉到实际的我们几乎一无所知,所以我们组的成员都不知道该怎么入手,我们通过请教老师,以及上网查询等通道,终于顺利的完成数据采样系统的各方面设计。
这样一个过程使我的理论知识得到了试验和应用,使我的理论知识得到了进一步的提高。
通过这次ARM课程设计,我对整个嵌入式程序的设计有了一个比较深的理解,特别是有关ARM的信号源发生器这块,比如数字信号的产生、调节和D/A转换的原理等。
还有就是增强了自身的动手能力,把以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己真正得到锻炼。
总之,这次课程设计不但让我学到了很多的东西,提高和巩固了嵌入式方面的知识,同时也增强了我的动手能力,这些并不是在课堂上可以学到的,而且这也是难得的一次同学间长时间交流沟通的机会,在课程实际过程中发生许多欢乐的令人难忘的事,这无疑为以后的我留下了一个美好的回忆。
在完成嵌入式课程设计后,我发现我还有许多不足,所学到的知识还远远不够,ARM的应用是如此的广泛,在以后的时间里我将继续对ARM的学习。
最后,感谢老师在课程设计中给予的帮助,以及组员们的合作!
参考文献
[1]吴镇扬,数字信号处理[M].高等教育出版社,2004
[2]康华光,电子技术基础(数电)[M].高等教育出版社2005
[3]黄智伟,全国大学生电子设计竞赛训练教程[M].电子工业出版社2004
[4]周立功,深入浅出ARM7—LPC2138P[M].北京航天航空大学出版社,2005
[5]89C51/89C52/89C54/89C5880C518一bitmicrocon—trollerfamilyDATASHEET[J],PHILIPSCOMPANY,2001.09:
1—27
[6]张肃文,陆兆熊.高频电子线路(第三版)[M].高等教育出版社北京1992.
[7]万福君,潘松峰.单片机原理系统设计与运用[M].合肥:
中国科学技术大学出版社,2001:
190—229
[8]AD9851DATASHEET[J],ANAL0GDEVICEC0MPANY2004:
1-24
[9]张静,李廷军,刘长茂,郭海燕.基于DDS的高分辨率信号发生器的实现[J].现代电子技术,2004,(14)
[10]王数明,戴瑜兴.基于DDS技术的可叠加谐波的正弦信号源设计[J].湖南师范大学自然科学学报,2005,(04).
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 系统 课程设计