嘉立创产业服务站群
发作品签到
专业版

简易电压电流表

工程标签

100
0
0
0

简介

基于立创地文星CW32F030C8T6的简易电压电流表。

简介:基于立创地文星CW32F030C8T6的简易电压电流表。
电压电流表训练营【立创开发板&CW32】

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2024-07-22 13:08:26更新时间:2024-08-21 09:57:48

描述

1.硬件设计

  1. 基于官方原理图,进行了修改。
  2. 使用LCD1602替换数码管。
    1.png
  3. 增加了按键控制继电器切换电压电流的功能。

1.png
4. 去除了部分模块。

1.png
5. 增加了type-c输入。

1.png
6. 大都为直插器件,方便焊接。

2.软件设计

  • 使用了定时器触发ADC+DMA转运
void AD_GPIO_Init(void)
{
	__RCC_GPIOA_CLK_ENABLE();     // 开启GPIOA时钟
	__RCC_GPIOB_CLK_ENABLE();     // 开启GPIOB时钟
	
	PA00_ANALOG_ENABLE();					// PA0设定为模拟输入
	PA01_ANALOG_ENABLE();					// PA1设定为模拟输入
	PA01_ANALOG_ENABLE();					// PA2设定为模拟输入
	PB11_ANALOG_ENABLE();					// PB11设定为模拟输入
	
}
// ADC配置
void AD_Init(void)
{
	__RCC_ADC_CLK_ENABLE();      	// 开启ADC时钟
	ADC_DeInit();		
	
	ADC_SerialChTypeDef ADC_SerialChStruct;									// ADC序列配置
	
	ADC_SerialChStruct.ADC_SqrEns = ADC_SqrEns03;						// 转换 SQR0,SQR1,SQR2,SQR3
	
	ADC_SerialChStruct.ADC_InitStruct.ADC_OpMode = ADC_SerialChScanMode;		// 序列扫描转换模式
	ADC_SerialChStruct.ADC_InitStruct.ADC_ClkDiv = ADC_Clk_Div128;					// ADC时钟频率 = PCLK / 4 = 64MHz / 4 = 16MHz
	ADC_SerialChStruct.ADC_InitStruct.ADC_SampleTime = ADC_SampTime10Clk;		// 采样时间->10个ADC时钟周期
	ADC_SerialChStruct.ADC_InitStruct.ADC_VrefSel = ADC_Vref_VDDA;					// VDDA参考电压
	ADC_SerialChStruct.ADC_InitStruct.ADC_InBufEn = ADC_BufDisable;					// 关闭输入缓冲器(跟随器),在不需要额外驱动能力或增益时使用
	ADC_SerialChStruct.ADC_InitStruct.ADC_TsEn = ADC_TsDisable;							// 关闭内置温度传感器
	ADC_SerialChStruct.ADC_InitStruct.ADC_DMAEn = ADC_DmaEnable;						// ADC转换完成触发DMA传输
	ADC_SerialChStruct.ADC_InitStruct.ADC_Align = ADC_AlignRight;						// ADC转换结果右对齐
	ADC_SerialChStruct.ADC_InitStruct.ADC_AccEn = ADC_AccDisable;						// 禁止结果累加功能,每次转换的结果不会与前一次的结果相加。
	
	ADC_SerialChScanModeCfg(&ADC_SerialChStruct);														// ADC序列扫描转换模式配置
	
	// 配置通道
	CW_ADC->SQR_f.SQR0 = ADC_ExInputCH0;																		// PA0
	CW_ADC->SQR_f.SQR1 = ADC_ExInputCH1;																		// PA1
	CW_ADC->SQR_f.SQR2 = ADC_ExInputCH2;																		// PA2
	CW_ADC->SQR_f.SQR3 = ADC_ExInputCH12;																		// PB11
	
	ADC_ExtTrigCfg(ADC_TRIG_GTIM2, ENABLE);																	// ADC外部中断触发源配置 定时器2触发
}

// ADC DMA配置
void AD_DMA_Init()
{
	__RCC_DMA_CLK_ENABLE();       // 使能DMA时钟
	DMA_DeInit(CW_DMACHANNEL1);
	
	DMA_InitTypeDef DMA_InitStruct;        														// DMA初始化结构体
	DMA_StructInit(&DMA_InitStruct); 																	// 使用默认参数填充DMA初始化结构体

	DMA_InitStruct.DMA_Mode = DMA_MODE_BLOCK;                        	// 使用BLOCK触发 非锁定传输
	DMA_InitStruct.DMA_TransferWidth = DMA_TRANSFER_WIDTH_32BIT;     	// 数据宽度为12Bit
	DMA_InitStruct.DMA_SrcInc = DMA_SrcAddress_Increase;              // ADC外设地址固定
	DMA_InitStruct.DMA_DstInc = DMA_DstAddress_Increase;             	// 目标地址自动增加
	DMA_InitStruct.DMA_TransferCnt = 4;                             	// 传输次数4次
	DMA_InitStruct.DMA_SrcAddress = (uint32_t)(&(CW_ADC->RESULT0));  	// ADC数据寄存器地址(源地址)
	DMA_InitStruct.DMA_DstAddress = (uint32_t)ADC_Value;             	// 目标地址
	DMA_InitStruct.TrigMode = DMA_HardTrig;                          	// 硬件触发
	DMA_InitStruct.HardTrigSource = DMA_HardTrig_ADC_TRANSCOMPLETE;  	// ADC作为触发源
	DMA_Init(CW_DMACHANNEL1, &DMA_InitStruct);     										// 初始化DMA
	
	NVIC_EnableIRQ(DMACH1_IRQn);																			// 使能NVIC
	NVIC_SetPriority(DMACH1_IRQn, 0);																	// 设置中断优先级
	
	DMA_ITConfig(CW_DMACHANNEL1, DMA_IT_TC, ENABLE);									// 使能DMA传输 完成 中断
	DMA_ITConfig(CW_DMACHANNEL1, DMA_IT_TE, ENABLE);									// 使能DMA传输 错误 中断
	
}

void Error_Handler(void)
{
	while(1)
	{
		
	}
}


// DMA中断函数
void DMACH1_IRQHandler(void)
{
	if (DMA_GetITStatus(DMA_IT_TC1) == SET)
	{
		
		CW_DMA->CNT1_f.CNT = 4;
		CW_DMA->CNT1_f.REPEAT = 1;
		CW_DMACHANNEL1->SRCADDR = (uint32_t)(&(CW_ADC->RESULT0));			// 设置源地址
		CW_DMACHANNEL1->DSTADDR = (uint32_t)ADC_Value;								// 设置目标地址
		DMA_Cmd(CW_DMACHANNEL1, ENABLE);  //使能DMA
		
		DMA_ClearITPendingBit(DMA_IT_TC1);
	}
	
	if (DMA_GetITStatus(DMA_IT_TE1) == SET)
	{
		
		DMA_ClearITPendingBit(DMA_IT_TE1);
	}
}

MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

  • 标定法暂时没有使用。

3.测试

  • 电压测试

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

  • 电流测试

6.jpg

7.jpg

8.jpg

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
代码.7z
1
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航