电机控制基础——定时器捕获单输入脉冲原理

2023-11-13

1 问题引出

在单片机与嵌入式开发中,某些场景需要捕获传感器的高电平(或低电平)信号的持续时间,如红外解码信号、编码器输入信号等。

如下图,以单一的一段高电平输入信号为例,如何测量这段高电平的时间呢?

从直观上理解,就是要不断的检测这个信号,当信号从0变到1时,记录一个时间,再从1变到0时,记录另一个时间,两个时间差就是高电平的持续时间了。那具体要怎么编程呢?这就要用到定时器了。

2 定时器的捕获原理

上篇介绍了定时器的输出功能,本篇是利用定时器的输入功能,来计算脉冲时长。如下图:

  • 定时器的CNT计数器在不停的计数
  • 首先配置定时器的输入通道为上升沿捕获,这样当检测到从0到1的跳变时,CCR1就会先保存当前的CNT值,同时CNT会清零重新开始计数
  • 然后将定时器的输入通道为下降沿捕获,当检测从1到0的跳变时,CCR2就会先保存当前的CNT值
  • 在这期间,CNT的计数值可能会溢出,这不影响,记录下溢出的次数,并重新开始计数即可
  • 最终,t2-t1的高电平时间,就可以通过N次的溢出时间加CCR2保存的时间来计算获得了

3 定时器常用的寄存器

上篇介绍了定时器输出PWM时用到的几个寄存器(CR、CCMR、CNT、PSC、ARR、CCR等),这里再介绍几个捕获信号时需要用到的几个寄存器:

3.1 捕获/比较模式寄存器CCMR1

CCMR寄存器上篇已有介绍,只是上篇仅介绍了输出模式下的功能,本篇再介绍一下它在输入模式下的功能:

这些通道可用于输入(捕获模式)输出(比较模式)模式。通道方向通过配置相应的 CCxS 位进行定义。此寄存器的所有其它位在输入模式和输出模式下的功能均不同。对于任一给定位

  • OCxx 用于说明通道配置为输出时该位对应的功能

  • ICxx 则用于说明通道配置为输入时 该位对应的功能

因此,必须注意同一个位在输入阶段和输出阶段具有不同的含义。

这里仅先介绍输入模式下的功能:

  • 位 15:12 IC2F:输入捕获 2 滤波器 (Input capture 2 filter)

  • 位 11:10 IC2PSC[1:0]:输入捕获 2 预分频器 (Input capture 2 prescaler)

  • 位 9:8 CC2S:捕获/比较 2 选择 (Capture/compare 2 selection)
    用法参照下面的CC1S通道1

  • 位 7:4 IC1F:输入捕获 1 滤波器 (Input capture 1 filter)

    数字滤波器由事件计数器组成,每 N 个事件才视为一个有效边沿:

    • 0000:无滤波器
    • 0001~1111:其它频率的滤波器
  • 位 3:2 IC1PSC:输入捕获 1 预分频器 (Input capture 1 prescaler)

    此位域定义 CC1 输入 (IC1) 的预分频比。只要 CC1E=0(TIMx_CCER 寄存器),预分频器便立即复位。

    • 00:无预分频器,捕获输入上每检测到一个边沿便执行捕获
    • 01~11:每发生 2 (4、8)个事件便执行一次捕获
  • 位 1:0 CC1S:捕获/比较 1 选择 (Capture/Compare 1 selection),此位域定义通道方向(输入/输出)以及所使用的输入。

    • 00:CC1 通道配置为输出
    • 01:CC1 通道配置为输入,IC1 映射到 TI1 上
    • 10:CC1 通道配置为输入,IC1 映射到 TI2 上
    • 11:CC1 通道配置为输入,IC1 映射到 TRC 上。此模式仅在通过 TS 位(TIMx_SMCR 寄存器)选择内部触发输入时有效

注: 仅当通道关闭时(TIMx_CCER 中的 CC1E = 0),才可向 CC1S 位写入数据。

3.2 捕获/比较使能寄存器CCER

我们要用到这个寄存器的最低 2 位, CC1E 和 CC1P。

  • 位 15、11、7、3 CCxNP:捕获 /比较x 输出极性 (Capture/Comparex output Polarity)。

    • CCx 通道配置为输出: CCxNP 必须保持清零。
    • CCx 通道配置为输入:此位与 CCxP 配合使用,用以定义 TI1FP1/TI2FP1 的极性。请参见 CCxP 说明。
  • 位 14、10、6、2 保留,必须保持复位值。

  • 位 13、9、5、1 CCxP:捕获 /比较x 输出极性 (Capture/Comparex output Polarity)。

    • CCx 通道配置为输出

      • 0:OCx 高电平有效
      • 1:OCx低电平有效
    • CCx 通道配置为输入

      CCxNP/CCxP 位可针对触发或捕获操作选择 TI1FP1 和 TI2FP1 的极性。

      • 00:非反相/上升沿触发
        电路对 TIxFP1 上升沿敏感 (在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 未反相 (在门控模式或编码器模式下执行触发操作)。
      • 01:反相/下降沿触发
        电路对 TIxFP1 下降沿敏感 (在复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 反相 (在门控模式或编码器模式下执行触发操作)。
      • 10:保留,不使用此配置。
      • 11:非反相/上升沿和下降沿均触发
        电路对 TIxFP1 上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1 未反相(在门控模式下执行触发操作)。编码器模式下不得使用此配置。
  • 位 12、8、4、0 CCxE:捕获 /比较 x 输出使能 (Capture/Comparex output enable)。

    • CCx 通道配置为输出

      • 0:关闭––OCx 未激活
      • 1:开启––在相应输出引脚上输出 OCx信号
    • CCx 通道配置为输入

      此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄存器 1 (TIMx_CCR1) 中。

      • 0:禁止捕获
      • 1:使能捕获

3.3 DMA/中断使能寄存器DIER

我们需要用到中断来处理捕获数据,所以必须开启通道 1 的捕获比较中断,即 CC1IE 设置为 1 。

  • 位 15、13、7、5 保留,必须保持复位值。
  • 位 14 TDE:触发 DMA 请求使能 (Trigger DMA request enable)
  • 位 12~位9 CCxDE:捕获/比较x DMA 请求使能 (Capture/Compare 1 DMA request enable)
  • 位 8 UDE:更新 DMA 请求使能 (Update DMA request enable)
  • 位 6 TIE:触发信号(TRGI)中断使能 (Trigger interrupt enable)
  • 位 4~位1 CCxIE:捕获/比较x 中断使能 (Capture/Compare 1 interrupt enable)
  • 位 0 UIE:更新中断使能 (IC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
    }
    else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
    {
     
    1. /@@*省略...*/
    }
    }
    ```
 
  1. static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,uint16_t TIM_ICFilter)
  2. {
  3. uint16_t tmpccmr1 = 0, tmpccer = 0;
  4.  
  5. /@@* 关闭通道1: 复位CC1E位 */
  6. TIMx->CCER &= (uint16_t)~TIM_CCER_CC1E;
  7. tmpccmr1 = TIMx->CCMR1;
  8. tmpccer = TIMx->CCER;
  9.  
  10. /@@* 通过设置CC1S选择为输入模式, 并配置滤波器 */
  11. tmpccmr1 &= ((uint16_t)~TIM_CCMR1_CC1S) & ((uint16_t)~TIM_CCMR1_IC1F);
  12. tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
  13.  
  14. /@@* 选择CC1P极性并设置CC1E位 */
  15. tmpccer &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  16. tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
  17.  
  18. /@@* 写数据到 TIMx 的CCMR1 和 CCER 寄存器 */
  19. TIMx->CCMR1 = tmpccmr1;
  20. TIMx->CCER = tmpccer;
  21. }
 
  1. void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
  2. {
  3. TIMx->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC; /@@* 复位IC1PSC位 */
  4. TIMx->CCMR1 |= TIM_ICPSC; /@@* 设置IC1PSC值 */
  5. }
  • 关于配置DIER寄存器

TIM_ITConfig函数对于中断的开启,其实就是操作DIER寄存器:

 
  1. void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
  2. {
  3. if (NewState != DISABLE)
  4. { /@@* 使能中断 */
  5. TIMx->DIER |= TIM_IT;
  6. }
  7. else
  8. { /@@* 失能中断 */
  9. TIMx->DIER &= (uint16_t)~TIM_IT;
  10. }
  11. }

4.1.4 定时器中断初始化

定时器中断的使能设置已在上面的定时器配置中设置,这里只是进行常规的配置定时器中断的优先级:

 
  1. /@@*定时器中断配置*/
  2. NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
  3. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级3
  4. NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级3
  5. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
  6. NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

4.2 定时器中断服务函数

此处用到了两个全局变量,用于辅助实现高电平捕获。其中:

  • TIM5CH1_CAPTURE_VAL用来记录捕获到下降沿的时候 TIM5_CNT的值。
  • TIM5CH1_CAPTURE_STA用来记录捕获状态,我们把它当成一个寄存器那样来使用 。其各位描述下:

 
  1. u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态(当中一个自制的寄存器使用,初始为0)
  2. u32 TIM5CH1_CAPTURE_VAL; //输入捕获值(TIM2/TIM5是32位)
  3.  
  4. /@@**
  5. * @brief 定时器5中断服务程序
  6. */
  7. void TIM5_IRQHandler(void)
  8. {
  9. if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 (1000 0000)
  10. {
  11. /@@*定时器溢出中断*/
  12. if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
  13. {
  14. if(TIM5CH1_CAPTURE_STA&0X40)/@@* 之前标记了开始信号(0100 0000) */
  15. {
  16. if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F) /@@* 高电平太长了,计数溢出了 (0011 1111) */
  17. {
  18. TIM5CH1_CAPTURE_STA|=0X80; /@@* (强制)标记成功捕获了一次 (1000 0000) */
  19. TIM5CH1_CAPTURE_VAL=0XFFFFFFFF; /@@* 因为溢出次数N不能再加了,就将当前的捕获值设置为32位的最大值,等效Nmax+1*/
  20. }
  21. else /@@* 正常情况是不会溢出,最终得出正确的高电平时间 */
  22. {
  23. TIM5CH1_CAPTURE_STA++; /@@* 累计定时器溢出次数N */
  24. }
  25. }
  26. else
  27. {
  28. /@@* 还没有捕获到信号时,定时器溢出后什么也不做,自己清零继续计数即可 */
  29. }
  30. }
  31.  
  32. /@@*捕获1发生捕获事件*/
  33. if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)
  34. {
  35. /@@*捕获到一个下降沿(结束信号)*/
  36. if(TIM5CH1_CAPTURE_STA&0X40) /@@* 之前标记了开始信号(0100 0000) */
  37. {
  38. TIM5CH1_CAPTURE_STA|=0X80; /@@* 标记成功捕获到一次高电平脉宽 (1000 0000) */
  39. TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5); /@@* 获取当前的捕获值 */
  40. TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); /@@* CC1P=0 重新设置为上升沿捕获,用于下次捕捉信号 */
  41. }
  42. /@@*还未开始,第一次捕获 上升沿(起始信号) */
  43. else
  44. {
  45. TIM5CH1_CAPTURE_STA=0; /@@* 清空 捕获状态寄存器 */
  46. TIM5CH1_CAPTURE_VAL=0; /@@* 清空 捕获值 */
  47. TIM5CH1_CAPTURE_STA|=0X40; /@@* 标记捕获到了上升沿 (0100 0000) */
  48.  
  49. TIM_Cmd(TIM5,DISABLE ); /@@* 关闭定时器5 */
  50. TIM_SetCounter(TIM5,0); /@@* 清空CNT,重新从0开始计数 */
  51. TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); /@@* CC1P=1 设置为下降沿捕获 */
  52. TIM_Cmd(TIM5,ENABLE ); /@@* 使能定时器5 */
  53. }
  54. }
  55. }
  56. TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
  57. }

再来对比一下这张图:

  • 初始化时设置为上升沿触发,触发后(起始信号),清空CNT,重新从0开始计数,并设置为下降沿捕获
  • 在之后的过程中可能会有多次定时器计数溢出,即TIM5CH1_CAPTURE_STA++(使用低6位),也即N的值
  • 最后捕捉到下降沿(结束信号),TIM5CH1_CAPTURE_VAL获取当前CNT的值,也即CCRx2的值

再看主函数中:

 
  1. while(1)
  2. {
  3. /@@* 成功捕获到了一次高电平 (1000 0000) */
  4. if(TIM5CH1_CAPTURE_STA&0X80)
  5. {
  6. temp=TIM5CH1_CAPTURE_STA&0X3F; /@@* 获取溢出的次数N (0011 1111) */
  7. temp*=0XFFFFFFFF; /@@* 溢出时间总和 = N*溢出计数值 */
  8. temp+=TIM5CH1_CAPTURE_VAL; /@@* 总的高电平时间 = 溢出时间总和 + 下降沿时的计数值*/
  9.  
  10. printf("HIGH:%lld us\r\n",temp); //打印总的高点平时间
  11. TIM5CH1_CAPTURE_STA=0; //开启下一次捕获
  12. }
  13. }

当检查TIM5CH1_CAPTURE_STA为捕获到1次高电平后,打印高电平的持续时间:

  • 总的高电平时间 =N(TIM5CH1_CAPTURE_STA的低6位) ARR(溢出计数值)+ *CCRx2(下降沿时的计数值)

附:一些寄存器简写的全称

  • ARR:auto-reload register 自动重载寄存器

  • CCR:capture/compare register 捕获/比较寄存器

  • PSC:prescaler 预分频器

  • CNT:counter 计数器

  • SR:status register 状态寄存器

  • CCMR:capture/compare mode register 捕获/比较模式寄存器

    • CC1S:Capture/Compare 1 selection 捕获/比较1模式选择

    • OC1M: Output compare 1 mode 输出比较1模式

    • OC1PE:Output compare 1 preload enable 输出比较1预装载使能
    • IC1F:Input capture 1 filter 输入捕获1滤波器
    • IC1PSC:Input capture 1 prescaler 输入捕获1预分频器
  • CCER:capture/compare enable register 捕获/比较使能寄存器

    • CC1P:Capture/Comparex output Polarity 捕获 /比较1输出极性
    • CC1E:Capture/Comparex output enable 捕获 /比较1输出使能
  • SMCR:slave mode control register 从模式控制寄存器

  • DCR:DMA control register DMA 控制寄存器

  • DIER:DMA/Interrupt enable register DMA/中断使能寄存器

  • DMAR:DMA address for full transfer 全传输 DMA 地址

  • OR:option register 选项寄存器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

电机控制基础——定时器捕获单输入脉冲原理 的相关文章

  • 电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中 电机的控制与定时器有着密不可分的关系 无论是直流电机 步进电机还是舵机 都会用到定时器 比如最常用的有刷直流电机 会使用定时器产生PWM波来调节转速 通过定时器的正交编码器接口来测量转速等 本篇先介绍定时器的基础知识 然后对照
  • 舵机的使用方法和一些注意事项

    舵机是我们经常使用的一个工具 它可以说是直流电机的进化版本 只需要一根信号线就能方便的控制舵机旋转固定的角度 下面我们就来看一看舵机的使用方法和一些使用过程中的注意事项 一般的舵机总共有三条线 电源线 供电线 和信号线 其中红色的是电源正极
  • 电机矢量控制方法

    在工业控制领域 电动机是一个重要的研究方向 发电厂60 的能量都去驱动电动机来为人类服务 可见电机的控制在工业以及军事方面的重要性 电动机分为直流电机和交流电机 而交流电机包括同步交流电机和异步交流电机 同步电动机和异步电动机的区别在于 同
  • 【转】伺服电机三环控制的原理(位置环,运动环,电流环)

    运动伺服一般都是三环控制系统 从内到外依次是电流环速度环位置环 1 首先电流环 电流环的输入是速度环PID调节后的那个输出 我们称为 电流环给定 吧 然后呢就是电流环的这个给定和 电流环的反馈 值进行比较后的差值在电流环内做PID调节输出给
  • 感应(异步)电机磁场定向控制速度环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 目录 电机控制系列文章 前言 一 速度环开环传递函数 二 速度环开环传递函数零极点配置 三 速度环闭环性能
  • FPGA实现ADC采样芯片ADS8688的采样

    在电机控制中 一般需要对电机三相电流Iu Iv Iw采样 并通过采样补偿 坐标变换等将采样电流反馈值输出到电流环闭环控制 中 除此之外 还需要对母线电压 驱动器温度进行采样 监控采样值 以此为根据 来对运行中的驱动器做过压 过温保护 ADS
  • 使用STM32F4XX自带数学库“arm_math.h“

    使用STM32F4XX自带数学库 arm math h STM32 F4属于Cortex M4F构架 这与M0 M3的最大不同就是具有FPU 浮点运算单元 支持浮点指令集 因此在处理数学运算时能比M0 M3高出数十倍甚至上百倍的性能 但是要
  • 感应(异步)电机无速度传感器技术—TI例程解析

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 感应 异步 电机磁场定向控制速度环PI控制参数设计 感应 异步 电机无速度传感器技术 电压模型法 目录 电
  • PCB板上字母的含义

    阅读PCB板子文件 发现板子上字母的大致符合表中规律 PCB板上 字母 数字 如R16 C16 表示的含义 一般数字表示出现的次数 字母表示的意义如下 字母 含义 R 电阻 C 电容 K 继电器 L 电感 U 整流器 字母的意义并非始终与表
  • SVPWM的一些参数

    SVPWM的一些参数 1 直流母线电压利用率 一般我们所说的电压利用率是指逆变器输出线电压的基波幅值与直流母线电压之比值 可以看出 电压利用率并不是一个恒定值 因为逆变器输出线电压的基波幅值是变化的 因此一般只讨论最高电压利用率 SVPWM
  • AMS磁编码器:AS5048与AS5047区别,伺服电机闭环系统位置反馈

    本文只简介 AMS的磁编码器 其他厂商磁编IC见另一篇 https blog csdn net Mark md article details 100181701 新增补了一篇 详细介绍了GMR磁编码器原理 同类对比优劣 安装方式 设计注意
  • 控制器分析-绘制伯德图

    控制器分析 绘制伯德图 设计控制器 需要利用伯德图工具分析控制器的相频特性与幅频特性 本文提供了两种绘制伯德图的方法 第一种是利用MATLAB内置的函数绘制 第二种是自己编写的代码 由于最开始第一种方法获得的图片属性不满意 如坐标轴字体大小
  • 感应(异步)电机磁场定向控制MATLAB/Simulink建模

    电机控制系列文章 感应 异步 电机磁场定向控制电流环PI控制参数设计 感应 异步 电机磁场定向控制速度环PI控制参数设计 目录 电机控制系列文章 前言 一 控制器与被控对象的采样周期 二 系统解算器设置 三 被控对象建模 四 控制器建模 1
  • STM32 电机教程 33 - 无刷电机无感控制快速实现

    前言 上一节 STM32 电机教程 32 基于ST X CUBE SPN7 无刷无感电机库的电机驱动实现 给大家分享了ST的官方的无刷电机无感控制实现方案 基于NUCLEO F103RB和X NUCLEO IHM07M1 3SH开发板 并给
  • ODrive踩坑(五)ODrive驱动云台电机、低齿槽转矩电机实现高精度定位

    前几篇介绍了ODrive在Windows下的使用环境搭建 驱动3508 5008无刷电机 TLE5012B AS5047P的ABI编码器配置 AS5047P SPI绝对值编码器配置 ODrive踩坑 一 windows下使用环境的搭建 od
  • STM32 电机教程 30 - 无刷无感入门2

    前言 无刷直流 Brushless Direct Current BLDC 电机是一种正快速普及的电机类型 它可在家用电器 汽车 航空航天 消费品 医疗 工业自动化设备和仪器等行业中使用 正如名称指出的那样 BLDC 电机不用电刷来换向 而
  • MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600

    MT6701是麦歌恩 MagnTek 公司的磁性角度传感器芯片 提供14Bit 0 360 单圈绝对角度检测 拥有 ABZ PWM 模拟量 I2C SSI 等多种信息输出方式 还可根据磁场强度的瞬时变化提供非接触式按压检测功能 能够以较低的
  • 基于STM32F4单片机对步进电机的控制(有代码)

    步进电机简介 步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件 又称为脉冲电机 在驱动电源的作用下 步进电机受到脉冲的控制 其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比 步进电机每接收一个电脉冲 转
  • 感应(异步)电机磁场定向控制电流环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制速度环PI控制参数设计 目录 电机控制系列文章 前言 一 并联型PI与串联型PI 二 被控对象模型 三 电流环闭环传递函数 四 电
  • 【三电平SVPWM学习

    导读 本期对三电平SVPWM的原理和建模做一个简单介绍 并与两电平SVPWM做了一个对比 后面把三电平的SVPWM运用到异步电机直接转矩控制中 看与传统的两电平SVPWM 控制性能是否得到改善 模型可分享 关注公众号 浅谈电机控制 留下邮箱

随机推荐

  • 刷脸支付优化用户体验赋能商家运营

    从前我们还在说以后要是能靠脸吃饭就好了 时至今日刷脸支付的到来 真正的可以实现靠脸吃饭了 刷脸支付用户两年或超7 6亿 2022年中国刷脸支付用户规模将突破7 6亿 刷脸支付同时具备优化用户体验和赋能商家运营的作用 在各大平台加速推广的情况
  • springboot整合jett实现模板excel数据导出

    一 jett的介绍 1 1 介绍 jett是使用Excel电子表格模板快速创建Excel电子表格报告的工具 1 2 使用方式 1 使用 来标识我们需要填充的数据 2 使用
  • 多个版本的python共存,以及怎么使用不同版本的pip

    一 安装2 7 3 6 8 3 8 5三个版本的python 安装过程略 注意 添加上环境变量就行 二 实现多版本共存 1 修改python2的文件名 进入Python2 7安装目录找到如图内容 把python exe重命名为python2
  • redis中hash表内容删除的方法代码

    hash Redis hash是一个string类型的field和value的映射表 hash特别适合用于存储对象 Redis 中每个hash可以存储 232 1键值对 40多亿 实例 127 0 0 1 6379 gt HMSET run
  • 毕业设计-基于BP神经网络预测系统的设计- MATLAB

    目录 前言 课题背景和意义 实现技术思路 一 神经网络 三 图形用户界面的实现 四 神经网络预测系统的设计 五 神经网络预测系统的性能和特点 部分源代码 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业
  • vue开发调试

    1 调试方式 1 1 为什么调试 当遇到应用逻辑出现错误 但又无法准确定位的时候 同后台项目开发一样 可以在JS实现的应用逻辑中设置断点 并进行单步 进入方法内 跳出方法等调试 从而准确定位问题根源 1 2 调试方法 本文主要讲两种方式 d
  • Linux系统安装配置curl

    1 获得安装包 从网上直接下载或者其他途径 这里直接wget wget http curl haxx se download curl 7 20 0 tar gz 2 解压到当前目录 或者 http www linuxidc com Lin
  • 贝叶斯方法应用:检测时间序列拐点

    随着时间推移 制造设备比如贴片机的位置由于各种原因会产生小的偏差 这些偏差可能是阶跃 也有可能是渐变的形式 由于偏差值很小 产线的自动光学检测设备并不会报警 然而小的偏差如果不经处理 经过一定时间累积会产生较大偏差 影响产品质量 为了能够提
  • 最好看的代码雨特效

    上代码
  • 2010年10大热门的开源NoSQL服务器软件

    NoSQL 就是反SQL 是一项全新的数据库革新运动 特别是在 2010 年得以迅猛发展 而各种开源的 NoSQL 软件突然间涌现在你面前 目前似乎没有对 NoSQL 给出一个标准的定义 也没有相应的规范 但从这些软件可以看出 NoSQL
  • WCF 第五章 一个单一实例中的多线程

    默认的InstanceContextMode行为设置指导WCF为每个请求创建一 个新的服务实例 然后在很多情况下 这不是最好的解决方案 例如 如果一个服务有一个代价很高的例行初始化 比如 一个构造器从一个数据库读取数据或者创 建一个大的内存
  • Linux OpenGauss 数据库远程连接

    目录 前言 1 Linux 安装 openGauss 2 Linux 安装cpolar 3 创建openGauss主节点端口号公网地址 4 远程连接openGauss 5 固定连接TCP公网地址 6 固定地址连接测试 前言 openGaus
  • carla二次开发(一)自定义创建地图

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 为什么创建carla地图很困难 二 官方创建方法 三 blender插件创建地图 四 City Engine创建地图 五 ue4创建地图 前言 carla
  • 某A类网络10.0.0.0的子网掩码255.224.0.0,请确定可以划分的子网个数,写出每个子网的子网号及每个子网的主机范围。

    某A类网络10 0 0 0的子网掩码255 224 0 0 请确定可以划分的子网个数 写出每个子网的子网号及每个子网的主机范围 可以确定划分的子网有2 3 2 6个 子网号 10 32 0 0主机范围 10 32 0 1 10 63 255
  • 数据结构计算题

    1 将下列函数按它们在 n 时的无穷大阶数 从小到大排列 n n n3 7n5 nlogn 2n 2 n3 log2n n1 2 log2n 3 2 n n n2 log2n 解答 log2n n1 2 log2n n nlog2n n2
  • c语言a b等于c的编程,简单的a+b (C语言代码)

    解题思路 题目中要求多次输入 所以需要一个死循环来进行控制 一般采用while 1 或者for 注意事项 scanf 函数需要加上取地址符 且它的返回值 它的返回值可以分成三种情况 1 正整数 表示正确输入参数的个数 例如执行 scanf
  • Java学习笔记——String类

    目录 API概述 案例 键盘录入字符串 String 概述 String类的常见构造方法 创建字符串对象的区别 String常见的面试题 字符串的比较 案例 用户登录 遍历字符串 案例 手机号屏蔽 字符串截取方法 案例 敏感词替换 字符串替
  • 决策树概述+模块介绍+重要参数(criterion+random_state&splitter+减枝参数+目标权重参数)+回归树(参数+实例+拟合正弦曲线)+泰坦尼克号生存者预测实例

    文章目录 什么是sklearn 一 决策树概述 一 概述 二 基础概念 三 决策树算法的核心是要解决两个问题 二 模块sklearn tree的使用 一 模块介绍 二 使用介绍 三 重要参数 一 criterion 二 random sta
  • JavaScript_day02

    文章目录 BOM与DOM操作 BOM操作 window子对象 history对象 location对象 掌握 弹出框 计时器相关 DOM操作 查找标签 节点操作 innerText 和 innerHTML 获取值操作 class css操作
  • 电机控制基础——定时器捕获单输入脉冲原理

    1 问题引出 在单片机与嵌入式开发中 某些场景需要捕获传感器的高电平 或低电平 信号的持续时间 如红外解码信号 编码器输入信号等 如下图 以单一的一段高电平输入信号为例 如何测量这段高电平的时间呢 从直观上理解 就是要不断的检测这个信号 当