- 博客(34)
- 资源 (9)
- 收藏
- 关注
原创 【论指针(4)】指针与二维数组
先来看一个二维数组: int a[2][2];结构如下:a[0][0] a[0][1] a[1][0] a[1][1]我们可以分为2个一维数组,a={a[0],a[1]};a[0]={a[0][0],a[0][1]};a[1]={a[1][0],a[1][0
2017-06-30 11:32:28 844
原创 【论指针(5)】指针与字符串
一、字符指针1、 定义指向字符串的的指针变量 char *p=”China”; 注意:这里没有定义字符串数组,但字符串在内存中还是以数组形式存放,占有一片连续的内存,以‘\0’结束;对于赋值只是把字符串的首地址给p,而不是把字符串给p,p是一个指针变量,它只能存放一个地址!问题提出:将字符串用指针逐个输出?主函数如下:v
2017-06-30 10:40:02 889
原创 【论指针(3)】指针与一维数组
对于数组a[5]={1,2,3,4,5},我们现在知道它的首地址是a,后面对应的地址为a+1,a+2,a+3,a+4,既然我们知道了数组中每一个元素的位置,那我们就可以利用*对其数据进行操作了! 一、指针变量引用一维数组元素定义:int *p,a[5]={1,2,3,4,5};p=a;这样我们*p=1,就引用了1这个元素,若想引用4这个数
2017-06-29 14:57:26 859
原创 【论指针(2)】指针与函数
一、指针变量作函数参数问题提出·:如何调用函数交换2个数的值?(请用指针变量完成)分析:第一步:根据题意我们可以写出的主程序代码:void main(void){int a,b,*pt1,*pt2;a=5;b=9;pt1=&a;pt2=&b;if(a{Swap(p
2017-06-29 11:04:45 818
原创 【论指针(1)】指针引入
为什么要用指针?我们知道内村中所有的数据都是有地址的,他们每一个的地址都是唯一,也就成了他们的标志!当我们定义一个a=5时,在内村中会构成以下数据结构:编号a的数据a这是对于最普遍的定义,因为这种自定义好处是当我们定义了a=5后,我们不需要知道数据5在内村中的地址即编号,只需要引用符号a即可,其实真正的
2017-06-28 14:48:16 1029
原创 【KF8V111控制器】PWM模块配置
配置流程图:我们选择定时器T1,PWM1,对应的输出管脚为P16第一步:通过 PWMxCKS位设置 PWM 的计数时钟根据以上寄存器,代码如下配置: PWM1CKS = 0; // fsys/4第二步:将 TR16 或 TR17 置 1,禁止引脚 P1.6/PWM1 或 P1.7/PWM2 的输出驱动器TR16 = 1;第
2017-06-23 14:50:08 1390
原创 【KF8V111控制器】A/D转化配置
先来看看总的程序配置流程:第一步:选择通道,设置对齐方式根据以上寄存器配置如下:CHS3 = (4 >> 3)&0x01;CHS2 = (4 >> 2)&0x01;CHS1 = (4 >> 1)&0x01;CHS0 = (4 >> 0)&0x01; //通道选择 ADLR =1;//对齐方式第二步:对应通
2017-06-22 14:11:43 1316
原创 【KF8V111控制器】定时器T0配置
先看一下定时器框图:我们选择图中红色圈出的线路,然后根据以下流程和相关的寄存器进行配置,我们的T0定时器的初始化函数如下:void TIM0_Init(void){T0CS = 0; //选择定时模式 PSA =1;//不分配预分频器T0 = 205; //计数初始值T0IE =1; AIE = 1;
2017-06-21 10:08:46 1287
原创 【KF8V111控制器】I/O配置
一、先上I/O口方向控制寄存器,就是配置输出输入模式,这里以P0端口为例子:若要设置P05为输出模式,则配置寄存器TR05=0;若设置P05为输入模式,则配置寄存器TR05=1;P1和P2端口根据相关寄存器以此类推即可!二、若需要配置P05为输出模式,则它输出的高低输出需要配置一下寄存器:若要P05输出高电平,则配置P0LR5=1;若要P05输出低电平,则配
2017-06-20 17:29:26 1621
原创 【KF8V111控制器】系统时钟配置
先上系统时钟框图不难发现,系统时钟Fsys可以由Fosc经8位分频器获得,下面就是这个8位分频器的寄存器信息:图中说明IRCS 这3位的配置可以选着分频后的系统时钟Fsys的频率,我们根据寄存器写出8MHz的系统时钟代码如下:#include //头文件必须引入 相关寄存器的映射void SYSTEM_Init(void)//系统时钟配置
2017-06-20 16:46:32 1132
原创 【电路第六章】电路中的常用储能元件分析
电路分析中,可能对于电容电感我们只是对其数据参数有个了解,对于真的计算原理不明白,所以这章就从公式的角度分析电容电感的各项参数是如何得到的,这样有助于以后我们在电路中了解它们的不同作用!一、电容元件电容的特性是根据物理量电荷q与电压u的代数关系来体现的!当电压参考电极与极板储存电荷的极性一致时,线性电容有以下特性 q
2017-06-19 09:46:07 5341
原创 【电路第五章】含运算放大器的电路分析方法
对于"规则"的运算放大器的知识就不讲了,反正就是几个公式的推导和利用,这里主要说明电路中“不规则”运算放大器的分析方法,你也可以这个方法回去分析出他们的公式!遇到运算放大器,我们一定要遵守以下两条规则:1、同相端和反相端的输入电流均为零,称为“虚断”2、对于公共端(地),反相端和同相端的电压相等,称为“虚短”合理利用这两个规则,是分析好电路的重要因素!下面用
2017-06-16 14:44:12 6283
原创 【电路第四章】电路中的定理
先说明:本文只是大概介绍需要理解的一些概念和方法,对于这些证明自己需要花时间和题目去理解,这里只是给出一个方向!一、叠加定理该定理的数学证明网上到处是,可能对于有些人看了也看不懂,其实它是根据我们上面说的利用回路电流法或结点电压法来列方程证明的,所以不懂就不懂,只要用的时候注意以下几点就可以了:1、叠加定理适用于线性电路,不适用于非线性电路2、在叠加的各分电路中,不作用的电压源
2017-06-16 13:55:32 3465
原创 【电路第三章】电路中的一般分析方法
我们知道,在节点上列KCL方程能列(n-1)个独立方程,在支路上列KVL方程能列(b-n+1)个独立方程,在支路上列VCR方程能列b个独立方程,这样总的独立方程数为(n-1)+(b-n+1)+b =2b ,正好对应2b个未知量,就可以解出所有的未知量了!(b代表支路数,n代表节点数)因为这样列方程有时候对于复杂的电路太繁琐,于是就产生了下面几种减少方程数的方法!先理解以下几个概念:
2017-06-15 11:19:42 2376
原创 【电路第二章】电路中的等效概念
一、Y型联结和△型联结的电路等效 Y型联结: △型联结:对Y型联结列方程组:可得出对△型联结列方程组:如果等效,即对外等效,即3个对外的电流相同和3端口电压也相同,方程式对应得参数相等,则有上面是用R1、R2、R3表示R12、R23、R31,即可从Y型推出等效△型!
2017-06-14 15:42:20 4146
原创 C语言经典程序一
//题目一 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#if 0#include "stdio.h"int main(void){unsigned int i,j,k,Length,Num[]={1,2,3,4},Result; Length = sizeof(Num)/sizeof(unsigned int);
2017-06-14 13:35:38 1250 2
原创 【电路第一章】 基本概念和基本公设
学习电路之前,先明白一下几个概念,以后的电路分析不保证说每个都用到,但至少基本都用到,而且不明白可能连思路都没有!一、电流和电压的参考方向 设立参考方向其实是为了反映实际的的方向!假如设定其中一个方向为正(负),则另一个就为负(正)。 对于电流: 如图a,虚线箭头表示电流的参考方向,如果i的实际方向与该参考方向一致,则i>0; 如图b,虚线
2017-06-13 16:55:56 1326
原创 【UC/OS-II】一、STM32平台移植教程
因为一开始就讲STM32的UC/OS-ii的移植对于不了解系统的小白来说可能看不懂,但我的开发平台是基于STM32的,所以又不得不先说明移植教程,所以在这里建议不懂的可以去网上先下个可运行的STM32的移植环境进行开发,等熟悉系统后回来再看!我是先看系统的整个代码框架,这样我可以不开发也会搭建了!也可以学我的流程,买本书先看看UC/OS操作系统的整个框架!说白了,其实操作系统就是个“库”!
2017-06-13 11:20:04 5477
原创 【STM32F103攻城笔记】串口 实战
串口的理论知识就不重复了!编写串口流程很简单:初始化端口 ==> 发送程序编写 + 接受程序编写 ==> PC串口调试助手第一步:因为涉及接受和发送的优先级,所以在初始化串口端口之前必须先初始化中断的设置,下面就先给出主函数的程序:int main(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_
2017-06-12 17:20:44 1129
原创 【STM32F103攻城笔记】STM32之MDK(Keil)环境搭建(二)
继续上面的操作,我们打开keil,是空的!点击project ->New uVision Project选择工程的位置并命名工程名字 保存后,选择你对应的芯片,OK后,一个空的环境搭好了!下一步建立一个代码文件夹,先说明我们要用的文件有哪些:然后将上面的文件分配到建立的文件代码,分配
2017-06-08 16:21:11 1548
原创 【STM32F103攻城笔记】STM32之MDK(Keil)环境搭建(一)
开始前需准备的工具和文件: 一、keil安装好。(要支持ARM的) 二、去下载STM32f103的芯片包,后缀为pack (因为一般安装keil不会自带stm32的芯片包) 三、去官网或百度下个STM32的库函数文件。上面二 和 三的文件如下图:开始了!第一步:打开Keil,按图操作出现以下界面,并继续操作选择刚才
2017-06-08 15:44:48 3625
原创 【STM32F103攻城笔记】输入捕捉实战
何为输入捕捉?其实就是检测到信号跳变后,锁住计数的寄存器并保存,发生捕获事件其实相当于发生了中断,可以根据相应的标志位来判断当前捕获了什么,其实捕获什么无非就是上升沿、下降沿!关于捕捉的更多信息请参考官方的手册,个人觉得手册上讲的还是很容易懂得,因为寄存并不多!下面我针对我的STM32f103VBT6来进一步了解输入捕捉模式!我选择定时器TIM4,它对应的输入捕
2017-06-08 14:33:43 6832 2
原创 PID算法的C语言实现八 变积分的PID优化
在积分分离的章节,我们是用Ki去控制积分环节的偏差,是一个固定的值,但为了更好的稳定系统,我们要求在偏差大的时候,积分系数小,偏差小的时候,积分系数大,这样可以稳定系统,不至于出现超调过大、饱和等情况,而且能时间更短的使系统达到稳定状态!因此,变积分就是根据偏差的大小改变积分的速度!其思想就是:改变积分的累加速度,使其与偏差大小相对应;偏差越大,积分越慢(可以理解为积分少),偏差越小,
2017-06-07 14:37:36 3586 1
原创 PID算法的C语言实现七 梯形积分的PID优化
先上梯形积分的算法公式;对于积分环节的PID控制,其实就是为了消除系统的静差,为了减少这个,我们必须提高积分环节的精度也就是每一次偏差的调节变小,因为在系统稳定的状态下,偏差调节越小,就是精度越高,为此我们用梯形的积分代替第六章中的矩形积分来提高积分调节精度!代码请参考第六篇中的代码,只需讲第六篇中的这段代码:pid.Voltage = pid.Kp*pid.Err
2017-06-07 10:29:37 2887
原创 PID算法的C语言实现六 抗积分饱和的PID优化
积分饱和通俗讲就是系统在一个偏差方向上的饱和,比如一个系统设定了输出不会超过100,但因为出现一个方向上的偏差积分使得输出超过了100,此时达到了饱和状态,如果继续在这个方向上积分会导致PID控制超过100系统却运行在100,相当于积分调节对系统输出没有作用,就出现失控的状态,这是系统不能接受的,而且饱和积分越深,退出饱和就越久。上面是在正向的饱和,负向的饱和类似!为了解决这个问题,我们采
2017-06-07 09:59:19 9154
原创 【STM32F103攻城笔记】外部晶振HSE倍频设置系统时钟
上一篇的内部晶振的系统时钟设置已经对系统时钟进行了配置,而外部晶振的倍频只需要改变上一篇的初始化函数就可以,其他均一样!第一步:建立一个HSE倍频的初始化函数void SystemClock_Config(void) ;所以我们由上一篇文章变为:int main (void){ RCC_ClocksTypeDef RCC_Clocks; //初始化
2017-06-06 14:39:15 7043
原创 PID算法的C语言实现五 积分分离的PID优化
在上面三、四我们知道积分环节是为了消除静差,但有时候机器启动、结束或出现大幅的偏差时,这样在短时间内会累积大量的偏差,这样就导致积分项很大,以至于出现超调甚至震荡,这样是不允许的!为了克服这个问题,我们对积分偏差的做一个选择,即通过控制积分偏差的大小来决定是否增加积分项的调节!在第三篇的代码中做如下更改:将float PID_Cal(float Speed){pid
2017-06-05 16:21:35 7027 4
原创 【STM32F103攻城笔记】内部晶振HSI倍频设置系统时钟
首先说明,因为STM32芯片的型号不同,所以对于不同芯片有不同频率的限制,比如某些时钟频率不能大于多少,这是根据手册来设置的!但改变频率的寄存器都一样,只是我们设置频率大小要受芯片的限制!下面我用的芯片型号是STM32F103VBT6!它就限制了内部晶振的倍频不能大于64MHz(但其实我实验出来是52MHz)!本文是利用内部晶振(HSI)来倍频,与外部晶振倍频区分开!第一步:打开syste
2017-06-02 17:47:56 19900 1
原创 【STM32F103攻城笔记】PWM功能实战
系统时钟是默认的HSI的8MHz频率!这个会影响计时器的计数频率,所以要知道要这个频率,以保证以后自己可以根据分频来控制PWM输出波形的频率大小!这个对于实际项目中的开发很重要,大都电机对于频率都会有要求,这里先不纠结这个,我们先来产生不同占空比的波形!系统时钟默认为8MHz。第一步:初始化相关寄存器。定时器选择TIM3,通道选择CH2,即PA7端口。(这里注意,PA7口和TIM3_C
2017-06-02 09:58:52 1965
原创 PID算法的C语言实现四 增量型PID的C语言实现
有位置型编程可以知道这个编程也很简单,戒指接贴出代码了:#include "stdio.h"struct _pid{float SetSpeed;float ActualSpeed;float Err;float Err_Last;float Err_Next; float Kp,Ki,Kd; }pid;void PID_Init(void)
2017-06-01 15:22:04 4757
原创 PID算法的C语言实现三 位置型PID的C语言实现
前面我们已经知道位置型PID和增量型PID的数学表达式,我们根据这些表达式就可以实现基本的PID的C语言编程了!下面我们开始C语言的编写。第一步:创建一个PID各项参数的变量结构体。第二步:PID参数的初始化函数。 这里以后我们主要就是对Kp、Ki、Kd的不断调节来优化控制效果!第三步:PID算法的计算函数。注意:这里没有很严格
2017-06-01 14:49:38 7526 1
原创 PID算法的C语言实现二 PID算法的离散化
上面一篇已经讲述了PID的流程!这里对上面做一些补充说明:1、由上一篇原理图框架我们知道PID控制其实是对偏差的控制;2、如果偏差为0,则比列控制就不起作用;3、积分环节主要用来消除静差,就是系统稳定后实际输出变量与输入变量的差值,利用偏差不断的叠加来作为输入变量的补偿;4、微分环节其实是对偏差趋向的一个规律提前调节,这样可以增加系统稳定的快速性;补充好了!下面还是贴出
2017-06-01 14:14:29 7470
原创 PID算法的C语言实现一 PID算法原理
直接上图:、PID的算法流程其实很简单!利用测得的真实输出变量与输入变量的误差来控制输出变量!而这个误差的控制就是比例、积分、微分这三个控制的相加!这里我们假设某个采样点时间为t :设1、输入变量(预期输出的变量大小)为In(t); 2、实际输出变量(传感器测得的真实输出的变量)为Out(t); 3、偏差值 err(t) = In(t)-Out(t);取
2017-06-01 11:24:10 3439
基于Renesas芯片的TH06C温湿度的嵌入式开发pdf_V1.0.zip
2020-03-04
LIN项目代码 .rar
2020-02-22
AP4_for_RL78_EC__V10500.exe
2020-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人