liuzonggong 发表于 2024-8-25 07:24:08

vdso.l 发表于 2024-8-24 09:18
感谢官方,STC8H实验箱已收到,赞👍

希望,继续精进,1,本单片机可以输出均匀的波形,2用捕获模式。

小涵子爸爸 发表于 2024-8-25 08:04:33

试验箱咋申请的?

神农鼎 发表于 2024-8-25 09:42:57



51 开源 电容表: 8H8K64U比较器+OLED12864-I2C 实现 - 开源频谱分析仪-FFT,PID控制,示波器,四轴飞行器,智能小车 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)

vdso.l 发表于 2024-8-25 14:18:03

神农鼎 发表于 2024-8-25 09:42
51 开源 电容表: 8H8K64U比较器+OLED12864-I2C 实现 - 开源频谱分析仪-FFT,PID控制,示波器,四轴飞行器 ...

顶,回头试一下,通过电压比较,还省了NE555电路。

vdso.l 发表于 2024-8-25 14:18:40

liuzonggong 发表于 2024-8-25 07:24
希望,继续精进,1,本单片机可以输出均匀的波形,2用捕获模式。

STC8的PWM捕捉功能不错,要试一下。

zhange 发表于 2024-8-26 07:08:36

{:4_202:}{:4_202:}{:4_202:}

liulei 发表于 2024-8-26 08:22:03

共同学习,共同进步

32位8051-AI 发表于 2024-8-26 08:33:10

vdso.l 发表于 2024-8-24 09:18
感谢官方,STC8H实验箱已收到,赞👍

期待小伙伴更精彩的学习分享。

vdso.l 发表于 2024-8-29 22:26:16

本帖最后由 vdso.l 于 2024-8-29 22:31 编辑

时隔多日,终于有时间来填个坑,尝试将程序改成 PWM 硬件捕获方式。

一、翻阅STC8H手册,摘录PWM捕获相关信息

STC8H 系列的单片机内部集成了8通道16位高级PWM定时器,分成两组周期可不同的PWM,分别命名为 PWMA 和 PWMB。 以PWMA为例,摘出对此次PWM捕获有用的信息:1)PWMA 有 PWMIP/PWM2P/PWM3P/PWM4P 这4路通道有捕获和测量脉宽功能    1.1)对外部信号进行捕获时,可选择上升沿捕获或者下降沿捕获    1.2)如果需要同时捕获上升沿和下降沿,则可将输入信号同时接入到两路PWM(比如:PWMIP/PWM2P),使能其中一路捕获上升沿,另外一路捕获下降沿即可,可同时捕获信号的周期值和占空比值2)PWMA 计数时钟频率灵活可调,分频值可以是 1~65535 之间的任意值,可通过寄存器 PWMA_PSCRH 和 PWMA_PSCRL 配置,防止计数周期溢出




如图,红线部分为信号捕捉的路径配置:
1)让PWM1P通道的IC1捕捉PWM的上升沿(对应TI1FP1,PWMA_CCR1计数),计数间隔即为PWM周期长度T_period(T_on + T_off);2)让PWM2P通道的IC2捕捉PWM的下降沿(对应TI1FP2,PWMA_CCR2计数),与上一次PWM1P的计数间隔即为PWM高电平长度T_on。总结:是让PWM1P进来的TI1信号在滤波和边沿检测后分成两路,分别送给IC1、IC2(属于PWM2P链路的一环)去计数;         所以PWM2P在这里的作用,并不是其引脚输入,而是其部分链路被用来做PWM1P的“交叉通道”,实现对一路PWM信号的两种方式捕捉/计数

二、程序步骤规划
===================== 配置引脚 =====================1、【GPIO】配置PWMA输入捕获 PWM1P通道的引脚及模式(高阻输入),PWM1P -> P1.0
===================== 配置链路 =====================2、【滤波器】设置PWMA_CCMR1的IC1F -> 滤波处理
3、【捕获选择】设置PWMA_CCER1的CC1P -> 捕获发生在TI1F的上升沿(对应TI1FP1),设置PWMA_CCER1的CC2P -> 捕获发生在TI1F的下降沿(对应TI1FP2)
4、【映射选择】设置PWMA_CCMR1的CC1S -> IC1映射到TI1FP1,设置PWMA_CCMR2的CC2S -> IC2映射到TI1FP2这一步很关键,很容易看走眼~

5、【从模式】从模式触发动作 -> 遇到TI1FP1, 复位计数器值(每次上升沿都能自动清零计数器,不用进中断,不用软件处理,提高效率)
6、【分频系数】设置 PWMA_CCMR1 的 IC1PSC,设置 PWMA_CCMR2 的 IC2PS由于本程序不打算设置中断,所以采样需要密集一些 :)

===================== 使能捕捉和计数 =====================7、【使能捕获】设置 PWMA_CCER1 的 CC1E -> 使能 通道1 的输入捕获,设置 PWMA_CCER1的CC2E -> 使能 通道2 的输入捕获
8、【使能计数】设置PWMA_CR1的CENA -> 使能计数器

三、程序代码示意






四、测试用例上机验证




测出的频率和占空比与理论值基本吻合


五、总体感觉

好处是:相比之前的软件测量方法(查询法、中断法),代码简洁了一些;同时还能少一根数据线。
弊端是:涉及寄存器配置项较多,查阅手册花了不少时间,因为手册里把『输入、输出』的配置都合在一起写了,需要自己去梳理+刨去干扰信息;
接下来:再埋个坑,下次准备用『库函数』来重写下代码,相信程序的可读性会更好些。


回见~~

vdso.l 发表于 2024-8-31 07:36:04

fztyp 发表于 2024-8-31 01:06
又来打卡了{:4_17
4:}

蟹蟹支持😁{:5_284:}
页: 1 [2] 3 4
查看完整版本: 【学习打卡】【感谢官方-实验箱已收到】基于 8H8K64U 简易电容测试仪