嵌入式ADC,什么是嵌入式开发ADC

如何提高DSP的ADC精度-嵌入式系统-与非网
&&&&&&& TI公司的C2000系列DSP以其出色的性能、丰富的片上外设在工业自动化、电机控制、工业生产领域得到广泛应用。TMS320F2812是C2000系列中性能出色的一个,F2812片上集成了12位16通道的数/模转化器,理论上精度可以达到0.1%以上。但实际上由于增益误差(&5%)和偏移误差(&2%)的存在,使得精度只能在5%左右,所以必须对进行校正。
  传统的对于ADC的校正方法是在两路通道输入已知标准电压,根据两点确定一条直线的原理,确定出AD转换的曲线,并以此校正转化值。但由于在校正过程中存在偶然因素的影响,使得这种校正方法精度只能达到3%左右。对此,提出了利用最小二乘法和线性回归的思想进行校正的方法,通过对多个测量点的分析计算,找出最佳的拟合曲线,使得总体的均方误差最小。
  最小二乘法是高斯于1809年提出的,在多学科领域中获得广泛应用的数据处理方法。用最小二乘法估测未知参数,可以有效消除测量中粗大误差和系统误差的影响。回归分析是英国统计学家高尔顿在18*首先提出的。一元线性回归是利用数理统计中的回归分析,来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法之一,运用十分广泛。一般来说,线性回归都可以通过最小二乘法求出其方程,可以计算出对于y=bx+a的直线。
  1 校正原理与实现方案
  DSP的ADC模块的输入、输出是线性关系,理想情况下,输入输出方程应该是y=x。但实际上,ADC模块是存在增益误差和偏移误差的,其中增益误差是实际曲线斜率和理想曲线斜率之间的偏差,偏移误差是0 V输入时实际输出值与理想输出值(0 V)之间的偏差。F2812的ADC模拟输入电压为0~3 V,输出为0~4 095,模拟输入与数字输出之间的对应关系为:数字输出值=4 095&(模拟输入值-参考电压值)/3.0ADC模块输入/输出特性曲线如图1所示。
图1 ADC模块输入/输出特性曲线
  F2812的ADC共有输入通道16个,由于通道之间的误差会在&0.2%以内,所以可以任选其中的6路通道作为校正输入端,并分别输入6个不相等的标准直流参考电压。通过在程序中定义结构体变量读取转化后的值,得到6组输入/输出平面上的坐标点。然后利用最小二乘和一元线性回归思想处理数据,求出的拟合最佳曲线,使得各个坐标点到该最佳曲线的距离的平方和(残差平方和)最小。
  2 最小二乘法和一元线性回归
  2.1 最小二乘原理
  对于线性模型,如果有t个不可测量的未知量,理论上,可对与该t个未知量有函数关系的直接测量量进行t次测量,即可得到函数关系。但由于测量数据不可避免地包含着测量误差,所得到的结果也必定含有一定的误差。为了提高所得结果的精度,可以把测量次数增加到n(n&t),以利用抵偿性减小随机误差的影响。
  高斯认为,根据观测数据求取未知参数时,未知参数最合适数值应是这样的数值,即选出使得模型输出与观测数据尽可能接近的参数估计,接近程度用模型输出和数据之差的平方和来度量。这就是最小二乘的基本思想。最小二乘法原理指出,最精确的值应在使残余误差平方和最小的条件下求得。
  2.2 一元线性回归原理
  一元线性回归是处理2个变量之间的关系,即两个变量x和y之间若存在线性关系,则通过试验,分析所得数据,找出两者之间函数曲线。也就是工程上常遇到的直线拟合问题。
  3 实验方案与结果分析
  3.1 实验方案
  实验利用F2812开发板和DSP调试软件CCS2.0完成。用稳定信号源产生6个标准电压,分别为0.2 V,0.5 V,1.0 V,1.5 V,2.0 V,2.5 V,输入通道选为A0,A1,A2,B0,B1,B2。ADCL0引脚接电路板的模拟地,与模拟输入引脚相连的信号线应该避开数字信号线,以减少数字信号对模拟信号的干扰。输入电路如图2所示。
图2 输入电路
  3.2 校正算法
  设ADC模块的输入/输出曲线为y=a+bx,输入电压值为xi,对应的转化输出值为yi。由最小二乘估计算法可得方程:
  解此方程组即可得到a,b的估计值:
  式中,
这样便得到了最佳的拟合曲线(回归方程):于是可以用此方程进行转化值校正。
  3.3 实验数据处理
  将实验获得的6组数据利用上述最小二乘法和线性回归方法进行处理,得到a,6的最小二乘估计值分别为,于是回归方程为:y=0.003 612+1.039 091x。以回归方程为标准,由x=(y-0.003 612)/1.039 091可以计算出校正后的转化值,并与未转化的值进行比较,结果如表1所示。
  在Excel中,绘制出未校正输入/输出分布点,和回归曲线,如图3所示。
图3 回归曲线示意图
  3.4 结果分析
  由表1和图3可以看出,如果不采取校正措施,则F2812的ADC模块会存在5%左右的相对误差;而采用提出的校正方法,可以将误差下降到1%以下。这就大大提高了A/D转化的精度,对于对控制要求精度很高的场合,牺牲ADC模块的6个通道,得到比较高的转化精度,还是非常必要而且值得的。
  4 结语
  在此提出一种采用最小二乘法和线性回归校正DSP的ADC模块的方法,实验证明此方法可以大大提高转化精度,有效弥补了DSP中AD转化精度不高的缺陷。此方法硬件电路简单,成本代价较低,具有很高的推广和利用价值。
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
加利福尼亚州米尔皮塔斯 和马萨诸塞州诺伍德 – 2017 年 4 月17 日 – 亚德诺半导体旗下凌力尔特公司推出 18 位 8 通道同时采样逐次逼近型寄存器 (SAR) ADC LTC2358-18,该器件具集成的微微安培输入缓冲器。
发表于: 15:18:00
本文章是关于ADC/DAC设计经典问答,涵盖时钟占空比、共模电压、增益误差、微分相位误差、互调失真等常见问题。
发表于: 10:32:33
信号调理电路要完成的功能是:程控放大,叠加直流分量。程控放大的作用是:当输入信号的幅度很小的时候就需要对输入信号进行放大,使得被测信号可以在LCD上尽可能清楚的显示出来。
发表于: 11:05:49
我们在前两篇文章中介绍了示波器的波形抽取模式和内插模式,用户可以根据需要提高或者降低波形采样率,更好地还原信号。这篇文章我们将讨论示波器如何针对多次采集的波形通过适当算法产生新的波形,获得特别的应用价值。
发表于: 11:04:30
ADI专利的容性可编程增益放大器(PGA)相比传统的阻性PGA具有更佳的性能,包括针对模拟输入信号的更高共模电压抑制能力。
发表于: 08:20:36
内存报价水涨船高,三星电子(Samsung Electronics)半导体部门和SK海力士(SK Hynix)上半年大赚一票,但韩媒警告,当前的繁荣景象恐怕只是暂时性的,来自中国的隐忧,恐让南韩半导体业大受打击。
发表于: 11:07:43
张汝京1948年出生于江苏南京,第二年迁居台湾。1970年毕业于台湾大学,获得机械工程学士学位,并先后在纽约州立大学和南卫理公会大学分别获得工程科学硕士与电子工程博士学位。
发表于: 10:14:35
今天早上据外媒报道,武汉新芯因为发生厂区内的化学污染事件,虽未造成人员伤亡,但是造成NOR Flash产线的制程污染,导致产品出现异常情况。目前,在武汉新芯投片的台湾 NOR Flash厂商晶豪科,以及Cypress的产品都有可能受到影响,影响比例约占 Nor Flash 整体市场的 10%左右。
发表于: 09:42:58
近来,几乎所有知名科技公司都和东芝半导体传“绯闻”,东芝半导体到底有何吸引力让这么多大公司“趋之若鹜”,与非网小编给你细细解读。
发表于: 09:05:50
根据外电报导,武汉新芯因为发生厂区内的化学污染事件,虽然没有导致人员的伤亡问题,但是却造成生产制程上的污染,导致产品出现异常的状况。
发表于: 09:05:38
心动指数爆表的礼品 ……
鉴于在深度学习加速方面的独特优势,FPGA已成为眼下最受关注的深度学习加速芯片。而Intel收购FPGA厂商Altera、亚马逊、腾讯、阿里等先后推出FPGA公有云,更使得“FPGA+深度学习”应
20:00:00作为下一代通用设备接口,USB Type-C越来越普及。但作为工程师,是否读完协议还是会有一些困惑?在应用中遇到一些问题也难以找到答案?想找一些经典设计案例分析而无处寻觅?Cypress应用工程师申晓
本系列课程主要围绕嵌入式研发工程师”众所周知”的从业历程分享进行,从线上实习到研发总监的各类项目工作经验分享。通过交流让大家了解相关的技术以及那个时代研发的部分情况,古今一辙,抛砖引玉,给人以灵感
09:00:00MAPS开发套件、S32K144、LPC54110,NXP的这场直播除了干货外还有超多福利放送!据美国知名分析机构IHS预测,2020年,全球物联网设备将达到307亿。如此爆发性的增长对物联网设备开发
夏日炎炎,来一波清凉的姿态吧!
项目、代码、姿态统统来一波?
小小姿态任我行!
接触电子设计已有两年多的时间,期间做过大大小小的项目10余个,虽不是高手,但也有一定经验。本节课,还想和大家分
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号博客访问: 523446
博文数量: 847
博客积分: 425
博客等级: 下士
技术积分: 1419
注册时间:
对技术执着
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
原文地址: 作者:
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。
共享资源,欢迎转载:
一、开发环境
主 &机:VMWare--Fedora 9
开发板:Mini2440--64MB Nand, Kernel:2.6.30.4
编译器:arm-linux-gcc-4.3.2
二、硬件原理分析&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& S3C2440内部ADC结构图
我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDAT0),然后ADCDAT0中的数据可以通过中断或查询的方式来访问。对于ADC的各寄存器的操作和注意事项请参阅数据手册。
上图是mini2440上的ADC应用实例,开发板通过一个10K的电位器(可变电阻)来产生电压模拟信号,然后通过第一个通道(即:AIN0)将模拟信号输入ADC。
三、实现步骤
ADC设备在Linux中可以看做是简单的字符设备,也可以当做是一混杂设备(misc设备),这里我们就看做是misc设备来实现ADC的驱动。注意:这里我们获取AD转换后的数据将采用中断的方式,即当AD转换完成后产生AD中断,在中断服务程序中来读取ADCDAT0的第0-9位的值(即AD转换后的值)。
1、建立驱动程序文件my2440_adc.c,实现驱动的初始化和退出,代码如下:
#include &linux/errno.h&#include &linux/kernel.h&#include &linux/module.h&#include &linux/init.h&#include &linux/input.h&#include &linux/serio.h&#include &linux/clk.h&#include &linux/miscdevice.h&#include &asm/io.h&#include &asm/irq.h&#include &asm/uaccess.h&/*定义了一个用来保存经过虚拟映射后的内存地址*/static void __iomem *adc_base;/*保存从平台时钟队列中获取ADC的时钟*/static struct clk *adc_clk;/*申明并初始化一个信号量ADC_LOCK,对ADC资源进行互斥访问*/DECLARE_MUTEX(ADC_LOCK);static int __init adc_init(void){&&&&int ret;&&&&/*从平台时钟队列中获取ADC的时钟,这里为什么要取得这个时钟,因为ADC的转换频率跟时钟有关。&&&&系统的一些时钟定义在arch/arm/plat-s3c24xx/s3c2410-clock.c中*/&&&&adc_clk = clk_get(NULL, "adc");&&&&if (!adc_clk) &&&&{&&&&&&&&/*错误处理*/&&&&&&&&printk(KERN_ERR "failed to find adc clock source\n");&&&&&&&&return -ENOENT;&&&&}&&&&/*时钟获取后要使能后才可以使用,clk_enable定义在arch/arm/plat-s3c/clock.c中*/&&&&clk_enable(adc_clk);&&&&/*将ADC的IO端口占用的这段IO空间映射到内存的虚拟地址,ioremap定义在io.h中。&&&& 注意:IO空间要映射后才能使用,以后对虚拟地址的操作就是对IO空间的操作,&&&& S3C2410_PA_ADC是ADC控制器的基地址,定义在mach-s3c2410/include/mach/map.h中,0x20是虚拟地址长度大小*/&&&&adc_base = ioremap(S3C2410_PA_ADC, 0x20);&&&&if (adc_base == NULL) &&&&{&&&&&&&&/*错误处理*/&&&&&&&&printk(KERN_ERR "Failed to remap register block\n");&&&&&&&&ret = -EINVAL;&&&&&&&&goto err_noclk;&&&&}&&&&/*把看ADC注册成为misc设备,misc_register定义在miscdevice.h中&&&& adc_miscdev结构体定义及内部接口函数在第②步中讲,MISC_DYNAMIC_MINOR是次设备号,定义在miscdevice.h中*/&&&&ret = misc_register(&adc_miscdev);&&&&if (ret) &&&&{&&&&&&&&/*错误处理*/&&&&&&&&printk(KERN_ERR "cannot register miscdev on minor=%d (%d)\n", MISC_DYNAMIC_MINOR, ret);&&&&&&&&goto err_nomap;&&&&}&&&&printk(DEVICE_NAME " initialized!\n");&&&&return 0;//以下是上面错误处理的跳转点err_noclk:&&&&clk_disable(adc_clk);&&&&clk_put(adc_clk);err_nomap:&&&&iounmap(adc_base);&&&&return ret;}static void __exit adc_exit(void){&&&&free_irq(IRQ_ADC, 1);&&&&/*释放中断*/&&&&iounmap(adc_base);&&&&&&&/*释放虚拟地址映射空间*/&&&&if (adc_clk)&&&&&&&&&&&& /*屏蔽和销毁时钟*/&&&&{&&&&&&&&clk_disable(adc_clk);&&&&&&&&&&&&clk_put(adc_clk);&&&&&&&&adc_clk = NULL;&&&&}&&&&misc_deregister(&adc_miscdev);/*注销misc设备*/}/*导出信号量ADC_LOCK在触摸屏驱动中使用,因为触摸屏驱动和ADC驱动公用&&相关的寄存器,为了不产生资源竞态,就用信号量来保证资源的互斥访问*/EXPORT_SYMBOL(ADC_LOCK);module_init(adc_init);module_exit(adc_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Huang Gang");MODULE_DESCRIPTION("My2440 ADC Driver");
2、adc_miscdev结构体定义及内部各接口函数的实现,代码如下:
#include &plat/regs-adc.h&/*设备名称*/#define DEVICE_NAME&&&&"my2440_adc"/*定义并初始化一个等待队列adc_waitq,对ADC资源进行阻塞访问*/static DECLARE_WAIT_QUEUE_HEAD(adc_waitq);/*用于标识AD转换后的数据是否可以读取,0表示不可读取*/static volatile int ev_adc = 0;/*用于保存读取的AD转换后的值,该值在ADC中断中读取*/static int adc_data;/*misc设备结构体实现*/static struct miscdevice adc_miscdev = {&&&&.minor&&&= MISC_DYNAMIC_MINOR,&/*次设备号,定义在miscdevice.h中,为255*/&&&&.name&&&&= DEVICE_NAME,&&&&&&&&/*设备名称*/&&&&.fops&&&&= &adc_fops,&&&&&&&&&&/*对ADC设备文件操作*/};/*字符设备的相关操作实现*/static struct file_operations adc_fops = {&&&&.owner&&&&= THIS_MODULE,&&&&.open&&&&&= adc_open,&&&&.read&&&&&= adc_read,&&&&&&&&.release&&= adc_release,};/*ADC设备驱动的打开接口函数*/static int adc_open(struct inode *inode, struct file *file){&&&&int ret;&&&&/*申请ADC中断服务,这里使用的是共享中断:IRQF_SHARED,为什么要使用共享中断,因为在触摸屏驱动中&&&& 也使用了这个中断号。中断服务程序为:adc_irq在下面实现,IRQ_ADC是ADC的中断号,这里注意:&&&& 申请中断函数的最后一个参数一定不能为NULL,否则中断申请会失败,如果中断服务程序中用不到这个&&&& 参数,就随便给个值就好了,我这里就给个1*/&&&&ret = request_irq(IRQ_ADC, adc_irq, IRQF_SHARED, DEVICE_NAME, 1);&&&&if (ret) &&&&{&&&&&&&&/*错误处理*/&&&&&&&&printk(KERN_ERR "IRQ%d error %d\n", IRQ_ADC, ret);&&&&&&&&return -EINVAL;&&&&}&&&&return 0;}/*ADC中断服务程序,该服务程序主要是从ADC数据寄存器中读取AD转换后的值*/static irqreturn_t adc_irq(int irq, void *dev_id){&&&&/*保证了应用程序读取一次这里就读取AD转换的值一次,&&&& 避免应用程序读取一次后发生多次中断多次读取AD转换值*/&&&&if(!ev_adc) &&&&{&&&&&&&&/*读取AD转换后的值保存到全局变量adc_data中,S3C2410_ADCDAT0定义在regs-adc.h中,&&&&&&&& 这里为什么要与上一个0x3ff,很简单,因为AD转换后的数据是保存在ADCDAT0的第0-9位,&&&&&&&& 所以与上0x3ff(即:)后就得到第0-9位的数据,多余的位就都为0*/&&&&&&&&adc_data = readl(adc_base + S3C2410_ADCDAT0) & 0x3ff;&&&&&&&&/*将可读标识为1,并唤醒等待队列*/&&&&&&&&ev_adc = 1;&&&&&&&&wake_up_interruptible(&adc_waitq);&&&&}&&&&return IRQ_HANDLED;}/*ADC设备驱动的读接口函数*/static ssize_t adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos){&&&&/*试着获取信号量(即:加锁)*/&&&&if (down_trylock(&ADC_LOCK)) &&&&{&&&&&&&&return -EBUSY;&&&&}&&&&if(!ev_adc)/*表示还没有AD转换后的数据,不可读取*/&&&&{&&&&&&&&if(filp-&f_flags & O_NONBLOCK)&&&&&&&&{&&&&&&&&&&&&/*应用程序若采用非阻塞方式读取则返回错误*/&&&&&&&&&&&&return -EAGAIN;&&&&&&&&}&&&&&&&&else/*以阻塞方式进行读取*/&&&&&&&&{&&&&&&&&&&&&/*设置ADC控制寄存器,开启AD转换*/&&&&&&&&&&&&start_adc();&&&&&&&&&&&&/*使等待队列进入睡眠*/&&&&&&&&&&&&wait_event_interruptible(adc_waitq, ev_adc);&&&&&&&&}&&&&}&&&&/*能到这里就表示已有AD转换后的数据,则标识清0,给下一次读做判断用*/&&&&ev_adc = 0;&&&&/*将读取到的AD转换后的值发往到上层应用程序*/&&&&copy_to_user(buffer, (char *)&adc_data, sizeof(adc_data));&&&&/*释放获取的信号量(即:解锁)*/&&&&up(&ADC_LOCK);&&&&return sizeof(adc_data);}/*设置ADC控制寄存器,开启AD转换*/static void start_adc(void){&&&&unsigned int tmp;&&&&tmp = (1 && 14) | (255 && 6) | (0 && 3);/* 0 1
0 0 0 */&&&&writel(tmp, adc_base + S3C2410_ADCCON); /*AD预分频器使能、模拟输入通道设为AIN0*/&&&&tmp = readl(adc_base + S3C2410_ADCCON);&&&&tmp = tmp | (1 && 0);&&&&&&&&&&&&&&&& /* 0 1
0 0 1 */&&&&writel(tmp, adc_base + S3C2410_ADCCON); /*AD转换开始*/}/*ADC设备驱动的关闭接口函数*/static int adc_release(struct inode *inode, struct file *filp){&&&&return 0;}
注意:在上面实现的每步中,为了让代码逻辑更加有条理和容易理解,就没有考虑代码的顺序,比如函数要先定义后调用。如果要编译此代码,请严格按照C语言的规范来调整代码的顺序。
3、编写用户应用程序测试my2440_adc驱动。建立应用程序adc_test.c,代码如下:
#include &stdio.h&#include &stdlib.h&#include &errno.h&int main(int argc, char **argv){&&&&int fd;&&&&//以阻塞方式打开设备文件,非阻塞时flags=O_NONBLOCK&&&&fd = open("/dev/my2440_adc", 0);&&&&if(fd & 0)&&&&{&&&&&&&&printf("Open ADC Device Faild!\n");&&&&&&&&exit(1);&&&&}&&&&while(1)&&&&{&&&&&&&&int ret;&&&&&&&&int data;&&&&&&&&&&&&&&&&//读设备&&&&&&&&ret = read(fd, &data, sizeof(data));&&&&&&&&if(ret != sizeof(data))&&&&&&&&{&&&&&&&&&&&&if(errno != EAGAIN)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&printf("Read ADC Device Faild!\n");&&&&&&&&&&&&}&&&&&&&&&&&&continue;&&&&&&&&}&&&&&&&&else&&&&&&&&{&&&&&&&&&&&&printf("Read ADC value is: %d\n", data);&&&&&&&&}&&&&}&&&&close(fd);&&&&return 0;}
4、将驱动程序下载挂载到内核,下载应用程序到开发板上后,运行应用程序,扭动mini2440开发板上的定位器,可以观察到ADC转换值的变化,证明驱动程序工作正常。效果图如下:
阅读(183) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。在电子工程世界为您找到如下关于“关于ADC”的新闻
关于ADC资料下载
【设计】基于Mini51板的数字示波器设计.doc
关于Mini51板LCD编址问题说明.doc
关于STC单片机在板下载编程.doc
关于STC单片机软复位下载AUTO_ISP.doc
关于教程的说明.txt
基于Mini51b的MP3播放器.doc
第一篇 Mini51单片机CPLD...
变压器用于信号隔离,并且将单端信号转换成差分信号。当在高速模数转换器(ADC)前端电路中使用变压器时常常忽略的一个问题是变压器绝非理想器件。任何由变压器引起的输入失衡都会使输入的正弦信号变成非理想的正弦信号波形传送给ADC的输入端,从而导致ADC的总体性能不如其它方式耦合到ADC的性能。本文讨论了变压器的输入失衡对ADC性能造成的影响,并且提供了实现改进电路的实例。关于变压器许多制造商提供的...
关于中国移动ADC业务应用培训的材料,对于申请ADC业务会有所帮助...
关于2410下面的ADC驱动采集,已经验证过,可以编译采集,是基于2.4内核上面的,2.6的只要改动一下就可以使用...
& 本文是围绕着中频数字收发信机的设计这一主题展开的。首先是关于2Mbps码率PCM/FM遥测数字接收机设计问题,主要包括三个研究点:1)提出了一种高效的数字FM解调算法;2)研究了PCM/FM信号的同步技术,包括载波同步和PCM码同步两方面,提出了一种载波频偏抑制的新方法:3)采用高速ADC,专用数字下变频器件(DDc)和FPGA设计和实现了PCM/FM中频数字化接收机,对其性能...
关于用msp430f4xx系列显示和adc源码...
逐次逼近型(SAR) ADC提供高分辨率、出色的精度和低功耗特性。一旦选定一款精密SAR ADC,系统设计师就必须确定获得最佳结果所需的支持电路。需要考虑的三个主要方面是:模拟输入信号与ADC接口的前端、基准电压源和数字接口。本文将重点介绍前端设计的电路要求和权衡因素。关于其它方面的有用信息,包括具体器件和系统信息,请参阅数据手册和本文的参考文献。……...
等形状的波形,频率和幅度可调。不同的波形主要是由输入DAC0832的不同规律的数据,所以在软件设计是主要是构造各种波形的数据表格。方波只需要控制输出高低电平的时间,三角波的表格可以由数字量的增减来控制,产生正弦波关于构造一个正弦函数数值表,通过查该函数表来实现波形的输出。波形的频率控制是通过对输出数据的时间间隔控制。幅度是通过改变输出数据的大小来控制的。为了程序实现方便,可以把每种波形的数据表构造...
ADC接口编程452
附录A IAR Embedded Workbench设备支持列表
附录B 关于随书配套光盘和J-Link仿真器
参考文献......
需要考虑的问题
3.17.6USB寄存器描述
3.18模/数转换器(ADC)
3.18.1概述
3.18.2主要特性
3.18.3引脚描述
3.18.4功能描述
3.18.5校准
3.18.6数据对齐
3.18.7基于通道的可编程的采样时间
3.18.8外部触发转换
3.18.9DMA请求
3.18.10双ADC模式...
关于ADC相关帖子
2通道CAN接口
3通道高速SPI接口
2组McBSP接口
4路通用串行接口(SCI/UART)
2路IIC接口
12位DAC接口
24路PWM接口
6路增强型eCAP接口
可满足工业级应用
优先级。有一个频率是400Hz的快速循环(fast_loop()),姿态控制任务就放在这里里面。关于APM的运行流程我这里贴一张官方的图,如下: & && &&&APM初始化后,进入主循环,主循环运行频率为400Hz,在任务调度中有各个任务的调度,任务后台一直在读取传感器,包括:惯性传感器、气压计和GPS等;然后将数据进行扩展卡尔曼滤波解...
多通道循环采样模式
采样6个以后我将ENC置0
为什么AD还是在采样?
求助大神!关于AD采样停止的问题 你确定你的关闭的程序执行了吗?跟踪调试一下,看看那个关闭语句是否执行了
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2176684&ptid=534580][color=#999999]qwerghf...
& &在做毕业设计,在软件部分,涉及到一个ADC中断程序,指导老师说没有听说过AD转换有中断的。本人特意上网查了下,明明有的。请问我该怎么向老师解释清楚呢???(本人的设计通过单片机控制升压斩波电路调节输出电压的移动电源设计,小白一个,没好好学,不要喷我啊大神)
关于STC12C5A60S2单片机的AD转换中断程序 你们老师菜啊,单片机内部adc都是有中断的,转换完成中断。...
关于MSP430F5529的ADC数据读取问题 好吧,发完贴之后问题就解决了,不知道什么回事,也许是玄学吧{:1_98:}
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2175252&ptid=533949][color=#999999]飞马君 发表于
10:58[/color][/url...
计划 第三篇 初学总结及功能试玩wugx第五篇 Sensortile评测----平坦度测量之42步进电机调试wugxST sensortile评测分享计划 终结篇 之 蓝牙协议略读及sensortile可剪裁思考wugx平坦度测量工具设计方案---没时间做完,只能提这点东西了wugx求助:sensortile固件有没有ADC的简单例子?wugx(已解决)单步调试能亮灭,run就不行wugx【ST...
@wugx平坦度测量工具设计方案---没时间做完,只能提这点东西了@wugx求助:sensortile固件有没有ADC的简单例子?@wugx(已解决)单步调试能亮灭,run就不行@johnrey【ST AMG SensorTile开发大赛 健身小管家】01 ST家的BLE软硬件产品初探@johnrey【ST AMG SensorTile开发大赛 健身小管家】02 ALLMEMS1试用...
1、引言& && &近年来无人机(本文指民用多轴飞行器)正以空前的速度普及,由此引发的关于安全的忧虑日益增多。许多有关部门甚至个人都希望采取一些措施,阻止无人机飞临敏感区域。为了达到这个目的可以采用很多方法,比如训练老鹰飞去抓捕。除了这类眼球效应大于实用的方法,最实用、性价比最高的方法莫过于无线电干扰。目前所有的民用无人机都需要用到无线电技术来实现定位...
、STM32L452的SPI所支持的最大传输速率是多少?
D:40 Mbits/s
6、STM32L452R I2C所支持的最高传输速率是多少?
D:1000kbit/s
7、STM32L452的ADC在分辨率为12位时的最大采样率为?
D:5.33Msps
8、关于内置于STM32L452中的DFSDM模块的描述,错误的是哪一项?
C:可以与PDM麦克风连接,实现从PCM到PDM的转换
应该都是正确的,可以私信告诉我那 ...[/quote]
第二关的第二题,关于L452的ADC在分辨率为12位的时候,最大采样率的问题,答案可参见数据手册的3.15节。
如果现在支付的话,需要支付64E金币,楼主确定吗?
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2171389&ptid=531732...
关于ADC视频
关于ADC创意
你可能感兴趣的标签
热门资源推荐}

我要回帖

更多关于 嵌入式是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信