CH32V208 内含OPA(运算放大器)可以作为比较器,以下相关实现比较器功能的相关记录。

1、引脚确认

每一个OPA有2套引脚,按需选择一套即可。
在这里插入图片描述


在这里插入图片描述
注: PA3 是OPA1_OUT0,也是可以配置为比较器的输出的。

2、接线

使用PPK2 提供2V电压,作为对比电压,接到OPA1_CH1P / N 任意一端,本次测试接到PA6上(即OPA1_CH1N)。

剩下的一端,接到 GND 或 3.3V,可以手动切换,做比较。
在这里插入图片描述

3、代码


/*********************************************************************
 * @fn      OPA1_Init
 *
 * @brief   Initializes OPA1 collection.
 *
 * @return  none
 */
void OPA1_Init( void )
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    OPA_InitTypeDef  OPA_InitStructure = {0};

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;   //PA6
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init( GPIOA, &GPIO_InitStructure );
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   //PB0
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init( GPIOB, &GPIO_InitStructure );

    OPA_InitStructure.OPA_NUM = OPA1;
    OPA_InitStructure.PSEL = CHP1;
    OPA_InitStructure.NSEL = CHN1;
    OPA_InitStructure.Mode = OUT_IO_OUT0;   //OUT0-PA3  OUT1-PB1
    OPA_Init( &OPA_InitStructure );
    OPA_Cmd( OPA1, ENABLE );

}


/*********************************************************************
 * @fn      main
 *
 * @brief   ADC_Channel0_Init
 *
 * @return  none
 */
int main( void )
{
    // u16 ADC_val, i;
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init( 115200 );
    printf( "SystemClk:%d\r\n", SystemCoreClock );
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

    printf( "OPA Test\r\n" );

    OPA1_Init();

    while (1) {
        ;;
    }

}

4、实验效果

概述:
PA6 输入2v,PB0人为控制接 GND 或 3.3V,可以用万用表测量输出端的电压PA3。


结果:
N端输入电压大于P端电压2V时,OPA_OUT端呈现低电平

N端输入电压小于P端电压2V时,OPA_OUT端呈现高电平

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐