关于手机音频通信实际开发经验分享_第1页
关于手机音频通信实际开发经验分享_第2页
关于手机音频通信实际开发经验分享_第3页
关于手机音频通信实际开发经验分享_第4页
关于手机音频通信实际开发经验分享_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于手机音频通信实际开发经验分享一、手机咅频通信的特点1、通用性强:在智能手机普及的今天,手机的对外通信接口多种多样,而其中以 3.5mm的音频接口通用新最强,基本所有的手机、平板电脑都会有这个接口,所以在一些 要求通用性的设备上,音频接口登上了舞台。2、速率低:由于手机音频部分的釆样频率一般为44.1khz (部分国产山寨为 8khz),这极大的限制了咅频通讯的速率。我们都知道44.1 khz的采样频率,那么最高的 信号频率只能为20khz左右,而信号周期也不可能只有2个采样点,通常要到10个以上, 这样层层下來通讯速率可想而知。3、小信号:音频通信的信号都是毫伏级的,各个手机厂商略有不同,

2、但通常最大 不超过200mv,通常我们通信使用的信号强度也就100mv左右,这导致信号比较容易受干 扰,且在开发阶段对工具有着种种限制。二、手机音频通信分类1、无线方式:a)无线方式大家可能不太熟悉,容我慢慢道来。我们都知道人耳能听到的声音频率 为20hz20kh乙 而手机通信的信号频率最高也就20kh乙 所以无线通信方式是可行的。因为虽然人耳的极限听力能到20kh乙但普通人一般在19khz以上时基本就听不到了,所 以如果信号的强度比较弱,且控制在19khz到20khz之间,那么我们就可以将之当做是 “超声波”来看待了。b)其实在此提到手机音频通信的无线方式,算是给大家一种产品开发思路吧。它的

3、 通讯半径在10m左右,前景还是很广阔的,大家有兴趣的可以试试。(其实已经有这方面的 产品了)2、有线方式:a)有线方式分为单向(设备一手机)和双向两种,单向的限制少,开发难度也小一 些,但实际应用时会受限制。而双向通信限制多,开发难度也大一些,但实际应用时更方便 止匕ob)设备一手机:曼彻斯特编码;fsk; dtmf;自定义正弦波c)手机一设备:由于手机输出的音频信号很小,无法直接使用,要么用运放发大到 合适的范围,要么用电压比较器转换成ttl方波。三、手机音频通信硬件通信方式分类:手机音频通信的硬件通信方式大体可分为方波和正弦 波两种。1、方波:方波通常使用的是曼彻斯特编码方式(什么是曼彻

4、斯特编码自己去查), 它的好处是可以用单片机直接输出方波,经过衰减后即可使用,方便简单。缺点是兼容性不 好,因为手机音频部分有这样一个特性,它只识别变化的电平信号,当麦克输入的信号长时 间保持在某一非零电平时,手机会将其视为零,而强行拉回零电位。这就是采用方波通讯方 式的兼容性不好的最大原因了,并且方波也容易受干扰。2、正眩波:正眩波不会出现上面所说的方波的问题,故正眩波的兼容性和稳定性 更好一些。通常采用方案有fsk、dtmf、信号发生器、或方波转正弦波等。(后面会对以 上方案逐一分析)3、通信信道分析a)我们知道音频接口有4根线,mic、地、左、右声道。设备一手机用mic,手机一设备用地、

5、左、右声道中的任意一个。这里说一下,实际产品中,有一些厂家会更换地线, 即将原本左、有声道中的一根改为地线來用,其实道理是一样的。因为音频通信的信号时交 流信号,而地其实也是悬浮地,即便地线换了,最终的波形还是一样的,因为最终手机解析 信号时需要的是频率和幅值。这样还剩下一个声道,通常被用来帮助设备进行上电识别,因 为咅频通信的设备通常都是电池供电的。b)另外还要在mic和地之间并联一个4.99k的电阻,因为手机是通过检测mic和地之间的阻抗是否为4.99k (也有其他阻值的)來判断是否有设备(耳机)插入,这一点要 谨记。四、各个通信方案对比分析1、设备一手机:a)曼彻斯特编码:在诸多通信方式

6、中,曼彻斯特编码是最灵活简便的一种方法,编 码信号可由单片机直接产生,经衰减电路衰减后便可直接使用。注意事项:曼彻斯特编码信 号的生成有两种方式,一种是用pwm生成,一种是用定时器屮断翻转io,我个人比较倾 向于定时器屮断方式。因为我们知道曼彻斯特编码中有宽沿河窄沿之分,且宽沿和窄沿可能 会灵活变化,而用pwm方式不容易精确控制宽沿、窄沿输出的变化,而定吋器中断方式则 非常灵活且容易控制。(后面会送上我自己写的曼彻斯特编码、解码函数)b)fsk、dtmf方式:fsk和dtmf两种方式大同小异,使用时通常都是用集成 的芯片来生成的,而这些芯片通常都是遵守固定的通信协议的的要求(fsk为bell2

7、02或 v.23协议,dtmf记不清名字了)。这两种通信方式的优点是采用正弦波通信、稳定性好且 使用简便。但由于固泄通信协议的限制导致通信速率、比特率也受到限制而缺乏灵活性。在 这里跟他家推荐一款英国的通信芯片cmx系列,这个系列的芯片融合的fsk、dtmf的编 码、解码,还是很不错的,大家有兴趣可以试试。(相关手册在附件里)c)信号发生器、锁相环方式:这种方式用信号发生器或者锁相环来产生方波或正玄 波,由单片机来控制波形的输出,也可以实现音频通信,且十分灵活。但缺点是电路较复杂, 且不同频率信号之i'可衔接不好掌握,用不好反而是麻烦。(相关手册在附件里)d)在这里送上一种我个人认为比

8、较好的方案:就是曼彻斯特编码加低通滤波器,由 单片机输出曼彻斯特编码,再经由低通滤波器将方波滤成正弦波后输出。既解决了 fsk、 dtmf灵活性的问题,又解决了曼彻斯特编码方波稳定性、通用性的问题。在低通滤波器方 面我个人采用的是“集成低通开关电容滤波器”,它成本虽然高一些,但好处也是明显的, 电路简单,使用方便,且占用的空i'可亦很小。(相关手册在附件里)2、手机一设备:a)放大电路方式:将手机输出信号经放大电路放大到合适的幅值,然后有锁相环或 者结成fsk、dtmf芯片进行解析。该屮方式难度最大,需要非常强的模拟电路功底,我 个人水平有限,故采用的另一种方式。b)电压比较器方式:将

9、手机输出的交流信号经电路强行拉到vcc/2级别,然后加到 电压比较器一端,另一段接比较电压vcc/2,这样交流信号即彼转化为ttl方波信号,此时 再进行解析就变得很简单了。五、研发注意事项(通讯方案分析部分rti于过长,放到最后来讲)1、一个好手机录音软件是必须的,最好能在手机上直接看到波形的。2、建议用笔记本电脑进行开发,而非台式机。因为咅频信号很小,容易受干扰, 而台式机干扰较大,笔记本还有一个好处是必要时可将外接电源拔掉,用电池供电。3、一个好录音笔必不可少,有时需要得到纯净的音频信号,方便更加准确的分析。4、做一个转接板,一边接音频母座,一边接音频公头,将mic、地、左、右声道 4跟线

10、用排阵引出,方便录音。5、做一个信号衰减电路,可将设备电路产生的信号衰减至咅频接口能承受的范围 内。前期调试时,我们可以用该电路将信号录进电脑进行信号分析。(推荐一个电脑音频信4.16.17.18.19.20.21.22.23.24.25.26.27.2&29.3().31.32.33.34.35.36.37.号分析软件:gold wave)6、录音用的音频线切记不要太长,不然会给你带来不少麻烦。最好自己做,用音频裸头、杜邦线、排阵即可制作,方便好用。曼彻斯特编码的编码解码函数如下:2. 注释:编码函数都是采用定时器屮断的形式,以曼彻斯特编码的窄沿作为定时器周期。3. 发送的数据包括1

11、个起始位、8个数据位、1个奇偶校验位、3个停止位。丄土丄丄丄土 丄“丄“丄丄“丄丄卜丄丄卜丄丄卜丄卜丄丄丄丄丄丄丄丄丄/7<tw <tw 7 叫.卜 #i> 7 <t> 7 叫.<tw <tw <t><t><t>#t%#t%#t%#t%#t%#t%#t%#t%#t%#77 彳.7 彳.7f5. static void vic_vect_fucton_00(void)/发送编码数据中断函数6. 7. timerois =0x0;&if(send_time%2=0)&&(send_start=1)

12、9. 10. switch(fsk_txstate)11. (12. case startbit:13. if(gpiodata&0x00000002)二二0x00000000)/ 如果检测到数据发送管脚为零14.send_time+;15.currentsym=o;fsk_txstate = byte;break;case byte:if(txbit < 8)cuitentsym = (send_byte » txbit) & 0x01;txbit+;txparity += currentsym;奇偶校验位else 讦(txbit = 8) cuitentsy

13、m = txparity & 0x01; 发送奇偶校验位txbit+;1else if(txbit>8 && txbit<12)/ next bit is the stop bitcurrentsym = 1;发送停止位txbit+;else if(txbit = 12) fsk_txstate = stopbit; break;case stopbit :txbit=0;fsk_txstate=idle; send_start=o;txparity=o; send_byte=o;break;if(lastsym! =currentsym)timerl_nu

14、m+; lastsym=currentsym;if(timerl_num%2=0)gpiodata&二 oxfffffffd;/输出管脚复位 elsegpiodata|=oxooooooq2;/ 输出管脚置位timerl_num+;/用来控制10 口的电平翻转 send_time+;/用來控制发送的字节的每一位 delay+;/delay就是延时函数注释:解码函数采用外部io中断形式(上升沿或下降沿中断,即电平电平跳变中断), 用一个定时器作为时钟,每次产生中断时便从定时器见时间值収出,并和上一次的 记录做差求出时间间隔,以此來判断当前为宽沿还是窄沿。static void vic_v

15、ect_fucton_04(void)/接受解码数据中断函数gpioic|=oxooooooo 1;清楚上一次中断内容rx_timc 二 timer 1 value;if(rxasttimc>=rx_time)rx_diff=rxasttimerx_time;/lasttime 初始值为 0elserx_diff=65535-rx_time+rxasttime;rxasttime=rx_time;switch(rx.state)启动代码时state已经被配置为startbitcase startbit_fall:if (shortinterval<rx_diff) &&am

16、p; (rx_diff<longlnterval)83.84.if(rx_ones<5)/ones 初始值为 085.86.rx_ones = 0;87.88.else89.90.rx_state = decode;码91.92.93.else if(rx_diff< shortinterval)94.rx_ones+;95.else将状态配置为解96.rx_ones=0;97.98.99.100.break;case decode:/*诵讨间隔.长短来判宦数据* * * * * * * * * * * * * */讦(shortinterval<rx_diff) &a

17、mp;& (rx_diff<longinterval)/若间距在范围内则当前数据位值和前一个相反101102103104105106107108109110111112113114115116117118119120cun*entbit=(currentbit+1)&0x01;rx_times+=2;else if( rx_diff< shortinterval)cuitentbit=currentbit;rx_times+;elserx_state = datainit;/*接受数据位,从低位接起* * * * */if(rx_times%2=0)if(rx_bitcounter<8)if (currentbit=l)uartbyterx = (uartbyterx » 1) + (1«7); rxparity+;奇偶校验位122.接受数据位数rx_bitcounter+;123.124.else125.126.uartbyterx = (uartbyterx » 1);127.rx_bitcounter+;128.129.130.else131.132.rx parity&=0x01;进行奇偶校验133.i f(rx pari ty=curren tbit)134.135.rx_bitcounter+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论