hitwpc

  • 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,&reg,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,&reg,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]  

统计信息

已有85人来访过

  • 芯积分:116
  • 好友:--
  • 主题:14
  • 回复:9

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言