HAL STM32G4内部运放的使用

HAL STM32G4内部运放的使用


  • ✨继欧拉电子无刷电机驱动相关视频学习,STM32G4内部运放的使用。主要是为了采集无刷电机,三相MOS管驱动端,下端MOS管的电流采样。

  • 🍁内部运放电路与外部电路连接参考
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 🌿电流计算公式:
    在这里插入图片描述

R58.R59作用是为了输入的正向端和负向端输入阻抗匹配;R52,R53为分压电阻,作用是将输入正向端电压正向偏置1.65V; R56与R59形成负反馈增益.

在这里插入图片描述

  • 三相电路采样电路:
    在这里插入图片描述
  • 🌿设计参考:ST文件《AN5397: Current Sensing in motion control applications》(第十页):https://www.st.com/content/st_com/zh/search.html#q=AN5397-t=resources-page=1
    在这里插入图片描述

📝代码完善

-🌿main程序

float temp[5];
uint8_t TempData[24] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x7F}; //vofa+ float数据流显示格式
int main(void)
{
    /* USER CODE BEGIN 1 */
    // float temp[5];
    //	uint8_t TempData[12];//16  ADC:12;PWM:16 OPM:24

    /* USER CODE END 1 */

    /* MCU Configuration--------------------------------------------------------*/

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* USER CODE BEGIN Init */

    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* USER CODE BEGIN SysInit */

    /* USER CODE END SysInit */

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_DMA_Init();
    MX_USART1_UART_Init();
    MX_ADC1_Init();
    MX_ADC2_Init();
    MX_OPAMP1_Init();
    MX_OPAMP2_Init();
    MX_OPAMP3_Init();
    /* USER CODE BEGIN 2 */

    //HAL_UART_Receive_IT(&huart3,(uint8_t *)&aRxBuffer,1);

    HAL_OPAMP_Start(&hopamp1);	//使能内部运放功能
    HAL_OPAMP_Start(&hopamp2);
    HAL_OPAMP_Start(&hopamp3);

    HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);//ADC自校验
    HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while(1) {
        /* USER CODE END WHILE */

        /* USER CODE BEGIN 3 */
        HAL_ADC_Start(&hadc1);
        HAL_ADC_Start(&hadc2);
        HAL_ADCEx_InjectedStart_IT(&hadc1);
        HAL_ADCEx_InjectedStart_IT(&hadc2);
        //Vstep = Vref(3.3) / 4095=8.056mV
        temp[0] = HAL_ADC_GetValue(&hadc1) * 8.056f; //ADC1.AIN11->PB12
        temp[1] = HAL_ADC_GetValue(&hadc2) * 8.056f; //ADC2.AIN1->PA0
        memcpy(TempData, (uint8_t*)temp, sizeof(temp));
        HAL_UART_Transmit_DMA(&huart1, (uint8_t *)TempData, 24);
        HAL_Delay(50);

        //	temp[0]=HAL_ADC_GetValue(&hadc1);
        //	temp[1]=HAL_ADC_GetValue(&hadc2)*0.02094726f;

    }
    /* USER CODE END 3 */
}
  • 🌿ADC中断回调
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    UNUSED(hadc);
    if(hadc == &hadc1) {
        temp[2] = hadc1.Instance->JDR1;
        temp[2] = (temp[2] - 0x7ef) * 0.193359375f;//0x7ef:1.65偏置电压对应的模拟值
        temp[3] = hadc1.Instance->JDR2;
        temp[3] = (temp[3] - 0x7f5) * 0.193359375f;
    }
    if(hadc == &hadc2) {
        temp[4] = hadc2.Instance->JDR1;
        temp[4] = (temp[4] - 0x7e8) * 0.193359375f;
    }

}

📚程序资料

  • 🔖原理图资料,但是不是视频中的原理图。
链接: https://pan.baidu.com/s/1MaD5y-A9-BfKF9wfpH-Zcw?pwd=n63f 
提取码: n63f
  • 🔖仅供个人学习参考。
链接:https://pan.baidu.com/s/1dSGNdU5NFTHDcuc57QFzkA?pwd=0xel 
提取码:0xel
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值