0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对基于NUC472开发板的机智云功能板进行编程

Dtzl_SCAnalytic 来源:新唐MCU技术论坛 作者:jinglixixi 2021-08-12 14:09 次阅读

在NUC472开发板上配有Arduino接口,若以该接口与机智云的功能板相配合,则可以有效地拓展该开发板的功能。就目前来讲,对机智云功能板提供支持的核心底板有两种,一种是基于STM32F103的,另一种则是基于ATMEGA328的。以NUC472开发板来支持机智云功能板则可以增加一种对其进行支持的核心底板。 就机智云功能板来说,它提供了RGB_LED、小电机、红外感应器、小按键、温湿度传感器、WIFI模块及OLED接口等,如图1所示。这里仅对RGB_LED、小电机、红外感应、小按键及OLED接口的使用加以介绍。此外,配合片内的RTC、UART、A/D等资源,还实现了RTC电子时钟、串行通讯及A/D采集等功能。

要对机智云功能板进行编程,主要涉及各引脚的关系构建、GPIO口输入/输出功能的设置及高低电平输出语句的定义、输入电平的读取与判别、脉冲信号与时序的模拟等。为了便于理解,这里按由简单到复杂的顺序来进行。

1.小电机

功能板上提供了一个小直流电机,其接口电路如图2所示。它是通过L9110进行驱动,当在IA和IB两端施加相异的电平时,就可控制电机的正反转。

30e5af4a-f76f-11eb-9bcf-12bb97331649.jpg

图2 电机电路

电机与NUC472的连接关系为:

IA-PC11 IB-PC10

小电机的初始化函数为:

void MODER_init(void){GPIO_SetMode(PC, BIT11, GPIO_MODE_OUTPUT); // IAGPIO_SetMode(PC, BIT10, GPIO_MODE_OUTPUT); // IBPC10 = 0;PC11 = 0;}

使用如下高低电平输出语句即可使电机转动,互换高低电平即可实现反向转动。

PC11 = 1; //输出高电平 PC10 = 0; //输出低电平

2.小按键

利用板载的小按键,可进行相应功能的控制,其电路如图3所示。

图3 按键电路

按键与NUC472的连接关系为:

KEY1- PA10 KEY2- PA9

按键的初始化函数为:

void KEY_init(void)

{ // K1、K2GPIO_SetMode(PA, BIT10, GPIO_MODE_INPUT); // KEY1GPIO_SetMode(PA, BIT9, GPIO_MODE_INPUT); // KEY2}

K2键控制电机转动的语句如下:

PC10 = 0;if (PA9 != 1) // K2{ PC10 = 1; // MODOR}else{ PC10 = 0;}

3.红外感应

板载的红外感应器是用于避障控制的,其电路如图4所示。

31250ea6-f76f-11eb-9bcf-12bb97331649.jpg

图4 红外感应电路

电路的作用作用为:在TCRT5000的一端是一个可发出红外光的二极管,另一端是一个接受器。在无遮挡的情况下,受到照射使电路导通并在AOUT端输出低电平。在LM393的电路中,其作用是充当一个AOUT与电位器设定电位的比较器,以产生阀值开关的效果。当IR_OUT为低电平时,LED2被点亮,否则被熄灭。通过采集IR_OUT的状态即可启动感应开关的作用。

IR_OUT与NUC472的连接关系为:

IR_OUT - PF9

IR_OUT的初始化函数为:

void IR_init(void) { GPIO_SetMode(PF, BIT9, GPIO_MODE_INPUT); // IR-OUT }

以IR控制电机正反转的语句如下:

if (PF9 != 1) { PC11 = 1; PC10 = 0; } else { PC11 = 0; PC10 = 1; }

4.RGB_LED

通常RGB_LED的使用是无需外围驱动电路的,故使用起来十分简单,只需输出高低电平即可控制其点亮与否。然而在机智云的功能板上却是以P9813来驱动和控制RGB_LED,其接口电路如图5所示。

319a4748-f76f-11eb-9bcf-12bb97331649.jpg

图5 RGB_LED接口电路

那使用P9813又有何特别之处呢?其主要用途在于,可以串行方式来传送控制信号,并起到控制RGB亮度的作用。而通常情况下,这是需要通过PWM来实现的。在信号传送过程中,是通过32个脉冲信号来把控制数据传递到P9813中,再由RGB引脚加以输出来控制RGB_LED。

P9813与NUC472的连接关系为:

A0-PE1 SCL- PD10 SDA-PD12

RGB_LED的初始化函数为:

void RGB_init(void){GPIO_SetMode(PD, BIT12, GPIO_MODE_OUTPUT); // SDAGPIO_SetMode(PD, BIT10, GPIO_MODE_OUTPUT); // SCLGPIO_SetMode(PE, BIT1, GPIO_MODE_OUTPUT); // A0PE1 = 0;}

RGB_LED的控制函数如下:

void RGB_Write_Data(uint8_t R,uint8_t G,uint8_t B){ uint32_t RGB_Data = 0; uint8_t i; RGB_Data |= 0xC0000000; RGB_Data |= ((uint32_t)((~B) & 0xc0)) 《《 22; RGB_Data |= ((uint32_t)((~G) & 0xc0)) 《《 20; RGB_Data |= ((uint32_t)((~R) & 0xc0)) 《《 18; RGB_Data |= ((uint32_t)B) 《《 16; RGB_Data |= ((uint32_t)G) 《《 8; RGB_Data |= R; for (i=0;i《32;i++) { if((RGB_Data & 0x80000000) != 0) { SDA_1; } else { SDA_0; } RGB_Data 《《= 1; SCL_0; SCL_0; SCL_1; SCL_1; }SDA_0; for (i=0;i《32;i++) { SCL_0; SCL_0; SCL_1; SCL_1; } }

实现呼吸灯的程序为:

uint8_t i=0; RGB_init(); PE1 = 1; RGB_Write_Data(0x00,0x00,0x00); for (i=0;i《125;i++) { RGB_Write_Data(0x00,0x00,i); delay_1ms(20); } for (i=125;i》0;i--) { RGB_Write_Data(0x00,0x00,i); delay_1ms(20); } for (i=0;i《125;i++) { RGB_Write_Data(0x00,0x00,i); delay_1ms(20); } for (i=125;i》0;i--) { RGB_Write_Data(0x00,0x00,i); delay_1ms(20); }

实现色彩环的程序如下:

while(1){ RGB_Write_Data(120,0x00,0x00); RGB_del(5); RGB_Write_Data(0x00,120,0x00); RGB_del(5); RGB_Write_Data(0x00,0x00,120); RGB_del(5); RGB_Write_Data(120,120,0x00); RGB_del(5); RGB_Write_Data(0x00,120,120); RGB_del(5); RGB_Write_Data(120,0x00,120); RGB_del(5); RGB_Write_Data(120,120,120); RGB_del(5); RGB_Write_Data(0x00,0x00,0x00); RGB_del(5); }

使用红外感应器作为感应提示器的语句如下:

if (PF9 != 1) // IR{ RGB_Write_Data(120,0x00,0x00); }else{ RGB_Write_Data(0x00,120,0x00); }

5.OLED接口

在功能板上提供了OLED接口,该接口适用于SPI接口的演示屏,其引脚分配如图8所示。由于LCD5110屏使用的十分广泛,故这里以该接口实现LCD5110屏的显示。由于两者的接口并不完全一致,因此需要稍加修改,具体的做法是将GND与NC引脚连接,来为LCD5110的SCE引脚提供片选信号。其它引脚只需修改引脚定义即可。

31f2607c-f76f-11eb-9bcf-12bb97331649.png

图8 OLED接口

LCD5110屏与NUC472的连接关系为:

CS---GND

RST---PD2

D/C---PD0

SDIN--PD3

SCLK--PD6

LED+--PD7

LCD5110各引脚输出高低电平的定义语句如下:

#define SetLCD_RST_High() PD2 = 1;#define SetLCD_RST_Low() PD2 = 0;#define SetLCD_DC_High() PD0 = 1;#define SetLCD_DC_Low() PD0 = 0;#define SetLCD_SDIN_High() PD3 = 1;#define SetLCD_SDIN_Low() PD3 = 0;#define SetLCD_SCLK_High() PD6 = 1;#define SetLCD_SCLK_Low() PD6 = 0;

LCD5110的引脚配置函数如下:

void GPIO_Configuration(void){ GPIO_SetMode(PD, BIT0, GPIO_MODE_OUTPUT); GPIO_SetMode(PD, BIT2, GPIO_MODE_OUTPUT);
GPIO_SetMode(PD, BIT3, GPIO_MODE_OUTPUT); GPIO_SetMode(PD, BIT6, GPIO_MODE_OUTPUT); GPIO_SetMode(PD, BIT7, GPIO_MODE_OUTPUT); }

初始化函数为:

void LCD_init(void){ SetLCD_RST_Low(); delay_1us(); SetLCD_RST_High(); delay_1us(); delay_1us(); LCD_write_CMD(0x21); LCD_write_CMD(0xc0); LCD_write_CMD(0x06); LCD_write_CMD(0x13); LCD_write_CMD(0x20); LCD_Clear(); LCD_write_CMD(0x0c);}

主函数为:

int main(void){ GPIO_Configuration(); PD7 = 1; LCD_Init(); LCD_Clear();
LCD_write_english_string(2,0,“NUC472 +”); LCD_write_hanzi(2,3,6); LCD_write_hanzi(14,3,7); LCD_write_hanzi(26,3,8);
LCD_write_hanzi(38,3,9); LCD_write_hanzi(50,3,10); LCD_write_hanzi(62,3,11);}

其它驱动LCD110屏显示的函数基本无需变化,运行后的显示效果如图9所示。

鉴于NUC472的资料相对较少,这里仅以机智云功能板的应用为题对NUC472开发板的应用进行了一些探索,相对来讲NUC472使用起来还是比较易于上手的。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4942

    浏览量

    97176
  • 机智云
    +关注

    关注

    2

    文章

    579

    浏览量

    26367

原文标题:基于NUC472开发板的机智云功能板控制

文章出处:【微信号:SCAnalyticsPlatform,微信公众号:IBM大数据技术团队】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NUC472能够配置成两个独立的usb接口吗?

    NUC472的引脚配置中,除了USB0,还有USB1(USB1_D+ 和USB1_D-),能够配置成两个独立的usb接口么?
    发表于 01-17 06:26

    机智微信开发板】申请啦-微信公开课

    (STM)共同推出,集成微信硬件Airkiss2.0 WiFi协议,以及微信硬件协议,对接微信硬件平台。智能宠物屋开发板用来展示微信硬件平台的Airkiss 2.0近场发现功能
    发表于 01-12 16:04

    【NuMaker-PFM-NUC472试用申请】基于NUC472的语音录放装置

    项目名称:基于NUC472的语音录放装置试用计划:使用计划:1.首先收集该开发板的相关资源2.构建基本的开发环境3.测试相关例程的功能并学习其程序设计的方法4.利用
    发表于 05-17 16:17

    【NuMaker-PFM-NUC472试用体验】初次接触与编程测试

    NUC472的产品,只不过那是一款功能相对简单些的NuTiny-SDK-NUC472开发板,如图2所示。其基本配置为主频72MHz、512KB Flash、64KB SRAM,MCU是
    发表于 05-23 10:50

    【NuMaker-PFM-NUC472试用体验】基于NUC472开发板机智功能控制(兼结题报告)

    。就目前来讲,对机智功能提供支持的核心底板有两种,一种是基于STM32F103的,另一种则是基于ATMEGA328的。以NUC472
    发表于 07-06 16:44

    新唐NUC472开发板接入机智iot开发平台,实现远程控制等功能

    开发板功能。就目前来讲,对机智功能提供支持的核心底板有两种,一种是基于STM32F103的
    发表于 09-12 16:17

    新唐方案分享:基于NUC472开发板的物联网开发,接入机智

    支持的核心底板有两种,一种是基于STM32F103的,另一种则是基于ATMEGA328的。以NUC472开发板来支持机智功能
    发表于 09-16 16:06

    使用NUC472的两个USB与PC连接

    使用 NUC472 的两个USB 界面,一个USB 界面与USB 设备连接,另一个界面作为USB 枢纽与PC 连接。应用程序进行预处理,然后在 NUC472 收到USB 设备数据后将其传送到PC。 您可以在下
    发表于 08-22 08:30

    请问NUC472最大IO速度是多少?

    最近有个项目,考虑使用NUC472 买了个开发板,直接控制IO,输出翻转速度才1Mhz,不够用啊,nuc472能不能满足10Mhz的IO翻转输出啊,如何测试。
    发表于 08-22 07:17

    如何使用NUC472的Ethernet函数定期向网络主机报告消息

    应用程序: 本代码使用 Ethernet 函数定期向主机报告消息 。 BSP 版本: NUC472系列 BSP CMSIS V3.03.000 硬件: NuTiny-SDK-NUC472 此示例
    发表于 08-23 06:28

    请问NUC472支持几个USB接口?

    NUC472的引脚配置中,除了USB0,还有USB1(USB1_D+ 和USB1_D-),能够配置成两个独立的usb接口么?
    发表于 08-29 08:08

    请问NUC472的BSP下载不了是为什么?

    NUC472的BSP下载不了
    发表于 08-30 07:48

    使用NUC472的Ethernet函数定期向网络主机报告消息

    应用程序: 本代码使用 Ethernet 函数定期向主机报告消息 。 BSP 版本: NUC472系列 BSP CMSIS V3.03.000 硬件: NuTiny-SDK-NUC472 此示例
    发表于 09-01 07:00

    IOT_Shield -机智第三代开发板的原理图

    机智第三代开发板的原理图,我还有机智其他的质料,需要的话可以找我!
    发表于 11-24 10:32 33次下载

    机智AIoT开发平台的功能服务

    本文由机智开发者分享,介绍使用机智物联网平台搭配机智
    的头像 发表于 07-01 15:14 1298次阅读