AutosarMCAL开发——基于EB DsAdc驱动

目录

  • 一、旋转变压器与DsAdc原理
    • 1.常见电机角度反馈方式
    • 2.可变磁阻旋变工作原理
    • 3.使用TC3XX EDSADC进行旋变软解码
  • 二、EB配置
    • 1.载波输出
    • 2.通道配置
    • 3.调制器
    • 4.滤波链路
    • 5.整流
    • 6.积分
  • 三、Mcal接口应用
    • 1.AUtosar标准API接口
    • 2.应用步骤
  • 四、总结

一、旋转变压器与DsAdc原理

1.常见电机角度反馈方式

  • 旋转编码器: 类似发电机原理,通过机械转动产生角度信息,内部集成ECU,往往是通过通讯获取解算好的角度速度信息
    在这里插入图片描述

  • **霍尔传感器:**由一个特制磁环与检测脉冲电路板构成,市面上常见的为AB相霍尔编码器,输出两路正交相位相差90度的脉冲波
    在这里插入图片描述

  • 旋转变压器: 旋变主要分为经典旋变与可变磁阻旋变,主要区别在于经典旋变是根据转子与定子的感应电压来确定角度;而,可变磁阻旋变转子上没有绕组,而是由特定的形状(如凸极)构成,这些凸极会改变气隙磁导,从而影响次级绕组的输出电压。初级和次级绕组都位于定子上。这种结构通过改变转子与定子之间的气隙磁阻来实现输出信号的变化 。
    在这里插入图片描述

  • 光电编码器、磁编码器、电阻式角度传感器等

2.可变磁阻旋变工作原理

  • 旋变结构示意图: 图1说明了旋变的使用方式,输入频率周期都不变的正弦信号,将会得到相位相差90°的旋变信号,其中一个为sin一个为cos;图2图3说明了旋变在永磁同步电机上的应用方式,定子将会安装在壳体上,转子安装在电机输出轴上跟随电机转动;图4说明了旋变的内部构造,每个磁极上都绕有励磁信号,两组检测线圈按照互为90度的方式绕线,将旋变水平面划分为4个象限,当转子上的永磁体转动到不同位置时,检测线圈上检测到的信号幅值有所不同,两组检测线圈分别输出sin与cos信号,因为tanθ = sinθ/cosθ,只要得到tanθ的值取个反正切即可得到角度θ。这里θ是先对于零点而言的,即永磁体凸轮最高点位与sin线圈磁极对齐点。
    图1
    在这里插入图片描述
    图2
    在这里插入图片描述
    图3
    在这里插入图片描述
    图4
    在这里插入图片描述

3.使用TC3XX EDSADC进行旋变软解码

  • 软解码处理思路: 1.提取外包络(极值法、积分法) 2.角度解算(反正切、观测器)3.时间补偿(控制周期与反馈周期不同步需要此步骤)
  • 接口定义: TC3XX EDSadc提供了两路励磁接口PWMP、PWMN,可用于输出差分SIN信号以抑制共模干扰,当然使用一路旋变也是能正常工作的,另一端接地即可;四路旋变信号输入接口分别用于获取sin+、sin-、cos+、cos-旋变输出信号
    在这里插入图片描述
  • 解调的目的: 由于我们引入了激励信号去激励旋变从而获取角度信息,所以旋变输出的信号同时带有了激励信号与角度信息,输出的波形幅值即为角度信息;进而明确我们解调的目的,将旋变的输出信号中的激励信号去除只留下角度信息,即提取出旋变输出信号的外包络
    在这里插入图片描述

解调的方式有两种:峰值提取、积分法

  • 峰值提取法: 由于激励信号是由我们提供的,可以得到激励信号的峰值点,基于这个前提可以配置GTM触发evadc在峰值点进行采样,这样做的好处相对于积分法在于节省许多解算的时间
    在这里插入图片描述

  • 积分法: 其中关键步骤在于整型,其需要的符号在使用edsadc生成激励信号时就已经同步生成符号
    在这里插入图片描述

在这里插入图片描述

  • TC3XX EDSADC解调过程:
    在这里插入图片描述
  • 角度计算(反正切): Vb/Va = tanθ,对其做反正切即可获取到θ,实际工程应用中会将所有可能计算的反正切结果制作为表格查表使用节省资源,提高计算效率
    在这里插入图片描述
  • 时间补偿: 所谓的时间补偿其实并不是真正意义上使得控制周期与角度反馈周期一致,而是基于当前采样到的角度经过一系列参数调整估算出一个补偿控制周期与角度反馈周期时间差的角度状态,以便尽可能确保控制的同步性。以下为一种简单的角度跟随器算法:
#include <stdio.h>
#include <math.h>// 定义二阶跟随器的参数
#define SAMPLE_RATE 100.0  // 采样率(Hz),可以根据需要调整
#define DT (1.0 / SAMPLE_RATE)  // 采样周期(秒)// 增益值,这些值需要根据系统的自然频率和阻尼比进行调整
// 在这里,我们假设一个较高的自然频率和较低的阻尼比以加快响应速度
#define K1 100.0  // 第一个积分器(或误差积分器)的增益
#define K2 27.0   // 第二个积分器(或输出积分器)的增益// 二阶跟随器的状态变量
double angle_input = 0.0;  // 输入角度(弧度)
double angle_output = 0.0;  // 输出角度(弧度)
double integrator1_state = 0.0;  // 第一个积分器的状态
double integrator2_state = 0.0;  // 第二个积分器的状态// 二阶角度跟随器的更新函数
void update_angle_tracker(double new_input) {// 更新第一个积分器(累积误差)integrator1_state += K1 * (new_input - angle_output) * DT;// 更新第二个积分器(产生输出)integrator2_state += K2 * integrator1_state * DT;// 更新输出角度angle_output = integrator2_state;
}int main() {// 示例输入数据(这里使用弧度表示的角度)double input_angles[] = {0.0, M_PI/180, 2*M_PI/180, 3*M_PI/180, 4*M_PI/180, 5*M_PI/180,4*M_PI/180, 3*M_PI/180, 2*M_PI/180, M_PI/180, 0.0};int num_samples = sizeof(input_angles) / sizeof(input_angles[0]);// 模拟时间步长for (int i = 0; i < num_samples; i++) {// 更新跟随器update_angle_tracker(input_angles[i]);// 打印当前输出角度(转换为度数以便更容易理解)printf("Input Angle (deg): %.2f, Output Angle (deg): %.2f\n",input_angles[i] * 180.0 / M_PI, angle_output * 180.0 / M_PI);// 在实际应用中,这里应该有一个延迟来模拟实际的采样周期// 但为了简化,这里省略了延迟}return 0;
}

在这里插入图片描述
经过一定的参数整定,可见结果具有一定的预测性。

二、EB配置

在这里插入图片描述

1.载波输出

  • DsadcGlobalCfg: 通用配置
  • DsadcCarrierGenCfg: dsadc输出载波配置,基于模块时钟进行分频,极性配置为normal则先输出高电平,载波生成模式设置为比特反向生成模式增加了频谱易产生更为平滑的正弦波。
    在这里插入图片描述

2.通道配置

  • 结果访问模式:
    a. CIRCULAR_BUFFER:将结果缓存去设置为循环缓存区
    b. DMA_ACCESS:结果必须由DMA传输
    c. SINGLEREAD:读取硬件结果直接返回
  • 触发模式:
    a. MODE_NORMAL:调用Dsadc_StartModulation() API进行数据采集
    b. MODE_WINDOW:在门控信号开启后进行采集(GTM、ERU)
  • 时间戳:
    a.Trig配置为MODE_WINDOW:时间戳是最后一个HW结果到门控信号打开的时间计数
    b.Trig配置为MODE_NORMAL:时间戳是从结果时间到调用Dsadc_ReadResult API获取到寄存器值的计数
    在这里插入图片描述

3.调制器

  • EB中配置项与TC3xx系列架构模块对应关系,可参考配置寄存器MODCFGx描述配置
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 细分配置项
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4.滤波链路

在这里插入图片描述

  • 备用服务请求:
    a. COMPARATOR_EVENT:比较器事件
    b. TIMESTAMP_EVENT:时间戳事件
    c. RESOLVER_EVENT:备用源
    在这里插入图片描述

5.整流

  • 整流符号:
    1. SRC_0_ON_CHIP_CARRIER_GENERATOR:片上生成载波的时候同时生成了符号,来自于片上载波符号
    2. SRC_1_SIGNRESULT_FROM_DSADC_CHANNEL :来自于dsadc通道中的一个
    3. SRC_2_EXTERNAL_SIGN_SIGNAL_PORT_A :符号信号是由外部来源提供的 PortA
    4. SRC_3_EXTERNAL_SIGN_SIGNAL_PORT_B :符号信号是由外部来源提供的PortB

在这里插入图片描述

6.积分

  • 该项配置位于调制器的细分配置下
    在这里插入图片描述

三、Mcal接口应用

1.AUtosar标准API接口

接口名传入参数说明返回参数函数功能
IrqDsadc_Init()---Dsadc中断初始化
Dsadc_Init()Dsadc_ConfigType * ConfigPtrConfigPtr:Dsadc配置指针-Dsadc初始化
Dsadc_StartCalibration()Dsadc_ChannelType ChannelIdChannelIdChannelIdChannelId:dsadc通道号Std_ReturnType:0:OK 1:NotOKDsadc校准
Dsadc_GetCalibrationStatus()Dsadc_ChannelType ChannelIdChannelIdChannelIdChannelId:dsadc通道号Std_ReturnType:0:OK 1:NotOK获取Dsadc校准状态
Dsadc_SetupResultBuffer()Dsadc_ChannelType ChannelId, Dsadc_ResultType * DataBufferPtr, Dsadc_SizeType SizeChannelId:Dsadc通道ID DataBufferPtr:数据缓存指针 Size缓存大小Std_ReturnType:0:OK 1:NotOKDsadc安装结果buffer
Dsadc_StartModulation()Dsadc_ChannelType ChannelIdChannelId:Dsadc通道IDStd_ReturnType:0:OK 1:NotOK启动调制器,结果采集、触发
Dsadc_StartCarrierSignal()--Std_ReturnType:0:OK 1:NotOK开始生成载波
Dsadc_ReadResult()Dsadc_ChannelType ChannelId,Dsadc_ResultType * ResultPtrChannelId:Dsadc通道 ResultPtr:结果获取指针Std_ReturnType:0:OK 1:NotOK获取对应dsadc通道结果

2.应用步骤

  • Dsadc初始化
    Dsadc_Init(&Dsadc_Config);Dsadc_SetupResultBuffer(DsadcChannel_DsadcChannelConfiguration_0,Dsadc_BuffReturn,10);Dsadc_StartModulation(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_StartCarrierSignal();
  • 中断+Dsadc初始化
    IrqDsadc_Init();SRC_DSADCSRM1.B.SRE = 1;Dsadc_Init(&Dsadc_Config);Dsadc_EnableNotifications(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_SetupResultBuffer(DsadcChannel_DsadcChannelConfiguration_0,Dsadc_BuffReturn,10);Dsadc_StartModulation(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_StartCarrierSignal();
  • 中断+校准+Dsadc初始化
    IrqDsadc_Init();SRC_DSADCSRM1.B.SRE = 1;Dsadc_Init(&Dsadc_Config);Dsadc_EnableNotifications(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_StartCalibration(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_CalibrationStatusReturn = Dsadc_GetCalibrationStatus(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_SetupResultBuffer(DsadcChannel_DsadcChannelConfiguration_0,Dsadc_BuffReturn,10);Dsadc_StartModulation(DsadcChannel_DsadcChannelConfiguration_0);Dsadc_StartCarrierSignal();
  • 获取结果
Dsadc_StateReturn =  Dsadc_GetStatus(DsadcChannel_DsadcChannelConfiguration_0);

四、总结

本文为博主个人理解总结记录,如有不正,欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19490.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

web应用安全和信息泄露预防

文章目录 1&#xff1a;spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2&#xff1a;服务端口的合理使用3&#xff1a;弱口令&#xff08;密码&#xff09;管理4&#xff1a;服务端攻击4.1、短信业务&#xff0c;文件上传等资源型接口1、…

C语言:链表

链表是一种常见的线性数据结构&#xff0c;其中每个元素&#xff08;称为节点&#xff09;包含两部分&#xff1a;数据和指向下一个节点的指针。链表的主要优点是插入和删除操作的时间复杂度较低&#xff0c;但随机访问的效率不如数组。 1. 链表的基本概念 节点&#xff08;N…

webpack配置

4-3vue-loader测试_哔哩哔哩_bilibili 一.新建文件夹vue_todo&#xff0c;vscode打开 二.ctrl打开终端&#xff0c;输入npm init -y&#xff0c;快速生成一个默认的package.json文件 之后左边出现项目初始化文件package.json 三.接下来需要webpack完成打包&#xff0c;所以安装…

字节跳动辞退103人

大家好&#xff0c;我是程序员面试刷题平台的鸭鸭&#xff01; 在前阵子实习生破坏大模型训练事件之后&#xff0c;字节又上了一次热搜。 鸭鸭吃完瓜&#xff0c;只能说&#xff0c;社会险恶啊同学们&#xff01; 5 号&#xff0c;字节跳动内部发布了年内第四份《企业纪律与职…

大型语言模型综述 A Survey of Large Language Models

文章源自 2303.18223 (arxiv.org) 如有侵权&#xff0c;请通知下线 这是一篇关于大语言模型&#xff08;LLMs&#xff09;的综述论文&#xff0c;主要介绍了 LLMs 的发展历程、技术架构、训练方法、应用领域以及面临的挑战等方面&#xff0c;具体内容如下&#xff1a; 摘要…

服务器作业4

[rootlocalhost day04]# vim 10.sh [rootlocalhost day04]# cat 10.sh #通过shell脚本分析部署nginx网络服务 #1.接收用户部署的服务名称 read -p "服务名称:(nginx)" server if [ $server ! nginx ];then echo "输入的不是nginx,脚本退出" exit 1…

Linux基础(二十)——程序管理与 SELinux 初探

程序管理与 SELinux 初探 1. 程序和进程2.程序调用流程3. 一个bash中的多任务工作管理4.进程管理4.1 查询进程4.2 进程的执行顺序 5.系统资源的观察6. /proc/* 代表的意义7.SELinux 1. 程序和进程 2.程序调用流程 程序与进程之间的关系&#xff1a; 从上图可以看出&#xff0…

vue3 路由写法及传参方式 !超详细

Vue Router 是 Vue.js 官方的路由管理器。它主要用于单页面应用程序&#xff08;SPA, Single Page Application&#xff09;中&#xff0c;帮助解决页面导航、组件复用等问题。 基本的使用 1.router配置文件代码 创建一个ts文件,用来写路由器 // 创建一个路由器,并暴露出去 …

MATLAB绘制正四面体、正六面体

MATLAB绘制正四面体、正六面体 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% 正四面体&#xff08;Tetrahedron&#xff09; % 顶点坐标&#xff08;正四面体的顶点位于一个正方体的对角线上&#xff0c;并经过适当缩…

一文了解 inductive bias(归纳偏好)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 归纳偏好&#xff08;Inductive Bias&#xff09;是机器学习中的一个非常基础但又非常重要的概念。为了更好地理解它&#xff0c;我们先从 “归纳” 和 “偏好” 这两个词开始讲解。 什么是归纳&#x…

leetcode844:比较含退格的字符串

题干 题目分析 两个字符串要进行比较&#xff0c;#代表着回车&#xff0c;也就是删除之前的字符。 若按照遍历的惯例&#xff0c;选择从前到后遍历&#xff0c;但这样没法判断&#xff0c;因为#之前被删除的部分是不需要相同的。 因此考虑到#的含义&#xff0c;我们应该选择从…

【Python爬虫实战】从入门到精通:全面解析IP代理池的原理与实战应用

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、IP代理池 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;主要功能 &#xff08;三…

c++_day2

第一题&#xff1a; 继续为 mystring类编写以下方法&#xff1a; 1&#xff1a;析构函数&#xff0c;释放buf指向的堆空间 2&#xff1a;编写 append(const mystring r) 为当前字符串尾部,拼接新的字符串r 3&#xff1a;编写 isEqual(const mystring r) 判断当前字符串和 字符串…

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

基于一种基于OCR图像识别技术的发票采集管理系统及方法

本发明涉及了一种基于OCR图像识别技术的发票采集管理系统及方法&#xff0c;该系统的发票信息采集单元采集发票图片信息数据&#xff0c;OCR图像识别单元基于OCR图像识别技术并结合人工智能深度学习算法对发票图片信息数据进行识别读取以获得OCR图像识别结果&#xff0c;发票信…

Windows注册表基础学习

修改注册表让cmd ascii输出有颜色 reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 如何打开注册表编辑器 运行regedit 按下"Winr"组合键&#xff0c;在打开的"运行"对话框中输入"regedit"&#xff0c;单击"确定"…

CarSim复制数据注意事项

更正&#xff0c;上图中提到的“数据集”应该是“数据类别”&#xff0c;可以理解为数据集的一个子集。

Spring:注解开发依赖注入

Spring为了使用注解简化开发&#xff0c;并没有提供构造函数注入、setter注入对应的注解&#xff0c;只提供了自动装配的注解实现。 直接上代码&#xff1a; 1&#xff0c;添加一个配置类SpringConfig Configuration ComponentScan("com.itheima") //PropertySourc…

springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Linux】learning notes(2)

文章目录 1、快捷键2、专业名词2.1、驱动2.2、内核2.3、U-Boot2.4、Dynamic Library and Static Library2.5、SDK / NDK / UDK 3、BUG 前文链接&#xff1a; 【Linux】learning notes 1、快捷键 在文件夹里&#xff0c;ctrll&#xff0c;选定文件夹路径 Linux下的ctrl常用组合…