1、STM8的ADC介绍
使用模拟-数字转换器将模拟电压信号转换为数字值。具有28模拟通道可用。A / D转换可以在单个或连续模式下执行。
2、ADC 主要特点
•其配置的分辨率(12bit)
•模拟通道数量:
-中密度设备:
25个模拟通道:1快通道(1μs)+ 24慢通道
-低、中+和高密度设备:
28个模拟通道:4快通道(1μs)+ 24慢通道
•2内部通道连接到温度传感器和内部参考电压
•可配置的单个或连续转换
•Prescalable ADC时钟
•模拟看门狗
•独立中断生成转换末,监管机构或溢出事件
•多通道转换(扫描模式)
•数据完整性机制
•DMA功能
•可编程采样时间
•施密特触发器禁用功能
•转换时间可多达μs当SYSCLK = 16兆赫
•电压范围:1.8 V至3.6 V
3、ADC的框图
4、ADC寄存器
ADC_CR1 该寄存器
7位:overie:溢出中断使能;该位设置和清除软件,如果设置它使中断溢出事件生成
0:溢出中断禁用
1:溢出中断允许
位6:5 RES[1:0],可配置的ADC分辨率
00 :12位分辨率
01:10位分辨率
10:8位分辨率
11:6位分辨率
4位awdie:模拟看门狗中断使能
0:模拟看门狗中断禁止
1:模拟中断启用看门狗
3位:中断使能EOC
0:禁止EOC中断
1:使能EOC中断
2位转换模式
0:单次转换模式
1:连续转换模式
位1:ADC转换器 ON/OFF
0:失能ADC
1:使能ADC
5、ADC配置函数
PD6 对应ADC8通道
void ADC_Config(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
ADC_Cmd(ADC1, ENABLE);
ADC_ChannelCmd(ADC1, ADC_Channel_8, ENABLE);
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
ADC_SoftwareStartConv(ADC1);
ADC_VrefintCmd(ENABLE);
}
INTERRUPT_HANDLER(ADC1_COMP_IRQHandler, 18)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
uint16_t tmpreg = 0;
/* Get last ADC converted data.*/
tmpreg = (uint16_t)(ADC1->DRH);
tmpreg = (uint16_t)((uint16_t)((uint16_t)tmpreg << 8) | ADC1->DRL);
ADCdata =tmpreg;
//ADCdata = ADC_GetConversionValue(ADC1);
}
转换为mv电压值
//(R1 + R2 )/ R2 = (400K +1M)/ (1M) = 1.4K
// ADC_RATIO = Vref * R /4095 = 3.3 *1000(mv) *1400 /4095 =1128
#define ADC_Ratio ((uint16_t) 1128) //比率
/**********************************
* 功能:获取实际电压
* 参数:ADC_filter 获取电压值
* 返回值:实际电压值
***********************************/
int Get_Volt(void) { int PotVoltage ; PotVoltage = (uint16_t)((uint32_t)((uint32_t)ADCdata * (uint32_t)ADC_Ratio) / (uint32_t)1000); return PotVoltage; }