【作品合集】嘉楠科技01 Studio K230开发板测评 产品介绍: 01科技(01Studio)CanMV K230 AI开发板识是基于嘉楠科技全新K230边缘计算芯片(性能可达K210的13.7倍)。板载1080P/60FPS高清摄像头,可外接显示屏和1080 P高清MI显示器。尺寸只有名片大小,方便部署到各类人工智能视觉应用场景。 活动详情地址:【嘉楠堪智K230开发板试用体验】 作品合集: 作者:杯pp【嘉楠堪智K230开发板试用体验】K230开发板开箱体验【嘉楠堪智K230开发板试用体验】基础外设功能测试(KEY、UART)【嘉楠堪智K230开发板试用体验】K230机器视觉相关功能体验【嘉楠堪智K230开发板试用体验】K230 AI 功能体验 作者:jf_18702540【嘉楠堪智K230开发板试用体验】+开箱测评+通电及点灯【嘉楠堪智K230开发板试用体验】+02+基本功能测试【嘉楠堪智K230开发板试用体验】+03+巡线+舵机方向控制 作者:凯奇秘鲁【嘉楠堪智K230开发板试用体验】01 Studio K230开发板开箱评测【嘉楠堪智K230开发板试用体验】01 Studio K230开发板Test1——舵机控制【嘉楠堪智K230开发板试用体验】01 Studio K230开发板Test——圆形检测与二维码检测【嘉楠堪智K230开发板试用体验】01 Studio K230开发板Test2——手掌,手势检测,字符检测 作者:jf_15811252【嘉楠堪智K230开发板试用体验】+ 物体边沿检测【嘉楠堪智K230开发板试用体验】+ 视频录制测试【嘉楠堪智K230开发板试用体验】+二维码识别【嘉楠堪智K230开发板试用体验】+OCR实现 作者:ouxiaolong【嘉楠堪智K230开发板试用体验】CanMV K230 开发环境搭建【嘉楠堪智K230开发板试用体验】CanMV K230 读取AHT10【嘉楠堪智K230开发板试用体验】CanMV K230 连接无线网【嘉楠堪智K230开发板试用体验】CanMV K230 MQTT通信【嘉楠堪智K230开发板试用体验】CanMV K230 RTSP推流【嘉楠堪智K230开发板试用体验】CanMV K230 环境监测 作者:chen000000009【嘉楠堪智K230开发板试用体验】开箱+硬件介绍【嘉楠堪智K230开发板试用体验】SDK部署 作者:h1654155781.3968【嘉楠堪智K230开发板试用体验】实现文字提取【嘉楠堪智K230开发板试用体验】在小核上通过核间通讯实现对大核上 GPIO 的操作【嘉楠堪智K230开发板试用体验】实现一个 AI 识别物品模型的流程【嘉楠堪智K230开发板试用体验】在小核上移植 LVGL同时使用 2.5D GPU 作者:流年【嘉楠堪智K230开发板试用体验】高校竞赛-K230开发板-1【嘉楠堪智K230开发板试用体验】高校竞赛-2025电赛-E题【嘉楠堪智K230开发板试用体验】高校竞赛-图传基于micropython【嘉楠堪智K230开发板试用体验】高校竞赛-2025电赛-C题 作者:cszzlsw【嘉楠堪智K230开发板试用体验】第一弹:迟到的OLED屏幕驱动,巨坑解决【嘉楠堪智K230开发板试用体验】通过K230连接商业物联网平台CTWING 第一期合集: 微五科技CF5010RBT60开发板测评作品合集 第二期合集: 创龙科技TLT113/TL3562-MiniEVM开发板测评作品合集
2025-09-03 10:30
ADC两个通道采集电压,一路AIN0采集外部电位器,一路采集内部温度,并使用DMAC转运 添加 stack ADC-DMAC 配置扫描通道 设置ADC转换完成为DMAC触发源 设置中断回调函数 volatile int dmac_complete_flag = 0; uint16_t adc_buffer[2]; void ADC_DMA_Init(void) { fsp_err_t err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); assert(err == FSP_SUCCESS); err = R_ADC_ScanCfg(&g_adc0_ctrl,&g_adc0_channel_cfg); assert(err == FSP_SUCCESS); g_transfer1_cfg.p_info->p_dest = adc_buffer; err = R_DMAC_Open(&g_transfer1_ctrl,&g_transfer1_cfg); assert(err == FSP_SUCCESS); err = R_DMAC_Enable(&g_transfer1_ctrl); assert(err == FSP_SUCCESS); } void g_transfer1_callback(transfer_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); dmac_complete_flag = 1; } 测试代码 void ADC_DMA_Test(void) { fsp_err_t err; adc_info_t adc_info; err = R_ADC_ScanStart(&g_adc0_ctrl); assert(err == FSP_SUCCESS); while(!dmac_complete_flag); dmac_complete_flag = 0; err = R_DMAC_Reconfigure(&g_transfer1_ctrl,g_transfer1_cfg.p_info); assert(err == FSP_SUCCESS); err = R_ADC_InfoGet(&g_adc0_ctrl, &adc_info); assert(err == FSP_SUCCESS); float V = (3.3 * (float)adc_buffer[0]) / 4096 ; printf(\"电位器采集电压:%.2f\\\\n\\\\r\",V); float V1 = (3.3 * (float)adc_info.calibration_data) / 4096 ; float Vs = (3.3 * (float)adc_buffer[1] ) / 4096 ; float temperature = ( Vs - V1 ) / ( 4.0/1000 ) + 127.0f; printf(\"芯片内部温度%.2f\\\\n\\\\r\",temperature); }
2025-09-03 09:04
关于PWM控制背光亮度原理的详细介绍 一文读懂PWM调光:为何你的屏幕亮度可随心而变? 你是否曾好奇,手机或电脑屏幕的亮度是如何从最暗无级调整到最亮的?这背后的魔法,主要归功于一项名为PWM(脉冲宽度调制) 的技术。本文将用通俗易懂的方式,为你揭开PWM调光的神秘面纱。 一、核心原理:用“开关”代替“旋钮” 想象一下两种控制灯泡亮度的方法: 模拟调光(旋钮式):像一个老式的调光台灯,通过旋钮改变输入电压的高低。电压高,灯就亮;电压低,灯就暗。这很直观,但用于LED时有个致命缺点:降低电压会改变LED的发光色温(颜色会偏色),且低电压下工作效率不高。 PWM调光(开关式):PWM采用了另一种更聪明的方法。它不给LED一个持续变弱的电流,而是让LED始终在 **“全开”**和 “全关” 两种状态之间极速切换。 全开(On):以最大、最稳定的额定电流驱动LED,保证色彩准确。 全关(Off):完全切断电流,LED不发光。 那么,如何实现从最亮到最暗的变化呢?奥秘就在于改变一个周期内“开”和“关”的时间比例。 二、关键概念:频率与占空比 要理解PWM,必须先了解两个核心概念: 频率(Frequency): 指的是LED“开和关”这个动作一秒钟重复多少次。单位是赫兹(Hz)。 例如,1000Hz表示一秒钟内“开-关-开-关”循环了1000次。 这个频率必须足够高(通常高于200Hz),高到人眼的“视觉暂留”效应无法分辨出单个的开关周期,从而感觉不到屏幕在闪烁,只看到一种稳定的亮度。 占空比(Duty Cycle): 指的是一个开关周期内,“开”的时间所占的百分比。 占空比越高,一个周期内亮的时间越长,人眼感知到的平均亮度就越高。 占空比越低,一个周期内灭的时间越长,人眼感知到的平均亮度就越低。 下图直观地展示了占空比与亮度的关系: 三、实际工作示例 设置亮度为100%:控制器将占空比设置为100%。即LED一直处于“开”的状态,所以你感觉到最亮。 设置亮度为50%:控制器将占空比设置为50%。即在每个极短的周期内,LED亮一半时间,灭一半时间。由于切换太快,你的眼睛感觉不到闪烁,只会“平均”地认为亮度降低了一半。 设置亮度为10%:占空比变为10%。即LED只有10%的时间在发光,90%的时间是熄灭的。你的眼睛平均后,就感觉到了非常暗的亮度。 四、PWM调光的优缺点 优点: 色彩精准:由于LED始终在最佳额定电流下工作(“开”的时候),避免了模拟调光可能带来的颜色偏色问题。 调光精确:通过数字信号控制占空比,可以实现非常精细和线性的亮度调节。 效率高:电路中的开关管(MOSFET)在完全导通和完全关闭两种状态下功耗都很低,效率非常高。 缺点: 潜在闪烁问题:如果PWM频率过低(例如低于200Hz),部分敏感人群可能会感知到屏幕闪烁,长时间观看容易导致眼疲劳、头痛。这也是“低频PWM调光”备受诟病的原因。 频闪拍摄问题:用相机拍摄PWM调光的屏幕时,容易出现条纹或闪烁,这就是因为相机的快门速度捕捉到了屏幕的开关周期。 【小知识】:为解决低频PWM的闪烁问题,现代高端设备普遍采用高频PWM调光(频率可达成千上万Hz)或DC调光(类DC调光)。DC调光本质上是模拟调光,它通过直接改变电流大小来调节亮度,从而从根本上杜绝了闪烁,但需要解决低亮度下色彩失真的技术难题。 总结 PWM调光的本质,就是通过极高频率的“开-关”循环,并精密地调整“开”的时间比例,利用人眼的视觉暂留效应来“欺骗”大脑,从而实现对平均亮度的无级控制。 实际应用 下图是液晶屏厂家10.1寸屏幕图纸,可以看出该屏幕已自带PWM背光调节引脚。 型号:LMT101DNLFWD-NND 规格:1280x800, 全视角IPS 接口:LVDS 亮度:850nit 触摸:电容式触摸 特点:工业级,高亮,户外应用,
2025-09-03 08:48
UART先前已经配置过了,就不再展示了 首先使能DTC spport,否则后面添加DTC是时会报错 添加 tx DTC 参数保持默认就行 void UART_Init(void) { fsp_err_t err = R_SCI_UART_Open (&g_uart9_ctrl, &g_uart9_cfg); assert(err == FSP_SUCCESS); err = R_DTC_Enable(&g_transfer0_ctrl); assert(err == FSP_SUCCESS); } 只需要在原来基础上调用 R_DTC_Enable 函数 测试 uint8_t data[] = {\"RA4M2 UART DTC TEST\"}; void hal_entry(void) { UART_Init(); R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)data, sizeof(data)/sizeof(data[0])); /* TODO: add your own code here */ while(1) { } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
2025-09-03 07:25
RA4M2-SENSOR开发板配有串口转USB通讯功能,其电路如图1所示。 图1 转换电路 由图可知,串口引脚为P110和P109,对应着UART9,为此在RASC中需按图2所示来启用它。 图2 启用UART9 随后,在栈中按图3所示进行添加,并按图4所示来设置其参数。 图3 添加UART9 图4 参数设置 实现串口收发测试的主程序为: void hal_entry(void) { err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3); assert(FSP_SUCCESS == err); printf(\"Hellow world ! \\\\\\\\r\\\\\\\\n\"); while(1) { if(uart_receive_complete_flag) { uart_receive_complete_flag = false; if(uart_rx_buffer[0] == 0x55 && uart_rx_buffer[1] == 0xAA) { if(uart_rx_buffer[2] == 0x10) { printf(\"%d\\\\\\\\n\", 66); } else if(uart_rx_buffer[2] == 0x11) { printf(\"%d\\\\\\\\n\",88); } } err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3); assert(FSP_SUCCESS == err); } R_BSP_SoftwareDelay (100, BSP_DELAY_UNITS_MILLISECONDS); } } 经程序的编译和下载,其测试结果如图5所示,说明功能正确。 图5 测试结果 为进行LED灯的控制,需依照图6对所用的引脚加以配置。 图6 LED电路 实现以协议通讯来控制LED灯的主程序为: void hal_entry(void) { err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3); assert(FSP_SUCCESS == err); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW); printf(\"RA4M2-SENSOR test : \\\\\\\\r\\\\\\\\n\"); while(1) { if(uart_receive_complete_flag) { uart_receive_complete_flag = false; if(uart_rx_buffer[0] == 0x55 && uart_rx_buffer[1] == 0xAA) { if(uart_rx_buffer[2] == 0x10) { printf(\"%d\\\\\\\\n\", 66); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_HIGH); } if(uart_rx_buffer[2] == 0x11) { printf(\"%d\\\\\\\\n\",77); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW); } ... } err = R_SCI_UART_Read(&g_uart9_ctrl, uart_rx_buffer, 3); assert(FSP_SUCCESS == err); } R_BSP_SoftwareDelay (100, BSP_DELAY_UNITS_MILLISECONDS); } } 经程序的编译和下载,其测试结果如图7所示,并可控制LED灯的状态,说明设计正确。 图7 测试结果
2025-09-03 00:09
这是一个直流有刷电机启动检测的电路图,请问它的工作原理是怎样的?
2025-09-02 23:29
下图是一个电压型运算放大器构成的电流电压转换电路,由光电二极管电流流向可判断电容C1电压为上负下正,又由于运放正向输入端接地,因此光电二极管的电流产生的电压在运放反相输入端的电压为负,在经过反相放大器放大转变为正电压信号; 信号源是电流源,无论是理想电流源还是非理想电流源,其内阻都很大,由电流源和电压源的相互转换,在电压源时很容易想象到这个过程,就是一个电压放大器;但是在电流源下,将这样一个理想电流源直接接在运放两端,信号源两端是有电压的,并引入负反馈,续短虚断仍然成立,那电流岂不是从gnd到gnd,如果能明白这一点,我想应该明白了反馈和实际运放和理想运放的差异。 有两个问题请教: 1、这个电路是将信号源的电流信号转换为电容上的电压信号,但是这个电容直接连接运放的同相反相输入端,虚断仍然成立虚短不成立,那么这个电容C1如何选择?或者说对于跨阻放大器如何分析虚短虚断?常规电压输入反相放大电路的计算过程实际是利用续短虚断通过电流计算的,只不过这个电流是输入的电压信号Vi-Vn/Rg所得,然后用Vi-Vn/Rg=Vn-Vo/Rf进一步计算得到增益。如果是电流信号输入呢,那就省了第一步,直接就是Ii=Vn-Vo/Rf,简化Vn=0(虚地),那么输出和输入电流的关系就是Vo=-Rf×Ii,增益即你说的放大倍数就是-Rf,该如何分析上面这个解释。 2、信号源产生的电压和运放的输入偏置电压输入失调电压会共同反映到输出电压,那么该如何选择运放?
2025-09-02 22:40
众所周知,智能家居系统可以让我们轻松享受生活,智能面板是智能家居控制系统的重要组成部分,而智能家居控制系统是以智能家居系统为平台,家居电器及家电设备为主要控制对象,利用综合布线技术、网络通信技术、安全防范技术、自动化控制技术、音视频技术将家居生活有关的设施进行高度集成。 对于智能家居来讲,智能控制面板不是简单的开关面板,而是集成了照明、音响、窗帘、温控器、传感器等多个子系统的中控系统,可以用遥控、手机远程、本地电脑等多种智能控制方式实现对居住空间灯光、电动窗帘、温湿度等的智能控制管理,从而为人们提供智能、节能、环保、舒适、便捷的高品质生活。 光耦:EL1019 LED灯珠:0603 19-217 红外接收头:IRM56384 光电开关:ITR20402、20403
2025-09-02 21:02
随着万物互联时代的火热,伴随着云服务器的兴起,物联网技术得到了空前的发展,就连新能源汽车上也早已经实现了车联网连接物联网云服务器的技术。智慧城市、智慧园区、工业物联网等领域早已经司空见惯。 互联网使用有线以太网和无线组网进行连接,现在的半导体公司都在大力发展无线物联网技术,其中包括主流的WIFI/BLE/4G/NB-iot/Zigbee/ LoRa技术方案。 刚好我手头上有一个ESP8266无线WIFI模组,可以用它连接家庭WIFI网络访问互联网,通过它集成的TCP/IP协议栈,可以实现MQTT协议,然后就能给云服务器上传数据,同时通过云服务器可以远程发送控制指令来对ESP8266连接的MCU进行控制了。在这里就非常有需要实现AT指令了。 因为ESP8266所有的操作都是基于AT指令来进行命令控制和数据上传的。 1。什么是AT指令? AT指令是应用于终端设备与PC应用之间的连接与通信的指令。每个AT命令行中只能包含一条AT指令;对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。 每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。 用法 2。ESP8266和AR4E2的连接框图 上图结构非常的清晰明了, 1)。首先ESP8266和RA4E2通过一路串口相连,使用AT指令解析指令和数据。 2)。 RA4E2和PC电脑端的串口助手软件通过另一路串口进行连接,主要是用来打印调试log 3)。ESP8266和连接好的RA4E2作为一个完整的模块,通过MQTT协议连接到云端,既可以向云端上传数据,又可以通过云端给它发送指令,来控制RA4E2,甚至可以将RA4E2的firmwar固件通过OTA来进行远程升级RA4E2板子。 3。解析AT指令 打开ESP8266的AT指令手册。 1)上电发送RST重启指令 发送命令 AT+RST(重启模块) ATE0 – 开关回显功能 AT+CWMODE – WiFi 模式 4)AT+CWJAP – 连接WIF网络 5)AT+MQTTUSERCFG:设置MQTT用户属性 6)AT+MQTTCONN:连接MQTT Broker 7)AT+MQTTSUB:订阅MQTT Topic 8)AT+MQTTPUB:发布MQTT消息(字符串) 通过上面的指令,就可以连接到MQTT服务器了。 解析AT指令比较简单,直接通过循环队列来实现,当发送完对应的AT指令后,就通过串口中断将数据接收到循环队列。然后进行判断 int32_t esp8266_io_recv(uint8_t* buffer, uint32_t length) { uint32_t read_data = 0; while (length--) { uint32_t tick_start = HAL_GetTick(); do { if (wifi_rx_buffer.head != wifi_rx_buffer.tail) { *buffer++ = wifi_rx_buffer.data[wifi_rx_buffer.head++]; read_data++; if (wifi_rx_buffer.head >= RING_BUFFER_SIZE) { wifi_rx_buffer.head = 0; } break; } } while ((HAL_GetTick() - tick_start) < DEFAULT_TIME_OUT); } return read_data; } 这样就不会遗漏数据了,即使数据量巨大,也没问题。 这是AT指令的判断函数 核心代码如下: #include \"hal_data.h\" #include \"Systick.h\" #include \"usart0.h\" #include \"usart9.h\" #include \"usart_ring.h\" #include \"esp8266.h\" #include \"esp8266_io.h\" #include <stdio.h> #include \"app.h\" FSP_CPP_HEADER void R_BSP_WarmStart(bsp_warm_start_event_t event); FSP_CPP_FOOTER /*******************************************************************************************************************//** main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.This function is called by main() when no RTOS is used. *********************************************************************************************************************/ void hal_entry(void) { esp8266_status_t status; / TODO: add your own code here */ hal_systick_init(); UART0_Init();UART9_Init(); esp8266_Init(); /* Subscribe to a topic */ while(esp8266_mqtt_subscribe(\"iotled\", 1)); //HAL_Delay(200); printf(\"esp8266 Subscribe to a topic\\\\r\\\\n\"); while (1) { publish_and_process_incoming_message(); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif } /** @BriefThis function is executed in case of error occurrence. @retval None/ void Error_Handler(void) { / USER CODE BEGIN Error_Handler_Debug / / User can add his own implementation to report the HAL error return state / __disable_irq(); while (1) { } / USER CODE END Error_Handler_Debug */ } /*******************************************************************************************************************//** This function is called at various points during the startup process.This implementation uses the event that is called right before main() to set up the pins. @param[in]event Where at in the start up process the code is currently at **********************************************************************************************************************/ void R_BSP_WarmStart (bsp_warm_start_event_t event) { if (BSP_WARM_START_RESET == event) { #if BSP_FEATURE_FLASH_LP_VERSION != 0 /* Enable reading from data flash. */ R_FACI_LP->DFLCTL = 1U; /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */ #endif } if (BSP_WARM_START_POST_C == event) { /* C runtime environment and system clocks are setup. */ /* Configure pins. */ R_IOPORT_Open(&IOPORT_CFG_CTRL, &IOPORT_CFG_NAME); #if BSP_CFG_SDRAM_ENABLED /* Setup SDRAM and initialize it. Must configure pins first. */ R_BSP_SdramInit(true); #endif } } #if BSP_TZ_SECURE_BUILD FSP_CPP_HEADER BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable (); /* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */ BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable () { } FSP_CPP_FOOTER #endif 编译代码,烧录到板子 打开MQTT.fx软件,可以看到通过RA4E2将数据上传到了MQTT服务器代理上面 对应这里的代码 同时的通过iotled来进行点灯控制 这里通过代码里的LED_ON和LED_OFF来实现开关LED控制操作。 详情见视频 我一般会使用手机来代替MQTT.fx软件,更加的方便和便利,一机在手就能查看RA4E2发送的数据,同时可以通过手机远程控制RA4E2上的灯。不像电脑那么笨重和不方便,你不可以把电脑放在裤子口袋里。 见底部视频
2025-09-02 20:58
众所周知,智能家居系统可以让我们轻松享受生活,智能面板是智能家居控制系统的重要组成部分,而智能家居控制系统是以智能家居系统为平台,家居电器及家电设备为主要控制对象,利用综合布线技术、网络通信技术、安全防范技术、自动化控制技术、音视频技术将家居生活有关的设施进行高度集成。 对于智能家居来讲,智能控制面板不是简单的开关面板,而是集成了照明、音响、窗帘、温控器、传感器等多个子系统的中控系统,可以用遥控、手机远程、本地电脑等多种智能控制方式实现对居住空间灯光、电动窗帘、温湿度等的智能控制管理,从而为人们提供智能、节能、环保、舒适、便捷的高品质生活。 光耦:EL1019 LED灯珠:0603 19-217 红外接收头:IRM56384 光电开关:ITR20402、20403
2025-09-02 20:34