AVR单片机应用经验
AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。
但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。
功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。
AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。
“外行看热闹,内行看门道”,对于有一定基础的嵌入式和单片机系统设计开发的工程师,不妨先简单尝试一下AVR。
开发环境与工具:PC+下载线+实际的系统板
PC上的开发软件:
AVR Studio(Free)汇编+汇编调试+高级语言调试+软件仿真
ICC、CVAVR、BASCOM-AVR 高级语言程序开发+程序下载。其中一个购买正版全功能,作为主要的开发环境,其它使用DEMO版,作为辅助及参考。
AVR ISP下载线:
STK200 and STK200+ and STK300 ISP programmer。通过PC的打印机口,采用ISP技术将系统运行代码(HEX、BIN)和数据写入AVR芯片的Flash和EEProm中,编程AVR的配置熔丝位和加密位。支持决大多数的AVR芯片、以及ATMEL的51兼容芯片89S8252、89S52等。在ICC、CVAVR、BASCOM-AVR、BASCOM-8051中都内含对该下载线的支持程序。免费专用的下载程序:SLISP、PonyProg2000等。
尽量不使用仿真器的建议:
在开发和调试系统程序时,有许多人完全依赖于仿真器,一旦离开了仿真器时就感觉无从下手。其实,由于AVR的Flash存贮器可方便的使用ISP技术在线的多次擦写,因此建议尽量不使用(依赖)仿真器来开发和调试程序。
在实际开发过程中,程序的调试可以从下几方面入手:
现在的高级语言编译器(如C编译器)可以产生效率很高的机器代码,因此建议大家尽量使用高级语言编写系统程序。
使用Atmel公司提供AVR Studio软件模拟仿真环境,以及其他的软件模拟仿真环境(BASCOM-AVR)。
尽可能使用高级语言编写系统程序。
利用目标板上的LED、LCD或异步串口。见附件“没有仿真器的情况下如何开发AVR”的介绍。
提高硬件设计的合理性:
尽量合理和充分使用AVR片内的资源,如EEPROM、A/D、内部的RC振荡源。
尽量采用串口通信连接的外围器件,大容量的存储器、LCD控制器、打印机、不用8279(LED数码管+键盘)而使用7279等。除了必须外扩RAM(如语音和图象),一般不提倡使用并行扩展(573+译码电路),减小硬件和连线以及PCB板上错误的出现概率,同时也提高了系统的可靠性。并行扩展向串行扩展是发展趋势。现在有大量的新的外围器件采用高速的串行接口,如A/D、D/A、RTC、存储器等。
尽量使用以及在目标板上预留ISP程序下载接口,或使用IAP技术。
优点:ISP接口与I/O的兼容性比JETAG好。
缺点:不能在线调试
注意和掌握AVR配置熔丝位的使用:
.系统晶振的选择
.BOD的使用
.启动延时
.Mega8的PC6引脚,RESET与通用I/O的转换
.JETAG接口和通用I/O的转换
.启动向量的转换,BOOT-LOAT区大小的设置
提高硬件可靠性的考虑:
.尽量采用片内晶体、采用低频率的系统时钟、振荡电路的输出小幅度。
.选择合适的启动延时参数
.使用BOD、片内的看门狗
.合理休眠方式的使用
.不用I/O口设定输出低电平
.利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理
提高软件设计的能力和水平:
尽量合理采用高级语言设计编写系统程序。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗?
高级语言的优越性是汇编语言不能比的:
.程序移植方便
.程序的坚固性
.数学运算的支持
.条理清晰的结构化编程,程序的可维护性。
.可协同开发软件,开发周期短。
现在的高级语言编译器(如C编译器)已可以产生代码效率很高的机器代码,因此建议大家能用高级语言实现的程序尽可能使用高级语言写,在对速度和时序要求特严的场合可以采用混合编程的方法来解决。
更深入和全面的掌握各种串行通信协议的规程:
嵌入式系统目前以大量的使用串行接口外围芯片和各种通信接口,如RS232、两线(I2C)、三线(SPI)、单总线、USB、CAN、TCP/IP等。开发人员和程序员应了解低层协议,熟悉硬件怎样和如何实现低层协议,如何定义可靠的上层应用协议,以及低层协议驱动同上层应用协议之间的接口设计(中间层软件的实现)等。
硬件工程师的软件编写能力要提高,采用标准程序编写方式、完善的软件整体框架的设计、良好的数据结构和程序结构系统。(计算机软件专业的程序设计员对硬件不熟悉、大部分是在操作系统支持下编写软件,对低层接口和协议的驱动层以及接口也不了解,往往也编写不出好的单片机系统程序。)
通信接口的编写应尽量
.采用中断+缓冲区,
.分层+结构化设计,
.尽量不使用轮循方式(降低AVR的效率)。参见URAT(RS232)驱动+中间层软件示例。
采用好的系统设计模式:
尽量不使用传统的前后台(中断)系统设计模式,任务之间相互影响和干扰,无法定时操作。如设计一个采用动态扫描方式驱动的8位LED数码管显示+动态扫描的4*4矩阵键盘。
采用TimeTip+状态机设计+CASE结构,实现多任务并行运行系统设计方法。或时间触发式的系统设计。(见:《时间触发嵌入式系统设计模式》中国电力出版社 2004.6)
移植小型嵌入式操作系统,如UCOS-II。在网上有些免费的基于AVR的简洁的操作系统。
提高C语言的编程能力和软件应用水平:
熟悉和用好C中的数据结构体、指针应用、内存管理等较高级的应用。
熟悉和了解你所使用的高级语言开发平台的特点。这些平台是针对某一类处理器的,包含许多特殊的不兼容的语句和扩展的结构、语句、函数等。尽管使用方便,但由于其不透明性和时间的不确定性,因此要合理使用。如C中的getchar()、putchar()等。
AVR有多个开发平台,每个都有其特点和不足。能够综合使用这些平台,相互互补,能够提高开发效率。如通过ICC、CVAVR的程序生成器CodeWizard学习和了解AVR的硬件设置,简化计算,快速的生成程序基本模块,如“一个URAT(RS232)低层驱动+中间层软件示例”。
基于AVR单片机的机载惯性稳定云台设计
摘 要 : 针对多旋翼无人机在航拍时,画面会随着巡航时俯仰、横滚等飞行动作而变得不稳定的问题,设计了一种基于AVR单片机和MEMS陀螺仪的机载惯性稳定云台。该云台利用经卡尔曼滤波(Kalman Filtering)的陀螺仪输出数据对飞机在三个轴向上的角速度变化进行监测和判断,驱动步进电机对云台姿态进行实时反向补偿,实现这一系统使摄影机拍摄的画面能够时刻保持稳定。实验结果表明,系统稳定、可靠、性能良好。0 引言
近年来,随着自动化技术、计算机技术和微电子技术的飞速发展,多旋翼无人机如雨后春笋般出现,并以航空摄影为核心,在遥感测绘、地质勘查、反恐防暴、抗灾救援、城市服务等多个领域发挥着重要作用[1]。
在传统的无人机航拍系统结构中,摄像头往往直接固定于无人机机身或安装在一个仅能对摄像头姿态进行手动调整的云台上。这类系统虽然结构简单,成本低廉,但却具有较大的不足。当无人机在巡航过程中需要改变飞行姿态时,摄像头拍摄出来的画面往往非常不稳定。
为了解决这一问题,本文设计并实现了一种基于AVR单片机和MEMS陀螺仪的无人机载三轴惯性稳定云台。该云台能够在无人机飞行姿态发生变化时对摄像头姿态进行实时调整,保证了拍摄画面的稳定。经过实验验证了该系统的稳定性和可靠性。
1 系统硬件电路设计
1.1 系统总体方案设计
如图1所示,系统由一个中央控制单元和三个运动控制单元组成。中央控制单元的主要功能是根据上位机的指令对整个系统进行控制和调度,同时对系统各部分的运行状态进行实时监测和调整。三个运动控制单元分别在三个轴向上对经卡尔曼滤波的陀螺仪输出数据进行实时监测,在云台姿态发生变化时驱动步进电机,稳定现有姿态。三个运动控制单元在系统进入自稳定状态后同时开始工作,协同运行,提高了系统的实时性和可靠性。此外,系统还在三个轴向上分别设置了一个行程限位开关,用于云台姿态的上电复位。
本系统各控制单元均采用ATmega系列AVR单片机作为控制器。该系列单片机具有高效、稳定、外围电路简单、性价比高等优点,内置10位高精度A/D转换器,非常适合本系统的设计使用。另外,本系统采用层次化、模块化的设计架构,有利于系统的测试及维护,可靠性与稳定性好。
1.2 中央控制单元设计
在本系统中,中央控制单元基于Atmel公司的ATmega1280单片机开发。如图2所示,ATmega1280单片机具有4个异步串口。在本系统中,这4个异步串口分别连接上位机和3个轴向的运动控制单元,用于系统控制指令和状态数据的双向传递。
中央控制单元的主要功能是负责接收上位机发来的指令,并根据指令对相应轴向的运动控制单元发出二级指令,调度和控制各运动控制单元,使之能够协调地完成云台姿态的实时稳定保持以及手动控制操作。此外,中央控制单元还负责对系统各部分的运行状态进行实时监控并适时做出调整。
1.3 运动控制单元设计
系统设有3个运动控制单元,分别与云台航向、俯仰和横滚3个轴向上的陀螺仪和步进电机驱动模块相连,用于云台的实时姿态调整。当云台在相应轴向上发生姿态变化时,陀螺仪的输出电压也会跟随着发生线性变化。运动控制单元检测到这一变化后,向步进电机驱动模块发出控制信号和驱动脉冲,驱动相应轴向上的步进电机对云台姿态进行实时反向补偿,消除外界振动或飞行姿态的变化对云台产生的影响,使云台保持稳定。
3个运动控制单元的硬件结构相同,都是由ATmega32单片机和外围电路构成。运动控制单元的电路原理图如图3所示。
电源VCC的电压为直流5 V;U1是ATmega32单片机,内置10位高精度A/D转换器,量程为0~5 V,分辨率约4.88 mV;U2是Silicon Sensing公司的CRS03-02型MEMS陀螺仪,该陀螺仪能够以电压模拟量的方式输出其安装位置的轴角角速度,量程0~±100°/s,其输出端直接与单片机U1的A/D转换器模拟量输入引脚相连;J1和J3分别是运动控制单元与中央控制单元同步进电机驱动模块的通信接口。
此外,运动控制单元还设置了一个行程限位开关S1与U1单片机的中断0引脚连接。当系统上电时,运动控制单元会将U1中断0引脚置高电平并驱动步进电机,让云台平面以较低的角速度向有限位开关的一侧运动。当云台触碰到限位开关后,U1中断0引脚与地接通,U1的低电平中断被触发。由于云台平面在各轴向上的最大旋转角度在机械结构设计完成后就是一个固定的参数,因此,运动控制单元接着驱动步进电机,将云台平面旋转到中间的平衡位置,完成云台姿态的上电复位。
1.4 步进电机驱动模块设计
本云台系统的步进电机驱动模块基于Toshiba公司的TA8435H步进电机驱动芯片开发。图4是步进电机驱动模块的电路原理图,供电电压VDD为直流24 V,VCC为直流5 V。
图中M1是两相步进电机,整步的步距角为1.8°;U1是步进电机驱动芯片TA8435H,细分设置为1/8,这使得步进电机每步的步距角缩小至0.225°,大大增加了系统的运行精度和稳定性。
图中J1是模块与运动控制单元连接的数据接口,其中引脚2为步进电机的正反转控制引脚,当该引脚的输入为低电平时,步进电机按顺时针方向转动,当输入为高电平时,步进电机按逆时针方向转动;引脚3为步进电机转速控制引脚,向该引脚每输入一个上升沿,步进电机能够向指定方向转动0.225°,通过改变输入信号中每两个上升沿之间的时间间隔,即可控制步进电机的转速。
2 系统软件设计
2.1 中央控制单元软件设计
系统中央控制单元的主要功能是完成上位机指令的判别与传递以及系统各运动控制单元的综合调度,软件工作流程如图5所示。
2.2 运动控制单元云台姿态自稳定算法设计
2.2.1 卡尔曼滤波
当运动控制单元收到来自上位机的自稳定指令并进入惯性稳定状态后就开始不断对陀螺仪输出的模拟量进行采样和模数转换,将陀螺仪输出的模拟量转化为数字量并进行读取和处理。
由于陀螺输出的原始数据中包含一系列干扰和噪声,因而需要对原始数据进行预处理,降低这些干扰和噪声。本系统选用卡尔曼滤波算法对原始数据进行去噪处理。
卡尔曼滤波是一种利用线性系统状态方程和测量方程,通过观测数据对系统自身状态进行估计,使估计的均方误差达到最小的滤波算法[2]。
设系统的状态方程为:
Xk=Ak,k-1 Xk-1+Bk,k-1 Wk(1)
测量方程为:
Yk=Ck Xk+Vk(2)
其中,Xk为k时刻系统的状态向量;Ak,k-1为k到(k-1)时刻的状态转移矩阵;Bk,k-1为k到(k-1)时刻的过程噪声驱动矩阵;Yk为k时刻系统的输出向量;Ck为测量矩阵;Wk和Vk分别为过程噪声和测量噪声,并且被假设为高斯白噪声[2-3]和随机数噪声[4]。
根据状态方程和测量方程,有卡尔曼滤波的五个递推公式:
状态一步预测:
其中,yk是k时刻卡尔曼滤波前的数据。根据上述5个方程,只要给定初值X0和P0,即可根据k时刻的观测值Yk计算出k时刻的状态估计k。为达到最佳效果,选取[2]:
2.2.2 云台姿态自稳定算法设计
系统进入自稳定状态后,3个轴向的运动控制单元同时对云台在各自轴向上的姿态进行实时姿态保持。各轴向的运动控制单元软件工作流程如图6所示。
3 系统测试及分析
3.1 卡尔曼滤波性能测试及分析
为了验证2.2.1节所述卡尔曼滤波算法的有效性,以运动控制单元中的MEMS陀螺仪在平衡状态下的输出量作为卡尔曼滤波器的输入,其处理结果及滤波前后对比如图7所示。滤波前后的数据特征对比如表1所示。
从图7可以直观地看出,卡尔曼滤波对陀螺输出数据的作用明显。滤波前,陀螺输出信号中含有较多白噪声,滤波后,这部分白噪声被很大程度地削弱了且均值保持不变,滤波前后数据特征对比见表1。这说明本文2.2.1节所述的卡尔曼滤波算法对消除MEMS陀螺输出信号中的噪声有效。
3.2 云台姿态自稳定算法性能测试及分析
本文2.2.2节提出了无人机载云台姿态的自稳定算法。为了验证这一算法的实际性能,云台上安装了一个3轴角速度传感器,当云台处于惯性稳定的状态下,在云台的3个轴向上同时以0~±100°/s范围内的任意角速度对云台基座进行变速晃动。每次实验持续1分钟,每隔5 s记录一次云台稳定平面在3个轴向上的角速度值,以判断云台平面在自稳定状态下的精度和误差,实验共重复20次。
根据20次实验的结果,方位轴角速度均值为0.025 °/s,方差均值为0.001 6,俯仰轴角速度均值为0.013 °/s,方差均值为0.000 8,横滚轴角速度均值为0.016 °/s,方差均值为0.001 0。
以上试验数据表明,云台在惯性稳定状态下能够较好地保持云台姿态。云台角速度样本方差较表1所示静止状态下的角速度方差略大,可能的原因是步进电机在运行过程中,步与步之间产生了轻微的机械振动。
4 结论
本文所提出的基于ATmega单片机的无人机载三轴惯性稳定云台系统,能够有效地在每轴向0~±100 °/s的角速度变化范围内实现无人机在飞行过程中云台的姿态保持,确保了无人机在进行航空拍摄时画面的稳定。
与其他机载惯性稳定云台相比,本系统具有3个彼此独立的运动控制单元,并且由中央控制单元统一进行调度和管理,而其他机载惯性稳定云台系统往往只有一个负责云台姿态自稳定的处理芯片。
当系统进入惯性自稳定状态后,一般的机载惯性稳定云台系统往往只能以时间片轮询的方式来实现各个轴向姿态稳定功能的同时进行运行,实时性和可靠性较低;本系统具有3个独立的运动控制单元,能够对3个轴向的状态进行实时并行处理,有效地缩短了系统的响应时间,提高了系统的实时性和可靠性。
另外,相较于其他一些基于FPGA等类型嵌入式处理器开发的惯性平台[5],本系统在成本上具有较大优势。经过大量验证,本系统稳定、可靠、精度高,具有较高的应用价值。
参考文献
[1] 辛哲奎,方勇纯,张雪波.小型无人机地面目标跟踪系统机载云台自适应跟踪控制[J].控制理论与应用,2010,27(8):1001-1006.
[2] 杨庆辉,杜红英,陈雄,等.微机电陀螺随机漂移建模与卡尔曼滤波[J].计算机仿真,2015,32(3):68-72.
[3] 王正生,仇雅芳,王琳,等.卡尔曼滤波算法在单站无源定位中的应用[J].舰船电子对抗,2014,37(5):27-30.
[4] 关吉.卡尔曼滤波器的MATLAB仿真实现[J].东南传播,2014(6):178-180.
[5] 高迎彬,胡昌华,何华锋,等.基于FPGA的惯性平台嵌入式调平系统设计[J].电子测量技术,2011,34(6):60-63.
相关问答
AVR单片机 中ICC avr软件用来干什么的?用来烧程序吗?还有avr ...AVR单片机中ICCavr软件用来干什么的?用来烧程序吗?还有avrstudio作用?显示器戴尔讨论回答(3)AVR单片机中ICCavr软件用来编辑、编译代码的。avrstudi...
51单片机和 AVR单片机 的区别?这个区别不少,最主要的当然是寄存器和IO端口啦!avr在51的基础上扩充了大量的寄存器和大量的引脚功能,几乎每个引脚都有第二功能,还有如:4路PWM波的输出、I^2...
AVR ATmega8 单片机 下载程序的过程-ZOL问答目前的AVR芯片基本上都具备ISP接口,可通过ISP接口进行编程。它一共使用了两条电源线:VCC、GND,三条信号线:SCK、MOSI、MISO,以及复位线:RESET。由于仅仅使用了...
新手如何学习 单片机 ,用那些软件模拟比较好?关于如何学习单片机,你可以看看《如何学好单片机?》这个问答,里面有关于怎么学习的详细解读。今天重点说说你的第二个问题:用那些软件模拟比较好?一、单片...
iar avr V5.XX full怎么破解选自AVR研讨会演讲提纲!双龙老耿(1)为什么选用AVR单片机?Flash程序存储器可擦写1000次以上,不再有报废品产生。PIC有的是OTP,只能烧录一次。A...
“ AVR ”是什么意思?[回答]AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机。AVR的单片机可以广泛应用于...
protues是干什么的?Proteus是LabcenterElectronics开发的电子设计自动化(EDA)软件套件,用于设计和模拟电路。它提供了一个易于使用的图形用户界面,允许用户快速地创建和编辑电...
本人大二学生,想玩 单片机 求推荐?我作为学习单片机的过来人,我来回答你的问题。现在市场上的单片机型号可谓是琳琅满目,像PIC单片机、AVR单片机、MCS-51单片机、STM32单片机等。如果你刚接触过...
如何让 单片机 灯亮?让单片机控制LED灯亮的实现方法很多,下面是其中一种基于AVR单片机和汇编语言的控制方法:1.准备材料:ATmega32单片机(或其他型号的AVR单片机)、一个...
请教使用 AVR MCU的ADC口检测几个电源电压,使用内部2.56V参考电压,使用电阻分压的方法采样,电阻如何选择?这个问题不大,AVR的ADC引脚输入阻抗为100M,所以每路的总阻值为100K-1M左右.只是阻值大时,省电,抗干扰能力较差.阻值小是,费电,抗干扰能力较好.记得要在ADC引脚...