硬币检测电路设计

一、来源:凡亿教育

第一场:硬币检测装置原理分析、电路设计以及器件选型_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1Zh4y1V7Px/?p=1&vd_source=43eb1cb50ad3175d7f3b9385905cd88f

二、开发软件:KEIL MDK

三、主控芯片:STM32F103C8T6

四、电路原理图设计、PCB绘制:立创EDA

五、涉及成品模块:0.96 inch OLED , STM32F103C8T6最小系统板

六、实物测试视频:

硬币检测电路测试视频

电路上有三个按键,第一个是进入校正模式(进入后功能变为切换要校正的硬币),第二个为更新硬币电压值(更新时需要将硬币放到线圈上),第三个按键为跳出校正(掉电不保护)

七、程序开源地址:

硬币检测电路/程序 · lovefoolnotme/开源项目 - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/lovefoolnotme/open-source-projects/tree/master/%E7%A1%AC%E5%B8%81%E6%A3%80%E6%B5%8B%E7%94%B5%E8%B7%AF/%E7%A8%8B%E5%BA%8F

#include "sys.h"
#include "usart.h"	
#include "delay.h"
#include "oled.h"
#include "bmp.h"
#include "ADC.h"
#include "key.h"
#include "IR2104.h"


extern uint8_t DMAEndFlag;		//0:DMA结束
extern uint8_t MeasUpdateFlag;		//测量更新标志,大约1s更新一次
extern uint16_t voltage;					//电压值,3位小数

uint8_t    key_value=0;
uint8_t    jiaozheng=0;
//1角,5角,1元
uint16_t nomoney =1190  ;
uint16_t yj      =1044 ;
uint16_t wj      =936 ;
uint16_t yy      =577 ;
//uint16_t wj_yy   =650 ;
//uint16_t wj_yj   =886 ;
//uint16_t yj_yy   =677 ;
uint16_t gap     =50   ;
int main(void)
{	
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	delay_init();	                //延时函数初始化  
  Key_Configuration();
	ADC_Config();
	IR2104_Config();
	//加这个延时是等待OLED屏幕启动
	delay_ms(100);   
	OLED_Init();
	OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
	OLED_Clear();
	OLED_Refresh();
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
	
  while(1)
	{
//判断ADC的DMA传输是否完成
    ADC_DMA_End_Detection();		
		if(!DMAEndFlag) VI_Seperation();
		if(!MeasUpdateFlag)
		{
//计算电压,单位mv			
			VI_Calc();
//显示电压,单位mv			
			OLED_ShowNum(88,10,voltage,5,8,1);
		}

//扫描按键
key_value=Key_Scan();		
		
/*******************************************************校正开始*******************************************************/
//校正电压值
if(key_value==1)
{
		 while(Key_Scan()==1);   //等待松开按键
     key_value=0;
     //开始校正电压值
     OLED_Clear();		 
  while(1)
   {
		key_value=Key_Scan();
    while(Key_Scan()!=0);		  //等待松开按键 
		ADC_DMA_End_Detection();		
		if(!DMAEndFlag) VI_Seperation();
		if(!MeasUpdateFlag)
		{			
			VI_Calc();
		}
			//校正yijiao 
			if(jiaozheng==0)
			{ 
				OLED_ShowString(0,0,"jiaozheng!",8,1);
			  OLED_ShowString(0,30,"yijiao:",8,1);
		    OLED_ShowNum(80,30,yj,4,8,1);
				OLED_ShowString(0,50,"voltage:",8,1);
		    OLED_ShowNum(80,50,voltage,4,8,1);
			  OLED_Refresh();
			}
			//校正wujiao
			else if(jiaozheng==1)
			{
				OLED_ShowString(0,0,"jiaozheng!",8,1);
			  OLED_ShowString(0,30,"wujiao:",8,1);
		    OLED_ShowNum(80,30,wj,4,8,1);
				OLED_ShowString(0,50,"voltage:",8,1);
		    OLED_ShowNum(80,50,voltage,4,8,1);
			  OLED_Refresh();
			}
			//校正yiyuan
			else if(jiaozheng==2)
			{
				OLED_ShowString(0,0,"jiaozheng!",8,1);
			  OLED_ShowString(0,30,"yiyuan:",8,1);
		    OLED_ShowNum(80,30,yy,4,8,1);
				OLED_ShowString(0,50,"voltage:",8,1);
		    OLED_ShowNum(80,50,voltage,4,8,1);
			  OLED_Refresh();
			}
 
			switch(key_value)
		  {
				case 0: break;
				//进入下一校正前清除屏幕
				case 1: jiaozheng++;if(jiaozheng>2) jiaozheng=0; OLED_Clear();break;
				//校正值保存
				case 2: {
				if(jiaozheng==0) yj=voltage;
        else if(jiaozheng==1) wj=voltage;
        else if(jiaozheng==2) yy=voltage;					
				else ;
				};break;
				case 3: break;
        default:break;				
			}
			//退出
			if(key_value==3)
			{
			  jiaozheng=0;
				key_value=0;
				OLED_Clear();
				break;
			}
				
  }	

}
/*******************************************************校正结束*******************************************************/
		
//1.  1角硬币放在线圈上
		if(((yj-gap)<voltage)&&(voltage<(yj+gap)))
       OLED_ShowPicture(0,0,64,64,yijiao,1);
//2.  5角硬币放在线圈上
		else if(((wj-gap)<voltage)&&(voltage<(wj+gap)))
       OLED_ShowPicture(0,0,64,64,wujiao,1);
//3.  1元硬币放在线圈上
		else if(((yy-gap)<voltage)&&(voltage<(yy+gap)))
       OLED_ShowPicture(0,0,64,64,yiyuan,1);		
//4.  没有硬币放在线圈上
		else
			 OLED_ShowPicture(0,0,64,64,college_logo,1);

//刷新屏幕		
		OLED_Refresh();
	}
}

八、原理图、PCB开源地址:

  https://oshwhub.com/talented_fish/fan-yi-jiao-yu-ying-bi-jian-ce-dian-luicon-default.png?t=N7T8http:// https://oshwhub.com/talented_fish/fan-yi-jiao-yu-ying-bi-jian-ce-dian-lu

九、部分踩坑:购买的LDO,AMS1117 12V-5V存在质量问题,输入12V直接损坏,后面发现是质量问题后使用10V输入电路也可正常工作。

十、原理图设计讲解与经验(凡亿教育):

10.1 检测的原理:涡流效应

在图中,可以看到,线圈中加入交变电流时,可以产生涡流效应,类似于变压器,硬币类似于负载,当硬币加入时相当于负载接入,电流会增大,这个时候后边的电流增大前边的电流也会变大,检测前边电路的电压即可知道是否有负载接入,主要是看电压值,所以其实这个电路不仅可以检测硬币,还可以检测其他金属物品,但是需要自己指定。我们将1角、5角、1元硬币分别放上线圈查看前边电路的电压检测值即可知道不同硬币在电路中对应的电压值,并且修改程序来判别电压达到判别硬币的功能。

10.2 检测电路的设计

先从后面开始看,并联的C1、C2合计为2UF,然后我们会在线圈接口接一个14UH的线圈(相当于电感),此时C1、C2和线圈构成一个LC并联,R1焊接1R电阻,C3电容是用来隔离直流(到C3的型号是一个交流和直流叠加的型号),C5焊接470NF电容,L3焊接68UH电感,C5和L3构成一个LC串联,R23焊接75R3W的金属膜电阻。为什么这么设计:

(1)为了节能。(LC并联)当LC并联谐振时,电感(线圈)中的电流和电容(C1、C2)中电流几乎相等,其他部分的阻抗变化几乎对能量消耗没有影响。

谐振频率计算公式(并联和串联都是这样):

(2)提高灵敏度。(LC串联电路)

LC串联谐振时等效电阻最小,LC并联谐振时等效电阻最大。

我们输入的交变信号频率是取LC串联电路的谐振频率,当硬币接入时,后边电路前边电路电流增大,电感L减小,在上面的公式可以看出谐振频率会增大(下图为LC并联的f与r的关系图),相当于放入硬币前我们的等效电阻与频率曲线为红色曲线,放入硬币之后为绿色曲线。我们输入的频率没有变,而谐振频率后移,等效电阻减小了,我们要检测的就是LC并联处TP5测试点的电压,这里的等效电阻减小,则电压会减小。这是第一处灵敏度增加。电流增大,则TP4处的电压减小(功率守恒),TP4的电压为R1电阻和后面LC并联的电压之和,电流增大,R1上的电压增大,而TP4点的电压减小,只能在LC并联上减少更多的电压来形成整体电压下降。这是第二处灵敏度增加。注意R23电阻的功率按如此计算(12V*50%=6V,6*6/75=0.48W【串联谐振时电阻极小】,远小于3W,这样放热较小)

TP4点电压为什么减小?

10.3 峰值检波电路

 

 输入交流信号,运放输出与二极管负极之间有一个导通压降,V+>V-期间输出端电压上升,电容充电。V+<V-期间,输出端电压下降,由于二极管存在,电容不能向运放放电,所以电容向右边的电阻放电,但是速度极慢,只放少许电压即又开始充电,几乎维持在一个水平线上(轻微波澜)。以此起到检测峰值的作用。

D2二极管起到钳位作用,让输入不低于0.7V。

R7电阻起到限流作用(V+>V-时充电会有较高脉冲)

R4(NC)预留做电流衰减

R5(NC)预留起放大作用

R10起隔离作用

10.4 半桥驱动电路

12V通过D1向VB充电,同时防止VB向VCC引脚充电。

R18和R19起到隔离的作用(MOS管特性)

R20和R21起到下拉的作用(防止静电,保持稳定)

D4和D5用于在MOS关断时放电加快关断速度

10.5 单片机最小系统板电路

 10.6 OLED模块 

10.7 电源电路

10.8 按键电路

十一、实物调试 

11.1 先测试按键和屏幕是否正常使用,电压值是否正确采集

11.2 测试实际并联谐振频率

(1)使单片机PWM输出一路2KHZ占空比50%的方波

(2)按如下图更改电路

(3)用示波器测试图中SIN_OUT位置处的波形,测试其频率

(4)将电路恢复原来的位置,测试真实串联谐振频率(下图TP4点的信号,示波器接入)

 

 

 

11.3 上图测试出来LC串联谐振的实际频率为28.571KHZ,所以我们修改之前设置的单片机输出的PWM,为28.6KHZ(占空比50%) 

再次测试11.2中的TP4点的信号发现信号变为漂亮的正弦波信号。

11.4 将硬币挨个放到线圈上,观察不同的硬币导致最后呈现的电压,在程序中记录

11.5 由于这个电路会受到温度变化(温度引起阻值变化导致电压变化),所以需要在软件中设计一个矫正电压值的功能,这也是我们为什么需要设计三个按键

十二、OLED图片取模

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值