- 博客(48)
- 收藏
- 关注
原创 Canoe工具使用-通道重映射
本文基于Canoe1603A工具,介绍一种Canoe的配置功能。通常作为汽车软件开发人员,需要分析整车实时采集的Can数据,而整车数采仪采集的数据通常是整车的所有节点数据,但是我们想要的节点数据通常只有1个,这种情况在我们使用Canoe Offline数据回放功能时,就需要对数据进行Mapping,把想要播放的节点数据重新Mapping到Canoe能够支持的特定通道上去。......
2022-08-13 11:16:43 3100 1
原创 SVPWM算法Simulink仿真实现
SVPWM原理关于SVPWM的含义,相关的帖子说明有很多,这里就不再画蛇添足了,附上一个认为写的比较详细的相介绍链接:SVPWM的原理及法则推导和控制算法详解此外,知乎上有篇介绍SVPWM原理比较深入的文中,也直接给链接进行分享:SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
2020-07-06 22:44:24 5254 1
原创 PMSM同步旋转坐标系下的数学模型及Simulink仿真
1.同步旋转坐标系下的数学模型1.1 dq坐标系下的定子电压方程1.2 dq坐标系下的定子磁链方程1.3 定子电压方程变换式及等效电路由上述两个方程,可以得到定子电压方程的新等式:电压等效电路如下:1.4 电磁转矩方程1.5 相关重要关系式其中,ωe表示电角速度,ωm表示机械角速度,np表示极对数,Nr表示电机转速,r/min,ωm单位为rad/s。\omega_e 表示电角速度,\omega_m表示机械角速度,n_p表示极对数,N_r表示电机转速,r/min,\omega_m
2020-06-21 12:52:13 5665
原创 TMS2833X之ePWM模块_3
上一篇讲述到了ePWM模块中的计数比较子模块(CC)、动作限定子模块(AQ),如下图所示,AQ模块出来的高低电平信号还需要经过死区模块(DB)、斩波模块(PC)、及错误联防信号(TZ)后才输出EPWMxA/B波形,所以就接着逐一介绍这些子模块。1.死区模块(DB)1.1 为什么要产生死区模块PWM电路通常是一个全桥控制或者半桥控制的电路,如下图所示是一个典型的三相全桥PWM控制逆变电路原理...
2018-12-22 22:27:46 1884
原创 TMS2833X之ePWM模块_2
上一篇讲述到F2833x系列ePWM模块的作用即结构,以及介绍了ePWM模块中的子模块DB时间基准模块,起主要作用是决定PWM波形的周期,以及输出一系列事件(如CTR=ZERO)等供其他模块使用,下面接着介绍ePWM中的其他子模块。1.ePWM 计数比较模块CC计数器比较模块是以时基计数器的值作为输入,与比较寄存器CMPA和CMPB不断进行比较,当时基计数器的值等于CMPA时,就产生比较事件...
2018-12-17 22:05:51 6752 1
原创 TMS2833X之ePWM模块_1
1.ePWM模块介绍1.1 ePWM脉冲宽度调制原理ePWM是增强型脉冲宽度调制器(enhanced pulse width modulator)的缩写,该外设能够输出复杂的脉冲信号,且占用很小的CPU资源, 广泛引用的工业控制中,如电机控制技术。脉冲宽度调制的原理是:冲量相等而而形状不同的窄脉冲加载到具有惯性的环节上时,其效果基本相同(面积等效原理)。如下图所示,形状不同而冲量相等的四种窄...
2018-12-17 21:51:12 6149 1
原创 TMS2833X之GPIO外设中断的控制
F2833x系列可支持7个外部中断,分别是XINT1-XINT7,还有个XINT13与不可屏蔽中断XNMI复用。每个外部中断可以选择上升沿或下降沿触发,且可以被使能或禁止。外部中断n控制寄存器(XINTnCR)(n=1~7)的含义如下图所示:在这里插入图片描述...
2018-11-16 23:05:53 4302
原创 两个编程示例学习DSP定时器与中断系统
前面的学习中介绍了CPU定时器与中断系统,下面借助两个实例回顾下之前的学习内容!实例1:利用蜂鸣器模拟基本音级1.1 蜂鸣器的工作原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机 IO 引脚输出的电流较小,单片机输出的 TTL 电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。实验板通过一个三极管 Q1 来放大驱动蜂鸣器...
2018-11-06 22:58:00 9632 1
原创 DSP2812之中断系统
中断系统概述X2812的中断系统从下至上分成了三级,即外设中断、PIE级中断、CPU级中断,三集中断类似于串联的关系,共同完成中断信号的发生、判断及次处理。现对中断系统的执行流程作简要概述:首先,如果有外设产生中断事件,则寄存器中相应的中断标志位被置1,如果相应的中断使能位被置位,那么外设将向PIE控制器发出一个中断请求。其次,当外设向PIE控制器发送中断请求时,相应的PIE中断标志位(PI...
2018-11-04 19:53:19 7031
原创 DSP2812之定时器
DSP TMS320F2812芯片内部有3个32位的CPU定时器-Timer0、Timer1、Timer2,其中CPU定时器1,2被系统保留,定时器0供用户使用。定时器工作原理说明CPU定时器的工作原理如下图所示所包含的寄存器主要有预定标寄存器TPR、计数器寄存器TIM、周期寄存器PRD、控制寄存器TCR;前3个寄存器都是16位的,因此用2个寄存器来表示32位,表示为XXXH:XXX。其中...
2018-10-21 10:16:47 10872 1
原创 剑指offer面试题12——打印1到最大的n位数
题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。分析:题目看似简单,容易想到的思路是先根据输入的3找出最大的三位数999,然后循环打印出各数。但是仔细分析会发现,这道题没有提及n的范围,n有可能是一个超过long long 类型的数,如果按照上述做法必然导致溢出。所以这道题实际上是一个考查大数的题。表达一个大数最常用也是最容易的方
2016-09-01 10:13:30 324
原创 leetcode试题总结<8>
257. Binary Tree Paths题意:给定一个二叉树,返回其从根到叶子节点的每一条路径/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x
2016-08-27 17:01:24 463
原创 leetcode试题总结<7>
144. Binary Tree Preorder Traversal题意:实现二叉树的前序遍历//iterate 1/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tre
2016-08-23 17:22:44 483
原创 leetcode试题总结<6>
还是栈与队列的题目385. Mini ParserGiven a nested list of integers represented as a string, implement a parser to deserialize it.Each element is either an integer, or a list -- whose elements may also b
2016-08-22 18:21:14 528
原创 leetcode 试题总结<5>
本篇开始说明栈和队列的题目232. Implement Queue using Stacks//功能:使用栈结构执行队列结构的操作//注意:只能使用栈结构的标准操作:即push、pop、peek、size、empty。class Queue {public: stack in,out; // Push element x to the back of queue.
2016-08-20 17:28:18 339
原创 leetcode题目总结<4>
还是链表的题目。。。143. Reorder List//My code //功能:将一个链表的倒数第一个结点插入到第一个结点后面,倒数第一个结点插入到第二个结点后面,以此类推。。。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;
2016-08-18 10:22:17 300
原创 leetcode题目总结<3>
还是链表章节的题目21.Merge Two Sorted Lists功能:将两个已排序的链表合并成一个//方法1:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), n
2016-08-16 17:17:56 440
原创 leetcode题目总结<2>
因为复习的缘故,一开始按tag做起,难度也是从简单到困难237. Delete Node in a Linked List 这一题题目看了半天没看懂,实际上比较简单,就是给定一个List结点,从链表中删除他,代码如下://My code /** * Definition for singly-linked list. * struct ListNode { *
2016-08-15 19:15:31 341
原创 leetcode题目总结<1>
开始了leetcode的刷题之路,话不多说,从头开始,日积月累。344.Reverse String//my code#include using namespace std;class Solution {public: string reverseString(string s) { int numb = s.size(); strin
2016-08-11 21:02:20 1265
原创 编程题:有两个字符串str1和str2,写一个函数实现在str1中查找str2的初始位置,要求不区分大小写
编程题:有两个字符串str1和str2,写一个函数实现在str1中查找str2的初始位置,要求不区分大小写思路:1:首先判断两个字符串的大小,作初步比较 2:构建str1字符串的for循环,在此循环里实现str2字符串的for循环,从str1字符串首字符开始循环查找str2中的 首字符,如首字符都相等,则两个字符索引顺次递增,看下一
2016-08-01 16:42:55 20863
原创 编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列
编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。思路:对于n个连续正整数,若开始的数为m,则其和sum = n*m + n * (n-1) / 2;因此可以用两个for循环遍历实现/************************************************************************//* 题目要求:
2016-08-01 12:12:40 2887
原创 Windows程序设计-文本输出(二)
在Windows程序设计-文本输出一文中,给出了显示当前Windows硬件参数的一些文本信息,然而,在这个示例显示程序,有很大一个缺陷,除非有一个大屏幕跟高分辨率的显示卡,否则就无法看到系统尺度列表的最后几行。如果窗口太窄,甚至根本看不到值,下面我们来研究一下解决这些文本现实问题的办法。1.显示区域的大小 我们通常使用GetClientRect函数来取得显示区域的大小,
2016-07-31 20:09:00 1012
原创 Windows程序设计-文本输出
1.WM_PAINT 消息大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要调用函数UpdataWindow。Windows利用这一机会给窗口过程发送第一个WM_PAINT消息。 1.窗口过程会接收到一个WM_PAINT消息的事件:用户移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见;用户改变窗口的大小(如果窗口类风格具有CS_HREDRA
2016-07-30 22:21:35 3827
原创 窗口和消息
程序示例:HELLOWIN程序#include #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);#pragma comment(lib, "winmm.lib")//入口函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
2016-07-30 16:53:07 552
原创 实现单向循环链表的创建、测长、打印、插入、删除及逆置
实例实现单向循环链表的创建、测长、打印、插入、删除及逆置//circularList.h文件#ifndef CIRCULAR_H_H_H#define CIRCULAR_H_H_Htypedef struct student{ int data; struct student *next;}cnode;typedef cnode * cirList;typedef cn
2016-07-27 14:57:20 586
原创 实现双向链表的创建、测长、打印、插入、删除
实例实现双向链表的创建、测长、打印、插入、删除://dbList.h文件typedef struct student{ int data; struct student *next; struct student *pre;}dnode;typedef dnode * dbList;typedef dnode * dbPosition;//建立双链表dbList C
2016-07-26 15:43:44 867
原创 数组指针与指针数组及指针与数组的辨析
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面哪个是数组指针,哪个是指针数组呢:int *p1[10];int (*p2)[10];这里需要明白一个符号之间的优先
2016-07-24 12:14:47 284
原创 指针的加减操作及对指针和数组类型的理解
先来看看一道题,分析指针的加减操作:例题1:写出下面程序的运行结果int a[3];a[0] = 0,a[1] = 1,a[2] = 2;int *p,*q;p=a;q = &a[2]; cout可作如下验证程序:int main (){ int a[3]; a[0] = 0,a[1] = 1,a[2] = 2; int *p,*q; p=a; cout<<p
2016-07-23 16:54:35 1702
原创 sizeof用法总结
sizeof用法总结:例子1:int main(int argc, char *argv[]){ char *ss = "0123456789"; cout<<sizeof(ss)<<endl; //结果为4,ss是指向字符串常量的字符指针,类型为指针。 cout<<sizeof(*ss)<<endl; //结果为1,*ss是字符串的第一个字符,类型为char。
2016-07-23 10:42:23 1227
转载 由sizeof求结构体大小时涉及到的数据对齐
本博文转自http://www.cnblogs.com/dolphin0520/ 作者:海子结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各
2016-07-22 10:44:28 1757
原创 C++中交换值与比较值的另类实现方式
1. 比较几个值的另类实现: 例题1:有两个变量a和b,不用"if", "?:", "switch"或其他判断语句,如何实现找出两个数中比较大的那个。 方法1:int max = ( (a + b) + abs(a -b) ) / 2; 解析:分如下两种情况:若a > b, abs(a - b) = a - b ,因此,int max = (a + b + a
2016-07-20 22:36:51 463
原创 C++语言中位运算符在计算中的实际运用
位运算符:1.表达式:X&(X-1) 解释:每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的那个1)变为0。(假设该位为第k位,减1后,该位后面全部变成1,但是由于该位是最右边的1了,所以x的第k位后面全是0,而x-1的第k位是0,从1到k-1位全是1,按位与的结果自然就是第k位和1~k
2016-07-20 21:13:57 564
转载 float类型在内存中的存储
首先还是看一道题目:#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ float a = 1.0f; cout << (int)a << endl; //结果为1 cou
2016-07-20 14:51:12 942
转载 C++内存分配与管理
一道题引发的血案。。。。题目:以下三条语句分别输出什么?void main(){ char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc";
2016-07-18 00:30:31 331
原创 MFC骨干程序
上一篇我们谈到了一个MFC程序的生死因果过程,本片简要分析MFC程序骨干内容。精通MFC程序设计的第一要务是熟记各类的层次结构,并清楚的了解其中几个常用的类,这对于MFC程序开发者来说将大有裨益,至于MFC的程序结构,本处不再给出,可参见MSDN的Hierarchy Chart。支撑应用程序的Document/ViewCDocument:在MFC中,可以把Document简单想做是
2016-01-18 17:23:48 395
原创 MFC程序的剖析及生死因果揭秘
SDK下Windows程序的编程:对于一般SDK下Windows程序的编程,其主要步骤如下:各步骤说明:1:WinMain函数:它是Windows程序的基础,也是入口点函数,当Windows系统启动一个程序的时候,它调用的就是该 程序的WinMain函数,这很类似于传统Dos下的main函数。WinMain函数的原型如下:int WINAPI WinMain( HINST
2016-01-13 20:01:30 725
原创 Effective C++ (item1、item 2)
最近在看Effective C++,顺便做一些记录:Item1: 我们可以将C++看做四大部分的集合,分别是1. C语言: 其中包括了区块(blocks)、语句(statements)、预处理器(preprosser)、内置数据类型(built-indata types)、数组(arrays)、指针(pointers)等2. 面向对象C++: 其中包括类、分装(encapsul
2015-12-27 22:43:57 371
原创 类的静态成员
总结下类的静态成员的一些基础知识:有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持联系,此时我们就把该成员定义成类的静态成员。1.声明静态成员:在成员的声明之前加上关键字static使得其与类关联在一起,和其他成员一样,静态成员可以使public或paivate的,静态数据成员的类型可以是常量、引用、指针、类类型等。class Account{public:
2015-12-27 21:52:59 579
原创 左值、右值与右值引用
1.辨析左值与右值:在C语言中,我们常常会提起左值(lvalue)、右值(rvalue)这样的称呼。而在编译程序时,编译器有时也会在报出的错误信息中包含左值、右值的说法。不过左值、右值通常不是通过一个严谨的定义而为人所知的,大多数时候左右值的定义与其判别方法是一体的。一个最为典型的判别方法就是,在赋值表达式中,出现在等号左边的就是“左值”,而在等号右边的,则称为“右值”。比如:a
2015-08-19 09:57:23 415
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人