标题:
125khz rfid读卡器经典电路剖析
[打印本页]
作者:
ttmax3
时间:
2021-9-15 11:41
标题:
125khz rfid读卡器经典电路剖析
本帖最后由 ttmax3 于 2021-9-16 08:34 编辑
最近看到了一款125khz的串口读卡器,电路简单的没有朋友。比以前的读卡器方案4060+358的解决方案不知道简洁了多少。而且很稳定,距离也还算可以。我把图画下来了。供大家参考下,卖家把芯片的字磨掉了,但我估计就是这个单片机,电路如下图:
下载.png
(46.24 KB, 下载次数: 123)
下载附件
2021-9-15 11:42 上传
有师兄会问,为啥串口不同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,完全滤除掉了,你怕读卡的时候有数据没有读到。你也可以设小点,我这个只是实验性质的。
好了,看看有没有大佬有时间写下这个解码的代码。
作者:
qq378912453
时间:
2021-10-7 17:45
不错 有没有完整的资料
作者:
lxxkdx
时间:
2022-3-15 16:58
求完整资料
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1