基于ARM处理器和LM331的频率检测模块设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 检测模块硬件
1) 模块总体结构。模块总体设计分 3 部分: ① 对输入信号进行线路选择; ②进行频率电压转换; ③ 将模拟电压值送入 CPU 的模数转换模块。频率测
量模块总体框架如图 1。
图 1 频率测量模块总体框架
2) 数据选择。频率检测模块可分时监测 8 路 频率 量,但 LM331 只 有 1 路 数 据 输 入 口,选 用 74LS151 为 8 选 1 数据选择器,通过控制 A、B、C 3 个引脚对 D0 ~ D7 进行数据的分时选择。
Shenyang Coal Trade Group Corporation Ltd. Liability Company,Shenyang 110106,China) Abstract: In the article,a frequency signals detection module used in underground monitoring sub - station is designed,module hardware contains S3C2440 processor,LM331 frequency - voltage converter,74LS1511 - of - 8 line data selector. On the software level, module contains Linux OS and Qt as a display tool. Finally module achieves the target of collection,measurement and display of 8 - channel frequent signals. Key words: frequency; S3C2440; LM331; Linux; detection module
分站与各个传感器之间的通信,主要以频率信 号为 主。 设 计 的 频 率 信 号 检 测 模 块 以 ARM9 - S3C2440 为核心,Linux 作为嵌入式操作系统,通过 74LS151 数据选择器,分时对 8 路输入信号进行采 集。采用 LM331 芯片对频率进行频率 / 电压转换, 最后将模拟电压信号送入处理器进行进一步计算并 显示[1 - 3]。
监控系统的优劣与否直接关系到煤矿的安全生 产,井下分站位于井下各类传感器设备和地面监控 主站之间,是井下安全监控模块与地面安全监控中 心之间的传输枢纽,负责井下环境信息的参数采集 与处理,并 通 过 总 线 网 络 与 地 面 中 心 站 进 行 通 信。 所以分站对传感器的数据采集这一环节至关重要, 其准确度要求很高。
设计·开发
DOI: 10. 13347 / j. cnki. mkaq. 2014. 06. Leabharlann Baidu32
( 2014 - 06)
·107·
基于 ARM 处理器和 LM331 的频率检测 模块设计
籍天亮1 ,王 伟2 ,张 东1 ,李长录1
( 1. 煤科集团沈阳研究院有限公司,辽宁 抚顺 113112; 2. 沈阳煤业集团有限责任公司 红阳二矿,辽宁 沈阳 110106)
·108·
( 第 45 卷第 6 期)
设计·开发
CMOS 等不同的逻辑电路。 在 LM331 进行频率量测量前,必须使用光耦对
正弦波输入形进行处理,LM331 外围电路连接图如 图 2。
图 2 LM331 外围电路连接图
4 ) 处 理 器 ADC 转 换。S3C2440 处 理 器 内 的 ADC 模块总共有 8 个通道可以进行模拟信号的输 入。分别是 AIN0、AIN1、AIN2、AIN3、YM、YP、XM、 XP。设计 选 择 的 输 入 端 口 为 AIN0,模 拟 信 号 从 AIN0 通道输入,然后设定寄存器中预分频器的值来 确定 AD 转换器频率,最后 ADC 将模拟信号转换为 数 字 信 号 保 存 到 ADC 数 据 寄 存 器 0 中 ( ADCDAT0) ,然后 ADCDAT0 中的数据可以通过中 断或查询的方式来访问。
中图分类号: TD679
文献标志码: B
文章编号: 1003 - 496X( 2014) 06 - 0107 - 04
Design of Frequency Detection Module Based on ARM Processor and LM331
JI Tianliang1 ,WANG Wei2 ,ZHANG Dong1 ,LI Changlu1 ( 1. China Coal Technology and Enginering Group Shenyang Research Institute,Fushun 113112,China; 2. 2nd Hongyang Coal Mine,
设计·开发
( 2014 - 06)
·109·
ta) ; copy _ to _ user ( buf,( char * ) &data. data,sizeof
( data) ) ; return ( sizeof( . data) ) ; } 2) 测试程序。在无显示窗口的条件下,为验证
AD 驱动已经成功运行,需要先编写测试程序,通过 读取驱动程序创建的: “/ dev / ADC_DEV”文件,获得 AD 模块处理好的数据,主要代码如下:
qDebug( ) < < " Openfile error : " < < file - > errorString( ) ;
return; } while( 1) { char data[8] = { 0} ; qint64 ret = file - > read( data,sizeof( data) ) ; / /读取设备 if( ret ! = sizeof( data) ) continue; else{ switch( data[0]) { case " 1" : ui - > progressBar_1 - > setValue( data) ; break; case " 2" : ui - > progressBar_1 - > setValue( data) ; break; case " 3" : ui - > progressBar_1 - > setValue( data) ; break; case " 4" : ui - > progressBar_1 - > setValue( data) ; break; case " 5" : ui - > progressBar_1 - > setValue( data) ; break; case " 6" : ui - > progressBar_1 - > setValue( data) ; break; case " 7" : ui - > progressBar_1 - > setValue( data) ; break; case " 8" : ui - > progressBar_1 - > setValue( data) ; break; default: break; } / / 对 8 路 通 道 数 据 选 择 后 分 辨 显 示 在 progressBar 上 } file - > close( ) ; delete file; } 程序完成后使用 qmake 编译,生成可执行文件 frequenttest,在实验板上移植好 qt 库后,运行文件。
3) 频率电压转换。选用 LM331 高精密频率电 压( F /V) 转换器。其内部有①输入比较电路; ②定 时比较电路; ③R - S 触发电路; ④复零晶体管; ⑤输 出驱动管; ⑥能隙基准电路; ⑦精密电流源电路; ⑧ 电流开关; ⑨输出保护点路等。输出管采用集电极 开路形式,可以通过选择逻辑电流和外接电阻,灵活 改变输出脉冲的逻辑电平,从而适应 TTL、DTL 和
摘 要: 设计了一种用于井下监控分站的频率信号检测模块,模块硬件采用 S3C2440 处理器、
LM331 频率电压转换芯片、74LS151 数据选择器,软件层基于 Linux 操作系统、Qt 作为显示工具;
最终实现了对 8 路频率信号的采集、测量以及显示。
关键词: 频率; S3C2440; LM331; Linux; 检测模块
int main( void) { int fd,i,res,adc_data; char buf[4]; if ( ( fd = open( " / dev / ADC_DEV" ,O_RDONLY) ) < 0) { printf( " open adc_dev failed / n" ) ; return 1; } … adc_data = buf[0]+ ( int) ( buf[1]< < 8) ; printf( " Frequent = % . 2f Hz / n " ,adc _ data / 1024. 0 * 800 + 200) ; … close( fd) ; return 0; } 编写好测试代码后,将模块连接信号发生器,输 出正弦信号范围为 0 ~ 1 000 Hz。再使用 arm - linux - gcc 编 译 器 编 译 测 试 程 序,并 生 成 可 执 行 文 件 “adc_test”,在移植好标准 C 库后,在实验板上终端 运行。 3) 显示程序。Qt 软件作为显示工具,因为 Qt 是款跨平台软件,切具备以下优势: ①跨平台特性; ②QT 本身优良的机制,使用面向组件编程; ③把精 力放在核心功能的实现上,而不是源码本身; ④能构 造出艺术级的界面,设计界面方便[7]。 PC 端使用 Qt4. 8 版本为开发软件( 实验板上移 植 qte4. 6) ,创建“FrequentTest”类,对“/ dev / ADC _ DEV”文件进行连续读取,主要功能部分代码如下: void FrequentTest: : readDevFile( ) { QFile * file = new QFile( " / dev / ADC_DEV" ) ; / / 创建 file 对象 if ( ! file - > open( QIODevice: : ReadOnly) ) {
2 模块软件
选择 Linux 作为此平台的操作系统,其优势是: ①开源方便修改与自由裁剪; ②内核高效稳定,设计 编译出内核仅为 1. 98 M 字节; ③开发工具丰富; ④ 具有实时处理能力,快捷准确等[4 - 6]。
1) 处理器上模 / 数转换驱动程序。Linux 设备 分为 3 种: 块设备、字符设备、混杂设备。这些设备 都被映射到 Linux 文件系统的文件和目录中,用过 系统调用接口访问。而为了完成上述功能,需要创 建设备驱动,驱动主要功能如下: ①对设备初始化; ②启动或停止设备运行; ③内核空间与用户空间的 数据交互; ④检查设备状态。
创建 AD 设备将其划归为混杂设备( MISC) ,其 驱动程序主要代码如下:
#define DEVICE_NAME " ADC_DEV" / / 定义设 备名称 " ADC_DEV"
int channel = 0x00; / / 控制 74LS151 的 A、B、C 端口
static unsigned long channel_table[] = {
S3C2440_GPB5, S3C2440_GPB6, S3C2440_GPB7, }; void swicth_channel( int c) / / 加入通道选择控 制函数 { s3c2440_gpio _setpin ( channel _table[0 ],( c & 0x01) ) ; c = c > > 1; s3c2440_gpio _setpin ( channel _table[1 ],( c & 0x01) ) ; c = c > > 1; s3c2440_gpio _setpin ( channel _table[2 ],( c & 0x01) ) ; } / /将模数转换后的数字量写入用户空间 static ssize_t adc_read( struct file * fp,char __user* buf,size_t count,loff_t * ppos) { START_ADC( adc_dev. ch,adc_dev. pres) ; / / 启 动 ADC 转换 wait_event_interruptible( adc_dev. wait,adc_dev. flag) ; / / 等待 ADC 转换完成 adc_dev. flag = 0; / / 复制到用户空间数据格式" channel: dc_dec. data" char dat[12]; sprintf( data," % d: % d" ,channel,adc_dec. da-
1) 模块总体结构。模块总体设计分 3 部分: ① 对输入信号进行线路选择; ②进行频率电压转换; ③ 将模拟电压值送入 CPU 的模数转换模块。频率测
量模块总体框架如图 1。
图 1 频率测量模块总体框架
2) 数据选择。频率检测模块可分时监测 8 路 频率 量,但 LM331 只 有 1 路 数 据 输 入 口,选 用 74LS151 为 8 选 1 数据选择器,通过控制 A、B、C 3 个引脚对 D0 ~ D7 进行数据的分时选择。
Shenyang Coal Trade Group Corporation Ltd. Liability Company,Shenyang 110106,China) Abstract: In the article,a frequency signals detection module used in underground monitoring sub - station is designed,module hardware contains S3C2440 processor,LM331 frequency - voltage converter,74LS1511 - of - 8 line data selector. On the software level, module contains Linux OS and Qt as a display tool. Finally module achieves the target of collection,measurement and display of 8 - channel frequent signals. Key words: frequency; S3C2440; LM331; Linux; detection module
分站与各个传感器之间的通信,主要以频率信 号为 主。 设 计 的 频 率 信 号 检 测 模 块 以 ARM9 - S3C2440 为核心,Linux 作为嵌入式操作系统,通过 74LS151 数据选择器,分时对 8 路输入信号进行采 集。采用 LM331 芯片对频率进行频率 / 电压转换, 最后将模拟电压信号送入处理器进行进一步计算并 显示[1 - 3]。
监控系统的优劣与否直接关系到煤矿的安全生 产,井下分站位于井下各类传感器设备和地面监控 主站之间,是井下安全监控模块与地面安全监控中 心之间的传输枢纽,负责井下环境信息的参数采集 与处理,并 通 过 总 线 网 络 与 地 面 中 心 站 进 行 通 信。 所以分站对传感器的数据采集这一环节至关重要, 其准确度要求很高。
设计·开发
DOI: 10. 13347 / j. cnki. mkaq. 2014. 06. Leabharlann Baidu32
( 2014 - 06)
·107·
基于 ARM 处理器和 LM331 的频率检测 模块设计
籍天亮1 ,王 伟2 ,张 东1 ,李长录1
( 1. 煤科集团沈阳研究院有限公司,辽宁 抚顺 113112; 2. 沈阳煤业集团有限责任公司 红阳二矿,辽宁 沈阳 110106)
·108·
( 第 45 卷第 6 期)
设计·开发
CMOS 等不同的逻辑电路。 在 LM331 进行频率量测量前,必须使用光耦对
正弦波输入形进行处理,LM331 外围电路连接图如 图 2。
图 2 LM331 外围电路连接图
4 ) 处 理 器 ADC 转 换。S3C2440 处 理 器 内 的 ADC 模块总共有 8 个通道可以进行模拟信号的输 入。分别是 AIN0、AIN1、AIN2、AIN3、YM、YP、XM、 XP。设计 选 择 的 输 入 端 口 为 AIN0,模 拟 信 号 从 AIN0 通道输入,然后设定寄存器中预分频器的值来 确定 AD 转换器频率,最后 ADC 将模拟信号转换为 数 字 信 号 保 存 到 ADC 数 据 寄 存 器 0 中 ( ADCDAT0) ,然后 ADCDAT0 中的数据可以通过中 断或查询的方式来访问。
中图分类号: TD679
文献标志码: B
文章编号: 1003 - 496X( 2014) 06 - 0107 - 04
Design of Frequency Detection Module Based on ARM Processor and LM331
JI Tianliang1 ,WANG Wei2 ,ZHANG Dong1 ,LI Changlu1 ( 1. China Coal Technology and Enginering Group Shenyang Research Institute,Fushun 113112,China; 2. 2nd Hongyang Coal Mine,
设计·开发
( 2014 - 06)
·109·
ta) ; copy _ to _ user ( buf,( char * ) &data. data,sizeof
( data) ) ; return ( sizeof( . data) ) ; } 2) 测试程序。在无显示窗口的条件下,为验证
AD 驱动已经成功运行,需要先编写测试程序,通过 读取驱动程序创建的: “/ dev / ADC_DEV”文件,获得 AD 模块处理好的数据,主要代码如下:
qDebug( ) < < " Openfile error : " < < file - > errorString( ) ;
return; } while( 1) { char data[8] = { 0} ; qint64 ret = file - > read( data,sizeof( data) ) ; / /读取设备 if( ret ! = sizeof( data) ) continue; else{ switch( data[0]) { case " 1" : ui - > progressBar_1 - > setValue( data) ; break; case " 2" : ui - > progressBar_1 - > setValue( data) ; break; case " 3" : ui - > progressBar_1 - > setValue( data) ; break; case " 4" : ui - > progressBar_1 - > setValue( data) ; break; case " 5" : ui - > progressBar_1 - > setValue( data) ; break; case " 6" : ui - > progressBar_1 - > setValue( data) ; break; case " 7" : ui - > progressBar_1 - > setValue( data) ; break; case " 8" : ui - > progressBar_1 - > setValue( data) ; break; default: break; } / / 对 8 路 通 道 数 据 选 择 后 分 辨 显 示 在 progressBar 上 } file - > close( ) ; delete file; } 程序完成后使用 qmake 编译,生成可执行文件 frequenttest,在实验板上移植好 qt 库后,运行文件。
3) 频率电压转换。选用 LM331 高精密频率电 压( F /V) 转换器。其内部有①输入比较电路; ②定 时比较电路; ③R - S 触发电路; ④复零晶体管; ⑤输 出驱动管; ⑥能隙基准电路; ⑦精密电流源电路; ⑧ 电流开关; ⑨输出保护点路等。输出管采用集电极 开路形式,可以通过选择逻辑电流和外接电阻,灵活 改变输出脉冲的逻辑电平,从而适应 TTL、DTL 和
摘 要: 设计了一种用于井下监控分站的频率信号检测模块,模块硬件采用 S3C2440 处理器、
LM331 频率电压转换芯片、74LS151 数据选择器,软件层基于 Linux 操作系统、Qt 作为显示工具;
最终实现了对 8 路频率信号的采集、测量以及显示。
关键词: 频率; S3C2440; LM331; Linux; 检测模块
int main( void) { int fd,i,res,adc_data; char buf[4]; if ( ( fd = open( " / dev / ADC_DEV" ,O_RDONLY) ) < 0) { printf( " open adc_dev failed / n" ) ; return 1; } … adc_data = buf[0]+ ( int) ( buf[1]< < 8) ; printf( " Frequent = % . 2f Hz / n " ,adc _ data / 1024. 0 * 800 + 200) ; … close( fd) ; return 0; } 编写好测试代码后,将模块连接信号发生器,输 出正弦信号范围为 0 ~ 1 000 Hz。再使用 arm - linux - gcc 编 译 器 编 译 测 试 程 序,并 生 成 可 执 行 文 件 “adc_test”,在移植好标准 C 库后,在实验板上终端 运行。 3) 显示程序。Qt 软件作为显示工具,因为 Qt 是款跨平台软件,切具备以下优势: ①跨平台特性; ②QT 本身优良的机制,使用面向组件编程; ③把精 力放在核心功能的实现上,而不是源码本身; ④能构 造出艺术级的界面,设计界面方便[7]。 PC 端使用 Qt4. 8 版本为开发软件( 实验板上移 植 qte4. 6) ,创建“FrequentTest”类,对“/ dev / ADC _ DEV”文件进行连续读取,主要功能部分代码如下: void FrequentTest: : readDevFile( ) { QFile * file = new QFile( " / dev / ADC_DEV" ) ; / / 创建 file 对象 if ( ! file - > open( QIODevice: : ReadOnly) ) {
2 模块软件
选择 Linux 作为此平台的操作系统,其优势是: ①开源方便修改与自由裁剪; ②内核高效稳定,设计 编译出内核仅为 1. 98 M 字节; ③开发工具丰富; ④ 具有实时处理能力,快捷准确等[4 - 6]。
1) 处理器上模 / 数转换驱动程序。Linux 设备 分为 3 种: 块设备、字符设备、混杂设备。这些设备 都被映射到 Linux 文件系统的文件和目录中,用过 系统调用接口访问。而为了完成上述功能,需要创 建设备驱动,驱动主要功能如下: ①对设备初始化; ②启动或停止设备运行; ③内核空间与用户空间的 数据交互; ④检查设备状态。
创建 AD 设备将其划归为混杂设备( MISC) ,其 驱动程序主要代码如下:
#define DEVICE_NAME " ADC_DEV" / / 定义设 备名称 " ADC_DEV"
int channel = 0x00; / / 控制 74LS151 的 A、B、C 端口
static unsigned long channel_table[] = {
S3C2440_GPB5, S3C2440_GPB6, S3C2440_GPB7, }; void swicth_channel( int c) / / 加入通道选择控 制函数 { s3c2440_gpio _setpin ( channel _table[0 ],( c & 0x01) ) ; c = c > > 1; s3c2440_gpio _setpin ( channel _table[1 ],( c & 0x01) ) ; c = c > > 1; s3c2440_gpio _setpin ( channel _table[2 ],( c & 0x01) ) ; } / /将模数转换后的数字量写入用户空间 static ssize_t adc_read( struct file * fp,char __user* buf,size_t count,loff_t * ppos) { START_ADC( adc_dev. ch,adc_dev. pres) ; / / 启 动 ADC 转换 wait_event_interruptible( adc_dev. wait,adc_dev. flag) ; / / 等待 ADC 转换完成 adc_dev. flag = 0; / / 复制到用户空间数据格式" channel: dc_dec. data" char dat[12]; sprintf( data," % d: % d" ,channel,adc_dec. da-