ESP32输出互补PWM波形中断
ESP32输出互补PWM波形中断问题描述在使用 ESP32 的 MCPWM 输出互补 PWM 时,发现在改变 PWM 频率时偶尔会出现波形中断的现象如下图所示。每次出现中断的前后频率都发生了改变,但不是每次频率改变都会触发这种中断的现象,中断前后的死区也是正常的。
放大中断区域进行测量,中断的时间如下图所示。可以看到是个很熟悉的数字,65.53568 ms,让人一下就联想到 16 位定时器计满就是 65535,第一感觉就是定时器溢出了,并且每次都是在频率改变的时候溢出。个人猜想是在生成 PWM 的过程中,一个周期还没结束,新的值就被载入了,由于频率增加,计数值就会减小,如果当前的计数值已经比新的值大了,那么这个值就只能一直增加到溢出并重新计数到新的载入值才会生效。举个例子,上一次载入的计数值是 1k,现在要增加频率为两倍,计数值就要减小到 500,但是定时器现在已经数到了 800,只能继续向上计数,直到数到 65535 溢出后重新数到 500 才能生效。
网上查找了一下类似情况,果然是定时器的问题,具体的问题和自动预装载还有影子寄存器有关,文章作者使用的是 STM8 单片机, ...
ZVS电路设计
8b964abdcbe4167494dfe5c8bfb76b0869e90686022ef342a659427b57a83d18766e8ad3733ff63af991d3370103bf227b1128dfd82fc5761132c64c89458e1f0f684153de1fce9f404a191dee863c60eecbaa041550f20b502605e96b25cb554da832addec5a5f90853ecd6517fd33932f45809f14d73e9b19fd286f4e245aaf0bb6fab104f534916472e858e2b4bd491b23c893967cd90e3ae8d812fa0dca65eb928430de04b3b5e38f1b5fe8b49681bd8ea477000e3b43b4659762a5604d4637e0d63525a805e460ce13ca50cc6b2b42dca8ec491fb8f0a59f710bbf02e29dee0f221ec53173322f0cdc5a774de68175242a907cdc004d ...
FreeRTOS实时内核指南——资源管理
FreeRTOS实时内核指南——资源管理概览多任务系统中存在一种潜在的风险。当一个任务在使用某个资源的过程中,即还没有完全结束对资源的访问时,便被切出运行态,使得资源处于非一致,不完整的状态。如果这个时候有另一个任务或者中断来访问这个资源,则会导致数据损坏或是其它相似的错误。
软件定时器简介软件定时器的作用:在指定的时间到来时执行指定的函数,或者以某个频率周期性地执行某个函数。被执行的函数叫做软件定时器回调函数。软件定时器由 FreeRTOS 内核实现,不需要硬件支持。软件定时器只有在软件定时器回调函数被调用时才需要占用CPU时间。提醒:软件定时器回调函数是在软件定时器任务中被执行的,这个任务是在vTaskStartScheduler()函数内部由内核自动创建的。不要在回调函数中使用一些导致任务阻塞的函数或代码,例如vTaskDelay(),否则会导致 FreeRTOS 后台任务进入到阻塞状态。而且应该尽量让定时器回调函代码简洁高效快速执行。
创建软件定时器12345TimerHandle_t xTimerCreate( const char * const pcTimerN ...
INA199 & ADS1115 & TL431 硬件设计指南
INA199 & ADS1115 & TL431 硬件设计指南知识回顾高侧电流采样在高侧电流采样中,采样电阻靠近电源正端。这种方式需要有支持高压的放大器,因为采样电阻在高侧 MOS 和直流电源电压之间,使放大器的输入端始终有高电压。因此并不常见。并且只有在相应的 MOS 开启时,通过采样电阻的电流才是相电流。所以无论是高侧电流采样还是低侧电流采样都需要注意 PWM 和 ADC 之间的同步。优点:
可检测负载是否短路
无地电平干扰
缺点:
共模电压高,使用非专用分立器件设计较复杂、成本高、面积大
低侧电流采样在高侧电流采样中,采样电阻靠近地一侧。由于采样电阻在低侧 MOS 和地之间,保证了运放输入端的低电压。
优点:
共模电压低,可以使用低成本的普通运算放大器
缺点:
检流电阻引入地电平干扰,电流越大地电位干扰越明显,有时甚至会影响负载
相线电流采样在相线电流采样中,采样电阻串联在电机相线上,因为电感中的电流不会突变,所以无论 PWM 占空比的状态如何,采样到的电流都是连续稳定的,检测的电流始终都是电机相电流,不需要注意 PWM 和 ADC ...
ESPIDF-通讯外设
ESPIDF-通讯外设SPISPI资源ESP32集成了4个SPI外设。
SPI0和SPI1通过总线仲裁器共享一条信号总线,用于在模组内部访问FLASH(SoC FLASH),不对用户开放。
SPI2和SPI3是通用SPI控制器,有时也被称为HSPI和VSPI。它们拥有独立的信号总线,每条总线都有三条片选(CS)信号,也就是说每个控制器都能驱动最多3个SPI从器件。这两个SPI控制器对用户开放。
SPI类型 esp32的SPI支持三线SPI、四线标准SPI、Dual SPI和Quad SPI等工作模式。
四线标准SPI四线标准SPI由SCK、MOSI、MISO、CS四根线组成。四线标准SPI是全双工的通讯。
名称
功能
SCLK
时钟线,决定着通讯的速度
MISO
主输入从输出。主机输入,从机输出
MOSI
主输出从输入。主机输入,从机输入
CS
片选线。当片选线被拉低总线有效,可以开始通讯
三线SPI三线 SPI 把 MISO 和 MOSI 总线进行了合并。同一时间只能进行单方向的读或者写。是半双工的通讯。
Dual SPI Dual SPI是四线半双工 ...
FreeRTOS实时内核指南——队列管理
FreeRTOS实时内核指南——队列管理概览基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有用的系统功能。FreeRTOS 中所有的通信与同步机制都是基于队列实现的。
队列特性数据存储队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下,队列被作为 FIFO(先进先出)使用,即数据由队列尾写入,从队列首读出。当然,由队列首写入也是可能的。往队列写入数据是通过字节拷贝把数据复制存储到队列中;从队列读出数据使得把队列中的数据拷贝删除。
可被多任务存取队列是具有自己独立权限的内核对象,并不属于或赋予任何任务。所有任务都可以向同一队列写入和读出。一个队列由多方写入是经常的事,但由多方读出倒是很少遇到。
读队列时阻塞当某个任务试图读一个队列时,其可以指定一个阻塞超时时间。在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。当其它任务或中断服务例程往其等待的队列中写入了数据,该任务将自动由阻 ...
ESPIDF-系统启动流程
ESPIDF-系统启动流程应用程序的启动流程本文将会介绍 ESP32 从上电到运行app_main函数中间所经历的步骤(即启动流程)。宏观上,该启动流程可以分为如下 3 个步骤:
一级引导程序 被固化在了 ESP32 内部的 ROM 中,它会从 flash 的 0x1000 偏移地址处加载二级引导程序至 RAM (IRAM & DRAM) 中。
二级引导程序 从 flash 中加载分区表和主程序镜像至内存中,主程序中包含了 RAM 段和通过 flash 高速缓存映射的只读段。
应用程序启动阶段 运行,这时第二个 CPU 和 RTOS 的调度器启动。
app_main() 调用流程调用 app_main在port_idf.c中找到如下代码
1234567void app_main(void);static void main_task(void* args){ app_main(); vTaskDelete(NULL);}
可以看到app_main函数返回后删除了该task,如果将变量定义在app_main函数中,任务被删除后栈上的数据会被自动 ...
FreeRTOS实时内核指南——任务管理
FreeRTOS实时内核指南——任务管理概览单任务与多任务
单任务系统
单任务系统的编程方式,即裸机的编程方式,这种编程方式的框架一般都是在 main() 函数中使用一个大循环,在循环中顺序的执行相应的函数以处理相应的事务,这个大循环的部分可以视为应用程序的后台,而应用程序的前台,则是各种中断的中断服务函数。因此单任务系统也叫做前后台系统。
前后台系统的实时性很差,因为大循环中函数处理的事务没有优先级之分,必须是顺序地执行处理,不论待处理事务的紧急程度有多高,没轮到就只能等着,虽然中断可以处理一些紧急的事务,但是在大型嵌入式系统中,这样的单任务系统就会显得力不从心。
多任务系统
多任务系统的多个任务可以“同时”运行,是从宏观的角度而言的,对于单核CPU而言,CPU在同一时刻只能处理一个任务,但是多任务系统的任务调度器可以根据相关的任务调度算法,将CPU的使用权分给任务,在任务获得CPU使用权之后的极短时间(宏观角度)后,任务调度器又会将CPU的使用权分配给其他任务,如此往复,在宏观的角度看来,就像是多个任务同时运行一样。
多任务系统的任务具有优先级,高优先级的任务可以像中断一样抢占 ...
ESP-IDF + VScode 开发环境搭建BUG
ESP-IDF + VScode 开发环境搭建BUG前言在 VScode 上使用 Espressif 重新搭建 ESP32 开发环境时,虽然能正常编译和烧录,但出现问题如下:
终端提示 “无法使用 compilepath 解析配置”,打开 C/C++ 扩展发现找不到编译器路径。
VScode 找不到头文件,波浪线警告。
解决方法编译器路径报错打开 C/C++ 扩展显示找不到路径${env:IDF_TOOLS_PATH}/tools/xtensa-esp32-elf/esp-12.2.0_20230208/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe其中 ${env:IDF_TOOLS_PATH} 是 idf tools 在环境变量中的路径,去环境变量里面没有找到,所以直接新建环境变量如下,与实际安装的idf tools位置对应好。
头文件报错打开工程目录下 .vscode目录中的 c_cpp_properties.json,里面描述的是对应的头文件路径,内容如下所示 ...
hexo博客迁移新设备
hexo博客迁移新设备前言最近装了一个台式来当主力机,把之前笔记本的博客迁移过来方便记录。配置如下。
配件
型号
CPU
i5 12490f
主板
微星 B660m MAX WIFI DDR4
显卡
铭瑄 4060Ti 16G
内存
金百达 银爵 8G×2
硬盘
凯侠 RC20 500G + 致钛TiPlus5000 1T
电源
长城 550W X5金牌
散热
利民 AX120 R SE
机箱
先马朱雀air + 冰洞2s风扇×3
迁移博客备份旧设备中的博客文件。新设备环境配置
安装Node.js:官网下载,然后一直ok下去
安装git:官网下载
打开gitbash设置用户,这个只是上传时告诉远程仓库是谁上传的而已。 12git config --global user.name "你的名字"git config --global user.email "你的邮箱"
配置 SSH,输入后一直回车就行 1ssh-keygen -t rsa
添加 SSH Key到 GitHub 在 GitHub ...