打印
[活动专区]

【AC7811开发板试用活动】ACMP学习之Init代码注释、实验初步

[复制链接]
839|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
【AC7811开发板试用活动】ACMP学习之初始化代码注释、实验初步(含PWM输入捕获)

此贴是本人AC7811测试报告的第三部分(9)。
第一部分(1-5),请点链接:https://bbs.21ic.com/icview-2873036-1-1.html
第二部分(6-8),请点链接:https://bbs.21ic.com/icview-2875766-1-1.html



一、官方演示代码,其实用心良苦

首先,打开官方ACMP例程,ACMP初始化函数是这样写的:



发现代码有些繁琐。比如:
红色框所示:定义了一个ACMP_InitType类型的结构体指针,又定义了一个ACMP_InitType类型的结构体变量。
绿色框所示:定义了一个ACMP_DACType类型的结构体指针,又定义了一个ACMP_DACType类型的结构体变量。
然后把结构体变量的地址赋值给指针----变量地址不是可以直接使用吗?
蓝色框棕色框所示:既然可以在定义时直接给结构体赋初值,为什么又要用“结构体指针->成员”的方式赋值?
几乎每个例程都有这种情况。

为什么写得这么繁琐?其实想一想也就明白了:
写演示代码的工程师,其实用心良苦,Ta在告诉我们,“可以这样写,也可以那样写”。

这让我想起前几天看过的一个贴子,贴主问为什么这样写:
GPIO_SetFunc(49, 1);
而不是全部这样写:
GPIO_SetFunc(GPIO_PD1, 1);

其实,演示代码里面,展示各种写法,才更有启发性。
所以,应该表示感谢。


二、不必完全照抄官方演示代码

回到ACMP的初始化函数:
根据官方示例,我整理了以下几种初始化函数写法:



上图这种写法,直接在定义初始化结构体时赋初值,然后用取址作为参数初始化。



上图这种写法,可以单独修改结构体元素的值,但与图1的“结构体指针->成员”不同,用的是“结构体.成员”,
请对照图1和图3的紫色框所示。

其实写法当然不止这些。我的意思是,实际应用时,可以任意组合,而不是照抄官方演示代码。


三、ACMP的初始化步骤

ACMP初始化的过程主要分两部分:
先初始化比较器,再初始化内部DAC。
以下是我整理的初始化代码的注释:




四、官方手册ACMP部分有2处可能是疏漏

可能是疏漏,更可能是我没有完全理解:



上图红框内那句,可能是笔误。



上图表格中,缺少了ACMP0正常模式中断。
也可能是我走马观花看错了,请谅解!

五、一个未整理完成的实验

前些天,做了一个ACMP实验:零序线圈感应220V交流电,用比较器检测其尖峰值,当感应电压过500mV时,
比较器产生中断,在中断函数里翻转电平,生成与市电同频率的脉冲。并用一个PWM输入捕获功能,计算脉冲频率值。

因为零序线圈连接部分的电路还不完善,这个实验以后再继续。
先把实验过程中的一些图片,和源程序发出来吧。

下图是用到的零序线圈。中间穿过了220V市电的火线或零线(是或,不是和,图中2股导线是并联在一起的)。
PS:请注意用电安全!



下面3个图是实验现场。



下面3个图分别是:
直接用示波器测量零序感应电压波形;
用二极管半波整流后的波形;
半波整流后的波形(黄)和ACMP中断函数里生成的脉冲波形(绿)。




游客,如果您要查看本帖隐藏内容请回复



使用特权

评论回复

相关帖子

沙发
internally| | 2019-11-11 19:55 | 只看该作者
很好很强大!楼主厉害哇

使用特权

评论回复
板凳
csdnwzw| | 2019-11-21 15:43 | 只看该作者
PWM,一款强悍控制芯片的基础功能

使用特权

评论回复
地板
zhdm| | 2021-1-24 10:39 | 只看该作者
谢谢分享

使用特权

评论回复
5
cr315| | 2021-1-26 17:04 | 只看该作者
官方演示代码,其实用心良苦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

282

帖子

3

粉丝