打印
[MCU]

多通道采集是如何实现的

[复制链接]
1628|56
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangchui|  楼主 | 2020-10-20 23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例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]他们相应的数组里么,不是的话多通道采集是如何实现的。

使用特权

评论回复

相关帖子

沙发
jlyuan| | 2020-10-20 23:06 | 只看该作者
建议楼主先看看教程://bbs.21ic.com/icview-332268-1-1.html

使用特权

评论回复
板凳
huangchui|  楼主 | 2020-10-20 23:09 | 只看该作者
里面没有我要的

使用特权

评论回复
地板
wuhany| | 2020-10-20 23:13 | 只看该作者
注意讲ADC10采样的部分

使用特权

评论回复
5
wyjie| | 2020-10-20 23:19 | 只看该作者
就是顺序读取寄存器地址。

使用特权

评论回复
6
shimx| | 2020-10-20 23:25 | 只看该作者
这个也不难用,参考例程就行了。

使用特权

评论回复
7
huangchui|  楼主 | 2020-10-20 23:28 | 只看该作者
嗯,我知道了,多谢啊

使用特权

评论回复
8
langgq| | 2020-10-20 23:31 | 只看该作者
使用的是什么芯片呢?

使用特权

评论回复
9
wenfen| | 2020-10-20 23:34 | 只看该作者
ADC10模块是MSP430 MCU内部的一个高性能、10位的模数转换器

使用特权

评论回复
10
zwll| | 2020-10-20 23:40 | 只看该作者
对选定的通道进行多次转换,直到关闭该功能或ENC=0。

使用特权

评论回复
11
pengf| | 2020-10-20 23:44 | 只看该作者

设置具体模式
输入模拟信号

使用特权

评论回复
12
houcs| | 2020-10-20 23:48 | 只看该作者
CONSEQ——转换模式选择位

0:单通道单次转换模式
1:序列通道单次转换模式
2:单通道多次转换模式
3:序列通道多次转换模式

使用特权

评论回复
13
ousj| | 2020-10-20 23:52 | 只看该作者

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
}

使用特权

评论回复
14
wangpe| | 2020-10-20 23:56 | 只看该作者
ADC12模块是一个转换速度高达 200ksps、采样时间可编程 的12-bit逐次逼近型模数转换器。

使用特权

评论回复
15
juventus9554| | 2020-11-2 20:16 | 只看该作者

/*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
}

使用特权

评论回复
16
renyaq| | 2020-11-2 20:23 | 只看该作者
MSP430 ADC12 采样转换模式

使用特权

评论回复
17
ousj| | 2020-11-2 20:27 | 只看该作者

多通道也是顺序转的。

使用特权

评论回复
18
guoyt| | 2020-11-2 20:31 | 只看该作者

要实现最最最基本的ADC转换

使用特权

评论回复
19
zhanglli| | 2020-11-2 20:37 | 只看该作者
是msp430吗?

使用特权

评论回复
20
bqyj| | 2020-11-2 20:40 | 只看该作者
当多通道采样时,先采高的通道,再采低的通道。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝