概述
SAR ADC 支持CPU 触发、PWM 触发和EXTIO 触发。通过在SAR ADC CTRL 寄存器中设置TRIG,该设置对所有选定通道都有效。当不同通道需要不同的触发方式时,需要按采样间隔配置TRIG位进行切换。
电机框架结构:ADC(双电阻采样)
PWM触发操作方法如下:
PWM配置需要的模式,将SARADC的CTRL寄存器中的TRIG模式设置为PWM触发。每个PWM 对应一个ADTRG 寄存器值。当PWM计数到指定值时,即可触发ADC进行采样。 PWM可以在任何模式下触发ADC。每个通道输出独立的ADC触发信号,每个周期可设置一个ADC触发点。每个PWM只输出1个触发信号,不区分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初始化
无效SVPWM_ADC_Init(无效)
{
ADC_initStruct 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中断
无效ADC0_Handler(无效)
{
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