Ⅰ STM-1怎样计算速度
STM-1帧由9行、270列共2430个字节组成。传送时按由左到右、由上至下的顺序进行,直到整个帧传送完毕。每秒传送8000帧。因此其传输速率为:270×9×8×8000=155.520Mbit/s
STM-1:传输速率155MBit/s。
STM-4:传输速率622MBit/s。
STM-64:传输速率10GBit/s。
(1)stm触摸屏计算器算法扩展阅读:
STM-1是SDH信号最基本的模块。STM-1是网络的光接口卡。
SDH(同步数字序列同步数字系统)是一种乘法,行成一个传输和交换功能,和统一的网络管理系统操作的综合信息传输网络,是美国贝尔通信技术研究所提出了同步光纤网络(SONET)
同步技术是数字通信系统中非常重要的一项技术,一般有(码元)同步、字(码组)同步、载波同步和帧同步,适用于网络系统和网络同步。
现代SDH数字传输网是一种全网同步的数字传输网。在接收端进行数据处理时,必须先从同步数据流中提取帧同步信息。帧同步提取的性能直接影响到整个数据的处理质量和整个系统的性能。
采用FPGA技术,实现了同步系统的模块化、小型化和芯片化,获得了稳定可靠的帧同步器。
Ⅱ stm32定时器的定时计算公式Tout= ((arr+1)*(psc+1))/Tclk里,为什么预分频系数以及寄存器周期的值都要加1
我的理解:
ARR+1:定时器寄存器是从0开始计时的,0也算做一个值,比如你定时10个定时器周期,那么你往ARR寄存器中应写入9
PSC+1:道理和上面一样,0=1分频,1=2分频,2=3分频,,,
虽然寄存器中的值是0,但实际上是1,所以计算的时候要+1
Ⅲ STM-16的计算推导
SDH的帧传输时按由左到右、由上到下的顺序排成串型码流依次传输,每帧传输时间为125μs,每秒传输1/125×1000000帧,对STM-1而言每帧字节为8bit×(9×270×1)=19440bit,则STM-1的传输速率为19440×8000=155.520Mbit/s;而STM-4的传输速率为4×155.520Mbit/s=622.080Mbit/s;STM-16的传输速率为16×155.520(或4×622.080)=2488.320Mbit/s。
Ⅳ STM-1怎样计算速度
STM-1帧由9行、270列共2430个字节组成。传送时按由左到右、由上至下的顺序进行,直到整个帧传送完毕。每秒传送8000帧。因此其传输速率为: 270×9×8×8000=155.520Mbit/s
STM-1:传输速率155MBit/s
STM-4:传输速率622MBit/s
STM-64:传输速率10GBit/s
(4)stm触摸屏计算器算法扩展阅读:
SDH是将复接、线路传输及交换功能融为一体、并由统一网管系统操作的综合信息传送网络,是美国贝尔通信技术研究所提出来的同步光网络(SONET)
同步技术在数字通信系统中是非常重要的技术,一般有位(码元)同步、字(码组)同步、载波同步和帧同步,对于网络系统来说还有网同步。现代SDH数字传输网是全网同步的数字传送网络,对于接收端的数据处理。
Ⅳ STM32 ADC转换如何计算
ADC转换时间:
具有以下公式:TCONV=采样时间+12.5个周期
对于12位AD采集,固定为12.5个周期。其他采样时间可以由SMPx[2:0]寄存器控制。每个通道可以单独配置。
000:1.5周期
100:41.5周期
001:7.5周期
101:55.5周期
010:13.5周期
110:71.5周期
011:28.5周期
111:239.5周期
当我们选择1.5个周期。转换时间=1.5+12.5=14个周期。
当时钟配置为12MHz时,转换时间=14/12=1.167us。
Ⅵ stm32单片机能写复杂控制算法么
1.PID原理
1.1 P I D三个参数简单理解
1.2 P I D
1.3 PI PD PID适用系统
2.串级PID原理
3.PID代码
3.1 单级PID
3.1.1 初始化PID结构体
3.1.2 单级PID计算
3.1.3PID初始化
3.1.4 清空PID
3.2 串级PID
3.2.1 初始化串级PID结构体
3.2.2 串级PID计算
4.PID的使用
4.1 定义PID结构体并初始化
4.2 定义电机速度函数
4.3 在检测霍尔码盘时发送速度给电机
4.4 实验效果
1.PID原理
PID是什么,P,I,D的分别功能
你和PID调参大神之间,就差这篇文章!
1.1 P I D三个参数简单理解
P(比例): 简单来说,P就是凉了加热水,热了加凉水。比目标值小,我就增加一点,比目标值大,我就减小一点。(现在)
P可能出现的问题: 1.P太小,达到目标值需要花费很长的时间,而且会有稳态误差。2.P太大,达到目标值时可能会一直震荡。
I(积分): 将一段时间内的误差累积起来加到输出上,可以消除历史误差对当前实际曲线的影响,提高系统的稳定性。 (过去)
I可能出现的问题: 1.I太小,可以消除稳态误差,但太慢了,对于某些需要很快响应的系统,显然不能满足要求。2.I太大,累计误差占比过大,就会出现抖动现象,难以收敛。
D(微分): 减小最大超调量。(下图中③就是最大超调量。) 可以有效减小震动的幅度。让曲线收敛更快 (未来)
D可能出现的问题: 1.D太小,作用小,时间长。2.D太大,为了减小超调量,补偿的过多,导致震荡很久。
在这里插入图片描述
1.2 P I D
先调P,逐渐增加P直到系统出现震荡,将当前值乘0.7就是较为合适的值。
再调I,将稳态误差逐渐降低。
后调D,将最大超调量降到最低。
1.3 PI PD PID适用系统
PI:响应速度要求不那么高的系统。
PD:大惯性系统。超调量太大。
PID:都可以。
网上将PID原理太多太多了,我的理解也都是参见上面的内容。认真看肯定有收获。
2.串级PID原理
【串级PID】浅谈串级PID作用及意义——快速理解串级PID结构优势
这里个人理解就是,单机PID就是稳定速度。而需要带位置和角度的就要用串级PID了。常用于平衡车,板球系统等。
而转速闭环称为串级PID的内环,位置 (角度) 闭环称为串级PID的外环。其实也很好理解,位移是速度的积分,只有速度慢慢稳定,位置才能确定。
3.PID代码
3.1 单级PID
3.1.1 初始化PID结构体
typedef struct _PID
{
float kp,ki,kd;
float error,lastError;//误差、上次误差
float integral,maxIntegral;//积分、积分限幅
float output,maxOutput;//输出、输出限幅
}PID;
1
2
3
4
5
6
7
1
2
3
4
5
6
7
3.1.2 单级PID计算
#define LIMIT(x,min,max) (x)=(((x)<=(min))?(min):(((x)>=(max))?(max):(x)))
//单级pid计算
void PID_SingleCalc(PID *pid,float reference,float feedback)
{
//更新数据
pid->lastError=pid->error;
pid->error=reference-feedback;
//计算微分
pid->output=(pid->error-pid->lastError)*pid->kd;
//计算比例
pid->output+=pid->error*pid->kp;
//计算积分
pid->integral+=pid->error*pid->ki;
LIMIT(pid->integral,-pid->maxIntegral,pid->maxIntegral);//积分限幅
pid->output+=pid->integral;
//输出限幅
LIMIT(pid->output,-pid->maxOutput,pid->maxOutput);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
3.1.3PID初始化
void PID_Init(PID *pid,float p,float i,float d,float maxI,float maxOut)
{
pid->kp=p;
pid->ki=i;
pid->kd=d;
pid->maxIntegral=maxI;
pid->maxOutput=maxOut;
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
3.1.4 清空PID
//清空一个pid的历史数据
void PID_Clear(PID *pid)
{
pid->error=0;
pid->lastError=0;
pid->integral=0;
pid->output=0;
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
3.2 串级PID
3.2.1 初始化串级PID结构体
typedef struct _CascadePID
{
PID inner;//内环
PID outer;//外环
float output;//串级输出,等于inner.output
}CascadePID;
1
2
3
4
5
6
1
2
3
4
5
6
3.2.2 串级PID计算
//串级pid计算
void PID_CascadeCalc(CascadePID *pid,float angleRef,float angleFdb,float speedFdb)
{
PID_SingleCalc(&pid->outer,angleRef,angleFdb);//计算外环(角度环)
PID_SingleCalc(&pid->inner,pid->outer.output,speedFdb);//计算内环(速度环)
pid->output=pid->inner.output;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
4.PID的使用
STM32应用(九)编码器及其测速原理、L298N电机驱动控制编码器电机
在这篇博客的配置下,只需要修改部分代码。以单级PID为例子。
4.1 定义PID结构体并初始化
PID pid;
void Motor_Init(void)
{
PID_Init(&pid,10,0,0,1000,1000);
HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //开启编码器定时器
__HAL_TIM_ENABLE_IT(&htim1,TIM_IT_UPDATE); //开启编码器定时器更新中断,防溢出处理
HAL_TIM_Base_Start_IT(&htim6); //开启10ms定时器中断
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启PWM
__HAL_TIM_SET_COUNTER(&htim1, 10000); //编码器定时器初始值设定为10000
motor.loopNum = 0; //防溢出
}
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
4.2 定义电机速度函数
void Motor_Send()
{
float output = 0;
PID_SingleCalc(&pid, motor.targetSpeed, motor.speed);
output = pid.output;
if(output > 0) //正转
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, (uint32_t)output);
IN1(1);
IN2(0);
}
else //反转
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, (uint32_t)(-output));
IN1(0);
IN2(1);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
4.3 在检测霍尔码盘时发送速度给电机
if(htim->Instance==htim6.Instance) //10ms中断
{
int16_t pluse = COUNTERNUM - RELOADVALUE/2;
motor.totalAngle = pluse + motor.loopNum * RELOADVALUE/2;
motor.speed = (float)(motor.totalAngle - motor.lastAngle)/(4*13*RR)*6000; //进行速度计算,根据前文所说的,4倍频,编码器13位,减速比30,再乘以6000即为每分钟输出轴多少转
motor.lastAngle = motor.totalAngle; //更新转过的圈数
Motor_Send();//发送速度
}
Ⅶ STM32中,systick具体延时时间怎么计算的
systick定时器有两个可选的时钟源,一个是外部时钟源(STCLK,等于HCLK/8),另一个是内核时钟(FCLK,等于HCLK)。假若你选择内核时钟,并将HCLK频率设置为72MHz的话,系统时钟周期为1/(72M);systick有一个24位的递减计数器,每个系统时钟周期计数器值减一,那么当计数器减到零时,时间经过了:系统时钟周期*计数器初值。当你将计数器初值设为72000时(有些例程里面设为71999,其实没什么影响,误差极小),当计数器值减到0时经过了1/(72M)*72000=0.001s,即1ms。你可以看一下芯达STM32的入门教程和《ARM Cortex-M3权威指南》的相关章节,里面关于systick编程的一章说的比较详细,但是也有个别地方说的比较模糊,总之多看些例程就明白了,刚开始总是很纠结的~