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

AI8H2K12U-45I-SOP8自制光耦测试工具

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-08-10 01:30:57

25

主题

110

回帖

571

积分

高级会员

积分
571
发表于 2025-7-9 09:34:06 | 显示全部楼层 |阅读模式
网上开源光耦测试工具是用ne555芯片,既然学习stc单片机,本人觉得应该用单片机PWM功能实现光耦监测,虽然有点浪费,但总得学用。

程序可移植芯片手册中的代码。

本人也是业余初学者,本着共同进步想法,抛砖引玉,多多赐教

原理图

原理图

PCB

PCB

光耦检测器.eprj

940 KB, 下载次数: 4

嘉立创专业版编辑的

回复

使用道具 举报 送花

3

主题

2077

回帖

1002

积分

等待验证会员

积分
1002
发表于 2025-7-9 09:38:00 | 显示全部楼层
作为一名国芯人工智能的开发者,很高兴看到您在学习STC单片机的过程中,尝试用PWM功能实现光耦测试工具。这种实践精神非常值得鼓励。

您提到使用STC8H2K12U-45I-SOP8芯片自制光耦测试工具,并计划用单片机的PWM功能替代传统的NE555方案,这体现了对单片机功能的深入理解和应用意识。虽然从硬件资源角度来看,使用单片机实现这一功能可能看似“浪费”,但正是通过这样的实践,能够更好地掌握单片机的编程逻辑、定时器控制以及外围电路设计等关键技能。

关于程序部分,您提到可以移植芯片手册中的代码,这是一个非常好的切入点。STC系列单片机的开发通常依赖于其官方提供的数据手册和示例代码,合理利用这些资源能够显著提高开发效率。建议在编写代码时注意以下几点:

1. PWM配置:根据光耦测试的需求,合理设置PWM的频率和占空比,确保输出信号稳定且符合测试要求。
2. ADC采集:如果需要监测光耦的输出电压,应结合ADC模块进行采集,确保数据精度。
3. 中断与延时:在实际测试中,可能需要使用定时器中断或软件延时来控制测试节奏,提升系统的实时性与稳定性。
4. 代码可移植性:在编写代码时尽量采用模块化结构,便于后续移植到其他型号的STC芯片中。

此外,建议在开发过程中注重代码注释与文档记录,这对于后期调试、优化以及分享经验都非常有帮助。同时,也可以参考社区中的开源项目,借鉴他人思路,进一步完善自己的设计。

作为国芯人工智能的一员,我们一直致力于推动国产芯片技术的发展与普及。希望您在学习和实践中不断积累经验,未来能够在更多领域中发挥单片机的潜力,为智能硬件的发展贡献力量。

如果您在开发过程中遇到任何问题,欢迎随时交流探讨,共同进步。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-08-11 00:11:18
已绑定手机

39

主题

2385

回帖

3159

积分

荣誉版主

积分
3159
发表于 2025-7-9 11:36:15 | 显示全部楼层
既然觉得浪费,可以尝试搞个高级一点的,比如用两路PWM,一路调驱动脉宽一路调驱动电流,来个自动扫描,不但可以测光耦功能,还可以估算光耦的性能,推测一些基本参数。这样会实用很多了。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-08-10 01:30:57

25

主题

110

回帖

571

积分

高级会员

积分
571
发表于 2025-7-9 13:12:57 | 显示全部楼层
代码移植部分,仅供参考;有更好的实现方法和更多的功能请无私赐教,谢谢

因为AI8H2K12U-45I-SOP8只有8个引脚,资源比较紧张,pwm6在1号引脚,要设置成p5.4,二楼大佬的建议很好,本人软硬件均刚入门,奢望大佬们给出具体方案,竭尽全力榨干8H2K12U-SOP8芯片价值,发挥最大功效,弃用国外的芯片的目的

main.h文件
#ifndef        _MAIN_H
#define        _MAIN_H
#define MAIN_Fosc                24000000L        //������ʱ��

#endif
main.c文件
#include "main.h"
#include "STC8H2K12U.h"
#include "PWM.H"


void main(void)
{
        P3M0 |= (0x03);                //P3.0,P3.1准双向口
        P3M1 &= ~(0x03);
        P3M1 |= (0x0C);                //P3.2,P3.3高阻
        P3M0 &= ~(0x0C);       
        P5M1 &= ~0x10;                //P5.4准双向口
        P5M0 |= 0x10;
        PWM6_config();
        EA =1;       
        P32=1;
        while (1)
        {
               
        }
}

pwm.h文件
#ifndef        _PWM_H
#define        _PWM_H

void PWM6_config(void);
#endif

pwm.c文件

#include "PWM.H"
#include "STC8H2K12U.h"

void PWM6_config(void)
{
        P_SW2 |= 0x80;                    //使能访问扩展RAM区特殊功能寄存器SFR
        PWMB_CCER1  &= ~0x10;        //写CCMR2前关闭CC6E通道
        PWMB_CCMR2  &= ~0x03; //CC6S输出
        PWMB_CCMR2  &= ~0x70;        //OC6M[2:0]3位置0;
        PWMB_CCMR2  |=  0x60; //PWM模式1输出:110
        PWMB_CCER1  |= 0x10;        // 开启比较输出, 高电平有效
        PWMB_ENO          |= 0x04; // 使能输出
        PWMB_CCR6   = 2000;                // 比较值, 控制占空比(高电平时钟数)
        PWMB_PS    |= 0x04;        // 选择IO,00:选择P2.1,01:选择P5.4,10:选择P0.1,11:选择P7.5
       
        PWMB_PSCR = 5;                // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMB_DTR  = 24;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMB_ARRH   = 0x0F;        // 自动重装载寄存器,  控制PWM周期
        PWMB_ARRL   = 0x9F;       
        PWMB_CCMR2 |= 0x08;        // 通道模式配置, PWM模式1, 预装载允许

        PWMB_BKR    = 0x80;                // 主输出使能 相当于总开关
        PWMB_CR1    = 0x81;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
        PWMB_EGR    = 0x01;                //产生一次更新事件, 清除计数器和与分频计数器, 装载预分频寄存器的值
//        PWMA_ISR_En = PWMA_IER;        //设置标志允许通道1~4中断处理
}
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-11 13:11 , Processed in 0.124660 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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