找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5325|回复: 2
收起左侧

125khz rfid读卡器经典电路剖析

[复制链接]
ID:510170 发表于 2021-9-15 11:41 | 显示全部楼层 |阅读模式
本帖最后由 ttmax3 于 2021-9-16 08:34 编辑

最近看到了一款125khz的串口读卡器,电路简单的没有朋友。比以前的读卡器方案4060+358的解决方案不知道简洁了多少。而且很稳定,距离也还算可以。我把图画下来了。供大家参考下,卖家把芯片的字磨掉了,但我估计就是这个单片机,电路如下图: 下载.png
有师兄会问,为啥串口不同P3.4输出,我个人觉得应该作者为了迷惑人吧。
他这里是通过第5脚输出,t2clko输出125khz的pwm信号,驱动l1和c1构成的lc震荡,然后通过d1检波,通过比较器来中断来获取卡片内容,我手里头没有这个芯片,我用stc8a8k64s4,直接输出125khz的pwm信号也是可以的,关键是还不占用单片机的任何中断,程序也很简洁。
void PWMInt(void)
{
    P_SW2 = 0x80;
    PWM1CR = 0x00;                              //PWM0/P2.0
    PWMCKS = 0x00;                              // PWM时钟为系统时钟
    PWMC   = 0x0058;                              //设置PWM周期为1000H个PWM时钟
    PWM1T1 = 0x0000;                             //在计数值为100H地方输出低电平
    PWM1T2 = 0x002C;                             //在计数值为500H地方输出高电平
    PWM1CR = 0x80;                               //使能PWM1输出
    P_SW2  = 0x00;
    PWMCR  |= 0x80;                               //启动PWM模块
//    PWMCR  &= ~0x80;                               //关闭PWM模块
}

只需要在开始的时候初始化它,就不用管了,它会一直输出125khz的pwm波形。

然后我们再开启比较器,就能读取到pwm波形了。

void CMPInt(void)
{
    CMPCR2 = 0x00;
    CMPCR2 &= ~0x80;                            //比较器正向输出
//  CMPCR2 |= 0x80;                             //比较器反向输出
    CMPCR2 &= ~0x40;                            //使能0.1us滤波
//  CMPCR2 |= 0x40;                             //禁止0.1us滤波
//  CMPCR2 &= ~0x3f;                            //比较器结果直接输出
     CMPCR2 |= 0x10;;                             //比较器结果经过16个去抖时钟后输出
    CMPCR1 = 0x00;
    CMPCR1 |= 0x30;                             //使能比较器边沿中断
//  CMPCR1 &= ~0x20;                            //禁止比较器上升沿中断
//  CMPCR1 |= 0x20;                             //使能比较器上升沿中断
//  CMPCR1 &= ~0x10;                            //禁止比较器下降沿中断
//  CMPCR1 |= 0x10;                             //使能比较器下降沿中断
    CMPCR1 &= ~0x08;                            //P3.6为CMP+输入脚
//  CMPCR1 |= 0x08;                             //ADC输入脚为CMP+输入教
//  CMPCR1 &= ~0x04;                            //内部参考电压为CMP-输入脚
    CMPCR1 |= 0x04;                             //P3.7为CMP-输入脚
//    CMPCR1 &= ~0x02;                            //禁止比较器输出
    CMPCR1 |= 0x02;                             //使能比较器输出
    CMPCR1 |= 0x80;                             //开启比较器模块  
//    CMPCR1 &= ~0x80;                             //关闭比较器模块      
    EA = 1;
}

如果你通过示波器去查看p3.4脚的,你会得到一个还原了的pwm波形。
这个时候有波形了,但是还是没有用呀。怎么解决这个问题,这个时候就要用到比较器的虑波和去抖功能了。
CMPCR2 &= ~0x40;                            //使能0.1us滤波
//  CMPCR2 |= 0x40;                             //禁止0.1us滤波
//  CMPCR2 &= ~0x3f;                            //比较器结果直接输出
    CMPCR2 |= 0x10;                             //比较器结果经过16个去抖时钟后输出

把比较器去抖改为最大值    CMPCR2 |= 0x3F;                             //比较器结果经过63个去抖时钟后输出
这个时候又有师兄会问了。我pwm的的时钟是88,你的时钟是63,还是滤除不完全呀,还是会有的呀。你查看下手册,就会发现,比较器的去抖时间要剩以2,这个时候的时钟是126,完全滤除掉了,你怕读卡的时候有数据没有读到。你也可以设小点,我这个只是实验性质的。
好了,看看有没有大佬有时间写下这个解码的代码。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:307493 发表于 2021-10-7 17:45 | 显示全部楼层
不错  有没有完整的资料
回复

使用道具 举报

ID:151276 发表于 2022-3-15 16:58 | 显示全部楼层
求完整资料
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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