Cypress-CYT4B-Mcal配置说明(七)Adc模块配置

Adc模块用于检测引脚的电压,关于Adc模块的基本概念和Api可参考【MCAL】ADC模块详解-优快云博客

基本的使用方式为软件触发+中断,即在周期任务中使用软件触发Api开启一组Adc的转换,转换完成后在中断中将转换结果写入到设定的缓冲区中。Adc模块的基本步骤为:

  1. 配置PCLK。
  2. 配置Port。
  3. 配置AdcHwUnit。
  4. 配置AdcChannel。
  5. 配置AdcGroup。

1. PCLK配置

Mcu模块配置相应PCLK时钟即可,不需要配置referencePoint,ADCx对应SARx。

2. Port配置

Adc功能使用时不用额外配置Port模块,默认即模拟输入。如果配置则如下:

AMUXA,PORT_PIN_LEVEL_LOW,PORT_PIN_OUT_MODE_HIGHZ。

具体哪个引脚可以复用为Adc通道见本文末尾处。

3. AdcHwUnit配置

在AdcConfigSet中新建3个AdcHwUnit,AdcHwUnitID分别选择ADC_SAR_0_0、ADC_SAR_0_1和ADC_SAR_0_2,表示硬件外设ADC1、ADC2和ADC3。

4. AdcChannel配置

在AdcHwUnit中新建AdcChannel。

  • AdcChannelId:表示该Adc通道的物理通道ID。

    (ADC0的通道ID为0-31,ADC1的通道ID为64-95,ADC2的通道ID为128-159)

  • AdcChannelSampTime:采样时间,即该通道采用占用的时钟周期数。

    (需要配置的大一些,否则会导致数据不准)

  • AdcChannelResultSigned :指定结果为有符号数或无符号数(一般不勾选)。

5. AdcGroup配置

在AdcHwUnit中新建AdcGroup。

在AdcGroupDefinition中引用配置的通道。引用的顺序(Index)即为通道转换值在组缓冲区中的位置索引。

AdcGroupAccessMode:使用单独访问模式/流访问模式。

  • ADC_ACCESS_MODE_SINGLE:每个通道只缓存一个采样数据。
  • ADC_ACCESS_MODE_STREAMING:每个通道可以缓存多个采样数据。

AdcGroupConversionMode:使用单次转换模式/连续转换模式。

  • ADC_CONV_MODE_ONESHOT:每个通道只执行一次转换。Group配置为软件触发的情况下,已启动的一 次性转换可以通过软件API调用停止。Group配置为硬件触发的情况下,可 以通过禁用触发事件(如果硬件支持)来停止已启动的一次性转换。
  • ADC_CONV_MODE_CONTINUOUS:对一个ADC信道组中的每个ADC通道进行重复转换。连续转换模式仅 适用于配置为软件触发的Group。已启动的“连续转换”可以通过软 件API调用停止。

  • AdcGroupId:ADC组索引。(作为Adc标准接口的符号名称参数)
  • AdcGroupPriority:ADC组优先级。
  • AdcGroupReplacement :被别的ADC组打断后使用使用中止/重新启动机制还是暂停/恢复机制。
  • AdcGroupTriggSrc:使用软件触发/硬件触发。

  • AdcNotification:转换完成回调函数是否开启,开启则需配置名称。

  • AdcFirstLogicalChannel :ADC组中第一个AdcChannel分配的逻辑通道ID。该逻辑通道可用于硬件触发。

(每个AdcHwUnit具有32条物理通道,也具有32条逻辑通道,逻辑通道主要用于Adc硬件触发。例如ADC1中配置了一个ADC组,组中有5条AdcChannel,为这个组分配的AdcFirstLogicalChannel为10,即组中第一个AdcChannel分配的逻辑通道ID为10,那么组中最后一个AdcChannel分配的逻辑通道ID为14。为ADC1中别的组分配逻辑ID就不能在10到14之间)

  • AdcInterruptMode:是否使能中断模式。
  • AdcUseDma:是否使用Dma。

6. 使用示例

6.1 软件触发+中断

初始化

Adc_Init(&AdcConf_AdcConfigSet_AdcConfigSet_0);

设置结果缓冲区

Adc_SetupResultBuffer(AdcConf_AdcGroup_Adc0_200HZ,CDDAdc_ConfigValue[0u].u32BufOfAdcHw);

使用软件触发接口开启转换

Adc_StartGroupConversion(AdcConf_AdcGroup_Adc0_200HZ);

开启组中最后一条通道对应的Adc中断

Cy_SysInt_SetSystemIrqVector((cy_en_intr_t)pass_0_interrupts_sar_13_IRQn,Adc_IsrConversionDone_136_Cat1);
Cy_SysInt_InitIRQ( &(cy_stc_sysint_irq_t){ .sysIntSrc=(cy_en_intr_t)pass_0_interrupts_sar_13_IRQn, .intIdx = CPUIntIdx4_IRQn, .isEnabled = true});
NVIC_EnableIRQ(CPUIntIdx3_IRQn);

在5msTask中周期调用

adcGroupSts = Adc_GetGroupStatus(AdcConf_AdcGroup_Adc0_200HZ);//获取Adc组状态
if( ADC_BUSY != adcGroupSts )
{
    Adc_StartGroupConversion(AdcConf_AdcGroup_Adc0_200HZ);//不为忙碌则开启下一次转换
}

在设置的结果缓冲区中观察Adc转换结果。

6.2 定时器硬件触发

Tcpwm触发adc是一对一的专用触发,也就是说每个ADC逻辑通道都有唯一的TCPWM定时器通道与之对应。

触发关系如下:

例如要触发的组属于Adc0,触发频率需要为200Hz,该组AdcFirstLogicalChannel 为2,首先配置AdcGroupTriggSrc为硬件触发,AdcGroupHwTriggSrc 为TCPWM触发。

确定好要硬件触发的组的第一条逻辑通道后,需要根据上面的表格在Port中配置one-to-one触发源。根据表格,SAR0(Adc0)的ch#2使用的INPUT触发源是PASS0_CH_TR_IN[2],使用的定时器通道是PWM_1_M_6,也就是TCPWM1_262。

在Port模块的PortTriggerConfigSet_0中新建PortTr1To1GroupContainer,触发组名字选择PWM_TO_PASS,组ID为自动生成。

在PWM_TO_PASS的一对一触发源组中配置PASS0_CH_TR_IN[2]。

参照(四)Pwm模块配置配置TCPWM1_262的定时器。开启GptHwTriggerOutputLine并选为BOTH。

初始化

Adc_Init(&AdcConf_AdcConfigSet_AdcConfigSet_0);

设置结果缓冲区

Adc_SetupResultBuffer(AdcConf_AdcGroup_Adc0_500HZ,CDDAdc_ConfigValue[2u].u32BufOfAdcHw);

使能硬件触发

Adc_EnableGroupNotification(AdcConf_AdcGroup_Adc0_500HZ);

使能定时器

Gpt_StartTimer(GptConf_GptChannelConfiguration_Timer_16bit_500Hz_Adc0_Trigger, 20-1);//开启500hz定时器Adc0触发  

开启组中最后一条通道对应的Adc中断

Cy_SysInt_SetSystemIrqVector((cy_en_intr_t)pass_0_interrupts_sar_34_IRQn,Adc_IsrConversionDone_157_Cat1);
Cy_SysInt_InitIRQ( &(cy_stc_sysint_irq_t){ .sysIntSrc=(cy_en_intr_t)pass_0_interrupts_sar_34_IRQn, .intIdx = CPUIntIdx4_IRQn, .isEnabled = true});
NVIC_EnableIRQ(CPUIntIdx3_IRQn);

(如果使用PWM触发则步骤一致)

6.3 软件触发+DMA

使用DMA需要打开AdcUseDma,如需开启转换完成回调函数则同时勾选AdcInterruptMode

与TCPWM硬件触发类似,需要配置one-to-one触发源

例如当前需要使用DMA的ADC组的最后一条逻辑通道为13,那么根据上表,使用的触发源为PDMA0_TR_IN[60](使用的DMA通道为DW.60),需在Port中配置

需要在Mcu中打开m7-0核的DMA使能

需要注意的是,使用DMA后通道的中断号会改变,由Adc_IsrConversionDone_XXX_Cat2变为Adc_DmaDone_XXX_Cat2,在EB配置生成的Adc_Irq.h中可以找到,不要忘记开启中断

7. Port口与ADC物理通道对应

该表格整理自CYT4BF数据手册,仅适用于CYT4B系列。

引脚ADC通道
P6.0ADC[0]_0
P6.1ADC[0]_1
P6.4ADC[0]_4
P6.5ADC[0]_5
P6.6ADC[0]_6
P6.7ADC[0]_7
P7.0ADC[0]_16
P7.1ADC[0]_17
P7.2ADC[0]_18
P7.3ADC[0]_19
P7.4ADC[0]_20
P7.5ADC[0]_21
P7.6ADC[0]_22
P7.7ADC[0]_23
P8.1ADC[0]_24
P8.2ADC[0]_25
P8.3ADC[0]_26
P8.4ADC[0]_27
P9.0ADC[0]_28
P9.1ADC[0]_29
P9.2ADC[0]_30
P9.3ADC[0]_31
P10.4ADC[1]_0
P10.5ADC[1]_1
P10.6ADC[1]_2
P10.7ADC[1]_3
P11.0ADC[0]_M
P11.1ADC[1]_M
P11.2ADC[2]_M
P12.0ADC[1]_4
P12.2ADC[1]_6
P12.3ADC[1]_7
P12.4ADC[1]_8
P12.5ADC[1]_9
P12.6ADC[1]_10
P12.7ADC[1]_11
P13.0ADC[1]_12
P13.1ADC[1]_13
P13.2ADC[1]_14
P13.3ADC[1]_15
P13.4ADC[1]_16
P13.5ADC[1]_17
P13.6ADC[1]_18
P13.7ADC[1]_19
P14.0ADC[1]_20
P14.1ADC[1]_21
P14.2ADC[1]_22
P14.3ADC[1]_23
P14.4ADC[1]_24
P14.5ADC[1]_25
P14.6ADC[1]_26
P14.7ADC[1]_27
P15.0ADC[1]_28
P15.1ADC[1]_29
P15.2ADC[1]_30
P15.3ADC[1]_31
P16.0ADC[2]_0
P16.1ADC[2]_1
P16.2ADC[2]_2
P16.3ADC[2]_3
P16.4ADC[2]_4
P16.5ADC[2]_5
P16.6ADC[2]_6
P16.7ADC[2]_7
P17.0ADC[2]_8
P17.1ADC[2]_9
P17.2ADC[2]_10
P17.3ADC[2]_11
P17.4ADC[2]_12
P17.5ADC[2]_13
P17.6ADC[2]_14
P17.7ADC[2]_15
P18.0ADC[2]_16
P18.1ADC[2]_17
P18.2ADC[2]_18
P18.3ADC[2]_19
P18.4ADC[2]_20
P18.5ADC[2]_21
P18.6ADC[2]_22
P18.7ADC[2]_23
P19.0ADC[2]_24
P19.1ADC[2]_25
P19.2ADC[2]_26
P19.3ADC[2]_27
P19.4ADC[2]_28
P20.0ADC[2]_29
P20.1ADC[2]_30
P20.2ADC[2]_31

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值