tag 标签: 嵌入式

相关博文
  • 2025-6-6 16:32
    0 个评论
    本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于瑞芯微RK3576开发板)的Onenet云网关应用方案测试。 摘自优秀创作者-小手凉凉 目录: * 板卡说明 * 操作说明 * 软件主要逻辑 -------------------------------------------------------------------------------------------------- 板卡说明: MYC-LR3576 核心板是基于瑞芯微 RK3576 系列微处理器推出的嵌入式模组,具备超高性 能、丰富的拓展接口和边缘算力,适用于边缘计算设备、商用机器人、AI 商显、智能车载终 端、智慧电力等 此次我们使用板子出厂的linux系统上写应用 板卡接HDMI显示屏开机显示效果如下 操作说明: 开发环境适配不过多介绍了,使用aarch64环境。编译后的应用mqtts_onejson_soc,运行后从log中看出计算token结果,适配外设,随后登录onenet服务器,发布消息 切换到云端可以看到设备在线状态,点击看详情 物模型中各个字段值更新如下 打开调试功能,可以看到上报消息 验证下发操作,选择某字段,比如usb1 2 3 4设置开 从log中看到板子中订阅到内容如下 软件主要逻辑: 1. 开机后根据定义的clientid 设备名 acckey等信息计算token作为登录密码,连接到onenet iot云。建立长连接后订阅消息 2.所有的参数打包在_ST_IotPro_结构体中,首先组成json格式消息,周期性上报到云端 3. 为了看到数据变化,做了随机数生成,将Electric_val add_ele_val字段用随机数更新,在服务端以便于看到动态效果 4. 云端下发的消息最终按json格式解析后分别调用到对应字段的回调函数中,添加打印便于调试
  • 2025-6-6 15:37
    0 个评论
    在“双碳”目标的驱动下,以分布式能源为核心的微电网系统正在成为能源转型的重要抓手。作为本地发电、储能与用电负荷的控制中枢,微电网协调控制器担着协调内部资源、保障稳定运行、实现经济优化的核心任务,它的可靠性与性能直接影响系统的表现,进而决定其长期运行的经济性。 飞凌嵌入式基于TI AM62x处理器打造的FET6254-C核心板,以多核协同处理能力、实时响应与工业级可靠性,能够为微电网协调控制器提供强有力的支撑,助力分布式能源高效协同。 1、微电网协调控制器的关键作用与技术挑战 微电网协调控制器是微电网中的核心控制设备,它需要实时监控光伏、风电、储能、充电桩等设备的运行状态,并基于安全与经济优化的目标制定控制策略。总体而言,微网协调控制器作为系统“大脑”需具备高速数据采集、并离网无缝切换、功率协调控制、调频调压控制以及策略执行等核心功能。 面对复杂的控制任务,传统单核处理器往往力不从心。一方面需要运行Linux系统实现网络通信、数据处理和人机交互;另一方面又要求实时控制,在毫秒级完成并离网切换和功率调节。同时,微电网设备数量多、通信协议复杂,对接口资源提出了严苛要求。 应用拓扑图 2、FET6254-C核心板:多核异构,强力赋能 针对微电网协调控制器的技术需求,飞凌嵌入式推荐使用基于TI Sitara™ AM62x系列工业级处理器设计开发的FET6254-C核心板作为主控解决方案,它能够以多核异构架构和丰富接口资源,为微电网控制提供强大技术支撑。 (1)多核异构,兼顾高效运算和实时控制 飞凌嵌入式FET6254-C核心板采用4核Cortex-A53+Cortex-M4F的多核异构设计,能够将高性能计算与实时控制进行有效地融合——4核Cortex-A53主频高达1.4GHz,运行Linux系统,用来处理复杂算法、通信协议栈和能源管理策略;Cortex-M4F控制核,可独立运行实时任务,处理并离网切换、调频调压等毫秒级控制。 值得注意的是,AM62x的M4F核可独立运行,内核启动和运行不依赖A53内核,保障了关键控制的可靠性。这种架构设计使得协调控制器能够同时处理管理任务和实时控制,确保在电网故障时可毫秒级切换至离网模式,保障关键负荷供电。 (2)丰富的接口资源,全面连接微网设备 微电网协调控制器需要接入光伏逆变器、储能变流器(PCS)、电池管理系统(BMS)、充电桩等多种设备,因此对接口数量和类型要求极高。 FET6254-C核心板提供了全面的接口支持——2路支持TSN(时间敏感网络)的千兆以太网,确保控制指令的实时传输;3路原生CAN-FD总线,满足BMS、PCS等设备的可靠通信;多达9路的UART,可连接电表、环境监测仪等辅助设备;此外,GPMC接口可接入FPGA,可直接接入高精度ADC芯片,完成多路模拟信号同步采集,满足电能质量监测需求。 (3)工业级品质,无惧严苛环境 微电网协调控制器通常部署在变电站、充电站等工业环境,因此对设备可靠性要求极高。 飞凌嵌入式FET6254-C核心板拥有-40℃~+85℃的工业级温宽,可以适应无空调柜体的严苛工作环境;电磁兼容性也很强,通过了GB/T 17626系列测试,在复杂电磁环境下可稳定运行;此外,长生命周期可确保10年以上稳定供应,意味着微电网协调控制器的长期运营无忧。 3、总结 飞凌嵌入式FET6254-C核心板凭借其多核异构架构、丰富的接口资源和工业级可靠性,为微电网协调控制器提供了理想的技术平台。该方案不仅满足了高速数据采集、并离网控制、功率协调、调频调压等核心需求,还支持边缘计算和云边协同,能够助力客户打造新一代智能微电网控制系统。
  • 2025-6-6 15:33
    0 个评论
    AM62x处理器作为TI新一代高性能、低功耗处理器,在工业控制、人机交互、边缘计算等领域有着广泛应用。飞凌嵌入式基于AM62x处理器设计开发的OK62xx-C开发板为开发者提供了丰富的硬件接口资源。本文将针对开发过程中可能遇到的各类接口问题,提供系统化的排查思路和解决方案,帮助开发者快速定位并解决问题。 一、通用排查思路 在硬件调试过程中,系统化的排查方法能够显著提高效率。以下是针对飞凌嵌入式AM62x开发板的通用排查流程: 1.芯片一致性验证: 首先确保所用功能芯片与参考设计原理图完全一致。若芯片型号不同,可能需要进行驱动移植工作,包括修改设备树配置和驱动程序。 2.基础信号检查: 对于功能验证失败的模块,应依次检查: 电源电压是否在允许范围内; 复位信号时序是否符合要求; 时钟信号频率和幅值是否正常。 3.交叉测试: 通过替换核心板或底板的方式,快速定位问题所在位置,判断是核心板的问题还是底板的问题。 4.信号完整性检查: 测量引脚电平是否符合预期; 检查数据信号是否有正常输出; 确认信号空闲状态是否正常。 5.焊接质量检查: 排查焊接问题,阻容器件是否存在虚焊、连焊、漏焊、错焊等问题; 排查器件焊接的方向,是否存在如焊接的器件1脚和底板的1脚标识不对应问题。 6.引脚复用确认: 通过查阅AM62x技术参考手册,确认所用引脚的功能复用配置是否正确,特别要注意启动相关引脚的默认功能。 二、系统不启动问题排查 当OK62xx-C开发板无法正常启动时,可按照以下步骤排查: 1.关键信号检查: 测量VCC_3V3_SYS_PG(RD60)信号,确保电源正常; 检查所有电源轨电压是否在允许范围内; 验证复位信号时序是否符合处理器要求。 2.启动配置检查: 确认底板设计中对GPMC总线相关启动项引脚做了正确的上下拉处理; 特别注意连接FPGA等外设时,不能影响启动配置电平; 核对boot模式选择引脚的电平状态。 3.I2C总线冲突排查: RU50、RU52为I2C0总线,核心板可能已挂载多个设备; 确保底板不悬空这些引脚,同时其他功能不重复使用I2C0; 检查I2C总线上拉电阻是否正常。 4.交叉测试: 更换核心板或底板,确认是否是个例问题。 三、I2C接口问题排查 I2C总线常见问题及解决方法: 1.基础配置检查: 确认SCL和SDA线均有上拉电阻; 检查同组I2C总线下挂载设备的地址是否有冲突。 2.信号质量分析: 测量空闲状态是否为高电平; 观察数据传输时波形是否完整,是否存在过冲或振铃; 使用逻辑分析仪捕获完整通信过程。 3.阻抗匹配调整: 若波形上升沿缓慢,可减小上拉电阻值; 若低电平过高,可增大上拉电阻值。 4.诊断工具使用: 可通过I2Ctool工具查看总线上是否挂载设备: i2cdetect-l //检测系统上有几组I2C i2cdetect- r -y2 //检测I2C第二组总线上的挂载的设备 四、SPI接口问题排查 SPI通信故障排查要点: 1.硬件连接确认: MOSI和MISO必须交叉连接; 确认片选信号连接正确且未被其他功能复用; 检查SPI时钟线是否连通。 2.模式配置验证: 确认主从设备的CPOL和CPHA设置一致; 检查时钟频率是否在设备支持范围内; 验证数据位宽设置是否正确。 3.信号测量: 使用示波器测量时钟信号质量; 观察数据线在片选有效期间的信号变化; 检查空闲状态下各信号线的电平状态。 五、USB接口问题排查 USB接口(2.0/4G/5G)常见问题: 1.电源检查: 测量USB_VBUS_3V3信号是否为稳定的1.8V; 确认VBUS电流供给能力满足设备需求。 2.信号连接确认: 确认USB的发送信号串联了AC耦合电容。 3.USB特殊注意事项: 一般USB设备端的发送信号已经添加了AC耦合电容,因此接收端不需要再次添加耦合电容; 建议使用差分探头测量高速信号完整性。 六、SDIO问题排查 1.电平配置检查: SDIO接口的引脚电平与传输速度有关,默认工作电压为3.3V,高速模式需切换至1.8V; SDIO信号不可通过电平转换芯片,必须直接连接。 2.信号完整性优化: 确认SDIO总线做了等长处理。 3.上拉电阻配置: 根据规范配置适当的上拉电阻; 检查卡检测引脚的电平状态。 以上就是小编为大家整理的OK62xx-C开发板在开发过程中常见的问题类型以及排查思路。由于篇幅有限,本文先为大家介绍通用思路、不启动问题、I2C接口问题、SPI接口问题、USB问题 和 SDIO问题共6大类型, 后续还将介绍LVDS、PCIe、UART、CAN等等接口的问题以及解决思路,希望大家持续关注。
  • 热度 3
    2025-6-4 09:07
    275 次阅读|
    1 个评论
    10. ESP32开发之LED闪烁和呼吸的实现
    硬件电路介绍 GPIO输出模式 GPIO配置过程 闪烁灯的源码 LED PWM的控制器(LEDC)概述 LEDC配置过程及现象 整体流程 硬件电路介绍 电路图如下: 只要有硬件基础的应该都知道上图中,当GPIO4的输出电平为高时,LED灯亮,反之则熄灭。如果每间隔一段时间进行一次电平的反转,则将使LED产生闪烁的效果。 GPIO模式 在进行GPIO控制之前,需要熟悉一下ESP32的GPIO几种模式: GPIO模式 模式宏定义 说明 输入模式 GPIO_MODE_INPUT 可以通过配置项pull_up_en或pull_down_en配置上拉或者下拉 推挽输出模式 GPIO_MODE_OUTPUT 高低电平输出 开漏输出模式 GPIO_MODE_OUTPUT_OD 通常用于I2C 中断 可通过intr_type配置项配置触发方式:上升沿/下降沿/双沿/电平触发等 禁用 GPIO_MODE_DISABLE 禁用GPIO,不作为输入也不作为输出 输入输出模式 GPIO_MODE_INPUT_OUTPUT 输入及开漏输出 GPIO_MODE_INPUT_OUTPUT_OD 注意: 使用中断时,将GPIO模式设置为输入模式 如果GPIO用于I2C的SDA,设置模式为 GPIO_MODE_INPUT_OUTPUT_OD ,且需要配置上拉,也可在芯片相关引脚增加上拉电路 GPIO配置过程 配置GPIO 使用结构体gpio_config_t对GPIO相关参数进行配置 注册GPIO 通过函数 gpio_config 函数将以上配置注册进系统 通过GPIO相关API函数对GPIO进行控制 比如此次实验是控制LED闪烁,那么则是使用 gpio_set_level 函数进行输出电平控制 闪烁灯的源码 /** * Copyright (C) 2024-2034 HalfMoon2. * All rights reserved. * * @file Filename without the absolute path * @brief Brief description * @author HalfMoon2 * @date 2025-05-20 * @version v0.1 * * @revision history: * 2025-05-20 - Initial version. */ # include stdio.h # include "freertos/FreeRTOS.h" # include "freertos/task.h" # include "driver/gpio.h" # include "esp_log.h" # define LED_GPIO GPIO_NUM_4 //根据实际的连接方式更改 void ledCtlTask ( void *pvParam) { while ( 1 ){ gpio_set_level (LED_GPIO, 1 ); // 设置为高电平(点亮 LED) vTaskDelay ( pdMS_TO_TICKS ( 500 )); // 延时 0.5 秒 gpio_set_level (LED_GPIO, 0 ); // 设置为低电平(熄灭 LED) vTaskDelay ( pdMS_TO_TICKS ( 500 )); // 延时 0.5 秒 } } void app_main ( void ) { // 配置 GPIO gpio_config_t io_conf = { .pin_bit_mask = ( 1ULL LED_GPIO), // 选择 GPIO .mode = GPIO_MODE_OUTPUT, // 设置为输出模式 .pull_up_en = GPIO_PULLUP_DISABLE, // 不启用上拉 .pull_down_en = GPIO_PULLDOWN_DISABLE, // 不启用下拉 .intr_type = GPIO_INTR_DISABLE // 不启用中断 }; gpio_config (io_conf); xTaskCreatePinnedToCore (ledCtlTask, "ledCtlTask" , 2048 , NULL , 3 , NULL , 1 ); } LED PWM的控制器(LEDC)概述 从以上案例可以看出,对于通用GPIO的控制要么是高电平,要么是低电平。所以只能控制LED的闪烁现象。而对于ESP32-S3却有专用控制LED的控制器,称之LED PWM。它有8路低速通道。专用于控制LED。当然也可以产生PWM控制电机等。ESP32有两组LED PWM控制器,一组为8路高速通道,另一组为8路低速通道。 LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实现亮度渐变,如果是RGB LED,还能实现颜色的渐变。 LEDC的配置过程及现象 1. 定时器的配置过程 创建定时器配置结构体 typedef struct { ledc_mode_t speed_mode; /* LEDC速度模式, high-speed mode (only exists on esp32) or low-speed mode */ ledc_timer_bit_t duty_resolution; /* LEDC占空比分辨率 */ ledc_timer_t timer_num; /* The timer source of channel (0 - LEDC_TIMER_MAX-1) */ uint32_t freq_hz; /* LEDC 的时钟频率 */ ledc_clk_cfg_t clk_cfg; /*配置LEDC的时钟源. */ bool deconfigure; /*是否取消此配置之前的配置,取消之前先要关闭定时器 */ } ledc_timer_config_t 使用相关函数将结构体完成配置 esp_err_t ledc_timer_config ( const ledc_timer_config_t *timer_conf) ; //参数为以上定义的结构体 /*返回值: * ESP_OK 成功 * ESP_ERR_INVALID_ARG 参数错误 * ESP_FAIL 无法根据给定频率和当前占空比分辨率找到合适的预分频器编号 *ESP_ERR_INVALID_STATE 定时器未配置或未暂停 */ 2. 配置通道以及指定GPIO 创建配置通道结构体 typedef struct { int gpio_num; /* LEDC的输出GPIO*/ ledc_mode_t speed_mode; /* LEDC 速度模式,ESP32S3只能配置为低速 */ ledc_channel_t channel; /*LED PWM的控制器(LEDC) LEDC的通道 */ ledc_intr_type_t intr_type; /*是否开启渐变中断 */ ledc_timer_t timer_sel; /*选择定时器l (0 - LEDC_TIMER_MAX-1) */ uint32_t duty; /*! LEDC 通道占空比*/ int hpoint; /*! LEDC channel hpoint value, the range is */ struct { unsigned int output_invert: 1 ; /*! Enable (1) or disable (0) gpio output invert */ } flags; /*! LEDC 标志 */ } ledc_channel_config_t ; 使用函数完成配置 esp_err_t ledc_channel_config ( const ledc_channel_config_t *ledc_conf) ; 3. 配置占空比改变PWM信号 使能硬件PWM //参数intr_alloc_flags为分配的中断优先级 esp_err_t ledc_fade_func_install ( int intr_alloc_flags) 配置渐变参数 /* 参数: speed_mode:LEDC的速度模式,只有ESP32有高速模式 channel:通道,0-7 target_duty:占空比,取值范围 max_fade_time_ms:最大的渐变时间 */ esp_err_t ledc_set_fade_with_time ( ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t target_duty, int max_fade_time_ms) 开启渐变 /* 参数: speed_mode:LEDC的速度模式 channel:通道,0-7 fade_mode:是否阻塞直到渐变完成,如果设置成LEDC_FADE_WAIT_DONE模式,则不渐变到预定值则不返回 */ esp_err_t ledc_fade_start ( ledc_mode_t speed_mode, ledc_channel_t channel, ledc_fade_mode_t fade_mode) 4. 第一阶段实例:实现LED缓慢亮灯 /** * Copyright (C) 2024-2034 HalfMoon2. * All rights reserved. * * @file Filename without the absolute path * @brief Brief description * @author HalfMoon2 * @date 2025-05-27 * @version v0.1 * * @revision history: * 2025-05-27 - Initial version. */ # include stdio.h # include "freertos/FreeRTOS.h" # include "freertos/task.h" # include "driver/gpio.h" # include "esp_log.h" # include driver/ledc.h # define LEDC_MODE LEDC_LOW_SPEED_MODE # define LEDC_DUTY_RES LEDC_TIMER_13_BIT # define LEDC_TIMER_NUM LEDC_TIMER_0 # define LEDC_FREQ 5000 # define LEDC_CHANNEL LEDC_CHANNEL_0 # define LEDC_GPIO GPIO_NUM_4 # define LEDC_DUTY 4095 //2^13-1 void ledc_init ( void ) { ledc_timer_config_t timer_config={ .speed_mode= LEDC_MODE, .duty_resolution= LEDC_DUTY_RES, .timer_num= LEDC_TIMER_NUM, .clk_cfg=LEDC_AUTO_CLK, .freq_hz=LEDC_FREQ }; ledc_timer_config (timer_config); ledc_channel_config_t ledc_channel={ .speed_mode = LEDC_MODE, .channel = LEDC_CHANNEL, .gpio_num = LEDC_GPIO, .intr_type = LEDC_INTR_DISABLE, .duty = 0 , .hpoint = 0 }; ledc_channel_config (ledc_channel); } void app_main ( void ) { ledc_init (); ledc_fade_func_install ( 0 ); ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL, 4095 , 10000 ); ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); } 波形说明:可以明显的看到PWM的占空比的变化,LED也缓慢的亮起。 那么接下来就是实现从亮起再缓慢的熄灭,以此循环则实现了LED呼吸的效果。 5. 渐变回调函数 LEDC控制器在使能渐变后,每个通道都可以有一个回调函数,通过ledc_cb_register()进行注册 esp_err_t ledc_cb_register ( ledc_mode_t speed_mode, ledc_channel_t channel, ledc_cbs_t *cbs, void *user_arg) /*参数: speed_mode:速度模式,只有ESP32有高速模式 channel: LEDC通道,低速模式有8个通道 cbs:回调函数原型定义在 ledc_cbs_t 结构体中 user_arg:用户注册时的数据,用于给回调函数传参 */ 6. 通过事件组的方式将此时LED的状态发送出去,即设置事件值 在中断中避免处理复杂的内容,所以在渐变回调函数中只使用事件组方式发送相关事件。不了解这块的知识可以参考我之前的文章 《ESP32开发之freeRTOS的事件组》 bool IRAM_ATTR ledc_fade_cb ( const ledc_cb_param_t *param, void *user_arg) { BaseType_t pxHigherPriorityTaskWoken; //如果当前LEDC占空比最大,说明此时LED为开灯状态,反之为关灯状态 if (param-duty){ xEventGroupSetBitsFromISR (s_ledc_ev,LED_ON_EV,pxHigherPriorityTaskWoken); } else { xEventGroupSetBitsFromISR (s_ledc_ev,LED_OFF_EV,pxHigherPriorityTaskWoken); } return pxHigherPriorityTaskWoken; } 7. 创建一个任务来接收事件并做渐变过程的改变 void ledc_fade_task ( void * param) { EventBits_t ev; while ( 1 ){ ev= xEventGroupWaitBits (s_ledc_ev,LED_OFF_EV|LED_ON_EV,pdTRUE,pdFALSE,portMAX_DELAY); if (ev){ if (evLED_OFF_EV){ ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL,LEDC_DUTY, 1000 ); ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); } if (evLED_ON_EV){ ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL, 0 , 1000 ); ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); } } //处理完成需要再次注册回调函数,产生循环 ledc_cbs_t cbs={.fade_cb=ledc_fade_cb}; ledc_cb_register (LEDC_MODE,LEDC_CHANNEL,cbs, NULL ); } } 8. 第二阶段实例:完整实现渐变的循环 /** * Copyright (C) 2024-2034 HalfMoon2. * All rights reserved. * * @file Filename without the absolute path * @brief Brief description * @author HalfMoon2 * @date 2025-05-27 * @version v0.1 * * @revision history: * 2025-05-27 - Initial version. */ # include stdio.h # include "freertos/FreeRTOS.h" # include "freertos/task.h" # include "driver/gpio.h" # include "esp_log.h" # include driver/ledc.h # define LEDC_MODE LEDC_LOW_SPEED_MODE # define LEDC_DUTY_RES LEDC_TIMER_13_BIT # define LEDC_TIMER_NUM LEDC_TIMER_0 # define LEDC_FREQ 5000 # define LEDC_CHANNEL LEDC_CHANNEL_0 # define LEDC_GPIO GPIO_NUM_4 # define LEDC_DUTY 4095 //2^13-1 //通知渐变完成 static EventGroupHandle_t s_ledc_ev = NULL ; //此时为关灯状态 # define LED_OFF_EV (10) //事件组bit0设置为关灯事件 //此时为开灯状态 # define LED_ON_EV (11) //事件组bit1设置为开灯事件 /** * @brief 渐变结束回调函数 * @param *param:LEDC callback parameter * @param *user_arg:User registered data * @return 返回是否唤醒高优先级任务 * @note 此函数为中断服务函数,所以不应处理过多的操作,那么在此函数中通过发送事件的方式,由渐变任务函数处理事件 */ bool IRAM_ATTR ledc_fade_cb ( const ledc_cb_param_t *param, void *user_arg) { BaseType_t pxHigherPriorityTaskWoken; //如果当前LEDC占空比最大,说明此时LED为开灯状态,反之为关灯状态 if (param-duty){ xEventGroupSetBitsFromISR (s_ledc_ev,LED_ON_EV,pxHigherPriorityTaskWoken); } else { xEventGroupSetBitsFromISR (s_ledc_ev,LED_OFF_EV,pxHigherPriorityTaskWoken); } return pxHigherPriorityTaskWoken; } /** * @brief led渐变任务 * @param 任务参数 * @note 接收事件并做LED操作 */ void ledc_fade_task ( void * param) { EventBits_t ev; while ( 1 ){ ev= xEventGroupWaitBits (s_ledc_ev,LED_OFF_EV|LED_ON_EV,pdTRUE,pdFALSE,portMAX_DELAY); if (ev){ if (evLED_OFF_EV){ ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL,LEDC_DUTY, 1000 ); ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); } if (evLED_ON_EV){ ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL, 0 , 1000 ); ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); } } //处理完成需要再次注册回调函数,产生循环 ledc_cbs_t cbs={.fade_cb=ledc_fade_cb}; ledc_cb_register (LEDC_MODE,LEDC_CHANNEL,cbs, NULL ); } } void ledc_init ( void ) { ledc_timer_config_t timer_config={ .speed_mode= LEDC_MODE, .duty_resolution= LEDC_DUTY_RES, .timer_num= LEDC_TIMER_NUM, .clk_cfg=LEDC_AUTO_CLK, .freq_hz=LEDC_FREQ }; ledc_timer_config (timer_config); ledc_channel_config_t ledc_channel={ .speed_mode = LEDC_MODE, .channel = LEDC_CHANNEL, .gpio_num = LEDC_GPIO, .intr_type = LEDC_INTR_DISABLE, .duty = 0 , .hpoint = 0 }; ledc_channel_config (ledc_channel); //创建事件组,用于接收和发送渐变事件 s_ledc_ev = xEventGroupCreate (); //开启硬件PWM ledc_fade_func_install ( 0 ); //设置渐变参数 ledc_set_fade_with_time (LEDC_MODE,LEDC_CHANNEL,LEDC_DUTY, 1000 ); //启动渐变 ledc_fade_start (LEDC_MODE,LEDC_CHANNEL,LEDC_FADE_NO_WAIT); //注册渐变回调函数 ledc_cbs_t cbs={.fade_cb=ledc_fade_cb,}; ledc_cb_register (LEDC_MODE,LEDC_CHANNEL,cbs, NULL ); xTaskCreatePinnedToCore (ledc_fade_task, "ledc_fade_task" , 2048 , NULL , 3 , NULL , 1 ); } void app_main ( void ) { ledc_init (); } 整体流程
  • 热度 13
    2025-6-2 21:24
    500 次阅读|
    0 个评论
    【Milk-V Duo 开发板】+初用体验
    许久未在面包板社区申请板卡评测了。这一次偶然最近的这款Milk-V Duo开发板正在评测。首次看到如此简单切功能强大的嵌入式平台: · 支持linux、rtos · 可接一路Camera,做人脸检测、目标检测等算法操作 · 可通过TYPE-C接口实现USB UVC · 功耗低且小型化等 唯一一点遗憾的是它不能接一个MIPI或者LVDS的显示屏。这也是当我拿到板卡准备开工的时候才知道的。原本实现猫眼的计划看来是要泡汤了。 说说文档 从以往开发的经验看,对于嵌入式平台,所有文档一般都会在SDK的doc文档中。 然而,当git完成SDK后,发现整个文件夹内并没有开发需要的doc文件夹。我皱了皱眉头,打开了官网。摸索了一会,在菜单中找到了文档。点击切换网页后是这样的架构。 对于初次使用者,会查看入门指南。然而只有硬件接口的介绍,以及可以匹配的嵌入式系统。在最后的资源里也只能找到官方Demo。哎,一心想找开发文档的我,有点焦灼。只能继续往下。 应用开发里简单的告诉了怎么用。底层开发里甚至只有MIPI DSI的开发说明,可是milkv-duo不支持啊。再看看资源里吧,终于找到了我所要的文档。思索着想看看整体的SDK架构吧,打开了最有可能的几个,没有找到。总之文档难找,没有条理性。清单还没个简单的说明。就说第一个CIPHER API参考,你肯定认为是整个SDK的API参考文档,其实它只是安全算法的API参考。 说说案例 嵌入式在使用新的平台时,一般都需要案例的加持,以便于熟悉平台。因为以上说出的文档缺陷,整体架构不是很明确,开发中所需要的案例需要在SDK中的每个文件夹下一点点去找,有相关开发经验的或许通过大概的猜测可以在较短时间内找到自己需要的东西。就如下简单的备注,开发者何去何从?建议官方还是优化下文档架构,以便于客户更加快速的落实开发,缩短产品开发周期,才能抢占市场。 说说计划 在申请开发板起初想着这个小巧的平台做猫眼真的太合适了,可以进行人脸检测,行人检测,目标检测等,然而在拿到开发板后,仔细在官网查看才发现,这个小板卡是不支持MIPI DSI的,也就是没办法用屏幕显示摄像头的图像了,猫眼不太好实现啊。 或许可以使用SPI屏幕参考ESP32的方式进行相关开发了,想想也是一条比较耗时的路线。毕竟ESP32有完整的ESP32-CAM库。 经过查找,在SDK中的多媒体库(Middleware)中,找到的摄像头编码相关案例。摄像头采集编码功能算是搞定了。图像存储也没有问题。 目前需要解决图像显示的问题。既然直接使用屏幕不可以,那么就通过网页的方式。BOA 服务器是个不错的选择。在Milk-V Duo平台上搭建一个WEB服务器,使用远程终端进行视频实时显示。实施时,可以用一个嵌入式显示终端,一直登录此WEB服务器,借助人脸检测和行人检测,当有人出现在门口时,可以唤醒终端显示。 后期的实现,将在后续文章中更新。 总结 Milk-V Duo这个平台,确实是个小体型多功能的多媒体实现平台。开发一个小型化多媒体终端,也是绰绰有余。何况配备了0.5T的算力。所以微型安防监控的实现,想想也不错。 当然,文档结构以及SDK的目录优化还是必须的,多媒体平台内卷越来越严重的市场下,让客户快速部署市场,是推广这么优秀产品的最好方式。
相关资源
  • 所需E币: 5
    时间: 2025-5-23 10:33
    大小: 3.51MB
    上传者: htwdb
    本文在现有的嵌入式图编程环境CASS上添加图像算法模块,用于辅助嵌入式系统对图像数据进行计算和处理。本课题将重点关注在软件平台上实现创新,主要对以下几方面进行了研究:(1)研究开源OpenCV库,对移植好的视觉算法模块定义标准接口,用XML语言实现对算法库的快速封装;(2)研究图形化编程语言和IEC61131-3标准,将算法模块封装成功能块构件,实现用拖拉控件方式进行图形化编程;(3)研究嵌入式平台和计算机视觉调试方法,提出一种基于PC端和嵌入式端的双层视觉调试(DoubleLayerVisionDebug,DLVD)方法,实现平台的混合调试功能;(4)研究通信协议,针对图像数据传输的特殊性,提出新的32位Modbus协议,实现对特定图像区域从嵌入式端到PC端的快速传输。
  • 所需E币: 5
    时间: 2025-5-23 10:23
    大小: 3.27MB
    上传者: htwdb
    本文在充分研究传统PLC结构和工作原理的基础上,提出了一种嵌入式PLC的设计方案,并从总体设计、硬件电路设计以及软件设计三方面做了介绍。该方案以现代化工业现场需求为主要的考虑因素,以Cortex—M3内核微控制器STM32F103ZET6为核心,配合输入输出模块电路和通信模块电路,搭建了CPU+通信接口形式的硬件平台,输入输出模块和通信接口模块电路均采用了光耦隔离的方式,在保证系统稳定性和可靠性的基础上增强了系统的硬件可扩展能力。软件系统根据传统PLC的工作原理,设计了以循环扫描方式为主的PLC操作平台,以解释执行的方式完成了控制程序的执行,同时采用模块化程序设计思想,对程序下载和通信进行了模块化的编程设计。之后,在嵌入式PLC软件系统的基础上提出了一种更加灵活和开放的PLC软件系统模式,该模式通过梯形图和C语言开放式混合编程的方式提升了软件系统的灵活性。最后,介绍了基于uIP协议的远程监控端的设计,实现了以WEB方式对嵌入式PLC的远程实时监控。本论文完成了系统电路板的制作,并对系统的主要软、硬件模块进行了调试,验证了该嵌入式PLC的合理性和可行性,具有很好的实用价值,并为进一步提高PLC的开放性和灵活性奠定了基础。 
  • 所需E币: 4
    时间: 2019-12-20 17:13
    大小: 292.98KB
    上传者: 微风DS
    【详细说明】针对宿舍安全需求,遵循可靠性、独立性、安全性、联动性、扩展性、实用性、经济性的原则设计出了一个基于ARM的智能化公寓防盗防火报警系统。该系统采用EasyarmLM3S1138、RS232总线和多种传感器,实现了异地控制和多终端网络同步控制。经测试表明,该系统不仅实现了人体检测、烟雾检测、声光报警、键盘密码解警以及宿舍内贵重物品进出情况记录等功能,且具有电路设计简单、可靠性高、人机交互友好和成本低的特点。[著者文摘]……
  • 所需E币: 3
    时间: 2024-3-14 16:22
    大小: 8.65MB
    上传者: Bymyself
    本书是一本介绍RISC-V架构嵌入式开发的入门书籍,以通俗的语言系统介绍了嵌入式开发的基础知识和RISC-V架构的内容,力求帮助读者快速掌握RISC-V架构的嵌入式开发技术。 本书共分为两部分。*部分为第1~14章,基本涵盖了使用RISC-V架构进行嵌入式开发所需的所有关键知识。第二部分为附录部分,详细介绍了RISC-V指令集架构,辅以作者加入的背景知识解读和注解,以便于读者理解。
  • 所需E币: 0
    时间: 2024-2-26 16:12
    大小: 91.32MB
    上传者: 浩瀚星蓝
    这是一本运用MATLAB来写嵌入式代码的书籍,simulink可以很方便的生成代码,且相较于代码来说更加直观,所以运用MATLAB来生成代码,具有非常广阔的应用场景,在汽车等领域有非常多的案例
  • 所需E币: 2
    时间: 2024-1-19 15:15
    大小: 4.44MB
    上传者: 用户3921134
    华为公司ETP4860-B1A2嵌入式电源用户手册
  • 所需E币: 2
    时间: 2023-11-14 18:00
    大小: 85.65MB
    上传者: 浩瀚星蓝
    这本是是Linux典藏大系的其中一本,详细讲述了ARM嵌入式相关知识
  • 所需E币: 0
    时间: 2023-11-6 08:41
    大小: 1.07MB
    上传者: HanSom
    嵌入式系统在医疗设备领域的应用
  • 所需E币: 1
    时间: 2023-10-20 15:18
    大小: 17.73MB
    上传者: 浩瀚星蓝
    这笔一本有关于嵌入式操作系统的书,主要是RTOS
  • 所需E币: 1
    时间: 2023-7-11 17:40
    大小: 3.12MB
    上传者: 张红川
    就业指导系列课程之二:嵌入式简历制作与投递.pptx
  • 所需E币: 1
    时间: 2023-7-11 17:39
    大小: 32.67KB
    上传者: 张红川
    2020嵌入式软件开发工程师笔试题-远程(社招,100分).doc
  • 所需E币: 1
    时间: 2023-7-10 16:03
    大小: 7.19MB
    上传者: 张红川
    GEC6818平台嵌入式Linux开发指导手册.doc
  • 所需E币: 1
    时间: 2023-7-1 20:20
    大小: 65.79MB
    上传者: Argent
    【正点原子】STM32MP1嵌入式Linux驱动开发指南V2.0
  • 所需E币: 1
    时间: 2023-7-1 20:22
    大小: 26.84MB
    上传者: Argent
    【正点原子】STM32MP1嵌入式Qt开发指南V1.1
  • 所需E币: 1
    时间: 2023-7-1 20:13
    大小: 559.52KB
    上传者: Argent
    【正点原子】嵌入式LinuxC代码规范化V1.0
  • 所需E币: 1
    时间: 2023-7-1 20:18
    大小: 36.03MB
    上传者: Argent
    【正点原子】STM32MP1嵌入式LinuxC应用编程指南V1.4
  • 所需E币: 5
    时间: 2023-6-15 12:52
    大小: 70.46MB
    上传者: czd886
    嵌入式系统设计与开发实例详解-基于ARM的应用
  • 所需E币: 5
    时间: 2023-6-15 12:54
    大小: 68.75MB
    上传者: czd886
    (电子书)ARM嵌入式系统基础教程
  • 所需E币: 2
    时间: 2023-5-26 22:05
    大小: 5.28MB
    上传者: symic
    面向多功能嵌入式客户端系统的高端平台白皮书
  • 所需E币: 2
    时间: 2023-5-15 19:04
    大小: 4.17MB
    上传者: 舒凤志
    第一章嵌入式内核基础第二章任务管理与调度第三章任务同步、互斥和通讯第四章时间管理第五章内存管理