[技术求助] 多通道采集是如何实现的

[复制链接]
691|50
 楼主 | 2018-7-10 19:54 | 显示全部楼层 ||阅读模式
例2:用序列通道采样模式对通道A1、A5、A7采样,将采样结果在中断中读出,并将A1、A5、A7采样的结果分别存入ADC10_A1[]、ADC10_A5[]和ADC10_A7[]数组中。选择SMCLK无分频作为采样时钟,选择内部参考源1.5V,ADC10SC触发采样,采样时间设置为16个采样时钟周期。

unsigned int u=7;
unsigned int ADC_timers =0;
unsigned int ADC_Result[8];
unsigned int ADC10_A1[20];
unsigned int ADC10_A5[20];
unsigned int ADC10_A7[20];
void main ()
{WDTCTL=WDTPW+WDTHOLD;
ADC10CTL1 |= CONSEQ_1;
ADC10CTL0 |= SREF_1+REFON+ADC10IE;//选择内部参考源1.5V,开启AD允许中断
ADC10CTL0 |= ADC10SHT_2+MSC; //打开AD转换,过采样率设置为16个采样周期
ADC10CTL1 |= ADC10SSEL_3+SHS_0; //选择SMCLK无分频作为采样时钟,ADC10SC触发采集
ADC10CTL1 |=INCH_7; //最高通道设为通道7
ADC10CTL0 |= ADC10ON; //打开ADC10模块
ADC10AE0 |= 0xa1; //开启通道A1、A5、A7
__bis_SR_register(GIE); //开总中断
while(1)
{
ADC10CTL0 |=ENC+ADC10SC; //开始转换
for(int i=0;i<10000;i++); //加入延时等待ADC10一轮序列通道采样完成}}
/****************************************************************************
* 名 称:
* 功 能:AD采样中断,没完成一次采样中断一次,将采样值存入数组
AD_Result[10]然后将想要的采样值读出**********************************************

#pragma vector=ADC10_VECTOR__interrupt
void ADC10_ISR (void)
{
ADC_Result[u]=ADC10MEM;
u--;
if(u>8)
{
u=7;
ADC10_A7[AD_timers]=ADC_Result[7];
ADC10_A5[AD_timers]=ADC_Result[5];
ADC10_A1[AD_timers]=ADC_Result[1];
ADC_timers++;
}
}
*******************************************************************我想利用这段程序改成多通道(A1、3、5、7)各采集20次然后取平均,ADC_Result[u]=ADC10MEM这句程序是每当中断的时候依次采集A1、3、5、7通道,然后再储存到ADC_Result[u]他们相应的数组里么,不是的话多通道采集是如何实现的。
| 2018-7-10 19:56 | 显示全部楼层
建议楼主先看看教程:http://bbs.21ic.com/icview-332268-1-1.html
 楼主 | 2018-7-10 19:58 | 显示全部楼层
里面没有我要的
| 2018-7-10 20:01 | 显示全部楼层
注意讲ADC10采样的部分
| 2018-7-10 20:03 | 显示全部楼层

就是顺序读取寄存器地址。
| 2018-7-10 20:06 | 显示全部楼层
这个也不难用,参考例程就行了。
 楼主 | 2018-7-10 20:09 | 显示全部楼层
嗯,我知道了,多谢啊
| 2018-7-13 13:07 | 显示全部楼层
使用的是什么芯片呢?
| 2018-7-13 13:07 | 显示全部楼层
ADC10模块是MSP430 MCU内部的一个高性能、10位的模数转换器
| 2018-7-13 13:08 | 显示全部楼层
对选定的通道进行多次转换,直到关闭该功能或ENC=0。
| 2018-7-13 13:08 | 显示全部楼层
设置具体模式
输入模拟信号
| 2018-7-13 13:09 | 显示全部楼层
CONSEQ——转换模式选择位

0:单通道单次转换模式
1:序列通道单次转换模式
2:单通道多次转换模式
3:序列通道多次转换模式
| 2018-7-13 13:09 | 显示全部楼层
void ADC_Init()
{
    P6SEL = 0x0F;                             // Enable A/D channel inputs
    ADC12CTL0 = ADC12ON+MSC+SHT0_8;           // Turn on ADC12, extend sampling time to avoid overflow of results
    ADC12CTL1 = ADC12SSEL_2+CSTARTADD_0+SHP+CONSEQ_3;// Use sampling timer, repeated sequence
    ADC12MCTL0 =SREF_0 + INCH_0;              // ref+=AVcc, channel = A0
    ADC12MCTL1 =SREF_0 + INCH_1+EOS;          // ref+=AVcc, channel = A1, end seq.
    ADC12IE = 0x02;                           // Enable ADC12IFG.1
    ADC12CTL0 |= ENC;                         // Enable conversions
}
| 2018-7-13 13:10 | 显示全部楼层
ADC12模块是一个转换速度高达 200ksps、采样时间可编程 的12-bit逐次逼近型模数转换器。
| 2018-7-13 13:10 | 显示全部楼层
/*A0 A3两通道序列采样*/
void Init_ADC10(void)
{
ADC10CTL1 = INCH_3 + CONSEQ_1;// A3/A0,基本的配置
ADC10CTL0 = SREF_0 + ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
__delay_cycles(30);
ADC10AE0 |= BIT0 + BIT3;// P1.0,P1.3 ADC10 option select
ADC10DTC0 |= ADC10CT;//ADC10 continuous transfer使能DTC传输
ADC10DTC1 = 0x04; // 2 conversions
ADC10CTL0 &= ~ENC;//关闭ADC10
}
| 2018-7-13 13:11 | 显示全部楼层
MSP430 ADC12 采样转换模式
| 2018-7-13 13:12 | 显示全部楼层
多通道也是顺序转的。
| 2018-7-13 13:12 | 显示全部楼层
要实现最最最基本的ADC转换
| 2018-7-13 13:12 | 显示全部楼层
是msp430吗?
| 2018-7-13 13:12 | 显示全部楼层
当多通道采样时,先采高的通道,再采低的通道。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表