2023.8.21 经验分享会
2023年8月21日上午,上海实邦电子科技有限公司开展了一次经验交流会,由王工、崔工、和陈工一起分享了他们在工作中积累的一些经验。
首先是陈工分享了掉电数据保存与方案管理系统
一、 存储方式选择
1. 单片机内部flash,优点是无需额外的硬件开销,缺点比较多,存储内容比较少,存储速度比较慢,存储占用空间不合理
详解:Stm32F407的flash结构,使用内部flash作为掉电存储,一般是用最后几个扇区,避免把代码覆盖,由于flash写需要先擦擦,所以扇区大小过大会造成擦除时间过长,影响整体存储时间。
2. 外部flash或eeprom
掉电存储数据量在M级别用flash,K级别用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的值,可以减少配置定时器的时间
当调整相位时:与当前相位进行比较:进行相位相对延时,将下一个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,仅能使得原理图直观易懂
复用模块不但简单易懂,切在中大型项目中可以有效节省电脑性能,在难以卡顿的情况下进行作图
- 上一篇:一文读懂电源滤波器及其设计技巧 2023/9/12
- 下一篇:喜讯!恭贺我司获得ISO9001质量管理体系认证证书 2023/8/14