32入门-输出比较

目录

简述:

脉冲宽度调制PWM

逻辑关系

32里面的计算公式

1、频率 :

2、占空比:

3、分辨率:

通用定时器

输出比较的模式

补充定时器的概念

重映射-引脚复用

对于同一个定时器的不同通道输出不同的PWM

PID算法

编码器电机

PID公式

位置式(概念理解使用的是位置式,但是实际操作使用的一般是增量式)

增量式


简述:

用来输出PWM波形

输出比较 OC:

输出比较可以通过比较CNT和CCR寄存器值的关系,来对输出电平进行置1、置零或者翻转工作,用于输出具有一定频率和占空比的波形。

脉冲宽度调制PWM

逻辑关系

频率 = \frac{1}{T_{s}}                                           占空比=\frac{T_{ON}}{T_{S}}                           分辨率=占空比的变化步距

分辨率也可以理解为占空比变化的细腻程度。

32里面的计算公式

PSC预分频器的值、ARR自动重装器的值

1、频率 :

Freq  =  ck_PSC /(PSC + 1)/(ARR + 1);

  ck_PSC 晶振频率,c8t6在这时72M

定时器的溢出频率等同于更新频率。

2、占空比:

Duty  = CCR /(ARR  + 1 );

3、分辨率:

Reso  =  1/(ARR + 1);       

每次调制PWM的时候都应该详细的知道自己需要的是多少频率,占空比是多少,分辨率是百分之几的占空比,然后根据自己的需求设置相应的参数。

!!!CCR 的取值在 0~(ARR+1) 这个区间内

每个高级定时器普通定时器都拥有4个输出比较通道。

高级定时器的3个通道额外拥有死区生成和互补输出 的功能。

在具有惯性的系统中,才能进行脉宽调制。灯可以利用视觉暂存和余辉效应,使得灯不是马上熄灭的;电机也不是马上停止的。

通用定时器

解读

CNT和CCR1第一路的捕获/比较寄存器,二者进行比较,然后输出高低电平。

兵分两路,一个是映射到主模式的TRGO输出上;

一个是极性选择,给寄存器写0,信号就会往上走,信号电平不翻转;写1的话信号通过非门取反,发生信号翻转。

接下来就是使能,OC1就是输出比较。

REF信号就是指参考信号,在这是指OC1ref的高低电平;ETRF输入是指定时器一个不常用的小功能

输出比较的模式

 PWM2是PWM1模式的取反

对于普通的引脚输出,引脚的控制权是来自于输出数据寄存器;

但定时器控制引脚,需要使用复用开漏,推挽输出模式,控制权交给片上外设。

TIM_setCompare1是设置CCR寄存器的值,并不是直接是占空比,占空比是CCR和(ARR+1)共同决定的。

补充定时器的概念

定时器是一种用于测量时间间隔的硬件设备,在计算机中常用于生成周期性的定时中断,用于控制信号的频率。定时器产生的定时中断可以在中断处理函数中修改控制信号的状态,从而实现对控制信号的周期性控制。但如果控制信号的周期由其他硬件设备产生,如外部信号源,则定时器并不决定控制信号的频率。

直流电机属于大功率器件,GPIO无法直接驱动。

重映射-引脚复用

STM32重映射,实现引脚复用,配置重映射,需要在在AFIO上实现。

1、初始化AFIO

                开启时钟,AFIO是APB2的设备。

                GPIO_PinRemapConfig引脚重映射配置

                手册查看AFIO,看引脚重映射功能。

2、对于上电后默认为调试器端口是JTDI的GPIO口,若想使其作为普通的GPIO口或者复用定时器的通道,要先关闭调试端口的复用。使用的是GPIO_PinRemapConfig函数

SWJ------>SWD和JTAG两种调试方法。 

GPIO_Remap_SWJ_Disable会导致把SWD和JTAG的调试端口全部解除,如果调用调试端口就没了,在此之后不能再使用STLINK下载程序进去吧咯。

此时只能使用串口下载,下载一个新的没有解除调试端口的程序进去。

在STM32中,JTAG和SWD都是用于调试和编程的接口。它们之间的差异主要在于:

  1. JTAG是一种标准接口,可以连接多个设备,包括调试器,芯片,和其他外设。而SWD是一种单线调试接口,只能连接一个设备。这也导致了在多设备调试和编程时,SWD的灵活性不如JTAG。

  2. JTAG具有4根引脚(TMS,TCK,TDI和TDO),而SWD只使用2根引脚(SWDIO和SWCLK)。因此,SWD可以占用更少的引脚,为系统设计提供更大的灵活性。

  3. 在某些情况下,SWD可以更快地执行调试和编程操作,因为它使用了更少的引脚和更少的时钟周期。

在使用哪种接口时,需要根据具体的应用场景和需求进行选择。如果需要同时调试多个设备,或者需要更高的灵活性,则应该使用JTAG。如果资源有限或需要更快的操作速度,则应该使用SWD。

JTDI是STM32微控制器的调试端口,是一种专用于JTAG调试接口的端口。

        JTAG是一种通过硬件接口进行微控制器调试和编程的标准。

JTDI端口用于连接JTAG调试接口和微控制器的调试电路,使得开发人员可以通过调试器对STM32微控制器进行调试、单步执行和程序下载等操作。JTDI端口通常与JTDO(JTAG数据输出)、JTCK(JTAG时钟)和NRST(复位引脚)一起使用,形成完整的JTAG调试接口。在STM32微控制器中,JTDI端口一般位于调试端口的第二个引脚,即SWDIO(Serial Wire Debug Data Input/Output)引脚旁边。

总结来说,要需要PA15、PB3、PB4这三个引脚作为GPIO来使用,要打开AFIO时钟,然后用AFIO将JTAG复用解除掉。

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);	//解除PA15的JTAD

如果需要重映射定时器或者其他外设的复用引脚,则要

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);	//引脚重映射,PA0->PA15

如果即使定时器或者其他外设的复用引脚,也是调试端口则需要三局组合使用。

记得在端口挪用之后,修改GPIO的初始化!!!!

对于同一个定时器的不同通道输出不同的PWM

对于同一个定时器的不同通道输出不同的PWM,由于共用一个计数器,所以频率、相位是一样的,占空比由各自的CCR决定。

PID算法

为了实现PID需要什么东西呢?
一个测量装置
由于我们需要对(实际速度-期望速度的差值)error来进行操作,我们就得知道实际速度和期望速度所以我们就需要一个测速装置。
这次用编码器。这就叫速度环(也叫速度闭环)
同样的,如果想做一个角度环(让实际角度=期望角度)-------那就加一个测角度的传感器―陀螺仪(MPU6050,很常用)

编码器电机

电机线可以选择不接 

32使用编码器的话有一个成熟的库,正交解码

编码电机的a、b相可以以用来测量电机的速度,两者组合在一起使用还可以用来测量电机正反转。

设置计数器的重装值,已知电机是多少线的

TIMx_ARR = 1024 *4 - 1 =4095

如果是360线的就是 TIMx_ARR = 360 *4 - 1 = 1439

不是很精确的话可以直接设置成65535

PID公式

STM32培训—PID上篇(知识储备篇)_哔哩哔哩_bilibili单片机:STM32F103C8T6软件:keil5、xcom工具:最小系统板、3S锂电池、稳压板、编码器电机、CH340、下载器讲解内容:1.为什么要引入PID2.如何实现PID3.正交解码编码器的原理4.vofa+的使用, 视频播放量 36577、弹幕量 77、点赞数 720、投硬币枚数 627、收藏人数 2047、转发人数 271, 视频作者 初明忆冥, 作者简介 PPT和代码仓库:https://gitee.com/hello-nccya学到了好东西就会发出来,相关视频:从不懂到会用!PID从理论到实践~,STM32培训—PID下篇(PID公式转换为代码及增量式代码的由来),STM32培训—PID中篇(公式的由来及参数的含义),STM32读取MPU6050角度数据,手把手带做电赛真题:02 焊接/写STM32代码/调PID 沉浸式,电赛控制题【干货教程】智能送药小车 STM32HAL库CubeMX+串级PID算法+OpenMV数字识别,基于STM32-PID-温控系统(既可以制冷也可以加热,实现真正意义上的温控),【PID算法】基于STM32电机应用开发实战指南,假如不调PID,小车会“魔怔”吗?一个例程整明白PID的意义,【大学生】stm32基本知识https://www.bilibili.com/video/BV1yV411p7Dr?share_source=copy_web

一般有两种,一个是位置式,一个是增量式。

位置式(概念理解使用的是位置式,但是实际操作使用的一般是增量式)

比例✖当前值+积分✖累计值+微分✖差值

P:比例项,最重要的部分; I:积分项,减小静差; D:微分项,增加阻尼。

 Kp比较重要,有时候可以采取纯P控制

 

 放在车子上面就是,如果Kp较小,调节的时间就会长。而我们并不想时间那么长,于是开始调节使得Kp增大,但是Kp增大到超越一定的数值,就会产生抖K

Ki呢就好比用来加上木桶的漏水量,把水灌满。

因为只有KP的话,是无限接近预期值,但会一直达不到预期值。而加上Ki,则有可能使得达到预期值。

Kd就是不让水灌得太快。这次得误差值*上次的误差值一般是负值,可以防止速度太快,在小车上可以防止参数过大导致电机被烧坏。

增量式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值