2.4 触发源
● 软件触发
● 来自事件链接控制器(ELC)的同步触发器
● 由外部触发引脚ADTRG0(单元0)和ADTRG1(单元1)异步触发
2.5 ADC转换时间
ADC时钟
ADC输入时钟ADCLK由PCLKC经过分频产生,最大值是四分频50MHz,PCLKA和PCLKC (ADCLK) 的分频比可以设置为 1:1, 2:1, 4:1, 8:1, 1:2, 1:4。
ADC转换时间
ADC允许的最大值频率值是50MHz,使用50 MHz的时候12-bit转换时间为0.4 μs。
2.6 数据寄存器
ADDRn寄存器是16位只读寄存器,用于存储AD转换结果。
以下条件决定了AD数据寄存器中的数据格式:
● AD数据寄存器格式选择位(ADCER.ADRFMT)的设置(左对齐或右对齐);
● AD转换精度 选择位(ADCER.ADPRC[1:0])中的设置(可选择12位、10位、8位。);
● 加法平均计数选择位(ADADC.ADC[2:0])的设置(1、2、3、4或16次);
● 设置平均模式启用位(ADADC.AVEE)(加法或平均)。
未选择AD转换值加法平均模式时:
表40.5显示了12位精度的位分配示例。
点击可查看大图
选择AD转换值平均模式时:
当A/ D转换值加法指定2次或4次时,可选择A/D转换值平均模式。这样可以提高A/D转换的有效位。
选择AD转换值相加模式时:
对于12位、10位、8位精度,可以在A/D转换值相加模式中选择1、2、3或4次。在该转换精度下A/D转换结果以2bit扩展值存储在A/D数据寄存器中。对于12位精度,在A/D转换值相加模式中也可以选择16次。在AD转换值相加模式中,这些寄存器指示值,通过在特定通道上添加A/D转换值获得。A/D转换结果以4bit扩展值存储在A/D数据寄存器中。
2.7 电压转换
模拟电压经过ADC转换后,是一个12位的数字值,如果通过串口以16进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。
设计原理图的时候会把ADC的输入电压范围设定在:0~3.3v,这时需要将采样的参考电压硬件VREFH0/VREFL0引脚分别接到VCC和VSS上,因为ADC是12位的,那么12位满量程对应的就是3.3V,12位满量程对应的数字值是:2^12。数值0对应的就是0V。如果转换后的数值为 X对应的模拟电压为Y,那么会有这么一个等式成立:2^12 / 3.3 = X / Y , Y = (3.3 * X ) / 2^12。这样便可以计算出对应采样的电压值了。
三
实现程序设计
3.1 硬件设计
如下图DEMO板上的ADC采样原理图P000端口连接在一个可调电位器上
3.2 软件设计
1
新建工程
如上图,1选择板上对应MCU型号,2处选择工程类型:e2 studio / IAR / Keil,然后默认下一步直到完成。
2
FSP配置
第一步选择并配置时钟,请确认板子上的外部时钟,当板子上的外部时钟为8M时,进行选择并按要求分配好对应的时钟。
依次点击 “Stacks” -> “Pins”-> “Peripherals” ->“ADC0” 来配置通道AN000对应的引脚为P000。如下图所示:
然后依次点击 “Stacks” ->“New Stack” -> “Analog” ->“ADC-DMAC Integration(r_adc)” 来配置ADC模块。如下图所示:
ADC的属性配置:
勾选“Input” -> “Channel Scan Mask” -> “Channel 0” 通道0,并设置中断函数名及优先级。“Interrupts” -> “Callback” & “Scan End interrupt Priority”
DMAC的属性设置:
设置中断函数名及优先级。
“Callback” & “Transfer End Interrupt Priority”
3
程序实现
外设初始化:
● ADC初始化
R_ADC_Open()为整个外设设置操作模式、触发源、中断优先级和配置。如果启用了中断,该函数将注册一个回调函数指针,以便在扫描完成时通知用户。
R_ADC_ScanCfg()配置ADC扫描参数,通道特定设置是在这个函数中设置的。
● DMA初始化
R_DMAC_Open()初始化DMAC函数。
R_DMAC_Enable()使能DMAC中断。
中断处理函数:
设置传输目的地址到DMA0_ADC0数据输入寄存器,然后开始数据传输。
DMA传输完成,记录传输次数。
hal_entry入口函数:
点击可查看大图
达到设定次数ADC_count再求平均值,当然DEMO也可以通过定时器进行更为精准的控制采样的间隔。
总结
当然DEMO还有更多要优化的地方,这里只学习FSP配置基础的功能样例,若有陈述不严谨之处,欢迎大家指正。谢谢!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !