历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2018年04月07日 | DAC7714在嵌入式激光跟踪仪设计中的应用

2018-04-07 来源:21ic

    设备驱动程序在Linux内核中占有极其重要的位置,在一个嵌入式系统中,除了CPU、内存以及其他很少的几个部件以外,所有的设备控制操作都必须由驱动程序来完成。系统设计者必须为系统中的每个外设开发相应的驱动程序,否则设备无法在Linux下正常工作。

    在基于AT91RM9200处理器的某嵌入式激光跟踪仪中,为了实现目标的快速、平稳跟踪,需要控制两路电机,即:方位电机、俯仰电机。其原理如下:通过不断读取两路角度编码器的数据,计算出两路电机实际角度与期望角度的偏差,利用反馈控制的原理,驱动两路电机跟踪目标。两路电机的控制电压为5V时,电机停止不动;控制电压为0V时,电机以最大速度顺时针旋转;控制电压为10V时,电机以最大速度逆时针旋转。

    根据上述控制要求,选择4通道12位的串行DA转换器——DAC7714转换器作为两路电机的控制驱动芯片。该芯片在嵌入式Linux系统下驱动程序的优劣,将直接决定整个仪器的跟踪效果,也是嵌入式开发的需要解决的基本问题之一。

    1 概述

    DAC7714是美国TI公司推出的一款4通道12位串行输入、电压输出型DA转换器。其供电电压为±15 V,可以实现输出自动保持,采用此串口芯片除了具有节省单片机资源的优点外,还具有同时输出多路0~10 V(参考电压为+10 V和0 V),特别适用于MCU资源紧缺而控制通道比较多的场合。

    DAC7714性能特点:

    1)12位分辨率,串行接口;

    2)功耗仅为250 mW;

    3)4个模拟输出通道,电压输出;

    4)线性误差±1LSB;

    5)支持单极性(0~10 V)或双极性(-10 V~+10 V)输出;

    6)自动输出保持;

    7)复位信号可选,不同复位方式具有不同初始值。

    2 硬件设计

    嵌入式激光跟踪仪硬件比较复杂,这里进介绍与电机驱动相关的DAC7714与AT91RM9200的硬件连接部分。由于实际使用时的电机功率较大,需要在DAC7714的两路输出再加一级驱动电路才能真正驱动电机。

    2.1 DAC7714引脚及功能

    DAC7714为SOJ16封装,具体引脚及功能介绍如下:

    VOUTA~VOUTD:4个模拟量输出

    CS:片选端,低电平有效

    CLK:串行数据时钟端

    VCC:正电源,通常为+15 V

    VSS:负电源,通常为0或-15 V

    GND:地

    VREFL:模拟输出电压参考(下限)

    VREFH:模拟输出电压参考(上限)

    SDI:串行数据输入

    LOADDACS:转换结束判断位

    RESET和RESETSEL:芯片复位设置位

    2.2 DAC7714硬件设计

    DAC7714硬件设计比较简单,其可编程引脚RESET、LOADDACS、CS、CLK、SDI分别与AT91RM9200的IO口PA0-PA1、PA3-PA5连接,为下一步驱动程序开发打下基础;其VOUTA、VOUTB接两路电机的控制信号;VREFL接地,VREFH接+10 V,使用单极性接法。其具体连接如图1所示。

   a.JPG


    3 驱动程序设计

    驱动程序的目的是驱动硬件正常工作,所以编写驱动程序要针对特定的硬件来进行。在嵌入式激光跟踪仪中,需要编写DAC7714的驱动程序,内核将以设备节点的形式调用、管理该芯片。DAC7714属于串行DA转换器,需要根据其工作时序图,控制AT91RM9200的上述引脚,模拟其工作时序,在内核Linux-2.4.19中完成驱动程序的设计。

 

    3.1 DAC7714工作时序图

    DAC7714完成一次数模转换,需要在CS为低电平期间,在CLK的上升沿,串行输出16位数据到SDI。16位数据中,前两位A1和A0的组合将决定对某一通道进行转换输出(00-A通道、01-B通道、10-C通道、11-D通道),接下来两位为无效位,最后的12位数据即真正需要转换的数据。其工作时序图如图2所示。

   b.JPG

    3.2 驱动程序组成

    DAC7714驱动程序作为设备文件,同样分为open、write、release等几个操作。对于内核来说,DAC7714属于字符型设备,并为该设备命名为Name[]=“DAC7714drv”。该模块在使用时采用insmod命令进行动态加载,使用rmmod命令进行动态卸载。DAC7714驱动程序主要由注册函数、注销函数、初始化函数、DA输出函数构成。

    用户在使用insmod命令加载模块时,实际调用的是以下注册函数:

    c.JPG

    应用程序中使用open函数打开DAC7714设备时,实际调用以下函数完成对控制器相应引脚的初始化操作(以PA0连接RESET为例介绍):

   d.JPG
e.JPG


    在DAC7714_write函数中,控制AT91RM9200的PA0-PA5引脚电平,模拟图2的时序完成DA输出,其流程图3所示。

    h.JPG


    4 测试程序设计

    在测试程序中,实现对DAC7714的4路输出分别进行测试。测试方法是,对于指定的数字量,通过万用表或示波器测量DAC7714相应通道的电压输出值,若该值与理论值一致,则表明驱动程序正确。

    首先调用open函数打开DAC7714设备,然后控制数字量从0依次加1,并结合通道号生成DAC7714所能识别的控制数字量,然后调用write函数控制输出,当控制数字量达到最大值时,切换下一通道。测试程序主要代码如下。

    i.JPG
j.JPG


    5 结论

    文中给出了DAC7714硬件设计方案,在AT91RM9200+嵌入式Linux环境下,详细介绍了基于其驱动程序和测试程序的设计方法,揭示了嵌入式开发的一般规律。在实际测试过程中,将4路通道的实际输出电压与理论电压进行了比较,误差最大为0.1%,完全能够满足激光跟踪的要求。


推荐阅读

史海拾趣

Auctor Corp公司的发展小趣事

在产品质量和技术水平得到市场认可后,Auctor Corp公司开始积极拓展市场。公司通过与国内外知名企业建立合作关系,成功将产品打入多个国家和地区的市场。同时,公司还注重品牌塑造,通过参加国际电子展会、举办产品发布会等方式,提升品牌知名度和影响力。这些举措使得Auctor Corp在电子行业中的地位逐渐提升。

奇力新(chilisin)公司的发展小趣事

随着市场的不断变化和客户需求的多样化,奇力新开始拓展产品线,推出了更多类型的电感器产品。这些产品不仅涵盖了传统领域,还涉及到了新能源汽车、工业控制等新兴市场。为了保持市场竞争优势,奇力新不断加大研发投入,提升产品质量和性能。通过不断的市场推广和客户服务,奇力新逐渐赢得了客户的信任和市场的认可。

Custom LeatherCraft Manufacturing Co Inc公司的发展小趣事

随着电子行业的迅速发展,工程师和技术人员需要携带的工具和设备也越来越多。CLC敏锐地捕捉到了这一变化,开始研发具有更多功能和口袋的工具包。同时,他们还引入了新的材料和技术,使产品更加轻便、耐用。这些创新设计不仅满足了客户的需求,还进一步巩固了CLC在市场上的地位。

ARBOR公司的发展小趣事

ARBOR公司一直致力于电子技术的研发与创新。在某个时期,公司研发团队成功开发出一款具有颠覆性的电路板技术,这项技术在信号传输速度和稳定性上实现了重大突破。凭借这一技术,ARBOR公司迅速占领了高端电子市场,成为行业内的技术领导者。公司股价随之飙升,吸引了大量投资者的关注。

Equinox公司的发展小趣事

2020年,新冠疫情的爆发给全球健身行业带来了前所未有的挑战。许多健身房因为疫情而被迫关闭,Equinox也不例外。然而,Equinox并没有放弃,而是迅速调整策略,通过线上课程、虚拟健身等方式保持与客户的联系。同时,公司还加强了内部优化和成本控制,以应对疫情带来的经济压力。

Excelsys公司的发展小趣事

人才是企业发展的核心驱动力。Excelsys公司高度重视人才培养和团队建设。公司建立了完善的人才培养机制,为员工提供系统的培训和学习机会;同时,公司还注重团队文化的建设,营造积极向上、团结协作的工作氛围。这些措施为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

请教一下专业英语

3.Requirements analysis, product/functions review是审查吗?, identification of issues是问题识别吗, system risk analysis, reliability analysis 8.Support, maintain and document functionality支持,维护且以文档记录(产品)功能 :就 ...…

查看全部问答>

关于wince下实现AD采集的问题

    我想在wince下实现AD数据采集,思路是通过调用ceddk.dll中的函数读写ADC寄存器实现ADC。我简单地做了个试验,第一步,我把ADCDAT0寄存器的物理的物理地址0x5800000C通过MmMapIoSpace转变成虚拟地址0x00160000;第二步,我通过read_re ...…

查看全部问答>

关于如何学习嵌入式 高手 们进啊

大家好,我是一名大三的学生,学的是嵌入式方向的,但我们现在才学嵌入式操作系统,都TMD还是理论,学了等于没学,就上学期还学了个汇编,现在一学期都快过完了,感觉什么关于嵌入式方面的都没学到,如果靠下学期再来学点东西,以后出去就别想混了 ...…

查看全部问答>

请教:读取CEdit的内容写入txt文件是乱码

功能是读取edit控件中显示的内容,将内容存储到txt文件中 现在文件可以创建,也可以写入,就是打开txt文件显示乱码。 请教明白人 谢谢 void CDATASTOREDlg::OnSave() {     UpdateData(TRUE);     SYSTEMTIME Time;  ...…

查看全部问答>

stm32ucosii如何使用串口中断在接收数据?

哪位大侠帮我解答下,不胜感激,小弟刚开始在STM32上折腾uCOS II.Micrium的代码已经跑上了,但中断还迷糊..............1)stm32 ucos ii 如何使用串口(如uart2)中断在接收数据?2)串口中断在哪开?然后用void US ...…

查看全部问答>

关于msp430f2132的脉冲捕获(2)

从网上找到一个例子,但不能进入中断,请老师们帮助分析. #include "msp430x21x2.h" unsigned int start,end,width; unsigned int start2,end2,width2; unsigned char overflow; float number; float number2; float fre; fl ...…

查看全部问答>

DS18B20初始化失败

麻烦大家帮我看下,  我的DS18B20初始化失败。   我用protues仿真,用一盏小灯做指示, 程序读不出数据,逐步检测发现程序卡在DS18B20初始化的初始化部分。 可是我去查看了datasheet也没能查出原因来··。   麻烦 ...…

查看全部问答>

AVR单片机定时0

//ICC-AVR application builder : 2013-7-18 下午 08:03:54 // Target : M128 // Crystal: 16.000Mhz #include #include typedef unsigned char uchar; uchar i; void port_init(void) { PORTA = 0xff; DDRA  = 0xff; PORTE ...…

查看全部问答>

求购EXP430G2 launchpad口袋实验平台扩展板

如题,求购求购EXP430G2 launchpad口袋实验平台扩展板,即带有128段LCD的那块 或者还有什么其他方法可以获得,知道的请说下,谢谢! 东西如下图: …

查看全部问答>

【Nucleo心得】+(九)BlueNRG的应用程序命令接口ACI解读

BlueNRG的应用程序命令接口ACI解读 1、应用程序命令接口概述BlueNRG定位于BLE网络协处理器(BLE Network Co-Processor),也就是为系统的应用程序(Application)增加BLE通讯功能。BlueNRG通过SPI接口与Application通讯,其中Application通过SPI ...…

查看全部问答>