[LKS32 软件]

[ LKS32MC037E开发板评测 ]+彩色LCD屏与色彩识别指示器

[复制链接]
115|4
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2023-1-16 17:13 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-1-16 17:16 编辑

LKS32MC037E开发板是专为电机驱动而设计的,但这不妨碍它在其它方面的应用。尽管LKS32MC037E的引脚资源不很多,程序存储空间也只有32K,然而它还是能够完成一定的功能设计的。这里就介绍一种可以进行色彩识别和样本标识的作品,其器件构成如图1所示。
1.jpg
1 器件构成

其中,为标识样本的色彩值,所采用的显示屏为彩色LCD屏,其几何尺寸为0.96寸,显示分辨率为160*80像素点,其实现的显示效果如图2所示。
2.jpg
2  LCD屏显示效果

LCD屏与开发板的连接关系如下:
SCL---P14
SDA---P16
RST---P04
DC ---P05
CS ---P06
BL ---P07

相关引脚输出高低电平的语句定义为:
#define OLED_SCLK_Set()   GPIO_WriteBit(GPIO1, GPIO_Pin_4,1)   //CLK
#define OLED_SCLK_Clr()   GPIO_WriteBit(GPIO1, GPIO_Pin_4,0)
#define OLED_SDIN_Set()   GPIO_WriteBit(GPIO1, GPIO_Pin_6,1)   //DIN
#define OLED_SDIN_Clr()   GPIO_WriteBit(GPIO1, GPIO_Pin_6,0)
#define OLED_RST_Set()    GPIO_WriteBit(GPIO0, GPIO_Pin_4,1)   //RES
#define OLED_RST_Clr()    GPIO_WriteBit(GPIO0, GPIO_Pin_4,0)
#define OLED_DC_Set()     GPIO_WriteBit(GPIO0, GPIO_Pin_5,1)   //DC
#define OLED_DC_Clr()     GPIO_WriteBit(GPIO0, GPIO_Pin_5,0)
#define OLED_CS_Set()     GPIO_WriteBit(GPIO0, GPIO_Pin_6,1)   //CS
#define OLED_CS_Clr()     GPIO_WriteBit(GPIO0, GPIO_Pin_6,0)
#define OLED_BLK_Set()    GPIO_WriteBit(GPIO0, GPIO_Pin_7,1)   //BLK
#define OLED_BLK_Clr()    GPIO_WriteBit(GPIO0, GPIO_Pin_7,0)


对应的引脚功能配置函数是:
void LCD_APP(void)
{
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_6;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO1, &GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_4;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO1, &GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO0, &GPIO_InitStruct);
}

实现SPI方式方式字节数据的函数为:
void LCD_Writ_Bus(u8 dat)
{
    u8 i;
    OLED_CS_Clr();
    for(i=0;i<8;i++)
    {
        OLED_SCLK_Clr();
        if(dat&0x80)
        {
                         OLED_SDIN_Set();
        }
        else
        {
             OLED_SDIN_Clr();
        }
        OLED_SCLK_Set();
        dat<<=1;
    }
    OLED_CS_Set();
}

以指定色彩清除屏幕的函数是:
void LCD_Clear(u16 Color)
{
    u16 i,j;
    LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
    {
       for (j=0;j<LCD_H;j++)
       {
          LCD_WR_DATA(Color);
       }
    }
}

实现图2所示效果的主程序为:
int main(void) {
    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    __enable_irq();
    OLED_BLK_Set();
    Lcd_Init();
    LCD_Clear(RED);
    BACK_COLOR=RED;
    LCD_ShowString(40,10,"LKS32MC037E",YELLOW);
    LCD_ShowString(40,30,"LCD Test",YELLOW);
    LCD_ShowString(40,55,"jinglixixi",YELLOW);
    while (1);
}

为了进行色彩的识别与标识,所用的色彩传感器为TCS34725,它是一款I2C接口的器件。
在测试时,发现其一直无法正常工作,这时才想到是功率底板的问题。


由图3可知,P0.4P0.5P0.6是被反电动势检测线路所占用的。
3.jpg
3  反电动势检测线路


此外,P0.7是被电压检测线路占用的,见图4所示。
4.jpg
4  电压检测线路


这样就需要重新规划引脚的使用,并脱离开功率底板的约束。
最终分配给TCS34725与开发板相连接的引脚关系为:
P06 ---SCL
P08---SDA


为此,TCS34725的引脚功能配置函数为:
void TCS34725_I2C_Init()
{
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Pin =   GPIO_Pin_6|GPIO_Pin_8;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO0, &GPIO_InitStruct);
}

设置数据引脚为输入、输出模式的函数分别为:
void TCS_SDA_IN()
{
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_8;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO0, &GPIO_InitStruct);
}

void TCS_SDA_OUT()
{
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_8;
    GPIO_InitStruct.GPIO_PuPd =  GPIO_PuPd_UP;
    GPIO_Init(GPIO0, &GPIO_InitStruct);
}

TCS34725的初始化函数为:
u8 TCS34725_Init(void)
{
        u8 id=0;
        TCS34725_I2C_Init();
        TCS34725_Read(TCS34725_ID, &id, 1);
        if(id==0x4D | id==0x44)
        {
                TCS34725_SetIntegrationTime(TCS34725_INTEGRATIONTIME_50MS);
                TCS34725_SetGain(TCS34725_GAIN_1X);
                TCS34725_Enable();
                return 1;
        }
        return 0;
}

其实现色彩识别的函数为:
u8 TCS34725_GetRawData(COLOR_RGBC *rgbc)
{
        u8 status = TCS34725_STATUS_AVALID;
        TCS34725_Read(TCS34725_STATUS, &status, 1);
        if(status & TCS34725_STATUS_AVALID)
        {
                rgbc->c = TCS34725_GetChannelData(TCS34725_CDATAL);        
                rgbc->r = TCS34725_GetChannelData(TCS34725_RDATAL);        
                rgbc->g = TCS34725_GetChannelData(TCS34725_GDATAL);        
                rgbc->b = TCS34725_GetChannelData(TCS34725_BDATAL);
                return 1;
        }
        return 0;
}

OLLED屏的配合下,TCS34725终于有检测结果了,见图5和图6所示。
5.jpg
5 检测电路

6.jpg
6检测结果

此时,再将LCD屏显示与TCS34725传感器结合起来就可以得到色彩标识的功效,见图7所示。
7.jpg
7 色彩标识效果

实现图7所示效果的主程序为:
int main(void) {
    u16 rv,gv,bv,fv;  
    SoftDelay(50000);
    __disable_irq();
    Hardware_init();
    sys_init();
    LCD_APP();
    Lcd_Init();
    LCD_Clear(BLACK);
    LCD_ShowString(20,10,"LKS32MC037E",RED);
    LCD_ShowString(20,30,"R:  G:  B:",YELLOW);
    LCD_color(RED);
    LCD_box(109,29,130,50);
    TCS34725_Init();
    TCS34725_GetRawData(&rgb);
    while(1)
    {
                TCS34725_GetRawData(&rgb);
                rv=rgb.r*255/rgb.c;
                gv=rgb.g*255/rgb.c;
                bv=rgb.b*255/rgb.c;
                LCD_ShowNum(0,50,rv,4,YELLOW);
                LCD_ShowNum(32,50,gv,4,YELLOW);
                LCD_ShowNum(64,50,bv,4,YELLOW);
                fv=((rv>>3)<<11)+((gv>>2)<<5)+(bv>>3);
                LCD_color(fv);
                SoftDelay(500000);
        }
}

此外,对其它色彩的识别效果如图8至图10所示。
8.jpg
图8 识别蓝色

9.jpg
图9 识别粉色

10.jpg
10 识别浅绿色


至此,LKS32MC037E开发板的测评目标就完成了,整体来说效果还是较为理想的。在此再次对活动的组织者和凌鸥创芯的产品表示感谢!


使用特权

评论回复
评论
forgot 2023-1-17 13:56 回复TA
优秀 
weifeng90| | 2023-1-16 22:52 | 显示全部楼层
LKS32MC037E输出的直接是RGB值吗?

使用特权

评论回复
jinglixixi|  楼主 | 2023-1-17 12:26 | 显示全部楼层
weifeng90 发表于 2023-1-16 22:52
LKS32MC037E输出的直接是RGB值吗?

TCS34725彩色传感器输出的是RGB值

使用特权

评论回复
麻花油条| | 2023-1-18 14:48 | 显示全部楼层
灵敏度还是不错的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则