当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]SEP4O2O在Linux下实现动作控制MP3

引言

  动作识别是一个很热门的话题。试想一下一个没有任何触摸、机械按键的MP3,只要你前后左右的晃动就能进行所有最基本的控制操作,既灵动又时尚,这应当是一种全新的操作体验。本文将探讨如何设计这种通过动作来进行正常控制的MP3。

  1硬件平台
 

  1.1SEP4020嵌入式处理器

  本文所述驱动程序基于SEP4020嵌入式微处理器。SEP4020是由东南大学国家专用集成电路系统工程技术研究中心设计的一款处理器,采用0.18μm标准CMOS的工艺设计,内嵌ASIXCORE(32位RISC内核,兼容ARM720T,带8kB指令数据Cache和全功能MMU)。SEP4020芯片中集成各种功能,包括:

  8/16位SRAM/NORFALSH接口,16位SDRAM接口

  硬件NANDFLASH控制器,支持NANDFLASH自启动,支持软件/硬件ECC校验

  10M/100M自适应以太网MAC,支持RMII接口

  64kByte高速片上SRAM

  USBl.1Device,全速12Mb/s

  支持I2S音频接口

  支持MMC/SD卡

  LCD控制器,支持640×480×16位TFT彩屏和STN黑白、灰度屏

  RTC,支持日历功能/WatchDog,支持后备电源

  10通道TIMER,支持捕获、外部时钟驱动和MATCHOUT

  4通道PWM,支持高速GPIO

  4通道UART,均支持红外

  2通道SSI,支持SPI和Microwire协议

  2通道SmartCard接口,兼容IS07816协议

  支持最多97个GPIO,14个外部中断

  支持链表DMA传输和外部DMA传输

  片上DPLL,支持多种功耗模式:IDLE、SLOW、NORMALSLEEP

  1.2MC9S08QG8

  本文中的动作捕捉判断部分由MC9S08QG8来控制完成。MC9S08QG8是Freescale公司的一款单片机,它的性能如下:

  8通道、10位模数转换器

  3个通讯接口:SCI、SPI、IIC

  4k或8k可重编程FLASH存储器

  内置在线仿真器(ICE)

  1.3MMA7620

  动作控制MP3中动作的感应是由MMA7620完成的。MMA7620是Freescale公司的一款三向加速度传感器,它的性能如下:

  3轴加速度感应和输出,可同时测量三个坐标轴(x、y、z)的值并由三个通道输出

  4种灵敏度可供选择

  有休眠模式

  2动作控制MP3的设计

  2.1动作捕捉

  一个动作从开始到结束一定会有加速度的产生,所以可以通过检测伴随着动作产生的加速度的大小和方向来判断动作。要测量加速度的大小就需要一个加速度传感器,将所得到的加速度以模拟量的形式表示,然后将传感器所得到的模拟量通过一个AD转换模块转换成数字信号以方便后续计算。但是查找资料发现,如果单方面的使用一个AD变换器将从加速度传感器中得到的电压信号转换成为数字信号并要求达到期望的精度将导致成本的大幅度提高,然而现有很多的单片机中已经集成了AD转换模块,并且整个单片机的价格要低于单买单个三通道AD转换芯片。更为可观的是还可以利用单片机本身的处理功能对AD转换所得到的数字信号进行处理,预判动作。而且单片机中集成了很多的通信协议,简单而健壮。综合以上考虑,如果选用单片机代替AD转换模块就可以减轻核心板的负担和整个项目的开发难度。

  加速度传感器可以选择使用Freescale公司的MMA7620三轴加速度传感器。单片机可以选择使用Freescale公司的MC9S08QG8单片机,它集成的八通道9bitAD转换模块正好和MMA7620的三通道输出相匹配,体积也很小,适用于便携设备。

  

 

  图l是手持部分的原理图,包括单片机和传感器PTA0、PTAl、PTA2:输入:分别接三向加速度传感器的x、y、z端口输出,读取加速度传感器的x、y、z轴的模拟数据。

  PTA3:输出;接三向加速度传感器的Sleep引脚用于使传感器处于休眠状态从而降低功耗和锁定,避免运动时的干扰。

  PTTB0:输入;作为串口接收脚用于接收从核心板传来的命令。

  PTFBl:输出;作为串口发送脚用于向核心板发送由加速度传感器所测的经过单片机处理后所得到的动作信息。

  PTB6、PTB7:输出;接加速度传感器的gselect引脚从而控制加速度传感器的灵敏度。[!--empirenews.page--]2.2动作判断

 

  利用Freescale公司的FreeMASTER软件,可以很方便地进行程序在线调试,查看程序所有全局变量,具体软件和使用方法请查询Frees-cfle管方网站。以下得到的数据为使用FreeMASTER欺件,以时间和AD转换值为坐标绘图得到。

  

 

  每次每个方向采样20个数据,由于第一个数据的可靠性比较大,所以采用每组数据的第一个数据作为比较依据。经过多次测试,当x方向的数值小于80时为右转动作,x的方向的数值大于170时为左转动作,y方向的数值小于70时为向上抬的动作,y方向的数值大于160时为向下压的动作。虽然以上数据能表示动作,但人的动作时间相对单片机处理分析速度差别还是太大。为了解决这个问题,使单片机和动作同步,可以把前两次的动作记录下来,根据前两次的动作对当前动作进行过滤:如果连续几个相同的动作,就判断为一次动作,不相同则切换。动作的切换必然带有前后动作的变化,记忆之前的动作就可以判断出有无动作切换。这样的动作识别方法比较简单且容易实现,如果要实现更为精确的识别,则需要对算法进一步优化。图2为右摇时AD转换器所得到的结果。图3为前后左右摆动数据。

  在判别动作后,通过串口通信协议,发送双办约定的动作ID,具体见表l

  

 

  通过串口协议,核心板也可以对传感器和单片机进行一定的控制,包括传感器灵敏度调节,锁定休眠功能,使得后期的测试开发更加的方便。

  2.3MP3控制

  Linux操作系统作为平台,其良好的系统可定制、可移植性使得其在嵌入式领域占有重要的地位。Linux有很多好的进程通信机制,如内存共享、管道、多线程、信号等,这里选择信号作为控制通信的桥梁。利用Linux内部完整的串口驱动程序可以很轻松地通过在串口的软中断接收程序中发射信号给指定的程序,也就是播放器程序,然后播放器程序接收并判断信号类型,给相应控制全局变量赋与相应的控制值,使得介入控制变得可能。控制使用的是播放器自带的机制,使得更加地稳定可靠。使用Madplay作为MP3播放软件,其默认的控制是通过终端键盘来实现的。在设计时为了达到用动作产生的信号量来控制播放,同时不去大量修改Madplay的程序源码,可以通过截断播放器与键盘的联系,与串口连接上,这样就可以基本不用修改上层的机制就能够控制整个播放器的动作。

  2.4MP3播放

  MC9S08QG8与SEP4020之间通过串口来进行通信。

  基本的串口操作原则是先保存串口原始的参数,然后再设置程序所需要的参数,程序结束后恢复现场。串口一般操作如下:

  

 

  串口操作需要的头文件

   [!--empirenews.page--]串口软中断设置,填充SIGIO结构体,分配相应中断函数:

 

  

 

  在操作系统中加入自动播放脚本,使得系统在开机时完成搜索MP3文件,建立播放列表,启动Madplay播放器等操作。脚本代码如下:

  

 

  动作发生时MC9S08QG8向SEP4020发送一个动作信号,然后SEP4020中的Linux内核就会发送一个SIGIO(串口信号)给各个用户进程。Madplay生程捕捉该信号,并且读取串口上的消息,用以判断动作的形式。在Madplay程序中需要加入两个模块。第一个模块用于读取串口上的消息,具体实现方法是打开并读取串口设备文件/dev/ttySl来获取消息,然后按照设定会从设备上读到4种串口信号,对应4个ASCII字符“L,R,U,D”分别对应四种不同的动作;第二个模块是响应信号的处理函数,一旦Linux内核接收到SIGIO串口信号,Madplay进程就进入软中断读取/dev/ttySl上的串口消息。甫一判断出动作,Madplay就用kill函数向本进程发送相应的信号来控制播放。

  3总结

  以下是一些改进的建议:作为手持式设备,动作控制MP3对于能耗的要求比较高,所以设计时必须考虑多使用一些低功耗的器件替代高功耗的器件。动作控制的MP3在运动中是受限制的,MP3的判断会受到比较大的干扰。所以如果动作采样方法和动作判断算法难以有很大的改进,为方便继续使用应当考虑给MP3加上其他的控制方式,暂时取代动作控制

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭