找回密码
 立即注册
查看: 69|回复: 3

AI8H8K64U

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-16 11:02:43
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-4-16 11:02:43 | 显示全部楼层 |阅读模式
请教一下 我现在输出 1-3P  PWM输出 采样中间对齐的模式 怎么实现在 高电平的中间开启ADC采样 或者DMA采样得到数据  下面是配置文件 采用中央对齐模式二  还要一个问题就是当进入ADC中断 采用一个通道的数据后 在开启DMA,然后进入中断采完数据的时间很长
1744772383367.png 1744772447796.png
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-16 11:03:00 | 显示全部楼层
在实现高电平中间开启ADC采样或DMA采样的过程中,首先需要明确PWM输出和ADC采样的时序关系。以下是针对STC8H8K64U微控制器的配置和实现步骤:

1. PWM输出配置
采用中央对齐模式二(Center-Aligned Mode 2),PWM信号会在高电平的中间位置产生一个对称的波形。这种模式下,PWM的计数器会从0递增到最大值,然后再递减回0,形成一个对称的波形。

2. ADC采样配置
为了在高电平的中间位置开启ADC采样,可以利用PWM的计数器值来触发ADC采样。具体步骤如下:

2.1 配置PWM模块
首先,配置PWM模块为中央对齐模式二,并设置PWM的周期和占空比。假设PWM的周期为PWMPERIOD,占空比为PWMDUTY。
  1. c
  2. PWMInitTypeDef PWMInitStructure;
  3. PWMInitStructure.PWMMode = PWMModeCenterAligned2;
  4. PWMInitStructure.PWMPeriod = PWMPERIOD;
  5. PWMInitStructure.PWMDuty = PWMDUTY;
  6. PWMInit(&PWMInitStructure);
复制代码

2.2 配置ADC模块
接下来,配置ADC模块,使其在PWM计数器达到特定值时触发采样。这个特定值应该是PWM周期的一半,即PWMPERIOD / 2,这样采样点就会位于高电平的中间位置。
  1. c
  2. ADCInitTypeDef ADCInitStructure;
  3. ADCInitStructure.ADCMode = ADCModeSingle;
  4. ADCInitStructure.ADCTriggerSource = ADCTriggerSourcePWM;
  5. ADCInitStructure.ADCTriggerValue = PWMPERIOD / 2;
  6. ADCInit(&ADCInitStructure);
复制代码

2.3 配置DMA模块
如果需要使用DMA来传输ADC采样数据,可以配置DMA模块,使其在ADC采样完成后自动将数据传输到指定的内存地址。
  1. c
  2. DMAInitTypeDef DMAInitStructure;
  3. DMAInitStructure.DMAMode = DMAModeCircular;
  4. DMAInitStructure.DMAPeripheralBaseAddr = (uint32t)&ADC1->DR;
  5. DMAInitStructure.DMAMemoryBaseAddr = (uint32t)ADCDataBuffer;
  6. DMAInitStructure.DMABufferSize = ADCBUFFERSIZE;
  7. DMAInit(&DMAInitStructure);
复制代码

3. 中断处理
在ADC采样完成后,可以通过中断来处理采样数据。如果需要在中断中开启DMA,可以在ADC中断服务程序中启动DMA传输。
  1. c
  2. void ADCIRQHandler(void) {
  3.     if (ADCGetITStatus(ADCITEOC) != RESET) {
  4.         // 读取ADC采样数据
  5.         uint16t adcvalue = ADCGetConversionValue(ADC1);
  6.         
  7.         // 启动DMA传输
  8.         DMACmd(DMA1Channel1, ENABLE);
  9.         
  10.         // 清除中断标志
  11.         ADCClearITPendingBit(ADCITEOC);
  12.     }
  13. }
复制代码

4. 优化采样时间
如果发现进入ADC中断后,开启DMA并采完数据的时间较长,可以考虑以下优化措施:

4.1 减少中断处理时间
尽量减少中断服务程序中的操作,只保留必要的代码。例如,可以在中断中只读取ADC数据并启动DMA,其他处理操作可以放在主循环中。

4.2 使用DMA自动传输
通过配置DMA为循环模式,可以避免每次采样后都需要手动启动DMA传输,从而减少中断处理时间。

4.3 提高系统时钟频率
如果系统时钟频率较低,可以尝试提高系统时钟频率,以加快ADC采样和DMA传输的速度。

5. 总结
通过合理配置PWM、ADC和DMA模块,并优化中断处理流程,可以在STC8H8K64U微控制器上实现高电平中间开启ADC采样或DMA采样的功能。具体实现时,需要根据实际应用需求调整PWM周期、占空比和ADC采样触发值等参数,以达到最佳的采样效果。

希望以上内容能够帮助您解决问题。如果有任何进一步的问题,欢迎继续讨论。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-16 11:02:43
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-4-16 11:04:22 | 显示全部楼层
我现在是 在高电平跟低电平都会进去一次
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-4-16 13:34:37 | 显示全部楼层
我写有STC32G系列的用PWM触发ADC,ADC中断读取结果。AI8H8K64U的PWM是一样的,您可以参考STC32G的,PWM4用于触发ADC。


PWM1P和PWM1N、PWM2P和PWM2N、PWM3P和PWM3N 输出3对互补带死区的PWM,PWM4用于触发ADC,触发时刻可以随意设置.
本例触发时刻设置为PWM2输出下降沿前6us启动ADC, ADC完成后进入ADC中断读取结果,并且取反P3.4指示ADC中断,用于示波器观察ADC完成时刻。



        PWMA_CCMR4  = 0x78;                                // 通道模式配置, PWM模式2, 预装载允许.  这个通道用于触发ADC, 可以不输出PWM波形.
        PWMA_CCR4H  = (800-24*6) /256;        // 触发ADC时刻,本例相对于PWM2占空比结束前6us自动启动ADC采样(比如采样电机电流)。
        PWMA_CCR4L  = (800-24*6) %256;
//        ccer2 |= 0x50;                        // 开启比较输出, 高电平有效
//        ps    |= (1<<6);                // 选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.3 P3.4
///        eno   |= 0xc0;                        // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
        PWMA_CCMR4  = 0x78;                // 通道模式配置, PWM模式2, 预装载允许.  这个通道用于触发ADC.
        PWMA_CR2   |= (7<<4);        // 触发ADC信号选择(TRG0), 1:计数器使能信号,  2:更新事件, 3:比较脉冲, 4:比较OC1REF, 5:比较OC2REF, 6:比较OC3REF, 7:比较OC4REF.


09C-STC32G12K128-PWMA-触发ADC.rar (53.99 KB, 下载次数: 0)


回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:34 , Processed in 0.184946 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表