AC7811-ACMP模拟比较器

news2024/11/22 21:59:46

在无感的BLDC方波控制中,AC7811没办法再直接通过PWDT模块检测霍尔信号了。

所以需要先进行ACMP模块的初始化配置,使能ACMP模块正常工作后,ACMP会对输入的三相反电动势与电机中电电压进行轮询模拟,得到各相反电动势过零点,进而模拟霍尔信号通过CTU输出至PWDT采集。

模块简介

ACMP 模块包括 ACMP0 和 ACMP1。

ACMP0 和 ACMP1 都包含一个比较器和一个 6 位数字模拟转换器(DAC)。模拟多路复用器(MUX)提供一个用于从六个通道中选择模拟输入信号的电路。一个通道由 6 位数字模拟转换器(DAC)提供,其他通道由外部输入提供。

ACMP0 的轮询模式和霍尔输出(Hall)功能专为电机应用而设计。ACMP1 没有轮询和霍尔(Hall)输出功能。

功能框图

普通模式

电路

检测引脚:PA8

被测引脚:PB10

软件

IO口配置

/**
 * GPIO_Init
 *
 * @param[in] void
 * @return void
 *
 * @brief GPIO端口初始化
 */
void GPIO_Init(void)
{
	GPIO_SetFunc(GPIO_PA8, 1);//PA8作为功能1 ADC_IN1
	GPIO_SetFunc(GPIO_PB10, 0);//PB10作为功能0,
	GPIO_SetDir(GPIO_PB10,1);//输出
	GPIO_SetPinValue(GPIO_PB10, 0);//输出低电平
}
ACMP初始化

/**
 * ACMP_Init
 *
 * @param[in] void
 * @return void
 *
 * @brief ACMP0模块初始化,
 */
 void ACMP0_Normal_Init(void)
 {
	  ACMP_InitType acmpConfig;
	  ACMP_DACType  acmpDACConfig;
	  
	  acmpConfig.posPin = ACMP_INPUT_EXT1;//正输通道选择
	  acmpConfig.negPin = ACMP_INPUT_DAC ;//负输入通道选择
	  acmpConfig.pollEn = 0;//不使能轮询模式
	  acmpConfig.intEn = ENABLE;//使能中断
	  acmpConfig.hyst = ACMP_HYST_20MV;//迟滞挡位选择
	  acmpConfig.edgeType = ACMP_INTERRUPT_EDGE_FALLING_RISING;//中断触发模式
	  acmpConfig.moduleEnable = ENABLE;//使能ACMP模块
	  ACMP_Init(ACMP_CHANNEL0,&acmpConfig);
	  NVIC_EnableIRQ(ACMP0_IRQn );
	  ACMP_SetCallBack(ACMP_CHANNEL0 , ACMP_CallBack);
	 
	  acmpDACConfig.val = 63;//dac范围0-63 输出电压值:(val/64)*ref
	  acmpDACConfig.ref = ACMP_DAC_REFERENCE_VDDA;//DAC参考源选择
	  acmpDACConfig.enable = ENABLE;//DAC输出使能
	  ACMP_SetDacValue(ACMP_CHANNEL0, &acmpDACConfig);
 }

ACMP0的中断回调

/**
 * ACMP_Callback
 *
 * @param[in]  none
 * @return    none
 *
 * @brief   ACMP0中断回调函数,读出数据输出,并翻转PB10端口
 */ 	
 uint8_t ACMPData =0;
void ACMP_CallBack(void)
{

	if(ACMP_GetFlag(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG)!=0)  //正常模式中断标志 
	{
		
		ACMP_ClrFlag(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG);//清中断标志
		ACMPData = (ACMP_GetOutputValue(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG))>>7;//读出ACMP0正常模式的输出值,正输入大于负输入,输出1,正输入小于负输入,输出1
		printf("data is %d\n",ACMPData );
		GPIO_SetPinValue(GPIO_PB10, ACMPData);//修改PB10输出电平
		
	}
}

实测

ACMP+:PA8-ACMP_IN1-ADC_IN1

ACMP-:内部的DAC 配置成63 代表5V

也就是说ADC_IN1通道采集到的电压>5V时,则输出为1

ACMPData = (ACMP_GetOutputValue(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG))>>7;//读出ACMP0正常模式的输出值,正输入大于负输入,输出1,正输入小于负输入,输出1

对于为什么要>>7右移7位,和ACMP0的数据寄存器有关,正常模式输出在第7位上,而读到的是整个DR寄存器的值,所以要进行移位。

发现板子引脚不对

历程中引脚和demo板不对应,进行修改

PA8改成了PC4,对应LED2,让其根据ACMP0采集到的信号进行翻转,点亮或者熄灭LED2。

ACMP-,内部DAC参考电压val修改成30,对应30/64*5V=2.34V

这样就可以使用GND和5V进行测试,观察输出的数值。

接5V时,5>2.34 输出为1;

接GND时,GND<2.34输出为0;

小结

普通模式,重点在于:正输入与负输入的选择;DAC输出电平的设置。

轮询模式

和普通模式相比,有以下区别:

ACMP0模块初始化

/**
 * ACMP_Init
 *
 * @param[in] void
 * @return void
 *
 * @brief ACMP0模块初始化,
 */
 void ACMP0_Polling_Init(void)
 {
	  ACMP_InitType     acmpConfig;
	  ACMP_DACType      acmpDACConfig;
	  ACMP_PollingType  acmpPollingConfig;
	 
	  acmpConfig.negPin = ACMP_INPUT_DAC ;//负输入通道选择
	  acmpConfig.pollEn = 1;//使能轮询模式
	  acmpConfig.intEn = ENABLE;//使能中断
	  acmpConfig.hyst = ACMP_HYST_20MV;//迟滞挡位选择
	  acmpConfig.edgeType = ACMP_INTERRUPT_EDGE_FALLING_RISING;//中断触发模式
	  acmpConfig.moduleEnable = ENABLE;//使能ACMP模块
	  ACMP_Init(ACMP_CHANNEL0,&acmpConfig);
	  NVIC_EnableIRQ(ACMP0_IRQn );
	  ACMP_SetCallBack(ACMP_CHANNEL0 , ACMP_CallBack);
	 
	  acmpDACConfig.val = 63;//dac范围0-63 输出电压值:(val/64)*ref
	  acmpDACConfig.ref = ACMP_DAC_REFERENCE_VDDA;//DAC参考源选择
	  acmpDACConfig.enable = ENABLE;//DAC输出使能
	  ACMP_SetDacValue(ACMP_CHANNEL0, &acmpDACConfig);
	  
	  acmpPollingConfig.posPollingEnable = ENABLE;//正输入通道轮询模式使能
		acmpPollingConfig.negPollingEnable = DISABLE;//负输入通道轮询模式关闭
		acmpPollingConfig.pollingDiv = ACMP0_POLLING_FREQ_DIVIDER_256;//轮询分频值
		acmpPollingConfig.pollingChannelSeq = 7;//轮询通道序列设置,禁用/使能相应的通道
		acmpPollingConfig.hallOutEn = DISABLE;
		ACMP_PollingModeInit(ACMP_CHANNEL0, &acmpPollingConfig);
 }

多了轮询的结构第参数配置:

正输入通道轮询模式使能;负输入通道轮询模式关闭;轮询分频值(就是几个通道之间切换的频率);轮询通道序列设置,禁用7通道;HALL输出禁止。

还有读取ACMP0数据寄存器DR相应位的数值时,所处位置不同要移不同的位数。

/**
 * ACMP_Callback
 *
 * @param[in]  none
 * @return    none
 *
 * @brief   ACMP0中断回调函数,读出数据输出,并翻转PB10端口
 */ 	
 uint8_t ACMPData =0;
void ACMP_CallBack(void)
{
  if(ACMP_GetFlag(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG )!=0)  //轮询模式通道0中断标志
	{
		ACMP_ClrFlag(ACMP_CHANNEL0, ACMP0_OUTPUT_FLAG);//清中断标志
	}
	if(ACMP_GetFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL0_FLAG )!=0)  //轮询模式通道0中断标志
	{
		
		ACMP_ClrFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL0_FLAG);//清中断标志
		ACMPData = (ACMP_GetOutputValue(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL0_FLAG))>>0;//读出ACMP0正常模式的输出值,正输入大于负输入,输出1,正输入小于负输入,输出1
		printf("data is %d\n",ACMPData );
    GPIO_SetPinValue(GPIO_PB10, ACMPData);//修改PB10输出电平
		
	}
	else if(ACMP_GetFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL1_FLAG )!=0)  //轮询模式通道1中断标志
	{
		ACMP_ClrFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL1_FLAG);//清中断标志
		ACMPData = (ACMP_GetOutputValue(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL1_FLAG))>>1;//读出ACMP0正常模式的输出值,正输入大于负输入,输出1,正输入小于负输入,输出1
		printf("data is %d\n",ACMPData );
    GPIO_SetPinValue(GPIO_PB10, ACMPData);//修改PB10输出电平
	}
	else if(ACMP_GetFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL2_FLAG )!=0)  //轮询模式通道2中断标志
	{
		ACMP_ClrFlag(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL2_FLAG);//清中断标志
		ACMPData = (ACMP_GetOutputValue(ACMP_CHANNEL0, ACMP0_POLLING_OUTPUT_CHANNEL2_FLAG))>>2;//读出ACMP0正常模式的输出值,正输入大于负输入,输出1,正输入小于负输入,输出1
		printf("data is %d\n",ACMPData );
    GPIO_SetPinValue(GPIO_PB10, ACMPData);//修改PB10输出电平
	}
	else
	{}		
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享5款有趣但或许不那么实用的软件

今天我想分享几个有趣但或许不那么实用的软件&#xff0c;各位喜欢的朋友可以自行下载呢。 1.软件音量设置——EarTrumpet 听音乐、看视频、玩游戏&#xff0c;在各应用切换过程中&#xff0c;你可能会频繁调整系统音量大小&#xff0c;以适应自己的耳朵。而 EarTrumpet 则可…

AIGC:BAT、抖快的新掘金口?

配图来自Canva可画 AI辅助绘画估值超十万&#xff1f; 12月28日&#xff0c;山东人民出版社看中一位4岁女孩用百家号AI作画创作的AI绘本《超能外星战队》&#xff0c;认为该画价值超十万元且有出版意向。与此同时&#xff0c;“AI作画”像病毒般在各大短视频平台蔓延&#xf…

年度盘点丨2022年,7大关键词彰显用友成长型企业数智力量

导读&#xff1a;这一年&#xff0c;他们用卓越成绩证明自己&#xff0c;用产品创新回馈客户&#xff0c;用实力开启了中国成长型企业数智化产业的逆袭之路&#xff01; 2022年&#xff0c;企业级数智化产业经历了翻天覆地的变化。 曾经万家追捧的“舶来品”在成长型企业的主…

项目管理中,如何对各种文件进行统一版本管理?

不知道你在工作中是否也遇到过这样的问题&#xff1a;1、文件先存一个位置&#xff0c;等晚点再整理&#xff0c;结果过了一段时间&#xff0c;就变成了这样&#xff1a;2、想从电脑中找一份重要材料&#xff0c;要花费很长时间&#xff0c;有时查找一通&#xff0c;却一无所获…

Docker中MySQL主从复制

MySQL主从复制 主从搭建步骤 新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD…

SAP年结账务调整过程中的业务改错处理心得

昨天遇到一个问题在这里分享一下。大家知道刚刚跨年&#xff0c;财务还在做一些后续调整。在业财一体化的系统中&#xff0c;这种调整往往涉及到两个方向&#xff0c;财务端去调&#xff0c;还是业务端去调。但大家要了解一个前提。即然需要做调整&#xff0c;肯定是业务端出错…

IPC(IP CAMERA)

IPC是IP Camera的缩写词&#xff0c;IP是网际协定&#xff0c;Camera是照相机、摄影机&#xff0c;IP Camera顾名思义就是网路摄像机&#xff0c;它是一种由传统摄像机与网路技术结合所产生的新一代摄像机。 注&#xff1a;NVR&#xff0c;全称Network Video Recorder&#xff…

有哪些设备管理软件值得推荐?

有哪些设备管理软件值得推荐&#xff1f; 别滑了&#xff0c; 翻遍全网&#xff0c;好用的设备管理软件都给你整理好了&#xff0c;白嫖的好事可千万别错过。 要知道好用的设备管理软件&#xff0c;可是能为企业持续、稳定、快速发展&#xff0c;及提高经济效益发挥重要作用。…

机器学习实战教程(九):支持向量机实战篇

一、前言 上篇文章讲解的是线性SVM的推导过程以及简化版SMO算法的代码实现。本篇文章将讲解SMO算法的优化方法以及非线性SVM。 本文出现的所有代码&#xff0c;均可在我的github上下载&#xff0c;欢迎Follow、Star&#xff1a;点击查看 二、SMO算法优化 在几百个点组成的小规…

数据的存储

数据的存储 文章目录数据的存储一、数据类型二、整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.3几个经典关于内存存储的例子三、浮点型在内存中的存储3.1 一个令你惊呆的例子3.2 浮点数存储规则一、数据类型 整形家族&#xff1a; char&#xff1a; unsigned char&a…

redhat9---MySQL8练习

目录 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工资和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日…

anaconda 常用命令

在windows winR cmd中运行 或者在 linux的终端terminal中运行 1.查看conda版本 conda --version 2.查看conda现有源 conda config --show-sources 添加国内清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config…

谷粒学院——Day16【统计分析】

❤ 作者主页&#xff1a;Java技术一点通的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是Java技术一点通&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得关注、点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习&#xff0c;共同进步&#xff01;&am…

会通转债,大元转债上市价格预测

会通转债基本信息转债名称&#xff1a;会通转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.3亿元。正股名称&#xff1a;会通股份&#xff0c;今日收盘价&#xff1a;8.61&#xff0c;转股价格&#xff1a;9.33。当前转股价值 转债面值 / 转股价格 * …

知识管理在商业模式创新中的重要性

我们生活在一个以知识为基础的经济中&#xff0c;与实物资产相比&#xff0c;数据和信息被认为是宝贵的资产。组织正在收集更多的数据&#xff0c;并对其进行处理&#xff0c;以转化为可操作的洞察力。这些洞察力是商业决策和推动战略举措的有力工具。这些洞察力需要被捕获并在…

智慧农业大田解决方案LoRa的LPWAN低功耗广域网无线通信SoC芯片ASR6601

智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象信息、作物长势信息&#xff0c;主要包含气象监测系统、土壤监测系统、虫情监测系统、水肥一体化智慧灌溉系统、专家服务系统、农产品溯源系统。智慧农业大田解决方案可以准确掌握大田…

C语言—— 表达式求值

C语言—— 表达式求值一、隐式类型转换二、 整型提升三、 算术转换四、操作符的属性表达式求值的顺序一部分是由操作符的 优先级和结合性决定。同样&#xff0c;有些表达式的操作数在求值的过程中可能需要转换为其他类型。一、隐式类型转换 C语言的整型算术运算总是至少以缺省…

通达信股票接口的开源性及兼容性好吗?

通达信股票接口的开源性及兼容性好吗&#xff1f;刚开始炒股的时候&#xff0c;我用同花顺mac版本&#xff0c;界面非常新鲜和简单&#xff0c;然后因为我的朋友是量化的&#xff0c;然后强烈建议使用通达信&#xff0c;小编觉得通达信的开源性及兼容性堪称完美。可以同时兼容&…

拉伯证券|突然崩了!传闻空袭,2000亿“果链”巨头暴跌

1月4日&#xff0c;“果链”龙头立讯精细开盘跳水&#xff0c;一度大跌近9%。到午间收盘&#xff0c;立讯精细股价跌8.38%&#xff0c;总市值为2055亿元。苹果概念股普跌&#xff0c;东山精细跌9.11%&#xff0c;舜宇光学科技跌9.18%、高伟电子跌7.82%、比亚迪电子跌4.30%。 消…

Linux操作系统(常见命令)学习笔记(1)

Linux管道命令 管道命令大致指的是将上次命令返回的结果交给下个命令处理 command1 | command2Linux文件目录指令 ls命令 # 列出当前文件夹下面的文件 ls -params&#xff1a;-a 列出所有文件&#xff0c;包括隐藏的文件-l 以列表的形式列出-h 将文件以/1024后的文件大小显示…