- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
31 模块定义 ? clock.c ? clock.h 32 6 模拟量输入 ? 模拟输入硬件结构 模拟输入信道 物理 参数 传感器 放大器 滤波器 模拟 多路 开关 信道选择 AD 转换 连接微处理器 其它模拟通道 33 6 模拟量输入 ? 读取 A/D 值的方法 1- 慢速的 A/D 转换器件 – ( 1 )选择需要进行模数转换 的通道; – ( 2 )触发进行模数转换 – ( 3 )延迟一段时间,延迟的 时间大于或等于模数转换的 时间加上信号在模数转换器 保持稳定的时间 – ( 4 )读取模数转换的值 – ( 5 )把读取的值提交给应用 程序 3 4 5 2 1 驱动 程序 MUX ADC 应用程序 模拟 输入 1 2 3 4 5 驱动程序选择要读的模拟输入 触发 ADC 进行转换 驱动程序延时超过转换时间 ADC 读 模拟输入的二进制值返回到应用程序 34 6 模拟量输入 Unsigned16 adc_input(Unsigned8 channel) { /* to do: 操作模拟多路开关,选择模数转换的通道 */ … /* 延时,等待模拟信号在模数转换器的输入端稳定 */ … /* 启动模数转换 */ … /* 延时 / 查询 , 等待模数转换的结束 */ … /* 读取模数转换的结果把返回给调用者 */ … } 35 6 模拟量输入 ? 方法 2 :利用模数转换 器的结束信号来通知 用户 - 中断方式 Unsigned16 adc_input (Unsigned8 channel) { /* 选择要读取的输入通道 */ /* 延时,等待模拟多路开关输入信号 的稳定 */ /* 启动模数转换 */ /* 等待信号量 SemaAD or 超时 */ if ( 超时 ){ /* 模数转换出错处理; */ } else{ /* 读取转换的结果并返回调用者 */ } } void IsrAD() { /* 发出 SemaAD( 模数转换结束信 号 )*/ } 36 6 模拟量输入 ? 方法 3 : A/D 转换的速度比较快 - 直接在程序中读取 Unsigned16 adc_input(Unsigned8 channel) { /* 选择模拟输入通道 */ /* 延时,等待模拟信号在模数转换器的输入端稳定 */ /* 启动模数转换工作 */ /* 检测是否转换完成,如果完成则读取转换结果 */ … /* 把转换的结果返回给调用程序 */ } 37 6 模拟量输入 ? 关于移植性的考虑 1. 组件化方法把 A/D 转换的细节隐藏在组件的内 部。 2. 关于 A/D 的精度:目前的模拟转换器的精度有 8 位、 10 位、 14 位等,甚至有 20 位、 24 位或更高。 3. 为了将来技术的发展,可以把转换结果表示成 32 位,在一定的时期内足够用了,对于小于 32 位的模数转换器,低位表示转换的结果,高位 用 0 填充,最高位可以作为符号位。 38 模块与接口函数 ? 模块文件 – adc.c – adc.h ? 主要函数 – adc_init() – adc_input() 39 7 模拟量输出 滤波器 放大器 传感器 DAC 来自微处理器 物理参数 滤波器 放大器 传感器 DAC 来自微处理器 物理参数 滤波器 放大器 传感器 DAC 来自微处理器 物理参数 Analog Output Channel ? D/A 的环节 – 数模转换 器 – 滤波器 – 放大器 – 执行器 / 驱 动器 40 7 模拟量输出 ? 主要接口函数 – dac_init() – void dac_output(Unsigned8 channel, Unsigned32 value); ? 模块文件 – dac.c – dac.h 41 7 模拟量输出 ? 使用例子 void UserTask() { Unsigned32 temperature; /* 数据来源和处理 , 得到数据 temp*/ dac_output(0,temp);/* 此时电压表的指针指示相应的模拟量 */ … } -50 o 0 o +300 o 仪表 -50 o F ~ 30 0 o F 温度 换算函数 8 位 DAC FSV=2.5V cnts cnts*FSV 256 0 ~ 100 μ A V I 转换器 ( 42 μ A/V ) 42 8 开关量输入 / 输出 压力开关 温度开关 限制开关 继电器触点 邻近探测器 控制 / 监 视 系统 43 8 开关量输入 / 输出 1. 开关量通常是 1 位 2. 计算机处理的数据以字节为单位 3. 接口函数的实现方法 ① 直接以字节
文档评论(0)