楼主: NXP管管

[在线活动] 【送70块板卡】“中秋芯礼”开发板大放送

  [复制链接]
回帖奖励 27 NXP金币 回复本帖可获得 3 NXP金币奖励! 每人限 2 次
抢楼 抢楼 查看抢中楼层 本帖为抢楼帖,欢迎抢楼!  奖励楼层: 7,77,177 

该用户从未签到

0

主题

2

帖子

0

新手上路

Rank: 1

积分
19
最后登录
2025-5-18
发表于 2024-9-17 12:11:28 | 显示全部楼层

回帖奖励 +3 NXP金币

期待中奖,目前看中的是nxp主推的n947系列,拥有一颗板载npu核,可以在边缘端进行ai模型推理
回复

使用道具 举报

  • TA的每日心情
    开心
    昨天 15:31
  • 签到天数: 1106 天

    连续签到: 24 天

    [LV.10]以坛为家III

    28

    主题

    4280

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5804
    最后登录
    2025-8-1
    发表于 2024-9-17 21:25:02 | 显示全部楼层
    处理iic器件时,一定要搞清楚手册中关于iic地址的处理。在读写状态下,有时候会出现因为地址的初始值不对导致无法完成正常的数据通讯。比如0.96的OLED显示屏,有些处理中使用0x78,有的时候要用0x3C。我就犯过这种错误,一直用0x78,导致有些场合,无法正常工作。
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-24 10:13
  • 签到天数: 153 天

    连续签到: 2 天

    [LV.7]常住居民III

    0

    主题

    585

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1126
    最后登录
    2025-7-31
    发表于 2024-9-17 23:15:24 | 显示全部楼层

    回帖奖励 +3 NXP金币

    ①写一个你开发过程是遇到的bug最近公司开发个电源产品,出现了一个非常严重的BUG,就是产品在工作的时候,一组定时中断出现异常动作,通过长时间的分析与调试,发现是中断清除的时候,没有正常清掉,时间太短了。
    ②写一段控制类代码
    for (int i = 0; i < numPriorities; i++) {  
            if (priorities == 1) {  
                processHighPriorityTask();  
            } else if (priorities >= 2 && priorities <= 3) {  
                printf("666\n", priorities);  
            } else if (priorities == 4) {  
                processLowPriorityTask();  
            }  
        }  
    ③找一个你觉得设计想法很好的方案可以是板子也可以是应用

    MCX A153、MCX C444,这两个芯片的开发板还没有接触过,计划利用这两个其中的一个开发板,开发一个智能家具的控制系统,利用它们之间的各自优点进行开发,如果是153需要充分使用他的低功耗,长时间运行且对电池寿命有要求的智能家具控制系统来说是一个不错的选择,支持多种通信协议,I3C、I2C、SPI等,便于与家中的其他智能设备进行通信和集成。;444利用他的开发家具的优势会更高,可以驱动电机,控制灯光亮度等,USB、SPI、I2C、UART等便于连接各种外部设备和传感器等。
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    2025-5-5
    发表于 2024-9-17 23:53:35 | 显示全部楼层

    回帖奖励 +3 NXP金币

    在开发过程中,我遇到过一个非常棘手的bug:在使用LPC54628微控制器进行以太网通信时,发现数据传输不稳定,偶尔会出现数据丢失或乱码的情况。起初我以为是软件协议栈的问题,花了大量时间检查代码,却没有发现异常。后来经过仔细分析,才发现问题出在硬件设计上——以太网PHY芯片的时钟引脚没有正确匹配阻抗,导致信号完整性受到影响。最终,通过在PCB布局中调整走线和添加匹配电阻,成功解决了这个问题。这次经历让我深刻认识到硬件设计对系统稳定性的影响。

    下面分享一段用于PID控制的代码,用于温度控制系统中,实现精确的温度调节:
    #include <stdio.h>

    double SetPoint = 100.0;   // 目标温度
    double Input;              // 当前温度
    double Output;             // 控制输出
    double errSum, lastErr;
    double kp = 2.0, ki = 0.5, kd = 1.0;  // PID参数

    void ComputePID() {
        double error = SetPoint - Input;
        errSum += error * dt;
        double dErr = (error - lastErr) / dt;

        Output = kp * error + ki * errSum + kd * dErr;

        lastErr = error;
    }

    void Setup() {
        errSum = 0;
        lastErr = 0;
    }

    int main() {
        Setup();
        while (1) {
            Input = GetTemperature();  // 获取当前温度的函数
            ComputePID();
            SetHeaterPower(Output);    // 设置加热器功率的函数
            Delay(dt);                 // 控制循环周期
        }
        return 0;
    }
    在众多开发板中,我对LPC55S69评价颇高。这款开发板采用Arm Cortex-M33双核架构,主频高达150MHz,支持TrustZone安全技术和DSP指令集,非常适合需要高性能和高安全性的嵌入式应用。此外,它还集成了丰富的外设接口,如高速USB、SDIO、CAN和SPI等,方便连接各种传感器和外部设备。板载调试器和用户按键、LED等资源,使得开发和调试过程更加便捷。我认为这款开发板在性能、功能和安全性方面都达到了优秀的平衡,是物联网和工业控制领域的理想选择。
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    7
    最后登录
    2024-9-29
    发表于 2024-9-18 00:00:48 | 显示全部楼层

    回帖奖励 +3 NXP金币

    在我的开发经历中,有一次在使用LPC845微控制器进行ADC采集时,遇到了一个令人费解的bug。现象是ADC读取的数值总是偏低,且不稳定。我检查了代码,确认初始化和配置都是正确的。最后通过查阅手册和实验,发现问题出在参考电压的配置上。默认情况下,ADC使用内部参考电压1.2V,而我的输入信号范围是0-3.3V,导致采样结果不准确。通过修改ADC参考电压为外部电源电压,问题得以解决。这次经历让我深刻认识到,细节决定成败,熟读芯片手册是非常重要的。

    控制代码如下:
    #include <stdio.h>
    #include "LPC8xx.h"

    void UART_Init(uint32_t baudrate) {
        uint32_t uart_clk_div = 1;
        uint32_t uart_sys_clk = SystemCoreClock / uart_clk_div;
        uint32_t baudrate_gen = uart_sys_clk / (16 * baudrate);

        LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 14); // Enable UART clock
        LPC_SYSCON->UARTCLKDIV = uart_clk_div;

        LPC_UART0->CFG = (1 << 0) | (1 << 2); // 8 data bits, no parity, 1 stop bit
        LPC_UART0->BRG = baudrate_gen - 1;
        LPC_UART0->STAT = (1 << 15); // Clear status bits
        LPC_UART0->INTENSET = 0; // Disable interrupts
        LPC_UART0->CFG |= (1 << 0); // Enable UART
    }

    void UART_SendChar(char c) {
        while (!(LPC_UART0->STAT & (1 << 2))); // Wait until TXREADY
        LPC_UART0->TXDATA = c;
    }

    char UART_ReceiveChar(void) {
        while (!(LPC_UART0->STAT & (1 << 0))); // Wait until RXREADY
        return LPC_UART0->RXDATA;
    }

    int main(void) {
        UART_Init(9600);
        char received;

        while (1) {
            received = UART_ReceiveChar();
            UART_SendChar(received); // Echo received character
        }
        return 0;
    }
    在众多方案中,我对LPC54628开发板的设计理念非常欣赏。它采用了Cortex-M4内核,主频高达180MHz,性能强劲。板载集成了LCD接口、以太网、USB、高速SPI等丰富的外设,能够满足多媒体和高速通信的需求。此外,开发板还支持Segger J-Link调试器,方便开发者进行调试和下载。其模块化的设计使得硬件扩展更加灵活,可以快速构建原型,极大地提高了开发效率。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-12-9 14:23
  • 签到天数: 204 天

    连续签到: 1 天

    [LV.7]常住居民III

    7

    主题

    567

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1143
    最后登录
    2025-3-12
    发表于 2024-9-18 00:09:12 | 显示全部楼层
    来段PID控制代码

    //首先定义PID结构体用于存放一个PID的数据
    typedef struct
    {
               float kp, ki, kd; //三个系数
        float error, lastError; //误差、上次误差
        float integral, maxIntegral; //积分、积分限幅
        float output, maxOutput; //输出、输出限幅
    }PID;

    //用于初始化pid参数的函数
    void PID_Init(PID *pid, float p, float i, float d, float maxI, float maxOut)
    {
        pid->kp = p;
        pid->ki = i;
        pid->kd = d;
        pid->maxIntegral = maxI;
        pid->maxOutput = maxOut;
    }

    //进行一次pid计算
    //参数为(pid结构体,目标值,反馈值),计算结果放在pid结构体的output成员中
    void PID_Calc(PID *pid, float reference, float feedback)
    {
            //更新数据
        pid->lastError = pid->error; //将旧error存起来
        pid->error = reference - feedback; //计算新error
        //计算微分
        float dout = (pid->error - pid->lastError) * pid->kd;
        //计算比例
        float pout = pid->error * pid->kp;
        //计算积分
        pid->integral += pid->error * pid->ki;
        //积分限幅
        if(pid->integral > pid->maxIntegral) pid->integral = pid->maxIntegral;
        else if(pid->integral < -pid->maxIntegral) pid->integral = -pid->maxIntegral;
        //计算输出
        pid->output = pout+dout + pid->integral;
        //输出限幅
        if(pid->output > pid->maxOutput) pid->output =   pid->maxOutput;
        else if(pid->output < -pid->maxOutput) pid->output = -pid->maxOutput;
    }

    PID mypid = {0}; //创建一个PID结构体变量

    int main()
    {
        //...这里有些其他初始化代码
        PID_Init(&mypid, 10, 1, 5, 800, 1000); //初始化PID参数
        while(1)//进入循环运行
        {
            float feedbackValue = ...; //这里获取到被控对象的反馈值
            float targetValue = ...; //这里获取到目标值
            PID_Calc(&mypid, targetValue, feedbackValue); //进行PID计算,结果在output成员变量中
            设定执行器输出大小(mypid.output);
            delay(10); //等待一定时间再开始下一次循环
        }
    }
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-12-9 14:23
  • 签到天数: 204 天

    连续签到: 1 天

    [LV.7]常住居民III

    7

    主题

    567

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1143
    最后登录
    2025-3-12
    发表于 2024-9-18 00:09:23 | 显示全部楼层
    抢个楼,占位
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-12-9 14:23
  • 签到天数: 204 天

    连续签到: 1 天

    [LV.7]常住居民III

    7

    主题

    567

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1143
    最后登录
    2025-3-12
    发表于 2024-9-18 00:13:50 | 显示全部楼层

    内容:
    比较喜欢的一种设计:
    硬件代理模式(Hardware Proxy Pattem)使用结构体封装所有硬件设备访问,无论其硬件接口是怎样的,代理为客户提供与硬件形态无关的接口。硬件代理接口可以形如 init、open、close、read、write、control,其内部实现无需开放。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 15:31
  • 签到天数: 1106 天

    连续签到: 24 天

    [LV.10]以坛为家III

    28

    主题

    4280

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5804
    最后登录
    2025-8-1
    发表于 2024-9-18 12:02:17 | 显示全部楼层
    附上一段51单片机控制24步进电机的代码:
    main()
    {

    unsigned int i;
    unsigned int count;

    count = 0;
    while(1)
    {
       
       for(count=0;count<2400;count++) {
              for(i=0;i<4;i++)      //4相
                 {
                 P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
                 Delay(200);        //改变这个参数可以调整电机转速
                     }
                   
              }

              Delay(20000);

              for(count=0;count<2400;count++) {
                  for(i=0;i<4;i++)      //4相
                 {
                     P1=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
                     Delay(200);        //改变这个参数可以调整电机转速
                     }
                   
              }
              Delay(20000);

      }
    }
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-30 07:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    26

    帖子

    0

    注册会员

    Rank: 2

    积分
    77
    最后登录
    2025-3-5
    发表于 2024-9-18 14:26:22 | 显示全部楼层

    回帖奖励 +3 NXP金币

    ①写一个你开发过程是遇到的bug
    曾经开发过一个电机驱动,产品测试时都是可以正常工作,但是当设备工作达到一定的时长时,就会出现电机行程工作不到位,后续经过排查计时器在给其它外设工作时,没有清零,在给电机驱动工作时,还继续在外设基础自动增加计时,导致电机驱动时的行程变短而引起的BUG。
    ②写一段控制类代码
    // LED闪烁  
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);  
    HAL_Delay(500);  
       // 串口发送数据  
    char msg[] = "Hello NXP!\r\n";  
    HAL_UART_Transmit(&huart1, (uint8_t*)msg, sizeof(msg) - 1, HAL_MAX_DELAY);  
    HAL_Delay(1000);  
    ③找一个你觉得设计想法很好的方案可以是板子也可以是应用
    想做一个电机驱动控制,计划选用NXP的开发板实现,步进电机的控制,通过高级定时器去控制发出的脉冲个数,然后利用板载的高级定时器进行输入捕获,从而准确的计算出主控发出的脉冲数,然后利用拉线式编码器或者是旋转式编码器对电机运行的圈数进行统计,从而验证发出的脉冲是否准确。当超过机械限位,或者是其他保护时候,应该立即停止电机的运行,防止电机的运行损坏加载机构,

    开心
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-2 11:30 , Processed in 0.103404 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表