QuecPython+ulab FFT:给移远模组装 “信号耳朵”,工业设备故障早发现,不用等云端!

引言

在工业物联网和智能设备监测领域,我们经常面临一个核心难题:设备在"说话",但我们却"听不懂"。振动、噪声、电流波动——这些物理现象背后都隐藏着设备的状态信息。FFT(快速傅里叶变换)就是解决这个问题的关键工具,它像一位专业的"信号翻译官",把设备的"物理语言"翻译成我们能理解的"频率语言"。

一、FFT:为什么它是物联网的"必备技能"?

从数据到洞察的认知革命。

想象这样一个场景:作为工厂设备管理员,你面对一台正在运转的大型风机,传统的监测系统只能提供这样的信息:

传统监测报告:"风机振动幅度0.5mm,超出安全阈值0.3mm",这就像医生只会告诉你"病人在发烧38.5℃",却无法解释发热原因一样令人焦虑。你只知道设备"生病了",但不知道"病因是什么"、"严重程度如何"、"该如何治疗"。

而基于FFT的智能监测系统提供的却是这样一份诊断报告:

FFT智能诊断报告:"检测到风机轴承在200Hz频率处出现异常振动,幅值超过正常水平30%,特征符合轴承内圈磨损模式,建议在未来48小时内安排检修,优先检查轴承润滑情况和磨损状况",这种从现象描述到原因分析,再到维修建议的完整认知链条,正是FFT技术带来的革命性变化。

FFT的"翻译"原理:从时域到频域的认知转换。

为了更好地理解FFT的"翻译"过程,让我们看一个具体的例子:

时域信号(我们看不懂的"设备语言"):

时间:0.1s → 电压:1.2V

时间:0.2s → 电压:1.5V  

时间:0.3s → 电压:1.3V

...

这就像听到外国人在说话——你能感知到声音的存在,却完全不明白其中的含义。

FFT翻译后的频域信号(我们能理解的"诊断报告"):

频率:50Hz → 幅度:0.8V(电机正常运转基频)

频率:100Hz → 幅度:0.2V(电磁谐波,正常范围)

频率:200Hz → 幅度:0.3V(轴承磨损特征频率!需要关注)

每个设备在运行时都会产生独特的振动和声音特征,就像每个人都有独特的声音指纹。FFT的作用就是提取这个"频率身份证"。

举个例子:

一台正常的电机,它的频率身份证可能是:

  • 50Hz:正常运转频率(就像人的心跳)

  • 100Hz:电磁噪声(就像人的呼吸声)

  • 150Hz:机械振动(就像人走路的声音)

当轴承开始磨损时,频率身份证上就会增加:

  • 200Hz:轴承磨损特征频率(就像咳嗽声,表示不健康)

采样率:决定你能"听"到什么

采样率决定了设备能捕获的最高频率。根据奈奎斯特采样定理:可分析的最高频率 = 采样率 ÷ 2

对于EC200U模组:

  • 8kHz采样率 → 可分析4kHz以下的所有频率

  • 4kHz采样率 → 可分析2kHz以下的所有频率

  • 2kHz采样率 → 可分析1kHz以下的所有频率

这就好比人的听力范围:年轻人能听到20Hz-20kHz,而老年人可能只能听到20Hz-8kHz。选择合适的采样率,就是要确保能听到所有重要的"设备声音"。

FFT点数:分析的"显微镜倍数"

FFT点数决定了频率分析的精细程度:频率分辨率 = 采样率 ÷ FFT点数

  • 256点FFT:频率分辨率较粗,但计算快、内存占用小

  • 512点FFT:频率分辨率提高一倍,计算量和内存加倍

  • 1024点FFT:频率分辨率最精细,但EC200U可能内存不足

这就像用不同倍数的显微镜观察细胞:低倍数看得快但不够清晰,高倍数看得清晰但需要更好的设备。

二、QuecPython上的FFT实战

基础配置:让EC200U听懂设备"说话"

    # QuecPython FFT 简易示例 - 设备健康监测(手动计算绝对值)
    try:
        from ulab import numpy as np
    except ImportError:
        import numpy as np
    import utime
    # FFT基本参数
    FFT_SIZE = 128        # FFT点数
    SAMPLE_RATE = 4000    # 采样率 4kHz
    def manual_abs_complex(complex_array):
        """手动计算复数数组的绝对值(模长)"""
        # 对于复数数组,绝对值 = sqrt(real^2 + imag^2)
        real_sq = complex_array.real * complex_array.real
        imag_sq = complex_array.imag * complex_array.imag
        magnitude = np.sqrt(real_sq + imag_sq)
        return magnitude
    def manual_abs_real(real_array):
        """手动计算实数数组的绝对值"""
        # 对于实数数组,绝对值就是每个元素与0的差值取正
        abs_array = np.array([x if x >= 0 else -x for x in real_array])
        return abs_array
    def generate_windows():
        """生成不同的窗函数"""
        n = FFT_SIZE
        # 矩形窗 (无窗)
        rectangular = np.ones(n)
        # 汉宁窗 (Hann)
        hann = np.array([0.5 * (1 - np.cos(2 * 3.14159 * i / (n-1))) 
                         for i in range(n)])
        # 汉明窗 (Hamming) - 近似实现
        hamming = np.array([0.54 - 0.46 * np.cos(2 * 3.14159 * i / (n-1)) 
                            for i in range(n)])
        return {
            'rectangular': rectangular,
            'hann': hann,
            'hamming': hamming
        }
    def generate_simulated_data():
        """生成模拟传感器数据"""
        t = np.linspace(0, FFT_SIZE/SAMPLE_RATE, FFT_SIZE)
        # 模拟振动信号:50Hz正常运转 + 200Hz轴承磨损
        normal_component = np.sin(2 * np.pi * 50 * t) * 0.8
        fault_component = np.sin(2 * np.pi * 200 * t) * 0.3
        # 使用确定性噪声(避免随机数依赖)
        noise = np.array([0.1 * np.sin(2 * np.pi * 300 * t[i] + 
                          0.3 * np.sin(2 * np.pi * 450 * t[i])) 
                          for i in range(FFT_SIZE)])
        simulated_signal = normal_component + fault_component + noise
        return simulated_signal
    def fft_analysis_with_window(sensor_data, window_type='hann'):
        """使用指定窗函数进行FFT分析"""
        # 获取窗函数
        windows = generate_windows()
        window = windows.get(window_type, windows['hann'])
        # 数据预处理
        data_processed = sensor_data - np.mean(sensor_data)  # 去直流
        data_windowed = data_processed * window              # 加窗
        # FFT计算
        fft_result = np.fft.fft(data_windowed)
        # 手动计算幅值谱
        fft_mag = manual_abs_complex(fft_result[:FFT_SIZE//2])
        return fft_mag, window_type
    def compare_windows(sensor_data):
        """比较不同窗函数的效果"""
        print("窗函数对比:")
        print("=" * 40)
        windows = ['rectangular', 'hann', 'hamming']
        for window_type in windows:
            spectrum, _ = fft_analysis_with_window(sensor_data, window_type)
            # 分析关键频率
            freq_res = SAMPLE_RATE / FFT_SIZE
            normal_idx = int(50 / freq_res)
            fault_idx = int(200 / freq_res)
            normal_mag = spectrum[normal_idx] if normal_idx < len(spectrum) else 0
            fault_mag = spectrum[fault_idx] if fault_idx < len(spectrum) else 0
            print(window_type + ":")
            print("  50Hz幅值: " + str(round(normal_mag, 3)))
            print("  200Hz幅值: " + str(round(fault_mag, 3)))
            # 计算频谱泄漏(手动计算)
            total_energy = 0
            for val in spectrum:
                total_energy += val  # 手动求和
            main_energy = normal_mag + fault_mag
            leakage = total_energy - main_energy
            print("  频谱泄漏: " + str(round(leakage, 3)))
            print()
    def check_motor_health(spectrum):
        """电机健康检查"""
        freq_res = SAMPLE_RATE / FFT_SIZE
        # 检查关键频率
        normal_freq = int(50 / freq_res)
        fault_freq = int(200 / freq_res)
        normal_mag = spectrum[normal_freq] if normal_freq < len(spectrum) else 0
        fault_mag = spectrum[fault_freq] if fault_freq < len(spectrum) else 0
        # 计算均值和标准差(手动实现)
        mean_val = 0
        for val in spectrum:
            mean_val += val
        mean_val = mean_val / len(spectrum)
        std_val = 0
        for val in spectrum:
            std_val += (val - mean_val) * (val - mean_val)
        std_val = np.sqrt(std_val / len(spectrum))
        # 使用z-score方法检测异常(手动计算绝对值)
        if std_val > 0:  # 避免除零
            z_score_fault = manual_abs_real(np.array([fault_mag - mean_val]))[0] / std_val
        else:
            z_score_fault = 0
        # 健康判断(基于z-score)
        if z_score_fault > 2.0:  # 超过2倍标准差
            return "故障:轴承磨损", fault_mag, z_score_fault
        elif z_score_fault > 1.0:  # 超过1倍标准差
            return "警告:早期磨损", fault_mag, z_score_fault
        else:
            return "正常", fault_mag, z_score_fault
    # 主程序
    print("设备健康监测启动(手动计算绝对值)...")
    # 生成窗函数
    windows = generate_windows()
    print("可用窗函数: " + ", ".join(windows.keys()))
    # 先进行窗函数对比
    sensor_data = generate_simulated_data()
    compare_windows(sensor_data)
    # 使用汉宁窗进行持续监测
    print("开始持续监测(使用汉宁窗)...")
    print("=" * 40)
    cycle_count = 0
    while True:
        try:
            cycle_count += 1
            print("监测周期: " + str(cycle_count))
            # 1. 生成模拟数据
            sensor_data = generate_simulated_data()
            # 2. 使用汉宁窗进行FFT分析
            spectrum, window_type = fft_analysis_with_window(sensor_data, 'hann')
            # 3. 健康诊断(使用z-score方法)
            status, fault_level, z_score = check_motor_health(spectrum)
            # 4. 输出结果
            print("诊断: " + status)
            print("异常频率幅值: " + str(round(fault_level, 3)))
            print("异常z-score: " + str(round(z_score, 3)))
            # 5. 显示主要频率(手动查找最大值)
            max_mag = 0
            max_idx = 0
            for i, val in enumerate(spectrum):
                if val > max_mag:
                    max_mag = val
                    max_idx = i
            max_freq = max_idx * SAMPLE_RATE / FFT_SIZE
            print("主要频率: " + str(round(max_freq, 1)) + "Hz, 幅值: " + str(round(max_mag, 3)))
        except Exception as e:
            print("分析错误: " + str(e))
        print("-" * 30)
        utime.sleep(3)

    实时监测:电机的"健康检查"

      try:
          from ulab import numpy as np
      except ImportError:
          import numpy as np
      def motor_health_check_corrected(vibration_data, sample_rate=8000, fft_size=256):
          """修正后的电机健康检查"""
          # 数据预处理
          data_mean = np.mean(vibration_data)
          data_processed = vibration_data - data_mean
          # FFT分析 - 添加归一化
          fft_result = np.fft.fft(data_processed) / fft_size
          magnitude = 2 * abs(fft_result)  # 取绝对值并乘以2(因为对称频谱)
          # 取有效频谱
          spectrum = magnitude[:fft_size//2]
          # 计算频率分辨率
          freq_resolution = sample_rate / fft_size
          # 获取关键频率的索引
          normal_idx = int(50 / freq_resolution)
          suspect_idx = int(200 / freq_resolution)
          danger_idx = int(500 / freq_resolution)
          # 获取幅值
          normal_mag = spectrum[normal_idx] if normal_idx < len(spectrum) else 0
          suspect_mag = spectrum[suspect_idx] if suspect_idx < len(spectrum) else 0
          danger_mag = spectrum[danger_idx] if danger_idx < len(spectrum) else 0
          # 修正的诊断逻辑 - 基于相对值
          base_level = normal_mag  # 以50Hz为基准
          if danger_mag > base_level * 0.3:  # 500Hz超过基频30%
              return "紧急:立即停机检查!检测到严重故障频率"
          elif suspect_mag > base_level * 0.15:  # 200Hz超过基频15%
              return "警告:建议安排检修,发现异常振动特征"
          elif normal_mag < 0.01:  # 基频太小
              return "注意:设备可能未正常运行"
          else:
              return "正常:设备运行状态良好"
      def test_motor_health_corrected():
          """测试修正后的电机健康检查函数"""
          # 生成更合适的模拟振动数据
          fft_size = 256
          sample_rate = 8000
          t = np.linspace(0, fft_size/sample_rate, fft_size, endpoint=False)
          # 1. 正常电机信号 - 只有50Hz基频
          normal_signal = 0.8 * np.sin(2 * np.pi * 50 * t)
          # 2. 早期故障信号 - 50Hz基频 + 200Hz轻微故障
          early_fault_signal = (0.8 * np.sin(2 * np.pi * 50 * t) + 
                               0.2 * np.sin(2 * np.pi * 200 * t))
          # 3. 严重故障信号 - 50Hz基频 + 500Hz严重故障
          severe_fault_signal = (0.8 * np.sin(2 * np.pi * 50 * t) + 
                                0.6 * np.sin(2 * np.pi * 500 * t))
          print("=== 修正后的电机健康检查测试 ===")
          print("\n1. 正常电机测试:")
          result1 = motor_health_check_corrected(normal_signal, sample_rate, fft_size)
          print("结果:", result1)
          print("\n2. 早期故障电机测试:")
          result2 = motor_health_check_corrected(early_fault_signal, sample_rate, fft_size)
          print("结果:", result2)
          print("\n3. 严重故障电机测试:")
          result3 = motor_health_check_corrected(severe_fault_signal, sample_rate, fft_size)
          print("结果:", result3)
      # 运行测试
      if __name__ == "__main__":
          test_motor_health_corrected()

      三、FFT参数的通俗解释

      采样率:设备的"听力灵敏度"

      • 8kHz采样率 = 每秒听8000次

      • 要听清1kHz的声音,至少需要2kHz采样率

      • EC200U最大支持8kHz,能听到4kHz以下的所有声音

      FFT点数:分析的"放大倍数"

      • 256点:看得比较清楚,占用内存小

      • 512点:看得更精细,占用内存多一倍

      • 1024点:看得最精细,但EC200U内存可能不够用

      窗函数:消除"重影"的眼镜

      不加窗就像近视眼看东西——会有重影。加汉宁窗就是戴上合适的眼镜,让频谱更清晰。

      四、实际应用场景

        try:
            from ulab import numpy as np
        except ImportError:
            import numpy as npdef test_compressor():
            """测试压缩机状态监测函数"""
            fft_size = 256
            sample_rate = 8000
            t = np.linspace(0, fft_size/sample_rate, fft_size, endpoint=False)
            
            # 1. 正常压缩机信号
            normal_sound = 0.8 * np.sin(2 * np.pi * 120 * t)
            
            # 2. 轴承磨损信号
            fault_sound = (0.8 * np.sin(2 * np.pi * 120 * t) + 
                          0.3 * np.sin(2 * np.pi * 240 * t))
            
            # 3. 停机信号 - 使用一个非常简单的信号代替噪声
            # 如果连随机数都没有,我们可以用一个非常低幅度的正弦波
            stopped_sound = 0.01 * np.sin(2 * np.pi * 60 * t)  # 非常弱的60Hz信号
            
            print("=== 空调压缩机状态监测测试 ===")
            
            print("\n1. 正常压缩机测试:")
            result1 = check_compressor(normal_sound, sample_rate, fft_size)
            print("结果:", result1)
            
            print("\n2. 轴承磨损测试:")
            result2 = check_compressor(fault_sound, sample_rate, fft_size)
            print("结果:", result2)
            
            print("\n3. 停机状态测试:")
            result3 = check_compressor(stopped_sound, sample_rate, fft_size)
            print("结果:", result3)

        五、避坑指南

        坑1:数据量太大,内存爆炸

        错误做法:

          data = [] for i in range(10000):  # 采集10000个点    data.append(sensor.read())# 内存可能不足!

          正确做法:

            data = []for i in range(256):    # 只采集256个点    data.append(sensor.read())# 内存足够,分析效果也很好

            坑2:采样间隔不准确

            错误做法:

              for i in range(256):    data.append(sensor.read())    time.sleep(0.001)  # 睡眠时间不精确

              正确做法:

                for i in range(256):    data.append(sensor.read())    machine.time_pulse_us(pin, 1, 125)  # 精确的125微秒间隔

                坑3:忽略温度影响

                错误做法:

                  adc = machine.ADC(machine.Pin(2))# 直接读取,可能受温度影响

                  正确做法:

                    adc = machine.ADC(machine.Pin(2))adc.calibrate()  # 先校准,消除温度影响

                    六、性能表现

                    在实际测试中,EC200U模组的FFT性能:

                    任务耗时内存占用效果
                    256点FFT1.2毫秒1.2KB足够识别主要故障
                    128点FFT0.8毫秒0.8KB适合快速检测
                    连续监测增加3mA电流可接受实现24小时监控

                    结语

                    FFT不是高深的数学魔法,而是物联网开发的实用工具。通过QuecPython+FFT,你的EC200U模组可以:

                    • ✅ 听懂设备的"心跳声"

                    • ✅ 提前发现故障征兆

                    • ✅ 节省大量数据流量

                    • ✅ 实现真正的边缘智能

                    相关推荐

                    移远通信携手高通,依托AI Hub共建端侧AI开发者生态

                    移远通信与高通公司今日共同宣布,将在终端侧AI领域进一步深化合作。®,加速生成式和智能体AI应用在物联网、下一代PC、智能汽车、XR设备等资源受限的终端侧的部署与普及。移远通信首席运营官张栋表示:“高通公司在端侧AI创新与生态建设上长期引领,AI Hub中国版更把优质模型与本地化服务带到开发者面前。我们很高兴与高通携手,用丰富的端侧AI硬件和工具链,把这些能力转化为可量产、可复制的场景方案。

                    281

                    具身智能走进工厂:移远宝维塔工博会两大发布,柔性智造与车载电子测试同步提速

                    10月12日,2026中国国际工业博览会在国家会展中心(上海)开幕。聚焦先进制造与工业自动化,移远通信旗下工业智能品牌于展会现场正式发布,并推出,围绕柔性制造与车载电子测试自动化,分享技术探索、量产实践与行业洞察。

                    190

                    移远产品体验官 | 第一期 • 入选结果揭晓

                    219

                    移远产品体验官正在招募|免费开发板等你来体验!

                    16

                    LVGL-流程

                    在当今嵌入式系统开发领域,图形化用户界面(GUI)的需求越发突显,Quecpython + LVGL将为您的GUI开发助力。

                    65

                    IOTE 2026 | 百搭主控板登场!移远QSM603FCP,打造AIoT终端的高效底座

                    8月26日,IOTE深圳物联网展拉开帷幕。作为聚焦AIoT、边缘智算与机器人创新应用的产业风向标,本届展会汇聚大量前沿技术成果。在此期间,作为填补中端市场高性能智控需求的关键一环,QSM603FCP凭借,为智慧零售、工业AI质检、边缘智算网关及具身智能机器人等领域提供了“即插即用”的硬核底座。作为主控板的“大脑”,QSM603FCP基于。

                    452

                    守护每一程翻山越岭,移远通信为闽西公路织就“数字防护网”

                    在福建龙岩,G319等国道蜿蜒穿行于闽西的崇山峻岭之间。沿线高边坡、深落差、急弯道此起彼伏,每逢汛期,强降雨频发,极易诱发山体滑坡、塌方等地质灾害,不仅严重威胁车辆和行人通行安全,也为公路养护带来了极大挑战。为补齐山区公路安全管控短板,推动交通基础设施数字化转型升级,龙岩市启动“普通公路示范通道智慧化改造项目”。山区边坡防护最大的难题,就是风险藏在暗处,很难提前预判。山体形变细微无声,传统巡检方式只能事后补救,很难提前捕捉萌芽风险。为此,

                    169

                    移远通信×星云环影,解锁儿童“AI智伴”新体验

                    AI科学分析总结儿童的兴趣及爱好,并提供成长建议与情绪分析。该方案使搭载同一机芯盒的不同毛绒玩具,能够拥有独特的性格与交互逻辑,实现了。

                    200

                    移远通信:以软硬一体的AIoT方案,玩转AI智能陪伴新风口

                    在7月23日举办的AIZQE 2026全球AI硬件与AIoT终端创新千人峰会・深圳站上,移远通信产品总监王鹏系统介绍了公司面向AI智能陪伴领域的一站式行业解决方案,全面拆解移远AIoT软硬一体化能力,并分享了在该赛道深耕多年、落地多元智能终端的实践经验。以“情感陪伴+科学教育”为核心,具备AI学伴团、万物识别、拍照学习等核心功能,支持户外、居家多场景,帮助用户随时随地探索知识,实现寓教于乐的伴随式学习。面向都市年轻上班族及独居人群,可实时捕捉用户情绪变化,输出即时、暖心的互动反馈。移远通信产品总监王鹏。

                    215

                    筑牢“安全底线”:移远通信车规IMU模组斩获ISO 26262 ASIL-B认证

                    在辅助驾驶技术飞速迭代的今天,如果说高精度的卫星定位决定了车辆感知能力的“上限”,那么惯性测量单元(IMU)便是守住车辆行驶安全的“底线”,它就像人的内耳前庭,时刻感知着车辆的姿态、加速度和角速度。即便驶入隧道、地下车库或高楼林立的城市峡谷,卫星信号被遮挡时,这颗深藏于车身内部的“电子内耳”依然能持续输出运动数据,确保定位不中断、决策不失控。2026年7月22日,移远GNSS产品部总监方成(右)&TÜV奥地利集团中国区总裁黄飞。

                    297

                    WAIC 2026 | 这套智能双臂组装方案,让“柔性智造”触手可及

                    从“专机专用”到“通用智能”,宝维塔以精密组装为切入点,将通用具身智能从前沿技术概念,转化为可落地、可规模化复制的智造解决方案。简单来说,这套系统相当于给机器装上一副“仿生人眼”,能完整看清零件的立体外形,精准判断出零件的空间位置、摆放角度和状态,让机械臂精准知道零件在哪里、是什么姿势、该从哪里抓取。,比如“抓取右侧那个透明的圆形接头”,机械臂便能自主理解语义、识别目标、规划路径并避开障碍,一气呵成完成抓取。,无论是螺丝锁付、插拔装配、点胶贴合还是线束组装,都能快速适配,一台设备通吃多种工艺。

                    206

                    WAIC 2026 | 移远轮臂式具身机器人平台登场:让机器人“想明白、反应快、拿得稳”

                    7月19日,上海,2026世界人工智能大会(WAIC)移远展台现场。只需一个简单指令“给我一瓶XX饮料”——机器人识别、抓取、递送,一气呵成。不用重复指令,也不必靠遥控器“手把手”教学。它自己“理解透”你的需求,“看清楚”饮料在哪,“想明白”怎么伸手,“拿捏准”每一丝力道。从语音到动作,从意图到执行,这台机器人完成了一次完整的自主智能闭环。

                    398

                    跨越端侧AI落地鸿沟:移远通信大模型方案全面升级,重塑交互与效能

                    面对端侧AI大模型全面爆发的市场需求,如何帮助客户高效落地并抢占AI先机,已成为行业的核心命题。在WAIC 2026(世界人工智能大会)期间,为行业打通AI商业化落地“最后一公里”提供了全新思路。移远AI前沿技术中心总负责人王韬表示:“当整个行业都在为参数突破而欢呼时,我们选择了一条更务实的路——沉下心来,在端侧大模型领域持续深耕。因为我们深知,技术的终极意义不在于跑分,而在于落地。

                    194

                    WAIC 2026 | 移远SleepHub首发:以声学AI重新定义智能电动床交互体验

                    7月17日,2026世界人工智能大会(WAIC)在上海盛大启幕,。这套方案专门为电动床品牌与制造厂商打造,采用。其内置VA501语音模组,提供丰富的离线语音交互功能,不仅支持连续对话、深度定制指令词、主被动语音播报,还自带鼾声检测、双区空间识别与床体姿态联动能力。简言之,SleepHub为电动床厂商提供了一套“听得懂指令、能主动守护”的语音交互中枢,帮助产品快速实现智能化升级。随着睡眠健康消费持续升级,电动床正从单一机械调节,向智能化、个性化交互快速演进。

                    318

                    音频的驱动

                    音频校准工具可调整内置 codec 输入增益(包含模拟增益,adc增益),输出增益(包含模拟增益,dac增益,算法增益),侧音增益。生效模式分为实时生效模式,和非实时生效模式,通过 API控制。其中非实时生效模式下,调整的参数将会在下次播放/通话时才能生效。工具可适配整多种应用场景,和多种输入/输出通道。音频工具调整好参数后,可以直接固定到NV文件中,作为默认音频参数。

                    231

                    移远通信全面入局XR:发布Hawk+Dolphin产品矩阵,打通XR从参考设计到规模量产的最后一公里

                    而对于XR,我们坚定地相信,下一代人机交互的核心入口,将是我们的眼睛。面对消费级用户与垂直行业提出的近乎苛刻的新要求——产品要好、速度要快、供应要强,移远提出了"0-1、1-N、1+N"三维能力框架——聚焦XR软硬件参考设计与定义,解决规模化阶段的精密制造与交付速度,以及提供全产业链生态整合服务。算力单元不仅可与AR眼镜连接,提供丰富的OS资源和AI交互能力(以Agent为中心的意图控制与指令交互),还可通过有线或无线方式连接3D头显、显示器等更多种类终端,大大拓展应用场景,成为工作生活中的智能助手。

                    426

                    移远这项“小而美”的技术,拿下汽车电子大奖!

                    同时,它全面支持n41/n77/n78/n79等5G核心频段(覆盖国内主流运营商)和全频段的天线调谐,无论车辆行驶在隧道、山区还是城市密集区,都能保持高速率、低延迟、高可靠的稳定连接。这项技术的“含金量”究竟体现在哪?简单来说,传统射频方案好比买了一套功能繁多的“豪华工具箱”——虽然什么都能干,但车企实际只用到其中几样,却要承担高昂的成本和冗余的功耗。移远通信将继续以硬核创新为引擎,携手产业链伙伴,推动5G车载通信从“高端选配”加速迈向“规模标配”“深度定制”,共同奔赴智能出行新未来。

                    211

                    MWC26上海 | 移远RG155UC-CN:突破性架构精裁,成就5G RedCap“质优价更轻”

                    6月26日,在MWC26上海展会期间,作为面向RedCap场景深度定制的标杆模组,RG155UC-CN真正实现“轻量5G,硬核性能”。产品以三大核心优势,全方位解决传统5G模组尺寸偏大、功耗偏高、场景适配受限等行业痛点,为等海量轻量化终端提供高性价比、高效率的5G规模化落地全新方案,推动5G RedCap全面迈入普惠商用新阶段。

                    368

                    MWC26上海直击!移远割草机器人解决方案:让庭院作业“智”在必得

                    6月25日,在MWC26上海展会期间,当前,家用与商用智能割草机器人市场迎来规模化增长,行业竞争日趋白热化,各大厂商对产品快速落地、性能稳定可靠、高性价比的需求达到前所未有的高度。在此背景下,一套兼顾高效、优质、高性价比的全链路解决方案,已然成为决胜市场的关键。过去,开发一个新机型往往需要从底层硬件做起,从零开始进行系统设计、硬件搭建与调试,周期长、投入大。移远的破局之道在于“积木式”模块化设计。

                    217

                    数码管-应用

                    数码管/LED 点阵是嵌入式系统中常见的显示方案,该方案比 LCD 显示屏占用更少的引脚和内存资源,实现也更加简单,比较适合计时、计数、状态显示等具有单一显示需求的应用场景。数码管主要有 LED 数码管、LCD 数码管和 VFD 数码管等类型。

                    208

                    MWC26上海 | 移远首款MediaTek平台旗舰级AI算力模组震撼登场

                    6月25日,在MWC26上海展会期间,,打通了高阶AI算力向千行百业端侧渗透的关键脉络。,广泛适用于等高端场景,助力客户在边缘计算与AI原生应用浪潮中抢占先机。MediaTek物联网事业部总经理王镇国表示:“移远是MediaTek长期信赖的战略合作伙伴,此次作为MediaTek Genio Pro 旗舰平台的首批客户深度参与联合研发,意义深远。

                    356

                    触摸屏-应用

                    驱动中已经集成了电阻触摸屏的校准算法,校准过程屏幕会点亮四个点,依次点击来校准,采集数据进行数据比对,误差太大则点击失败,重新点击。调用校准函数 xtp2046.adjust()将会在屏幕上开始校准的过程,校准完成后,将参数保存在文件中,下次初始化 xtp2046 时读取校准数据,避免每次使用前的重复校准。触摸屏的分辨率设置也是很重要的,因为触摸屏旋转后的换算依赖于触摸屏的宽和高分辨率大小,设置不当将无法得到正确的旋转效果。每种类型的触摸屏都有其优点和适用的场合,选择哪种类型主要取决于具体的应用需求。

                    265

                    显示器-调试

                    请参考LCM 接口 API和SPI LCD 接口 API。lcd.mipi_init 接口原型参数类型说明initbufbytearray必传,传入 MIPI 的配置命令widthint缺省值:480,屏幕的宽度,单位像素,示例:width=400hightint缺省值:854,屏幕的高度,单位像素,示例:hight=800bppint缺省值:16,像素深度DataLaneint缺省值:2,数据通道MipiModeint。

                    266

                    通过AEC-Q104测试!移远5G+AI智能座舱模组以硬核实力领跑赛道

                    AEC-Q104是由汽车电子协会(AEC)制定的针对车载多芯片模块(MCM)的可靠性测试标准,覆盖极端高低温、温度冲击、振动、机械冲击等多维严苛测试,是车载电子进入前装供应链的核心准入门槛。而AS830M可彻底改变这一局面,减轻客户的重复测试负担,显著降低系统失效风险与供应链管理成本,有效缩短前装量产周期,助力高端智能座舱快速、安全落地。未来,移远通信将持续推进不同算力规格舱联模组的AEC-Q104合规测试,助力汽车行业域控融合,为客户提供更多优质的舱联解决方案。

                    279

                    锚定AI原生新赛道!移远携全系车载方案闪耀2026高通汽车峰会

                    6月4-5日,以“智启新程”为主题的2026高通汽车技术与合作峰会在无锡国际会议中心盛大举行。全球整车厂、Tier 1及产业链领军企业齐聚一堂,共探智能汽车产业新趋势。会上,发表致辞。孟樸指出,汽车正从交通工具演变为高度智能化、持续进化的移动空间,并将进一步成为智能体A最重要的移动载体之一,能够感知环境、理解用户、协同服务。2026年已进入“智能体之年”,AI智能体正推动人机交互与设备协同迈向新阶段。高通凭借从终端到数据中心的跨层级系统能力,让智能无处不在、触手可及。

                    319

                    显示器-应用

                    对屏幕进行分类的讨论将有助于我们对驱动的理解,这里将按照屏幕可显示的色彩来分类,而非 OLED、LCD 等屏幕的面板材料。旋转了屏幕后,显示内容不见了。这可能是因为屏幕面板的分辨率小于屏幕控制器的分辨率,导致旋转后显示区域没有完全落在屏幕面板上,这时应考虑设置正确的显示区域偏移。现代显示器的种类非常多样化,它们用于各种不同的设备和应用,从个人计算机到商业广告屏,从手机到电视,从游戏设备到嵌入式设备等。嵌入式系统中的显示器需求可能会根据具体的应用和性能需求有所不同,因此选择适合的显示器类型是非常重要的。

                    339

                    USB应用指导

                    当设备被连接到主机时,设备控制器驱动需要识别这个事件,并响应主机的初始化请求,例如提供设备描述符(Device Descriptor),这是一个描述设备特性(例如设备类型、制造商ID、产品ID等)的数据结构。蜂窝通信模组作为一个USB设备(或称为USB从设备,USB Device),可以通过USB接口连接到主机(比如PC或嵌入式主控板)。以上的速率都是理论上的最高值,在实际应用中,由于各种原因(包括但不限于USB控制器的性能,设备的性能,线缆的质量,以及系统的负载等),实际的传输速率可能会低于这些值。

                    266

                    ADC-应用

                    因此,一个8位的ADC可以将输入范围分成2的8次方(256)个不同的离散级别,而一个12位的ADC可以将输入范围分成2的12次方(4096)个离散级别。检测电池电压的原理是采用电阻分压的方法,即硬件上用两个电阻把电池电压进行比例分压,把分压后的电压送到模组ADC管脚进行检测,软件根据模组ADC读取的电压值经过换算计算出电池的电压。连接硬件:如下图所示,ME4055A的CHRG和STDBY分别接模组的GPIO,BAT接电池正极,VCC接电源,通过把电池电压分压,接入到模组的ADC管脚,以测量电池电压。

                    256

                    PWM- 脉宽调制

                    对于直流电机来讲,当给电机提供电源时,电机会转动,但是是一点一点的提速,在突然停止供电给电机供电时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。上图中,T 表示周期,W 表示脉宽,ton 是高电平阶段,toff 是低电平阶段,则 T=ton+toff,频率 f=1/T,占空比=W/T。

                    347

                    SPI-概述

                    SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线。SPI使用了主设备和从设备的概念。在任何给定的SPI通信中,有一个主设备和一个或多个从设备。主设备负责启动和结束通信会话。

                    401
                    上一篇: QuecPython 串口通信攻略!让设备 “聊起来” 超简单~
                    下一篇: 嵌入式玩家必看!Quecpython 外部中断,手把手教你搞懂实时响应
                    移远通信
                    移远通信 企业官方账号 企业官方账号
                    博客等级 码龄7年 1517粉丝 516原创
                    评论
                    成就一亿技术人!
                    拼手气红包6.0元
                    还能输入1000个字符
                     
                     条评论被折叠 查看
                    添加红包

                    请填写红包祝福语或标题

                    个

                    红包个数最小为10个

                    元

                    红包金额最低5元

                    当前余额3.43元 前往充值 >
                    需支付:10.00元
                    成就一亿技术人!
                    领取后你会自动成为博主和红包主的粉丝 规则
                    hope_wisdom
                    发出的红包
                    实付元
                    使用余额支付
                    点击重新获取
                    扫码支付
                    钱包余额 0

                    抵扣说明:

                    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                    余额充值