基于STM32的新型角度测量系统设计
3 数据处理模块
STM32F107采 用的是ARM Cortex—M3内核,工作电压为3.3 V,时钟频率达到72 MHz。该芯片系统资源和外围接口丰富,内部集成专用时钟、复位以及电源管理模块,支持多种工作模式。由于STM32F107芯片的性能、成本和功耗方面 的特点,选择它作为数据处理模块。更重要的是STM32F107的定时器除了TIM6和TIM7,都有输入捕获功能。
3.1 输入捕获功能应用于角度测量的工作原理
以 TIM2定时器实现输入捕获功能为例。TIM2有4个独立通道,通过检测TIM2_CH1通道上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的 时候,将当前定时器的值存放到TIM2_CH1的捕获/比较寄存器里面,完成一次捕获。这就是STM32F107所具有的输入捕获功能。
将 ADXL202的Xout、Yout引脚输出接到STM32F107的34、35引脚(PA0、PA1)上,由STM32F107的原理图可知,34、 35引脚控制TIM2_CH1和TIM2_CH2两个通道。用TIM2_CH1来捕获Xout的数字方波信号的高电平脉冲,首先配置此通道的输入捕获为上 升沿检测。当检测到上升沿时,进入中断将计数器清零重新开始计数,并配置通道的输入捕获为下降沿捕获;当检测到下降沿时,进入中断读取计数器的值,由计数 值和计数频率可得到高电平的脉宽,即T1。然后通过以下两个公式:
A(g)=(T1/T2-0.5)/12.5% (6)
α=sin-1(Ax/g), β=sin-1(AY/g) (7)
计算得出当前的倾角,之后将结果传输给液晶显示屏显示结果。式中T2=1 ms。此处仅讨论芯片水平放置时的情况,当芯片垂直放置时,用式(5)即可。
3.2 采集和处理数据的方法
ADXL202 有两路输出信号Xout、Yout,而且它们是同时工作的,而STM32F107是顺序处理器,一个时间点上只能处理一路信号。我们采用分时复用的方法解 决,以1 s为时间点,在这1 s内,STM32F107只采集处理一条通道内的信号和数据,到下一秒时就采集处理另一条通道上的信号和数据。还应该注意一个问题,计数器在检测到上升沿 时开始计数,等下降沿到来停止计数的时间内,脉宽过长时计数器会发生溢出,所以必须记录下溢出次数。在最后计算计数器的值时,将溢出次数乘以计数器的宽度 加上当前计数器的值,即为总的计数值。
4 角度测量仪系统的程序设计
使用STM32F107的输入捕获功能,需要通过程序配置内部寄存器的初始状态,以此来满足角度测量仪的工作需求。
①开启GPIO和TIM2的时钟,通过内部的库函数RCC_APB2PeriphClockCmd、RCC_APB1PeriphClockCmd来控制两个时钟的开启。为了采集TIM 2_CH1和TIM2_CH2上的高电平脉宽,需配置PA0和PA1为下拉输入。
②初始化TIM2,设定TIM2的输入捕获自动重装载值为0xfffe,计数频率为1 MHz。
③使能输入捕获、中断、计数器,通过STM32F107的库函数能方便地配置。
由角度测量和输入捕获原理可得系统的程序流程图,如图7所示。
图7 系统程序流程图
5 调试和测量结果
在 室温下进行调试。当角度测量仪没有倾斜时,液晶屏上显示的结果并不为零,其原因是ADXL202安装无法完全水平。芯片安装后本身存在倾角,这是不可避免 的。虽然调试环境是在室温下,但是实际使用的环境可能是温度变化较大的场合,零漂和灵敏度随温度的漂移将会很严重,直接测量时会导致很大的角度误差,因 此,必须采取某种形式的温度补偿方法来解决。
当角度测量仪有倾斜时,测量结果与实际值有较大误差。经分析是输入捕获的计数器有误差。经将干扰和毛刺计数进来,所以应该添加滤波电路,同时计数器的值采用多次计数取平均值的方法,以此提高计数的精度。
角度测量仪的测量结果如图8所示。
图8 角度测量仪的测量结果
结语
本文论述了一种基于ADXL202的高精度角度测量仪的研究和设计方法,对ADXL202的角度测量原理和STM32F107的输入捕获功能进行了详细的介绍。经实验测试,该测量仪能高精度地完成角度测量,而且可靠性好,对角度测量的研究和设计有着积极的意义。
双轴加速度传感器角度测量系统STM3 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)