电机框架搭建:ADC(双电阻采样)

描述

概述

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分