程序思路:使用TIM1的CC3事件触发ADC1连续采样5个并用DMA把数据存起来。
具体程序:
省略定时器程序
- ADC_DeInit(ADC1); //复位ADC1,将外设的全部寄存器重设为缺省值
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式
- ADC_InitStructure.ADC_ScanConvMode = ENABLE; //模数转换工作在通道扫描模式
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换模式
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC3; //选择定时器 1 的 CC1触发事件
- // ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //软件触发
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
- ADC_InitStructure.ADC_NbrOfChannel = 5; //顺序进行规则转换的ADC通道的数目//转换5个
- ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC1
- /*************************************转换5个电流************************************************/
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5); //电流
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_1Cycles5); //电流
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 3, ADC_SampleTime_1Cycles5); //电流
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 4, ADC_SampleTime_1Cycles5); //电流
- ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 5, ADC_SampleTime_1Cycles5); //电流
-
-
- ADC_ExternalTrigConvCmd(ADC1, ENABLE);//使能ADC1外部触发转换
-
- ADC_DMACmd(ADC1,ENABLE);//使能ADC1 DMA
-
- ADC_Cmd(ADC1, ENABLE); //使能ADC1
- /*************************校准ADC1****************************************/
- ADC_ResetCalibration(ADC1); //使能复位校准
- while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
- ADC_StartCalibration(ADC1); //开启AD校准
- while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
复制代码
问题:
上面的程序转换出来的5个结果中疑似第一个是正确的其他都是错误的
但是如果改为使用软件触发转换结果是正确的(相同的采样频率,在定时器的更新中断里延时一段时间开启ADC转换,模拟定时器的CCR3事件)
软件触发和定时器触发程序的不同点在于
- // ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC3; //选择定时器 1 的 CC1触发事件
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //软件触发
- // ADC_ExternalTrigConvCmd(ADC1, ENABLE);//使能ADC1外部触发转换
复制代码
另外:
如果使用定时器触发ADC转换一个那么数据是正确的
- ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目//转换1个
复制代码
请问是不是外部触发的程序有所遗漏导致数据不正常?
那么间接的原因是因为ADC切换、建立稳定采样电压需要时间?所以上升沿的话白白消耗了中间低电平的时间,本来这个时间正好用于ADC建立?
一周热门 更多>