这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【EFM8BB52】脑电小车——主题框架和原理图(三)

共3条 1/1 1 跳转至

【EFM8BB52】脑电小车——主题框架和原理图(三)

工程师
2022-01-05 20:02:19     打赏

脑电小车是通过脑波注意力检测意念,分析人的专注度,控制小车前进的速度,进而锻炼儿童的专注力。

系统框架如下:

使用脑电波检测设备采集脑电波信息,脑电波内置蓝牙模块主动发送信息数据包,然后使用HC05蓝牙模块作为从机接受数据(其他型号不行),然后使用EFM8BB52单片机作为信息数据据接受处理芯片,通过算法提取有效数据,根据有效数据分析出穿戴者的专注度,专注度采用两种表现方式,一种通过OLED显示出来数值,一种是通过将专注度指转化为PWM占空比从而控制电机的转速来控制小车前进的速度。




image.png


原理图:

做了一个小的拓展板,可以直接插在板子上面,比较方便,电机驱动使用了6122一路控制比较小巧


1642655290691478.png

1642655552910506.jpg




关键词: EFM8BB52     脑电    

工程师
2022-01-06 16:41:48     打赏
2楼
/**********************接受脑电波数据********************************/
#include <SI_EFM8BB52_Register_Enums.h>
 bit receive_ok=0;           //接收数据完成标志
 //串口中用到u8 receive[36]={0};        //接收缓存
 void UartInit()		//9600bps@11.0592MHz{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		    //设定定时初值
	TH1 = 0xFD;		    //设定定时器重装值
	ET1 = 0;		    //禁止定时器1中断
	ES  = 1;			//允许串口1中断
	TR1 = 1;		    //启动定时器1     }
 void main(){
	variable_init();//外设初始化
	UartInit();//串口初始化
	EA=1;     //打开CPU总中断开关	
	while(1)
	{
		if(receive_ok)
		{
			receive_ok = 0;
			//处理你的代码
			ES=1;//再次允许串口中断
		}	
	}}
 
 //串口中断服务程序void UART_Rountine() interrupt 4{
	static u8 count;//串口接收计数的变量	
	if(RI)
	{
		RI=0;
		receive[count]=SBUF;
		if(count==0&&receive[count]==0xAA)       //同步信号 
		{  			count++;  		}  	
		else if(count==1&&receive[count]==0xAA)  //同步信号
		{  
		 	count++;  		}
		else if(count==2&&receive[count]==0x20)  //十进制32,表示后面要接收32个字节数据  
		{  			count++;  		}    		else if(count==3&&receive[count]==0x02)  //代表信号标识,下一个数据即为信号值数据 
		{  			count++;  		}  		else if(count==4)						 //信号值
		{  			count++;
		}
		else if(count==5&&receive[count]==0x83)	 //代表EEG信号开始了
		{  			count++;
		}
		else if(count==6&&receive[count]==0x18)  //十进制24,代表EEG Power是由24个字节组成的
		{  			count++;
		}
		else if (count >=7 && count < 35)
		{
			count++;  //一直加到receive[35]
		}        		else if(count==35)//最后一个数据,判断校验和,数据多的话是求和
		{  			count=0;      //计数清0  
			receive_ok =1;//串口接收完成标志,在主程序中判断,并做处理,然后清0
			ES=0;         //暂时关中断,数据处理完毕后再ES=1;  
		}  		else//以上有任何一个条件不满足,将技术清0 
		{  
		 	count=0;//判断不满足条件就将计数值清零  
		}
	}    	
}



工程师
2022-01-07 09:48:43     打赏
3楼
/*********接受脑电波数据*********************************/
#include <SI_EFM8BB52_Register_Enums.h>  
 bit receive_ok=0;           //接收数据完成标志
 //串口中用到u8 receive[36]={0};        //接收缓存
 void UartInit()		//9600bps@11.0592MHz{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		    //设定定时初值
	TH1 = 0xFD;		    //设定定时器重装值
	ET1 = 0;		    //禁止定时器1中断
	ES  = 1;			//允许串口1中断
	TR1 = 1;		    //启动定时器1     }
 void main(){
	variable_init();//外设初始化
	UartInit();//串口初始化
	EA=1;     //打开CPU总中断开关	
	while(1)
	{
		if(receive_ok)
		{
			receive_ok = 0;
			//处理你的代码
			ES=1;//再次允许串口中断
		}	
	}}
 
 //串口中断服务程序void UART_Rountine() interrupt 4{
	static u8 count;//串口接收计数的变量	
	if(RI)
	{
		RI=0;
		receive[count]=SBUF;
		if(count==0&&receive[count]==0xAA)       //同步信号 
		{  			count++;  		}  	
		else if(count==1&&receive[count]==0xAA)  //同步信号
		{  
		 	count++;  		}
		else if(count==2&&receive[count]==0x20)  //十进制32,表示后面要接收32个字节数据  
		{  			count++;  		}    		else if(count==3&&receive[count]==0x02)  //代表信号标识,下一个数据即为信号值数据 
		{  			count++;  		}  		else if(count==4)						 //信号值
		{  			count++;
		}
		else if(count==5&&receive[count]==0x83)	 //代表EEG信号开始了
		{  			count++;
		}
		else if(count==6&&receive[count]==0x18)  //十进制24,代表EEG Power是由24个字节组成的
		{  			count++;
		}
		else if (count >=7 && count < 35)
		{
			count++;  //一直加到receive[35]
		}        		else if(count==35)//最后一个数据,判断校验和,数据多的话是求和
		{  			count=0;      //计数清0  
			receive_ok =1;//串口接收完成标志,在主程序中判断,并做处理,然后清0
			ES=0;         //暂时关中断,数据处理完毕后再ES=1;  
		}  		else//以上有任何一个条件不满足,将技术清0 
		{  
		 	count=0;//判断不满足条件就将计数值清零  
		}
	}    	
}



共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]