- 2024-08-09
-
回复了主题帖:
LT8390输出不稳
1,建议先按照官方数据手册参考设计对一下原理图及元件参数,再对一下pcb布局,把参考设计调出来。核心元件mos及电容按照官方来。
- 2024-07-17
-
回复了主题帖:
线性稳压的偏置电阻计算
稳压二极管的电阻是你输入电压减去稳压二极管稳压除以稳压二极管的稳压电流本例稳压电阻应该是:Ib=(Vcc-0.6-18)/R6 才对;你的电路原理分析不对:这个电路是这样的,当VCC的电压<(18+0.6)V时。三极管输出电压跟随输入电压的。当大于18.6V时三极管输出电压约为18V(理论上时17.4V=18-0.6).Ib是三极管基极电流,IC三极管的集电极电流。这些知识大学模电都有。还是好好看看模电。
- 2024-03-26
-
回复了主题帖:
反激电源无限放电,输出电压会不会不断上升
电压不可能无限上升,变压器变比固定的。
- 2024-03-13
-
回复了主题帖:
开关电源的中部分元件的重要性
第一个原因可能是成本;感觉这就小厂的东西,工程师没有安规,emc,环路稳定性,动态响应这些知识储备,设计上也没有这个意识。更不用说各种保护电路设计。
- 2024-01-06
-
上传了资料:
智能车载座椅加热器
-
发表了主题帖:
智能车载座椅加热器——作品提交
智能车载座椅加热器
作者:蓝色天使
作品简介
智能车载座椅加热器:
“1”为蓝牙模块负责采集数据向手机端发送。
“2”NTC温度传感器负责对座椅温度的感知。
“3”STM32Demo 板负责采集温度传感器的数据并转化为温度,将实时温度通过串口经过蓝牙模块上传至手机APP,同时根据温度值控制座椅加热。
“4”座椅加热状态指示,为了更好展现加热过程控制速度。用LED灯来指示方便观察效果。
产品功能:北方冬天室外停车,早上座椅方向盘特别冷,为了提升用户驾驶体验,该系统就是根据用户驾驶习惯(需要用户端设置,服务器端发送,本例只做执行端),获取座椅温度,当座椅温度低于10摄氏度
启动加热功能,当温度接近20℃时候关闭加热。(以上功能根据服务器在用户定点用车前提前三分钟启动执行)待用户驾车时完成预加热功能。
系统框图
NTC温度传感器负责感知座椅温度,STM32核心板负责将NTC感知的电阻变化采集成数字量并对数字量的阻值转化为温度,同时将温度值通过蓝牙模块发送给手机APP端。另一方面将温度值转化为加热丝的控制量,根据加热丝的温度控制加热量。NTC作为控制量的输入端感知温度,核心板负责实时采集温度并将温度传给APPD端,同时控制PWM的输出。实现数据采集,数据上报,数据控制三方协同。
接口分配:
PC0主要负责NTC温度传感器ADC接口;
PC1是定时器TMI1的PWM输出通道2,来做温度控制。
PA15:用作系统运行状态指示。
PC10,PC11是串口打印输出及蓝牙接口输出。
各部分功能说明(图文结合)
这个是蓝牙端的温度实时显示。
当温度升高时候加热指示灯变暗。(加热变慢)
温度变低时候加热指示灯变亮。(加热加快)
四、作品源码:download.eeworld.com.cn/detail/蓝色天使/630682
五、作品视频:https://training.eeworld.com.cn/video/38959
六、项目总结
本项目我们用到硬件资源有STM32 定时器中断来实现子模块调度。ADC资源负责采集NTC温度传感器的电阻值,并将转换为温度值。串口URAT负责将温度值传给串口打印输出在PC端显示;同时输出给蓝牙模块上报到用户手机端。定时器PWM输出主要功能将温度值转化为座椅加热量,座椅温度越低加热量越大,座椅温度约高加热越慢,从而动态实现热平衡。实际产品可能会用到温度的PID调节来进一步增加用户体验。核心的两块儿就是温度采集,有可能需要多点温度采集及温度控制算法。本例只做一个基础功能演示。整体联动需要结合车载端的中控及云端服务器统一调度。
七、其他
感谢论坛大赛组的工作人员的大力支持!
- 2024-01-04
-
回复了主题帖:
Boost DCDC 关闭EN后仍有400mA电流
1,能否复现上述场景,此时用示波器测一下负载峰值电流,定量锁定必现的临界电流,与厂家FAE沟通对策,目前感觉你的峰值电流超过最大电流,引起误触发保护了。2,若负载端大电流状态只在负载启动出现可以加一个限流缓启动措施。3,可以找一个pin脚完全兼容其他品牌的IC测试一下,是不是ic设计的缺陷。4,选择直流电阻小的功率电感,选择esr小的滤波电容,加大滤波电容的容量,提升瞬态负载驱动能力。
- 2023-12-25
-
发表了主题帖:
智能车载座椅加热器——温度采集
板端串口温度输出;
蓝牙端数据
因为两者不是同时拍的温度有一点差异。
ADC代码:
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @File adc.c
* @brief This file provides code for the configuration
* of the ADC instances.
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "adc.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
ADC_HandleTypeDef hadc1;
/* ADC1 init function */
void MX_ADC1_Init(void)
{
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_MultiModeTypeDef multimode = {0};
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.GainCompensation = 0;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure the ADC multi-mode
*/
multimode.Mode = ADC_MODE_INDEPENDENT;
if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_6;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
/* USER CODE END ADC1_Init 2 */
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(adcHandle->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspInit 0 */
/* USER CODE END ADC1_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* ADC1 clock enable */
__HAL_RCC_ADC12_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**ADC1 GPIO Configuration
PC0 ------> ADC1_IN6
*/
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* USER CODE BEGIN ADC1_MspInit 1 */
/* USER CODE END ADC1_MspInit 1 */
}
}
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
{
if(adcHandle->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspDeInit 0 */
/* USER CODE END ADC1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_ADC12_CLK_DISABLE();
/**ADC1 GPIO Configuration
PC0 ------> ADC1_IN6
*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0);
/* USER CODE BEGIN ADC1_MspDeInit 1 */
/* USER CODE END ADC1_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
主函数端:
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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_USART3_UART_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
printf("温度值 = %f ℃\r\n", Get_Temp());
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
- 2023-12-17
-
发表了主题帖:
智能车载座椅加热器之蓝牙功能实现
作品简介
智能车载座椅加热器:
“1”为蓝牙模块负责采集数据向手机端发送。
“2”NTC温度传感器负责对座椅温度的感知。
“3”STM32Demo 板负责采集温度传感器的数据并转化为温度,将实时温度通过串口经过蓝牙模块上传至手机APP,同时根据温度值控制座椅加热。
“4”座椅加热状态指示,为了更好展现加热过程控制速度。用LED灯来指示方便观察效果。
产品功能:北方冬天室外停车,早上座椅方向盘特别冷,为了提升用户驾驶体验,该系统就是根据用户驾驶习惯(需要用户端设置,服务器端发送,本例只做执行端),获取座椅温度,当座椅温度低于10摄氏度
启动加热功能,当温度接近20℃时候关闭加热。(以上功能根据服务器在用户定点用车前提前三分钟启动执行)待用户驾车时完成预加热功能。
系统框图
NTC温度传感器负责感知座椅温度,STM32核心板负责将NTC感知的电阻变化采集成数字量并对数字量的阻值转化为温度,同时将温度值通过蓝牙模块发送给手机APP端。另一方面将温度值转化为加热丝的控制量,根据加热丝的温度控制加热量。NTC作为控制量的输入端感知温度,核心板负责实时采集温度并将温度传给APPD端,同时控制PWM的输出。实现数据采集,数据上报,数据控制三方协同。
各部分功能说明
蓝牙模块数据交互
目前已实现蓝牙模块的数据交互。
该部分核心代码如下:
#include "usart.h"
#include "stdio.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
UART_HandleTypeDef huart3;
/* USART3 init function */
void MX_USART3_UART_Init(void)
{
/* USER CODE BEGIN USART3_Init 0 */
/* USER CODE END USART3_Init 0 */
/* USER CODE BEGIN USART3_Init 1 */
/* USER CODE END USART3_Init 1 */
huart3.Instance = USART3;
huart3.Init.BaudRate = 9600;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART3_Init 2 */
/* USER CODE END USART3_Init 2 */
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspInit 0 */
/* USER CODE END USART3_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3;
PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* USART3 clock enable */
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**USART3 GPIO Configuration
PC10 ------> USART3_TX
PC11 ------> USART3_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* USER CODE BEGIN USART3_MspInit 1 */
/* USER CODE END USART3_MspInit 1 */
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspDeInit 0 */
/* USER CODE END USART3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART3_CLK_DISABLE();
/**USART3 GPIO Configuration
PC10 ------> USART3_TX
PC11 ------> USART3_RX
*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
/* USER CODE BEGIN USART3_MspDeInit 1 */
/* USER CODE END USART3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart3,(uint8_t*)&ch,1,0xffff);
return ch;
}
int fgetc(FILE * f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart3,(uint8_t*)&ch,1,0xffff);
return ch;
}
/* USER CODE END 1 */
- 2023-12-06
-
回复了主题帖:
【一起学电源吧】电源兴趣小组集合啦!这一次我们从基础开始
lansebuluo 发表于 2023-11-21 21:29
电感电流是不允许突变的,电感的两端电压 U = Omega * I * L,U有最大值,Omega不可能很大,电 ...
你理解非常正确,电感电流不能突变,电容电压不能突变。本讲里面可以这么理解开关管的电流就是输入电流。
- 2023-12-04
-
发表了主题帖:
【DigiKey创意大赛】智能车载座椅加热器 开箱贴
本帖最后由 蓝色天使 于 2023-12-4 19:52 编辑
感谢论坛提供一个动手机会,今天刚收到板子。下面展示以下得捷平台物料采购速度。
打开快递盒子快递快递联及订单明细。
本次用到两个物料。
ST的Demo板,会用到板子数据采集及转换,串口数据发送,定时器及PWM资源。
Tennsy主要用于与ST板子数据收发测试。最终会以手机端来读取ST板子实时数据。
接下来时间我会用逐个模块儿实现展示。谢谢!