大家好,前面发了两个帖子基本上在avr上开发入门了,有个3路ad采样的问题向大家再请教下
我用的是mage16,有一个传感器,分别3路连到PA0.PA1.PA2上,现在需要实时收集这个传感器的数据,看了下网上的资料
我在整理了下思路:
由ADC的中断启动 连续转换3个ADC通道的值
也就是按先后顺序读取ADCH和ADCL的值,再切换通道,依次分别读出各个通道的值
我这里有几个疑问:
1、这个中断是直接由ADC的中断启动还是用定时器中断启动,因为我要实时获取这个采样数据,所以是步是直接在ADC中断函数里操作就可以了?
2、关于采样频率,我的系统时钟是接了一个7.2328MHz的有源时钟,我看了下系统介绍,说采样频率可以到200KHz,那意思是我要采取32分频,我想要达到最大的采样频率,也就是从传感器中转换读取更多的数据,这个采样频率跟传感器是步是也有关系?
3、我以上的采样获取数据的 思路 对不对?谢谢大家指点!
------解决方案--------------------
这个是ADC转换结束中断,不是定时器中断,理论上采样率要>=2倍信号频率就行,对于一些变化缓慢的信号,比如测量温度,没必要那么高的采样率
------解决方案--------------------
如果是通过ADC采样,采样速度过高也没关系,最多就是传感器速度慢还没更新成新的数据,功能上是没问题的。
------解决方案--------------------
1. 是ADC转换完成的中断,跟定时器中断没有关系;数据可以在中断里读取并保存到一个全局变量里(要判断AD转换是否完成)
2. 采样频率是由你的系统时钟产生的,ADC模块的分频引资的大小决定了你的采样频率,设置一个合适的值就好,没必要设置到最大
另外,有的芯片的ADC模块是启动一次,转换一次,有的是启动之后,周期性转换,这个要看手册
------解决方案--------------------
其实这个要看lz需要对采集到的信号做怎样的后续处理有关系。
------解决方案--------------------
虽然这个AD型号我没用过,但是串口AD我用过好几种,我发表下我的意见:
1、中断是AD转换完成所产生的信号电平或信号沿,也就是对应于单偏机的外部中断。AD转换完成后产生的信 号(比如是高电平),其实这个时候进入中断函数不能直接读取数据,因为数据还没有进入数据寄存器,一般延时几个时钟就可以了,然后才可以通过串口读数据。我有基于430单片机的对7708和7705进行中断方式或等待方式读数据的程序,这个AD没做过。
2.采样频率的设置看你的信号了,看你的要求好像是要满高的速度的,这个时候要注意信号隔离和抑制工频干扰,如果精度要求不高的工频干扰的问题可以不考虑吧,我做的是16位高精度的所以考虑了这问题
3.补充下或许你会碰到这种问题。单通道读取没问题,但是序列通道读取时可能会发现许多通道干扰严重,这就要在切换通道检验后舍弃两个数据才是正确的数据,还有检验结束也会产生中断信号,采用中断读取时应该注意。
不知道你单片机怎么样,几十K的中断恐怕单片机会崩溃,如果带DMA资源的化建议使用DMA方式而不是中断方式读取。。。。。。。走了上课了