2023.8.21 经验分享会-上海实邦电子科技有限公司
你的位置:首页 > 新闻动态 > 新闻资讯

2023.8.21 经验分享会

2023/8/21 14:49:10      点击:

      2023年8月21日上午,上海实邦电子科技有限公司开展了一次经验交流会,由王工、崔工、和陈工一起分享了他们在工作中积累的一些经验。

      首先是陈工分享了掉电数据保存与方案管理系统


      一、 存储方式选择

      1. 单片机内部flash,优点是无需额外的硬件开销,缺点比较多,存储内容比较少,存储速度比较慢,存储占用空间不合理

      详解:Stm32F407的flash结构,使用内部flash作为掉电存储,一般是用最后几个扇区,避免把代码覆盖,由于flash写需要先擦擦,所以扇区大小过大会造成擦除时间过长,影响整体存储时间。

      2外部flasheeprom

     掉电存储数据量在M级别用flashK级别用eeprom

     flash优点速度快,内存大,缺点是写之前需要读出整个扇区数据,然后擦除整个扇区,通常会有个4k大小的数组,

     eeprom优点就是不用擦除,随机写,连续写需要考虑页面大小,连续写的数据量取决于页面大小,缺点就是速度慢,写完以后需要延时5ms


     二、 存储结构及程序设计

     1. 简单的存储方式-数组

     优点:程序简单

     缺点:封装性很差,遇到复杂的场景程序可读性很差,也没有校验

     2. 结构体的方式

     缺点:代码比较复杂

     优点:封装性很高,不同项目移植方便,包括新建,删除,查看,修改等功能,类似电脑上的文件操作,使用方便,调用时代码简洁,带校验

     3. 函数种类:根据功能的需要需要有新建函数、删除函数、修改函数(包括重命名)、读取函数

     4. 程序设计

     (1)创建结构体

     (2)调用对应接口函数,形参传入创建的结构体

     (3)根据操作结果,如果成功,加载这个方案,如果失败,初始化方案后,再次加载方案





      崔工分享了一些调制PWM波

      配置频率:调制波形的频率主要是调定时器的预分频值和重装载值:即找到合适的预分频值和重装载值
      公式①:freq(目标频率) =  Main_Freq/(Psc*Arr)(主频/预分频值*重装载值)
      得到:Arr*Psc = Main_Freq/freq;
      采用轮询的方式确定这两个值,先假定一个值,假设分频值小于等于重装载值
      公式②:Psc_max(最大分频值) = Arr_min(最小重装载值);
      得到:Psc_max(最大分频值) = Arr_min(最小重装载值) = √Arr∗Psc;
      确定这两个值:
      for(uint8_t  i=0; i< Psc_max;i++)//因为我需要占空比分辨率尽可能大,所以从预分频值1开始轮询
      {
      if((Arr*Psc%i == 0)&&(Arr*Psc/i<=0xffff ))//因为f103定时器的ARR为16位
      {
      Arr = Arr*Psc/i;//确定重装载值
      Psc = i;//确定预分频值
      }
      }

      确定占空比的分辨率
      公式③:t(步进时间)= T(周期)/Arr(重装载值);//表示重装载值步进时间
      如果需要调整的高电平时间小于分辨率
      例:5HZpwm波周期:200ms;f103定时器的arr最大为65535;
      最大分辨率:200000/65535(us)
      如果我需要调整1us的占空比就达不到标准;
      解决方法:将一个PWM波分成多个PWM波以解决分辨率不够的问题,
      驱动PWM波的方法:为防止两个PWM波之间有配置占空比的时间,所以采用DMA控制PWM波的产生。
      如果分辨率够的话:直接配置占空比

      如果有外部的波形进行标定:采用外部波形的上升沿或者下降沿作为发生的频率的零度
      分析:如果发生相位的偏移:需要根据相位延时偏移需要的时间,将PWM波从零度开始
      方法:使用定时器,在标定点设置定时器,在中断时发生PWM波
      出现问题:如果相位偏移较少:我门设置的定时器时间就很短,会导致定时时间偏差很大
      解决方法:将定时器的频率设置与PWM的波的频率相同,需要偏差多少度,直接改变TIM->CNT的值,可以减少配置定时器的时间


      没有外部的波形进行标定:只能将DMA的回调函数作为参考点
      当调整相位时:与当前相位进行比较:进行相位相对延时,将下一个PWM波整体作为一个延时,改变控制PWM波的定时器的CNT值可以改变下一个PWM波时间的长短。
      发生的PWM由一个PWM波组成
      增加n度相位:TIMX->CNT += ARR - ARR*n/360;
      减少n度相位:TIMX->CNT + =ARR*n/360;
      发生的PWM由多个PWM波组成
      由于只能调整一个波的PWM ;所以每次调整一度。分多次进行。

      问题①:当ARR%360!=0时:会产生一点误差
      解决方法:我将ARR%360这些多余的值分给0~(ARR%360-1)上
      问题②:当给TIMX->CNT赋值时,操作寄存器存在一点误差,当从0调到360度时积少成多会与原来的0度有一定误差
      我的解决方法:加入时间补偿 TIMX->CNT += (phase_delay - err);//err调试得出,现在旋转调整一周后任然有2us左右的误差




      王工分享了一些嘉立创EDA技巧,立创EDA的图块复用和复用布局布线

      模块复用:复用图块是层次原理图设计中较为常用的方式,其可以概括不同原理图中相同网络之间的交互关系。优化表达,使读者更容易理解各个硬件模块之间的关系。在嘉立创EDA(专业版)中也有这个功能。

     复用模块的创建:在工程文件夹内创建一个新的原理图→绘制需要重复引用的原理图右击原理图生成复用模块→此时生成一个未处理的复用模块符号→处理后的复用模块符号。可以自行编排引脚朝向,这个朝向不作用于PCB,仅能使得原理图直观易懂

     复用模块不但简单易懂,切在中大型项目中可以有效节省电脑性能,在难以卡顿的情况下进行作图