- 2024-04-30
-
回复了主题帖:
共读入围:开关电源仿真与设计--基于SPICE(第2版修订版)
个人信息无误,确认可以完成评测计划。
- 2024-02-04
-
回复了主题帖:
测评颁奖: 国产高性能运动控制MCU 先楫HPM5361
感谢eeworld和先楫半导体,地址信息已更新,可以年前发放
- 2024-01-20
-
发表了主题帖:
【先楫HPM5361】QEI读取电机SINCOS编码器
本帖最后由 hitwpc 于 2024-1-20 19:30 编辑
正余弦编码器
正余旋编码器的输出模拟信号。驱动器通过AD采集,可以得到当前sinθ和cosθ的幅值,从而可以反正切求出θ值。即细分得到的角度信息。由于模拟采样的正弦波信号是连续的,因此可以实现非常精细的插值,从而实现了很高的位置分辨率。
目前有一个大疆的M3508无刷电机,上面自带的编码器,经过测试之后得到以下线序,从左到右分别是:
VCC
SIN
GND
COS
NC
NC
NC
使用HPM5361开发板的ADC0_CH4(PB12)和ADC1_CH5(PB13),分别接COS和SIN信号,VCC接3.3V,用于QEI读取正余弦信号,实验装置如下图所示。
用示波器读取了电机的COS和SIN信号,如下图所示,可以看到示波器黄色通道是COS信号,蓝色通道是SIN信号。
COS信号幅值测量
SIN信号幅值测量
电机的信号参数如下表所示:
信号类型
最小值/V
最大值/V
中心值/V
半波幅值/V
COS
0.38
1.64
1.010
0.63
SIN
0.428
1.604
1.016
0.588
QEI的SINCOS模式
设置两个ADC通道分别为ADCx和ADCy,读取COS和SIN信号。经过反正切即可求出目前电机的角度值。当然也可以使用单弦波模式,通过反正弦函数也可以求得角度值。
但是根据上面测试数据可得,实际的SIN和COS信号,信号的中心值和幅值可能不一样,两个信号的相位差异可能也不是严格的90°,那么对电机位置的读取就会出现不准确。HPM5361的QEI也考虑到了这个问题,可以通过ADC_CFG这几个寄存器,实现电机的幅度、中心值和夹角修正。如下图所示。
adcx_cfg0和adcy_cfg0可以指定sin和cos的ADC通道。adcx_cfg2 和adcy_cfg2可以用来设置信号的中心的偏移量,将ADC采集的无符号数转变为有符号值。adcx_cfg1和adcy_cfg1可以设置信号的相位偏移量。最好采用两个ADC分别采样,这样可以保证同一时刻采集到SIN和COS,不会引入相位的差异。
参考的例程信息为:
SDK\sdk_env_v1.3.0\hpm_sdk\samples\drivers\qeiv2\sincos\src
根据以上分析,设置ADCx和ADCy的参数值,电机的电角度和机械角度的比值为7:1,因此设置线数为7.
qeiv2_config_phmax_phparam(APP_QEI_BASE, 7);
通过以下函数读取电机的实时位置信息并打印出来。
z = qeiv2_get_current_count(APP_QEI_BASE,qeiv2_counter_type_z);
ph = qeiv2_get_current_count(APP_QEI_BASE,qeiv2_counter_type_phase);
pos = qeiv2_get_current_count(APP_QEI_BASE,qeiv2_counter_type_speed);
ang = qeiv2_get_current_count(APP_QEI_BASE, qeiv2_counter_type_timer);
3 位置读取实验
[localvideo]6a64fa30f98df5dce98818a0b245c13f[/localvideo]
- 2024-01-19
-
发表了主题帖:
【先楫HPM5361】IIC读取无刷直流电机磁编码器位置
本帖最后由 hitwpc 于 2024-1-19 22:32 编辑
I2C模块介绍
I2C 的主要特性:
● 支持标准模式(100Kb/s),快速模式(400Kb/s) 和快速模式+(1Mb/s)
● 可配置主从模式
● 支持7 位和10 位地址模式
● 支持广播呼叫地址(general call address)
● 自动时钟延展(clock stretching)
● 可配置的时钟/数据时序
● 支持直接内存访问(DMA)
● 4 字节FIFO
有关I2C协议特性,可参考:
IIC原理超详细讲解---值得一看-CSDN博客
AS5600介绍
使用的无刷直流电机,电机出轴上安装了一个径向充磁磁铁,AS5600是一种易于编程的磁性旋转位置传感器,具有高分辨率12位模拟或PWM输出。该非接触系统测量轴上径向磁化磁体的绝对角度。AS5600专为无触点电位器应用而设计,其坚固的设计消除了任何均匀外部杂散磁场的影响。行业标准I²C接口支持非易失性参数的简单用户编程,无需专门的程序员。默认情况下,输出表示0到360度的范围。也可以通过编程零角度(开始位置)和最大角度(停止位置)来定义输出的较小范围。AS5600还配备了智能低功耗模式功能,可自动降低功耗。输入引脚(DIR)选择输出相对于旋转方向的极性。如果DIR接地,输出值随顺时针旋转而增加。如果DIR连接到VDD,则输出值随逆时针旋转而增加。
AS5600是12位的霍尔磁编码器,它的地址是0x36,只需要读取0x0C、0x0D这两个寄存器就可以读出角度的原始数据,再将其乘以360,再除以4096,就可以获得角度值。
例程API介绍测试
参考例程
SDK\sdk_env_v1.3.0\hpm_sdk\samples\drivers\i2c\polling\master\src
使用的是I2C的轮询收发模式,作为主机。例程中还有其他的模式,如中断和DMA收发。
初始化
实验使用的是I2C0,初始化IO引脚,分别是PB02(SCL)、PB03(SDA)。同时设置I2C为标准模式(100Kb/s),采用7位地址。设置IIC频率,完成IIC初始化。
I2C的收发函数
读、写函数
hpm_stat_t i2c_master_read(I2C_Type *ptr, const uint16_t device_address,uint8_t *buf, const uint32_t size)
hpm_stat_t i2c_master_write(I2C_Type *ptr, const uint16_t device_address,uint8_t *buf, const uint32_t size)
形参分别是I2C标号、从机地址、数据指针、数据数量
向指定位置读写数据函数
hpm_stat_t i2c_master_address_read(I2C_Type *ptr, const uint16_t device_address, uint8_t *addr, uint32_t addr_size_in_byte, uint8_t *buf, const uint32_t size_in_byte)
hpm_stat_t i2c_master_address_write(I2C_Type *ptr, const uint16_t device_address, uint8_t *addr, uint32_t addr_size_in_byte, uint8_t *buf, const uint32_t size_in_byte)
形参分别是I2C标号、从机地址、目标写入寄存器,数据指针、数据数量
AS5600 库
可以参考以下驱动库:
libdriver/as5600: AS5600 full function driver library for general MCU and Linux. (github.com)
在/interface目录下添加的IIC总线驱动函数的内容:
uint8_t as5600_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
{
//i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8,addr,reg,buf,len,0xFFF);
i2c_master_address_read(HPM_I2C0,addr,®,1,buf, len);
return 0;
}
uint8_t as5600_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
{
i2c_master_address_write(HPM_I2C0,addr,®,1,buf, len);
return 0;
}
在main函数初始化阶段,添加头文件,增加初始化函数:
#include "driver_as5600_basic.h"
as5600_basic_init();
在while中添加读取函数,并用打印出来:
while (1)
{
as5600_basic_read(&angle_1);
printf("%f\n", angle_1);
board_delay_ms(10);
}
测试视频如下:
[localvideo]0bfd691e586a9f75f5a1500d8b9eb3eb[/localvideo]
- 2024-01-16
-
发表了主题帖:
【先楫HPM5361】PWM模块的使用
本帖最后由 hitwpc 于 2024-1-16 23:42 编辑
一、PWM模块介绍
下面是手册中对HPM5361的PWM模块的介绍:
● 28 (24 +4) 位分辨率计数器,支持向上计数模式
● 支持计数器同步
● 多达24 个比较器,支持用作输出比较,或者输入捕获
● 多达24 个通道,其中通道0∼7 可用于PWM 输出
– 支持8 路独立或者4 对互补PWM 输出
– 互补PWM 支持死区插入,支持独立配置双侧死区宽度
– 支持把PWM 输出强制设置为指定状态
– 支持故障保护输入,在出错时(如故障保护输入时),单独配置每个PWM 输出通道的状态
● 支持为每个输出通道灵活地分配数目不等的比较器,灵活控制输出信号,生成例如边沿对齐PWM、左右
不对称的中央对齐PWM 以及更复杂的输出信号
● 支持生成各类DMA 请求和中断请求
● 部分寄存器配有影子寄存器,支持灵活的寄存器新值更新/生效时机
根据介绍,可以看到这颗芯片的PWM模块功能还是很强的,有几个实用的功能:
可调分辨率的计数器,24-28位计数器;
每个PWM模块有8个通道的PWM输出,有24个比较器,每个通道可以设置多个比较器,多个比较器的异或值作为最终的PWM输出电平,因此可以设置出复杂的PWM信号;
两侧可独立编程的死区补偿;
PWM可强制设置制定状态(六步换向);
故障保护功能;
2 例程API介绍测试
2.1 例程介绍
参考例程目录如下:
SDK\sdk_env_v1.3.0\hpm_sdk\samples\drivers\pwm\pwm_output\src
例程中测试了生成了各种PWM
2.2 API介绍
强制输出模式
PWM输出设置为立即更新,将PWM的两个通道设置为强制输出模式;
下面的函数,可以将PWM的两个通道置高或者置低,pwm_output_1为高,pwm_output_0为低。
软件开启/关闭强制输出模式,GCR的SWFRC位置1使能强制输出,置0关闭强制输出
两个通道依次输出一个高电平时间为1S的脉冲,测试图如下:
边沿对齐模式
中心对齐模式1
可以实现单个PWM的中心对齐另外一个PWM的起始
中心对齐模式2
两个互补PWM,中心对齐。下面函数可以实现互补PWM的设置
- 2024-01-14
-
发表了主题帖:
【先楫HPM5361】QEI运动控制接口使用1-ABZ接口使用
1实验硬件基本介绍
1.1电机
使用电机型号未珠海运控60SV04302,编码器为2500线多摩川编码器,同时也可以输出UVW霍尔信号。同时有反相位的信号可以做信号的校验
图1 电机实物图
图2 电机及编码器线序
1.2 QEI介绍
● 支持单相、两相(正交/上下/方向脉冲)、三相(120° 相差)方波输入;
● 支持索引信号INDEX/Z,可产生中断,重置线数计数器,改变圈数计数器
● 支持两个归位信号HOME,仅产生中断
● 支持单相、两相(正交) 正弦波输入(通过ADC 线束)
● 支持正弦波支持幅度/中心值和夹角修正
● 支持线数支持到32 位
● 支持两个预设的位置触发中断,可配置指定的圈数,线数,方向,位置
● 支持软件触发锁存,事件触发锁存,支持两个外部触发锁存(包括圈数,线数,方向,角度,位置)
● 支持两个基于脉冲数的测速计数,测速结果保存两个,记录测速时间
● 支持两个时长的测速计数,测速结果保存两个,记录测速时间
● 支持将位置转换成二进制位置,通过位置线束输出到位置管理器(包含位置获取时间)
● 允许软件修改变位置,线数计数器,圈数计数器(仅支持绝对值方式),允许增量和绝对值方式
● 支持看门狗,支持堵转检测
● 所有中断信号,也可配置产生dma 请求,触发锁存,或触发输出信号
图3 QEI架构框图
本次用于验证ABZ模式下,QEI的测速机制。根据手册介绍,有两种测速的方法:
基于脉冲数量,两次固定脉冲数,读取经过的时间差。类似M法测速
基于时长,两次固定的时间,读取走过的脉冲。类似T法测速
2 例程API介绍测试
2.1 例程介绍
例程目录:
SDK\sdk_env_v1.3.0\hpm_sdk\samples\drivers\qeiv2\abz
在例程中,读取电机编码器AB两相信号,通过固定电机一圈的信号值,求取电机的位置和速度值。
例程说明文档readme目录如下:
SDK\sdk_env_v1.3.0\hpm_sdk\docs\zh\sdk\samples\drivers\qeiv2\abz
2.2初始化设置
函数初始化分别完成板载外设初始化、QEI的AB引脚初始化、QEIV2的参数配置
AB模式下的QEIV2参数配置
设置QEI为ABZ模式,设置AB相输入,相位达到设置的最大值时,Z寄存器自动加减1。设置编码器线数为2500,每组AB脉冲,计数器会产生四个脉冲,每个脉冲90°,因此读取的脉冲值为应该为2500*4,原理下图所示:
设置当Fault输入有效时,停止输出位置有效信号。使能AB相,不使能Z相,上升沿有效。相位比较值设置为2499,开启比较中断。
ABZ模式下的QEIV2参数配置
设置Z相触发Z寄存器加减1,使能Z相
设置脉冲计数和周期计数(选用)
基于脉冲数量,两次固定脉冲数,读取经过的时间差。类似M法测速
基于时长,两次固定的时间,读取走过的脉冲。类似T法测速
初始化QEI
设置Z相初始值为100,光编码器相位为500
3 电机位置信号采集实验
仅打开电机比较中断,打印以下信息:z相次数、相位数、速度、时钟数、相位计数值、位置和角度。
AB信号输入下,实验视频:
[localvideo]0b4a2e78fe35790f60b8ffe43cd5cb2c[/localvideo]
ABZ信号输入下,实验视频:
[localvideo]92d7522e819fd95f563aa0b0a854fb72[/localvideo]
- 2023-12-26
-
回复了主题帖:
【先楫HPM5361】环境搭建及Embedded Studio 的使用
RCSN 发表于 2023-12-25 22:21
建议添加c文件和包含头文件使用cmakelists的sdk_inc和sdk_src添加,你这种方式start_gui重新生成估计又被覆 ...
好嘞,我研究研究。start_gui这个不太理解,生成好工程后还需要再使用start_gui吗?
- 2023-12-25
-
发表了主题帖:
【先楫HPM5361】环境搭建及Embedded Studio 的使用
1环境搭建
1.1硬件电路设置
BOOT引脚设置,BOOT0和BOOT1均选择0;
DEBUG引脚设置,如果需要使用板载的FT2232进行调试的话,需要把图中的3跳线全部接好;如果使用其他调试器,可以用4接口。暂时没有使用Jlinkob等其他调试器尝试,感觉Segger自己的IDE,应该是可以检测出盗版Jlink的。
1.2 建立工程
所有的SDK的例程都在SDK\sdk_env_v1.3.0\hpm_sdk\samples目录下,而且先楫官方提供的两种建立工程的方式,也都是基于这些例程的。下面是两种建立工程的方法:
命令行创建
使用SDK\sdk_env_v1.3.0\start_cmd.cmd,具体方式可参考文件SDK\sdk_env_v1.3.0\docHPM5300EVK_UG_V1.0.pdf的14-18页。实操了一下,感觉不是很方便,推荐使用GUI创建。
GUI创建
使用SDK\sdk_env_v1.3.0\start_gui.exe,按照如下方式设置:
在SDK\sdk_env_v1.3.0\hpm_sdk\samples\hello_world目录下,创建了一个新的工程。
可以通过修改工程放置路径,将工程放在其他位置。但是这种工程建立的方式还是存在问题,生成的工程是依赖于SDK的例程的源码,如果第一次修改工程源码,那么之后再生成工程也会被修改。所以还是创建一个空模板,剩下的文件自己手动添加到工程内吧。
2 软件使用
软件的界面大概是:
编译:
仿真:
使用方法和keil或者基于eclpise的IDE都差不多,下面介绍如何添加其他源文件
将SDK的src下源码文件排除工程,再添加一个新的main.c
(2) 在这里添加一个main.c
(3)这里再添加两个测试文件test1.c、test2.c,在工程目录下的\segger_embedded_studio\Mid\src。
添加路径
打开后可以在下面的定义看到,
$(ProjectDir)=D:/Workspace/emebddstudio/hello_world_hpm5300evk_flash_xip_build/segger_embedded_studio
因此设置路径就不需要再设置绝对路径了
(5)两个.c文件的函数互相调用,再都被main.c调用
再都被main.c引用
(6)编译后,通过
Embedded Studio的一些设置
CTRL+J,呼叫代码补全;
CTRL+K、CTRL+F,格式化;
CTRL+K、CTRL+L,按照等号对齐;
设置快捷键Tools->Options->Text Editor和Keyboard;
参考连接:
Segger Embedded Studio使用有什么技巧? - 知乎 (zhihu.com)
- 2023-12-23
-
发表了日志:
【先楫HPM5361】环境搭建及Embedded Studio 的使用
- 2023-11-21
-
回复了主题帖:
测评入围名单: 国产高性能运动控制MCU 先楫HPM5361
个人信息无误,确认可以完成评测计划
- 2023-10-17
-
发表了主题帖:
读好书《运算放大器参数解析与LTspice应用仿真》读书笔记1——输出失调电压因素
阅读完本书的2.3之后,写一个小总结,运放的总输出失调电压主要是由输入失调电压和输入偏置电流引起的。
1 输入失调电压与漂移
1.1 定义
短路放大器的两个输入端,如果是理想放大器,则输出电压Vo=0V。但是真实运放处理Vp和Vn的输入级存在失配,导致输出电压不为0V。为了实现输出最终为0V,则需要在输入关键之间增加合适的矫正电压,成为输入失调电压Vos。Vos的取值范围在mV-μV之间。
1.2 案例分析
某汽车电子公司,使用以下电路,出现了部分失效的现象。
该电路采用了差动放大电路,5V单电源供电,TP100由参考电压源提供。工作时,如果TP1001,TP1006接地,输出端TP1011电压超过38.7mV,则判定异常。
根据差动放大电路,放大倍数为R1001 12kΩ和R1000 220Ω的比值,增益为54.4倍
根据手根据手册的参数,输入失调电压的典型值0.6mV,则输出失调电压典型值时32.7mV。最大值3.4mV,输出失调电压最大值已经到了185.5mV。超过了设定的38.7mV,因此会出现不良品的概率。
1.3 处理方式
首款精密运放OP07,使用了电位计去连接具有失调电压校准功能的1、8号引脚。但是由于电位器布线引入的噪声等因素,导致矫正难度较大。
目前使用的方法是直接外部处理。使用数字电位器或者模数转换器(DAC)实现补偿电压可编程。
1.3.1反相放大电路补偿方法
(a)反相端提供失调电压调节电路
(加法电路,补充失调电压)当Rb远大于R1时,输出失调电压的调整范围是
(b)同相端提供失调电压调节电路
1.3.2同相放大电路补偿方法
R2a远大于R2b
2 偏置电流和失调电流
2.1 定义
真实放大器的输入管脚会吸收少量的电流,同相输入端的电流Ib-,反相输入端的电流Ib+。
输入偏置电流Ib
输入失调电流Ios
2.2 理论推导
以反相输入电路为例,讨论偏置电流的影响,输入端电压源短路(叠加定理)
带入得
2.3 典型案例:偏置电流的直流泄放回路
按说有C2电容隔离,不会有直流噪声的影响。在增益较高时,即使是放大器输入端的一个较小直流电压,也会影响运放的动态范围,甚至可能导致输出饱和。输入偏置电流流经耦合电容,给其充电,直到超过放大器输入电路的额定共模电压或超过输出限值。根据输入偏置电流的极性,电容充电或者向正电源电压方向,或者向负电源电压方向。这个偏置电压会被放大器的闭环直流增益放大。
正确用法
错误用法
2.4 偏置电流处理方法
2.4.1保证偏置电流的直流回路完整
双电源、仪器放大电路的设计
2.4.2放大器输入端电阻匹配
如果Rp=R1//R2,则可以抵消I_b的影响。但要注意的是,该电阻始终会给电路带来一定噪声,因而需在电路输入阻抗、所需输入耦合电容大小与电阻引进的约翰逊噪声之间进行权衡。典型电阻值一般在100,000 Ω至1 MΩ之间。(这里作者没有解释,查找资料主要是约翰逊噪声的影响)
选型
选择偏置电流更小的放大器,或者控制输入端的电阻,减小Ib。
3 运算放大器的总失调电压
可以看到放大器的总输出失调电压是由放大器的失调电压和偏置电流导致,总输出失调电压
-
回复了主题帖:
读好书《运算放大器参数解析与LTspice应用仿真》读书笔记1——理想运放总结
公式竟然成功打出来了,太难了
-
发表了主题帖:
读好书《运算放大器参数解析与LTspice应用仿真》读书笔记1——理想运放总结
本帖最后由 hitwpc 于 2023-10-17 15:20 编辑
前言
大二的时候学习了模电,里面从理论角度分析了三极管、运放等信号放大电路的内容。但是当自己大三参加电赛的时候,发现实际使用运放的时候需要考虑的参数、外围电路的设计都非常的讲究,看到作者序言中工作经历中遇到的模拟电路的实际问题,自己也是感同身受。自己也尝试看了杨建国教授的《你好,放大器》,但是由于当时的知识水平的限制,导致看到一百多页的时候就读不下去了。后续又几次打起精神继续去读,但是最后还是没有读完读懂,于是趁着这次机会想要重新较为系统的学习运放电路。下面将先总结理想运放的知识点:
吐槽一下:这个编辑帖子的编辑器真难用啊,公式用latex格式打上去,发出去就会变成糊了的图片
理想运放
技术指标
开环差模电压增益无限大Aodc=oo;
差模输入电阻无限大Rd=oo;
没有输入偏置电流IB=0;
没有输入失调电压Vs;
共模抑制比无限大KCMRR-=oo;
输出电阻无限小Ro=0;
-3dB截止频率无限高-oo;
内部没有电压,无电流噪声,不受温度影响。
反馈方式
(a)正反馈;(b)负反馈
信号类型
运放需要放大差模信号,抑制共模信号。
共模信号
差模信号
线性区特点
虚短
运放在线性区工作时,有以下的关系式
因为理想运放的开环电压放大倍数,是有限的,因此,当Up≈Un,Uld≈0。则运放的同相输入端和反相输入端电位相等,和短路特性类似;
虚断
由于理想运放的输入电阻,因此流入运放的同相输入端和反相输入端的电流为0,和断路类似;
典型应用电路
反相比例运算放大电路
同相比例运算放大电路
缺点(1)共模电压是,需要考虑运放的共模抑制比参数;(2)放大倍数必须>1.
反相输入求和电路
叠加定理:两个电路反相比例,添加直流偏置电压
同相输入求和电路
叠加定理:两个电路同相比例,添加直流偏置电压
差分放大电路
双电源供电时,Rref处接的参考电压可以直接接地;单电源供电时,Rref处可接1/2VCC作为参考电压。
令Vp=Vn
当Rg2 = Rg1,Rf = Rref时,
非线性区特点
因为理想运放的开环电压放大倍数,即使为微小量,运放将达到输入的饱和电压。因此运放的输入和输出之间不再是线性关系。
同时虚短和虚断的特点依然存在。
典型应用
单项比较器
滞回比较器
窗口比较器