历史上的今天
返回首页

历史上的今天

今天是:2024年09月22日(星期日)

正在发生

2018年09月22日 | 【STM32电机矢量控制】记录8——ADC三电阻采样

2018-09-22 来源:eefocus

ADC的基本原理:

        ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。

       与之相对应的DAC,Digital-to-Analog Converter,它是ADC模数转换的逆向过程。

STM32中的ADC:

       12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

ADC的通道概念:

有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。

● 规则组  

相当于正常运行的程序

最多使用16个通道。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。

规则通道转换的结果保存在规则通道的数据寄存器中。

 

● 注入组  

相当于中断
最多使用4个通道。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
注入通道转换的结果保存在注入通道的数据寄存器中。
【STM32电机FOC】记录8——ADC三电阻采样

ADC通道:

【STM32电机FOC】记录8——ADC三电阻采样

温度传感器/ VREFINT内部通道

温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。

 注意: 温度传感器和VREFINT只能出现在主ADC1中。


ADC引脚及配置

【STM32电机FOC】记录8——ADC三电阻采样


【STM32电机FOC】记录8——ADC三电阻采样
单次转换与连续转换:

单次转换完成后不会自动转到另外一个通道的转换,需要手动设置才能启动,连续转换是ADC转换结束后马上就自动启动另一次转换。

扫描模式:只在最后一个通道转换完毕后才会产生EOC或JEOC中断。一般通过DMA读取数据。

ADC的数据对齐方式:因为STM32为12位AD,但寄存器为16位,所以需要选择对齐方式。

【STM32电机FOC】记录8——ADC三电阻采样
ADC的采样时间:ADC_SMPR1和ADC_SMPR2寄存器用来设置通道0到通道17的采样时间。但实际上ADC每个通道都可以独立设置采样时间。

 ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。 总转换时间如下计算: TCONV = 采样时间+ 12.5个周期 

例如: 当ADCCLK=14MHz,采样时间为1.5周期

 TCONV = 1.5 + 12.5 = 14周期 = 1μs(最小转换时间)

ADC的库函数:

【STM32电机FOC】记录8——ADC三电阻采样

ADC1的3个通道注入转换配置:

{

ADC_InitTypeDef  ADC_InitStructure;

GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1  , ENABLE );   //ADC时钟初始化

RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分频因子要确保ADC1 的时钟( ADCCLK)不要超过 14Mhz。当前72/6=12MHz。

GPIO_StructInit(&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO设置为模拟输入模式   

GPIO_Init(GPIOA, &GPIO_InitStructure); 

ADC_DeInit(ADC1);  //恢复默认值

//ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//模式选择:独立模式

ADC_InitStructure.ADC_Mode = ADC_Mode_InjecSimult;  //注入模式

ADC_InitStructure.ADC_ScanConvMode = ENABLE;//多通道模拟输入

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次转换

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//进行软件触发

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;  //右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1; //规则组通道数 1

ADC_Init(ADC1, &ADC_InitStructure);

ADC_Cmd(ADC1, ENABLE);  //初始化ADC,只是给ADC上电,转换开始需要按照前面的设置触发

//ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发用

ADC_ResetCalibration(ADC1); //复位ADC校准。

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位完成

ADC_StartCalibration(ADC1);  //校准

while(ADC_GetCalibrationStatus(ADC1));   //等待校准完成

ADC_InjectedSequencerLengthConfig(ADC1,3);  //注入序列长度3

ADC_InjectedChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );//通道配置:通道ADC_Channel_1 ,采样时间 采样时间为239.5周期

ADC_InjectedChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_1Cycles5 );//通道配置:通道ADC_Channel_2,采样时间 采样时间为1.5周期

ADC_InjectedChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5 );//通道配置:通道ADC_Channel_3  采样时间 采样时间为55.5周期

ADC_SoftwareStartConvCmd(ADC1, ENABLE);//软件触发使能       

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

 

return ADC_GetConversionValue(ADC1);//返回最近一次转换结果  

主要完成任务:

1、梳理程序的头文件:库的配置文件:stm32f10x_MCconf.h、驱动控制参数:MC_Control_Param.h

状态观测器参数: MC_State_Observer_param.h、永磁同步电机(PMSM)参数:MC_PMSM_motor_param.h

2、梳理三相电阻拓扑电流采集和空间矢量PWM 产生:stm32f10x_svpwm_3 shunt.c 文件中各函数的运行过程

ADC采样程序流程:

1、采样前需要读取三个采样通道的零电流值,以进行传感器校准;

2、ADC经TIM1的4通道进行上升沿实践触发后进入中断,进入起动模式,通过FOC驱动算法获得采样值,用计算出的值Vα、Vβ来判断其所在扇区位置和三相PWM输出的占空比;

ADC采样注意事项:

只有在下桥臂打开时由SVPWM的当前扇区决定该读哪两相电流,而事实上STM32F10x型号的单片机只有两个ADC外设,只能同时采样两相的电流。程序中只采样A、B相电流,C相的电流通过 Ia+Ib+Ic=0 的电机电流关系得出。

每次桥臂开关状态有变化时,会在shunt电阻上的电压产生一个电子干扰,时间长度为TNoise,且当下桥臂打开后,需要等待一段时间来使shunt电阻上的电压达到稳定值,时间长度为TRise,所以在TNoise 及TRise期间不能读相电流;

由于STM32 ADC/TIM1的高性能,我们可以在PWM周期的任意时刻读取电流。当然,我们希望在SVPWM的不同扇区,电流采样点无大的变化。


推荐阅读

史海拾趣

ABCircuits公司的发展小趣事

在电子行业中,产品质量是企业的生命线。ABCircuits深知这一点,因此从成立之初就建立了严格的质量管理体系。公司注重从原材料采购到生产制造的每一个环节的质量控制,确保每一件产品都符合高标准的品质要求。这种对品质的坚持让ABCircuits赢得了客户的信赖和口碑,使其在市场中脱颖而出。

Conexcon Group公司的发展小趣事

在电子行业的发展过程中,环保问题日益受到关注。Conexcon Group积极响应国家环保政策,将绿色环保理念贯穿于产品研发、生产和销售的全过程。公司采用了环保材料和工艺,减少了对环境的污染和破坏。同时,公司还加强了废旧电子产品的回收和处理工作,推动了电子行业的可持续发展。这些举措不仅赢得了消费者的认可和支持,也为公司树立了良好的社会形象。

Davies Molding公司的发展小趣事

Davies Molding公司在追求经济效益的同时,始终关注社会责任和可持续发展。公司积极参与环保公益活动,推动绿色生产,降低对环境的影响。此外,Davies Molding公司还注重员工福利和社会公益事业,为员工提供良好的工作环境和发展空间,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

DATATRONICS公司的发展小趣事

随着全球环保意识的不断提高,DATATRONICS也积极响应绿色环保的号召。公司投入大量资源用于研发和生产环保型电子产品,努力降低产品对环境的影响。同时,DATATRONICS还积极参与各种环保公益活动,推动公司和社会的可持续发展。

请注意,以上故事均为虚构,仅用于演示目的。如需了解DATATRONICS公司的真实发展情况,建议查阅相关公司报告或行业分析报告。

Everbuild公司的发展小趣事

Everbuild公司成立于2005年,创始人李明是一位对电子技术充满热情的年轻人。在创业初期,公司只有几个员工和一间狭小的办公室。李明带领团队日夜兼程地研发电子元器件,但由于资金短缺和市场竞争激烈,产品销量并不理想。然而,他们并没有放弃,通过不断的技术创新和成本控制,终于在一年后推出了一款具有竞争力的电源管理芯片,赢得了市场的认可。

台湾肯尼威(CANNYWELL)公司的发展小趣事

随着公司产品的逐渐推广,肯尼威面临着日益激烈的市场竞争。李明深知,要想在竞争中脱颖而出,必须走品质之路。他引入了国际先进的质量管理体系,率先在同行业中通过ISO9001认证。这一举措不仅提高了产品质量,也提升了公司的品牌形象。同时,公司还建立了严格的品质检测流程,确保每一件产品都符合高标准的品质要求。

问答坊 | AI 解惑

关于FPGA开发板信息

伙计们: 作为FPGA初学者,或已经工作,但是接触机会不多,又想学好它的人来说,有一个开发板是不错的。 可是这些人一般不会了解哪个好,那个不好。那就请高手来介绍或者指导买哪家的了。 在此,也强烈建议论坛开展一个diyFPGA开发板的活动…

查看全部问答>

为什么我的按键中断在程序启动的时候总自动进入

为什么我的按键中断在程序启动的时候总自动进入,不是按下按键以后,而是程序一运行的时候就自动进入中断函数,请问这是什么原因呢?…

查看全部问答>

怎样从内存中读取摄像头采集的数据保存成bmp格式

我已经从把摄像头采集的数据保存使用 mmap 内存映射来获取了图像,当用write函数得出的是jpeg格式的 我想得到bmp格式的图片怎么做,跪求,急用。谢谢各位。 …

查看全部问答>

用verilog HDL 实现网络加密算法md5

用verilog HDL 实现一个网络加密的算法(md5),有没有哪位高手能给点帮助,我邮箱是poppy220@126.com 先谢过啦!^_^ …

查看全部问答>

关于STM32外设初始化时,时钟配置的列表

附件为在使用STM32外设,进行初始化时,各个外设需要对哪些时钟进行配置的列表。希望大家对该文件的内容多提意见,我们将对其进行修改,使得大家在使用STM32时有所帮助。 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20093/200931217123 ...…

查看全部问答>

一个很莫名其妙的问题

最近刚刚开始接触STM32,今天调试串口的时候发现一个很无奈的问题,源代码基本都是使用keil自带的demo,就不列举了。修改以下这些设置:/* PLLCLK = 12MHz * 6= 72 MHz */     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6 ...…

查看全部问答>

9b96的EPI能同时连几个外设?

想扩展个NOR FLASH ,SDRAM,FPGA,想问下各位,能实现吗?我是说都用EPI连接?可是手册上说配EPI的模式不同,如何实现?谢谢。 如果用MCU到FPGA,再到SDRAM,,不就多此一举了吗, 如果用I2C的或者SPI的FLASH,程序是不是得先考到RAM里?  …

查看全部问答>

求指导

老师最近给了一个电动汽车电池管理系统(BMS)设计的方向,小弟有一点编程、数电、模电、fpga的基础。也看了一些BMS相关论文的论文,但始终不知道如何着手去做。 求高人指导,比如还应学习什么基础知识之类的…

查看全部问答>

MSP430F149 Timer_B捕获问题

各位大虾: 我的程序是要实现测量PWM的占空比,正常情况下信号为高电平,下降沿开始计时,上升沿结束计时。 但是目前发现这样的问题,就是下降沿能够捕获到,但是上升沿无论如何捕获不到。(前几天,完全同样的程序就是正常的,但是这几天,同样 ...…

查看全部问答>

单片机C语言程序设计实训100例--基于AVR Proteus仿真(完整版)

          基于AVRStudio+WinAVR(GCC)组合环境和Proteus硬件仿真平台,精心安排了100个AVR单片机C程序设计案例。全书提供了所有案例完整的C语言源程序,各案例设计了难易适中的实训目标。        ...…

查看全部问答>