硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3596|回复: 2
收起左侧

[运放/比较器] STM32H7的比较器消隐功能测试

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2018-9-18 12:25:28 | 显示全部楼层 |阅读模式
消隐功能用于消除尖峰脉冲(Blanking of comparator outputs)




测试例程:COMP_OutputBlanking

反向输入采用的内部参考电压Vrefint = 1.2V左右
正向输入采用的PB0,可通过PA9输出的4KHZ,75%占空比方波接入,波形由TIM1的CH2产生
比较器输出用的PE6引脚。

消隐源是通过TIM1的CH5产生,输出4KHz,占空比2000/50000。

消隐后的输出效果如下:
QQ截图20180918122422.png


禁止TIM5 CH5消隐源的输出后,效果也没问题,跟上面截图一样,看来是波形效果够好。






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
 楼主| 发表于 2018-9-18 15:21:29 | 显示全部楼层
补上配置代码,方便以后查阅:

  1. /* Private typedef -----------------------------------------------------------*/
  2. /* Private define ------------------------------------------------------------*/
  3. /* Private macro -------------------------------------------------------------*/
  4. /* Private variables ---------------------------------------------------------*/
  5. COMP_HandleTypeDef   CompxHandle;
  6. TIM_HandleTypeDef    PWM_Handle;

  7. __IO uint32_t State = 0;

  8. /* Private function prototypes -----------------------------------------------*/
  9. static void SystemClock_Config(void);
  10. static void COMPx_Config(void);
  11. static void TIM1_Config(void);
  12. static void Error_Handler(void);
  13. static void CPU_CACHE_Enable(void);
  14. /* Private functions ---------------------------------------------------------*/

  15. /**
  16.   * @brief  Main program.
  17.   * @param  None
  18.   * @retval None
  19.   */
  20. int main(void)
  21. {
  22.   
  23.   /* Enable the CPU Cache */
  24.   CPU_CACHE_Enable();
  25.   /* STM32H7xx HAL library initialization:
  26.        - Systick timer is configured by default as source of time base, but user
  27.          can eventually implement his proper time base source (a general purpose
  28.          timer for example or other time source), keeping in mind that Time base
  29.          duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
  30.          handled in milliseconds basis.
  31.        - Set NVIC Group Priority to 4
  32.        - Low Level Initialization
  33.      */
  34.   HAL_Init();

  35.   /* Configure the system clock to 400 MHz */
  36.   SystemClock_Config();

  37.   /* Initialize LED3  */

  38.   BSP_LED_Init(LED3);

  39.   /* configure COMPx : output redirected to TIM1 BKIN and blanking source is TIM1 OC5 */
  40.   COMPx_Config();

  41.   /* TIM1 Configuration in PWM mode */
  42.   TIM1_Config();
  43.   
  44.   /* Infinite loop */
  45.   while (1)
  46.   {
  47.   }
  48. }

  49. /**
  50.   * @brief  Configure COMPx
  51.   * @param  None
  52.   * @retval None
  53.   */
  54. static void COMPx_Config(void)
  55. {

  56.   /*##-1- Configure the COMPx peripheral ###################################*/
  57.   /* COMPx init: COMPx Output is connected to GPIO only (not redirected     */
  58.   /* to timers) and output blanking source is connected to                  */
  59.   /* TIM1 OC5.                                              */
  60.   CompxHandle.Instance = COMPx;

  61.   CompxHandle.Init.InvertingInput    = COMP_INPUT_MINUS_VREFINT;
  62.   CompxHandle.Init.NonInvertingInput = COMP_INPUT_PLUS_IO1;

  63.   CompxHandle.Init.BlankingSrce      = COMP_BLANKINGSRC_TIM1_OC5;
  64.   CompxHandle.Init.OutputPol         = COMP_OUTPUTPOL_NONINVERTED;

  65.   CompxHandle.Init.Mode              = COMP_POWERMODE_HIGHSPEED;
  66.   CompxHandle.Init.Hysteresis        = COMP_HYSTERESIS_NONE;
  67.   CompxHandle.Init.WindowMode        = COMP_WINDOWMODE_DISABLE;
  68.   CompxHandle.Init.TriggerMode       = COMP_TRIGGERMODE_NONE;
  69.   HAL_COMP_Init(&CompxHandle);

  70.   /*##-2- Start the comparator process #####################################*/
  71.   /* Enable COMPx: the higher threshold is set to VREFINT ~ 1.22 V */
  72.   HAL_COMP_Start(&CompxHandle);
  73. }

  74. /**            
  75.   * @brief  TIM1 Configuration 2 and channel 5 in PWM mode
  76.   * @note   TIM1 configuration is based on APB1 frequency
  77.   * @note   TIM1 Update event occurs each SystemCoreClock/FREQ   
  78.   * @param  None
  79.   * @retval None
  80.   */
  81. void TIM1_Config(void)
  82. {
  83.   TIM_OC_InitTypeDef    TIMPWM_Config;
  84.   
  85.   /*##-1- Configure the TIM peripheral #######################################*/
  86.   /* Configure TIM1 */
  87.   /* PWM configuration */
  88.   PWM_Handle.Instance = TIM1;
  89.   
  90.   /* Time Base configuration */
  91.       
  92.   PWM_Handle.Init.Period = 49999;         
  93.   PWM_Handle.Init.Prescaler = 0;      
  94.   PWM_Handle.Init.ClockDivision = 0;   
  95.   PWM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
  96.   PWM_Handle.Init.RepetitionCounter = 0;
  97.   HAL_TIM_PWM_Init(&PWM_Handle);
  98.   
  99.   /*##-2- Configure the PWM Output Capture ########################################*/  
  100.   /* PWM Output Capture configuration of TIM1 channel 2 */
  101.   /* Duty cycle is pulse/period = 100 * (37500 / 50000) =  75% */
  102.   TIMPWM_Config.OCMode  = TIM_OCMODE_PWM1;
  103.   TIMPWM_Config.OCIdleState = TIM_OCIDLESTATE_RESET;
  104.   TIMPWM_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  105.   TIMPWM_Config.Pulse = 37500;
  106.   TIMPWM_Config.OCPolarity = TIM_OCPOLARITY_HIGH;
  107.   TIMPWM_Config.OCNPolarity = TIM_OCNPOLARITY_LOW;
  108.   TIMPWM_Config.OCFastMode = TIM_OCFAST_DISABLE;
  109.   if(HAL_TIM_PWM_ConfigChannel(&PWM_Handle, &TIMPWM_Config, TIM_CHANNEL_2) != HAL_OK)
  110.   {
  111.     /* Initialization Error */
  112.     Error_Handler();
  113.   }
  114.   
  115.   /*##-2- Configure the PWM Output Capture ########################################*/  
  116.   /* PWM Output Capture configuration of TIM1 channel 5 */
  117.   /* Channel 5 is an internal channel (not available on GPIO): */

  118.   TIMPWM_Config.OCMode  = TIM_OCMODE_PWM1;
  119.   TIMPWM_Config.OCIdleState = TIM_OCIDLESTATE_RESET;
  120.   TIMPWM_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  121.   TIMPWM_Config.Pulse = 2000;
  122.   TIMPWM_Config.OCPolarity = TIM_OCPOLARITY_HIGH;
  123.   TIMPWM_Config.OCNPolarity = TIM_OCNPOLARITY_LOW;
  124.   TIMPWM_Config.OCFastMode = TIM_OCFAST_DISABLE;
  125.   if(HAL_TIM_PWM_ConfigChannel(&PWM_Handle, &TIMPWM_Config, TIM_CHANNEL_5) != HAL_OK)
  126.   {
  127.     /* Initialization Error */
  128.     Error_Handler();
  129.   }
  130.   
  131.   /*##-3- Enable TIM peripheral counter ######################################*/
  132.   /* Start the TIM1 Channel 2 PWM */
  133.   if(HAL_TIM_PWM_Start(&PWM_Handle, TIM_CHANNEL_2) != HAL_OK)
  134.   {
  135.     Error_Handler();
  136.   }
  137.   
  138.   /* Start the TIM1 Channel 5 PWM */
  139.   if(HAL_TIM_PWM_Start(&PWM_Handle, TIM_CHANNEL_5) != HAL_OK)
  140.   {
  141.    Error_Handler();
  142.   }
  143. }
复制代码


回复

使用道具 举报

610

主题

3052

回帖

4902

积分

至尊会员

积分
4902
发表于 2018-9-18 16:55:43 | 显示全部楼层
高大上啊,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 23:33 , Processed in 0.257851 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表