概述
SAR ADC支持CPU触发、PWM触发及EXTIO触发。通过将SAR ADC CTRL寄存器中TRIG进行设置,该设置对所有选中通道均有效,当不同通道需要不同触发方式时,需要在采样间隔配置TRIG位进行切换。
电机框架搭建:ADC(双电阻采样)
PWM触发操作方式如下:
PWM配置所需模式,将SARADC的CTRL寄存器中TRIG方式设置为PWM触发。每路PWM对应一个ADTRG寄存器值,当PWM计数到指定值,可触发ADC进行采样。PWM在任意模式下可以触发ADC,每一路输出独立的ADC触发信号,且每个周期可以设置1个ADC触发点,每个PWM只输出一个触发信号,不区分A.B分别触发。
具体配置方式如下(以ADTRG0A0为例):
1、PWM配置所需模式
2、配置PWM模块ADTRG0A0数值,该数值为触发延时时长,在中心对称模式下,前半周期从周期起始记,后半周期采样点与前半周期中心对称
3、使能ADTRG0A0寄存器EN位
4、配置ADC寄存器中TRIG寄存器A0对应位,确认该通道未被屏蔽
5、使能PWM模块EN位,当计数值到达ADTRG0A0设置值时,触发ADCCTRL寄存器中选中的通道(CHx)进行采样,采样完成后,将产生EOC标志位,并产生ADC中断
程序中配置如下(PWM触发ADC转换):
//ADC初始化
void SVPWM_ADC_Init(void)
{
ADC_InitStructure ADC_initStruct;
PORT_Init(PORTA, PIN8, PORTA_PIN8_ADC0_CH7, 0); //PA.8 =》 ADC0.CH7
PORT_Init(PORTB, PIN9, PORTB_PIN9_ADC0_CH8, 0); //PB.9 =》 ADC0.CH8
ADC_initStruct.clk_src = ADC_CLKSRC_HRC_DIV8;
ADC_initStruct.clk_div = 8;
ADC_initStruct.ref_src = ADC_REFSRC_VDD; //电压基准选择VDD
ADC_initStruct.channels = ADC_CH7 | ADC_CH8; //通道初始化
ADC_initStruct.samplAvg = ADC_AVG_SAMPLE8;
ADC_initStruct.trig_src = ADC_TRIGGER_PWM0; //设置PWM0触发ADC转换
ADC_initStruct.Continue = 0;//非连续模式,即单次模式
ADC_initStruct.EOC_IEn = ADC_CH8; //设置CH8为中断
ADC_initStruct.OVF_IEn = 0;
ADC_Init(ADC0, &ADC_initStruct);//配置ADC
ADC0-》CHSEL = ((ADC_CH8 《《 ADC_CHSEL_PWM_Pos) | (ADC_CH7 《《 ADC_CHSEL_PWM_Pos)); //设置PWM触发CH7、CH8通道转换
ADC_Open(ADC0);//使能ADC
}
//ADC中断
void ADC0_Handler(void)
{
ADC_IntEOCClr(ADC0, ADC_CH8); //清中断
while (!ADC_IsEOC(ADC0, ADC_CH8)); //等待通道8转换完成
ADC_Read(ADC0, ADC_CH7); //读取ADC值
ADC_Read(ADC0, ADC_CH8);
}
具体详情可登录华芯微特官网:http://www.synwit.cn/
编辑:jq
全部0条评论
快来发表一下你的评论吧 !